feat: media API (video/bbox/thumbnail), UUID unification, dot matrix text, portal fixes, API dictionary V1.3

This commit is contained in:
Warren
2026-05-06 13:34:49 +08:00
parent e75c4d6f07
commit 74b6182eba
197 changed files with 17511 additions and 8759 deletions

View File

@@ -18,6 +18,7 @@ Configuration:
import sys
import json
import os
import time
import argparse
import signal
import subprocess
@@ -179,7 +180,11 @@ def run_asr(video_path, output_path, uuid: str = ""):
if publisher:
publisher.info("asr", "Loading Whisper model...")
sys.stderr.write(f"[ASR] Loading Whisper model {MODEL_SIZE}...\n")
sys.stderr.flush()
model = WhisperModel(MODEL_SIZE, device="cpu", compute_type="int8")
sys.stderr.write(f"[ASR] Model loaded\n")
sys.stderr.flush()
if publisher:
publisher.info("asr", f"Transcribing: {video_path}")
@@ -189,10 +194,13 @@ def run_asr(video_path, output_path, uuid: str = ""):
if cut_scenes:
# 分段處理:對每個場景萃取音訊並轉錄
sys.stderr.write(f"[ASR] Starting segmented transcription for {len(cut_scenes)} scenes\n")
sys.stderr.flush()
import subprocess
import tempfile
import json
temp_dir = tempfile.mkdtemp(prefix="asr_cut_")
sys.stderr.write(f"[ASR] Temp dir: {temp_dir}\n")
sys.stderr.flush()
transcript_language = None
# 建立 scene lookup: 給定時間點,找是哪個 scene
@@ -204,29 +212,79 @@ def run_asr(video_path, output_path, uuid: str = ""):
# 逐段處理,每段結果即時寫入 .asr.tmp
tmp_path = output_path + ".tmp"
err_path = output_path + ".err"
all_segments = []
# Resume: 若 executor 將 .tmp rename 成 .err先救回
if not os.path.exists(tmp_path) and os.path.exists(err_path) and os.path.getsize(err_path) > 10:
try:
os.rename(err_path, tmp_path)
sys.stderr.write(f"[ASR] Recovered .err → .tmp for resume ({os.path.getsize(tmp_path)} bytes)\n")
sys.stderr.flush()
except Exception as e:
sys.stderr.write(f"[ASR] Failed to recover .err: {e}\n")
sys.stderr.flush()
# Resume: 若已有 .asr.tmp載入已完成的 segments 並跳過已處理的 scenes
resume_from_scene = 0
if os.path.exists(tmp_path) and os.path.getsize(tmp_path) > 10:
try:
with open(tmp_path) as f:
existing = json.load(f)
all_segments = existing.get("segments", [])
if all_segments:
# 找出最後一個 segment 的 end_time決定 resume 起點
last_end = max(s.get("end", 0) for s in all_segments)
# 找出最後完成的 scene_idx場景 end_time > last_end
for i, (st, et) in enumerate(cut_scenes):
if et > last_end:
resume_from_scene = i
break
else:
resume_from_scene = len(cut_scenes) # 全部完成
# 繼承 language
if existing.get("language"):
transcript_language = existing["language"]
sys.stderr.write(f"[ASR] Resume from scene {resume_from_scene}/{len(cut_scenes)} "
f"(last segment end={last_end:.1f}s, {len(all_segments)} existing segments)\n")
sys.stderr.flush()
except Exception as e:
sys.stderr.write(f"[ASR] Failed to load tmp for resume: {e}, starting fresh\n")
sys.stderr.flush()
all_segments = []
for idx, (start_t, end_t) in enumerate(cut_scenes):
if idx < resume_from_scene:
continue # 跳過已處理的 scenes
seg_wav = os.path.join(temp_dir, f"seg_{idx:04d}.wav")
sys.stderr.write(f"[ASR] Scene {idx}: {start_t:.1f}-{end_t:.1f}s\n")
sys.stderr.flush()
# 用 ffmpeg 萃取出該段音訊
t0 = time.time()
cmd = ["ffmpeg", "-y", "-v", "quiet", "-i", video_path,
"-ss", str(start_t), "-to", str(end_t),
"-ar", "16000", "-ac", "1", seg_wav]
subprocess.run(cmd, check=False, capture_output=True)
sys.stderr.write(f"[ASR] Scene {idx}: ffmpeg took {time.time()-t0:.1f}s\n")
sys.stderr.flush()
if not os.path.exists(seg_wav) or os.path.getsize(seg_wav) < 100:
continue # 跳過空音訊
sys.stderr.write(f"[ASR] Scene {idx}: empty audio, skipping\n")
sys.stderr.flush()
continue
try:
t1 = time.time()
seg_result, seg_info = model.transcribe(
seg_wav, beam_size=5,
vad_filter=True,
vad_parameters=dict(min_silence_duration_ms=500, speech_pad_ms=200),
)
if transcript_language is None:
transcript_language = seg_info.language
sys.stderr.write(f"[ASR] Scene {idx}: transcribe took {time.time()-t1:.1f}s, language={seg_info.language}\n")
sys.stderr.flush()
scene_segments = []
seg_language = seg_info.language if seg_info else transcript_language
for segment in seg_result:
seg_start = start_t + segment.start
seg_end = start_t + segment.end
@@ -236,6 +294,7 @@ def run_asr(video_path, output_path, uuid: str = ""):
"end": seg_end,
"text": segment.text.strip(),
"scene_number": scene_idx + 1,
"language": seg_language,
})
total_segments += 1

552
scripts/face_processor.py Executable file → Normal file
View File

@@ -1,341 +1,283 @@
#!/opt/homebrew/bin/python3.11
"""
Face Processor - Face Detection & Demographics with Resume Support
Uses InsightFace for detection, age, gender, and embedding extraction.
Face Processor V2 - Apple Vision detection + CoreML FaceNet embedding
IMPORTANT: InsightFace is REQUIRED. No Haar fallback.
- InsightFace provides 512-dim ArcFace embedding for identity matching
- Haar Cascade cannot generate embedding, only detection
- If InsightFace fails, processor will ERROR and exit
Flow:
1. swift_face (Vision/ANE) → bbox + pose per frame
2. cv2 opens video, crops faces from bbox
3. CoreML FaceNet → 512D embedding per face
4. Output face.json in standard format
Resume Feature:
- Auto-detect existing results and resume from last frame
- Auto-save at configurable intervals (default: 30 seconds)
- Ctrl+C gracefully saves and exits
Replaces face_processor.py (no more InsightFace CPU detection).
Detection cost: near-zero CPU (Vision ANE)
Embedding cost: near-zero CPU (CoreML ANE)
"""
import sys
import os
import json
import argparse
import os
import subprocess
import time
from typing import Optional, Dict
import cv2
import numpy as np
from pathlib import Path
# CoreML
import coremltools as ct
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from resume_framework import ResumeFramework, format_time, print_progress
from utils.pose_analyzer import calculate_pose_angle_v2
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
SWIFT_BIN = os.path.join(SCRIPT_DIR, "swift_processors", ".build", "debug", "swift_face")
FACENET_PATH = os.path.join(SCRIPT_DIR, "..", "models", "facenet512.mlpackage")
def process_face(
video_path: str,
output_path: str,
uuid: str = "",
auto_save_interval: int = 30,
auto_save_frames: int = 300,
force_restart: bool = False,
sample_interval: int = 30,
):
"""Process video for face detection and demographics analysis with resume support"""
framework = ResumeFramework(
output_path=output_path,
processor_name="face",
uuid=uuid,
auto_save_interval=auto_save_interval,
auto_save_frames=auto_save_frames,
force_restart=force_restart,
)
framework.publish_info("FACE_START")
try:
import cv2
import numpy as np
import insightface
except ImportError as e:
error_msg = f"Missing dependency: {e.name}"
framework.publish_error(error_msg)
result = {
"metadata": {"status": "error", "error": error_msg},
"frames": {},
}
with open(output_path, "w") as f:
json.dump(result, f, indent=2)
return result
app = None
try:
framework.publish_info("LOADING_INSIGHTFACE")
app = insightface.app.FaceAnalysis(
name="buffalo_l", providers=["CPUExecutionProvider"]
)
app.prepare(ctx_id=0, det_size=(320, 320))
framework.publish_info("INSIGHTFACE_LOADED")
except Exception as e:
error_msg = f"InsightFace failed to load (REQUIRED): {e}"
framework.publish_error(error_msg)
result = {
"metadata": {"status": "error", "error": error_msg},
"frames": {},
}
with open(output_path, "w") as f:
json.dump(result, f, indent=2)
return result
framework.publish_info("PROCESSING_VIDEO")
cap = cv2.VideoCapture(video_path)
if not cap.isOpened():
print(f"Error: Cannot open video: {video_path}")
return {"metadata": {"status": "error"}, "frames": {}}
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
total_duration = total_frames / fps if fps > 0 else 0
cap.release()
framework.publish_info(f"fps={fps}, frames={total_frames}")
existing_data, last_checkpoint = framework.load_existing_data()
resume_mode = existing_data is not None and last_checkpoint > 0 and not force_restart
if resume_mode:
print(f"\nFound existing data: {output_path}")
print(f"Last processed frame: {last_checkpoint}")
print(f"Will resume from frame {last_checkpoint + 1}")
if resume_mode and existing_data:
face_data = existing_data
frame_count = last_checkpoint
processed_frames = set(int(k) for k in existing_data.get("frames", {}).keys())
cap = cv2.VideoCapture(video_path)
cap.set(cv2.CAP_PROP_POS_FRAMES, frame_count)
# Pose angle classification from roll/yaw
def classify_pose(roll: float, yaw: float) -> str:
"""Convert roll/yaw to pose angle label"""
abs_yaw = abs(yaw)
abs_roll = abs(roll)
if abs_yaw < 15 and abs_roll < 15:
return "frontal"
elif abs_yaw > 30:
return "profile_right" if yaw > 0 else "profile_left"
else:
face_data = {
"metadata": framework.init_metadata(
video_path=video_path,
fps=fps,
width=width,
height=height,
total_frames=total_frames,
total_duration=total_duration,
extra={
"sample_interval": sample_interval,
"detection_method": "insightface",
},
),
"frames": {},
}
frame_count = 0
processed_frames = set()
cap = cv2.VideoCapture(video_path)
return "three_quarter"
framework.set_data(face_data)
start_time = time.time()
framework.last_save_time = start_time
class FaceProcessorVision:
def __init__(self, video_path: str, output_path: str, uuid: str = "",
sample_interval: int = 30):
self.video_path = video_path
self.output_path = output_path
self.uuid = uuid
self.sample_interval = sample_interval
print(f"\nProcessing video: {total_frames} frames @ {fps:.2f} fps")
print(f"Auto-save every {auto_save_interval}s or {auto_save_frames} frames")
print(f"Resume from frame {frame_count + 1 if resume_mode else 1}")
print("Detection method: InsightFace (REQUIRED)")
print()
# Load CoreML FaceNet
self.coreml_model = None
facenet = os.path.normpath(FACENET_PATH)
if os.path.exists(facenet):
try:
self.coreml_model = ct.models.MLModel(facenet)
print(f"[FACE_V2] CoreML FaceNet loaded: {facenet}")
except Exception as e:
print(f"[FACE_V2] CoreML load failed: {e}")
while True:
ret, frame = cap.read()
if not ret:
break
self.video = None
self.fps = 30.0
self.total_frames = 0
self.width = 0
self.height = 0
frame_count += 1
current_time = (frame_count - 1) / fps if fps > 0 else 0
if frame_count in processed_frames:
continue
if frame_count % sample_interval != 0:
continue
face_list = []
def open_video(self):
self.video = cv2.VideoCapture(self.video_path)
if not self.video.isOpened():
raise RuntimeError(f"Cannot open: {self.video_path}")
self.fps = self.video.get(cv2.CAP_PROP_FPS)
self.total_frames = int(self.video.get(cv2.CAP_PROP_FRAME_COUNT))
self.width = int(self.video.get(cv2.CAP_PROP_FRAME_WIDTH))
self.height = int(self.video.get(cv2.CAP_PROP_FRAME_HEIGHT))
print(f"[FACE_V2] Video: {self.width}x{self.height}, {self.fps:.1f}fps, {self.total_frames}f")
def extract_face_embedding(self, face_img: np.ndarray) -> Optional[list]:
"""Run CoreML FaceNet on cropped face"""
if self.coreml_model is None:
return None
try:
faces = app.get(frame)
for face in faces:
bbox = face.bbox.astype(int)
bx, by, bw, bh = (
bbox[0],
bbox[1],
bbox[2] - bbox[0],
bbox[3] - bbox[1],
)
age = int(face.age) if hasattr(face, "age") else None
gender_val = face.gender if hasattr(face, "gender") else None
gender = (
"female"
if gender_val == 0
else ("male" if gender_val == 1 else None)
)
embedding = None
if hasattr(face, "embedding"):
embedding = face.embedding.tolist()
landmarks = None
if hasattr(face, "kps"):
landmarks = face.kps.tolist()
elif hasattr(face, "landmark_3d_68"):
landmarks = face.landmark_3d_68.tolist()
pose_angle = None
if landmarks and len(landmarks) >= 5:
try:
pose_result = calculate_pose_angle_v2(landmarks)
pose_angle = {
"angle": pose_result.get("angle", "unknown"),
"confidence": pose_result.get("confidence", 0.0),
"pitch": pose_result.get("pitch", "neutral"),
"features": pose_result.get("features", {}),
}
except Exception:
pass
face_list.append(
{
"x": int(bx),
"y": int(by),
"width": int(bw),
"height": int(bh),
"confidence": float(face.det_score)
if hasattr(face, "det_score")
else 0.9,
"embedding": embedding,
"landmarks": landmarks,
"pose_angle": pose_angle,
"attributes": {"age": age, "gender": gender},
}
)
# Resize to 160x160
resized = cv2.resize(face_img, (160, 160))
# Convert HWC to CHW and normalize to [-1, 1]
normalized = (resized.astype(np.float32) / 127.5) - 1.0
normalized = np.transpose(normalized, (2, 0, 1)) # HWC -> CHW
# Add batch dim: (1, 3, 160, 160)
input_array = np.expand_dims(normalized, axis=0)
result = self.coreml_model.predict({"input": input_array})
# Find output key (var_xxx)
emb_key = [k for k in result.keys() if k.startswith("var_")][0]
emb = result[emb_key].flatten().tolist()
return emb
except Exception as e:
print(f"[ERROR] Frame processing error: {e}")
print(f"[FACE_V2] Embedding error: {e}")
return None
if face_list:
face_data["frames"][str(frame_count)] = {
"frame_number": frame_count,
"time_seconds": round(current_time, 3),
"time_formatted": format_time(current_time),
"faces": face_list,
}
processed_frames.add(frame_count)
def process_with_swift(self) -> Dict:
"""Step 1: Run swift_face to get bbox + pose"""
print(f"[FACE_V2] Step 1: Vision detection...")
if frame_count % 500 == 0:
elapsed = time.time() - start_time
print_progress(frame_count, total_frames, elapsed, f"{len(face_list)} faces")
framework.publish_progress(frame_count, total_frames, f"frame {frame_count}")
# Build swift_face if needed
if not os.path.exists(SWIFT_BIN):
build_dir = os.path.join(SCRIPT_DIR, "swift_processors")
print(f"[FACE_V2] Building swift_face in {build_dir}...")
subprocess.run(
["swift", "build", "-c", "debug", "--product", "swift_face"],
cwd=build_dir, check=True
)
if framework.should_auto_save(frame_count):
framework.save_progress(frame_count, silent=True)
swift_out = self.output_path.replace(".json", "_detect.json")
cmd = [
SWIFT_BIN,
self.video_path,
swift_out,
"--sample-interval", str(self.sample_interval),
]
if self.uuid:
cmd.extend(["--uuid", self.uuid])
cap.release()
print(f"[FACE_V2] Running: {' '.join(cmd)}")
t0 = time.time()
subprocess.run(cmd, check=True)
elapsed = time.time() - t0
print(f"[FACE_V2] Detection done in {elapsed:.1f}s")
total_processed = len(processed_frames)
with open(swift_out) as f:
return json.load(f)
framework.finalize(
total_processed=total_processed,
extra_metadata={
"sample_interval": sample_interval,
"detection_method": "insightface",
},
def embed_and_save(self, detection_data: Dict):
"""Step 2: Crop faces + CoreML embedding + save face.json"""
print(f"[FACE_V2] Step 2: CoreML embedding...")
frames = detection_data.get("frames", [])
self.open_video()
face_data = {
"metadata": {
"video_path": os.path.abspath(self.video_path),
"fps": self.fps, "width": self.width, "height": self.height,
"sample_interval": self.sample_interval,
"detection_method": "apple_vision",
"embedding_method": "coreml_facenet",
"status": "in_progress",
"total_frames": self.total_frames,
},
"frames": {}
}
t0 = time.time()
embed_count = 0
for frame_info in frames:
frame_num = frame_info["frame"]
faces = []
for face in frame_info.get("faces", []):
bb = face["bbox"]
x, y, w, h = bb["x"], bb["y"], bb["width"], bb["height"]
if w <= 10 or h <= 10:
continue # skip tiny faces
# Seek to frame and read
self.video.set(cv2.CAP_PROP_POS_FRAMES, frame_num)
ret, frame = self.video.read()
if not ret:
continue
# Crop face
x1, y1 = max(0, x), max(0, y)
x2, y2 = min(self.width, x + w), min(self.height, y + h)
if x2 <= x1 or y2 <= y1:
continue
face_img = frame[y1:y2, x1:x2]
if face_img.size == 0:
continue
# CoreML embedding
emb = self.extract_face_embedding(face_img)
if emb is not None:
embed_count += 1
# Pose classification
pose_info = face.get("pose", {})
pose_angle = classify_pose(
pose_info.get("roll", 0),
pose_info.get("yaw", 0)
)
faces.append({
"x": x, "y": y, "width": w, "height": h,
"confidence": face.get("confidence", 0.5),
"embedding": emb,
"pose_angle": {
"angle": pose_angle,
"roll": pose_info.get("roll", 0),
"yaw": pose_info.get("yaw", 0),
"pitch": pose_info.get("pitch", 0),
},
"lips": face.get("lips"),
"landmarks": None,
"attributes": None,
})
if faces:
face_data["frames"][str(frame_num)] = {
"frame_number": frame_num,
"time_seconds": frame_info.get("timestamp", frame_num / self.fps),
"time_formatted": f"{frame_num / self.fps:.1f}s",
"faces": faces,
}
if len(face_data["frames"]) % 100 == 0:
elapsed = time.time() - t0
print(f"[FACE_V2] {len(face_data['frames'])} frames, {embed_count} embeddings, {elapsed:.0f}s")
self.video.release()
# Finalize
face_data["metadata"]["status"] = "completed"
face_data["metadata"]["total_embeddings"] = embed_count
face_data["metadata"]["embedder"] = "coreml_facenet"
# Convert dict frames to list for Rust FaceResult format
frames_list = []
for fnum_str, fdata in sorted(face_data["frames"].items(), key=lambda x: int(x[0])):
frames_list.append({
"frame": int(fnum_str),
"timestamp": fdata["time_seconds"],
"faces": fdata["faces"],
})
output = {
"frame_count": len(frames_list),
"fps": self.fps,
"frames": frames_list,
}
with open(self.output_path, "w") as f:
json.dump(output, f, indent=2, ensure_ascii=False)
elapsed = time.time() - t0
print(f"[FACE_V2] Done: {len(frames_list)} frames, {embed_count} embeddings, {elapsed:.0f}s")
def main():
parser = argparse.ArgumentParser(description="Apple Vision Face Processor V2")
parser.add_argument("video_path", help="Video file path")
parser.add_argument("output_path", help="Output JSON path")
parser.add_argument("--uuid", "-u", default="")
parser.add_argument("--sample-interval", type=int, default=30)
parser.add_argument("--force", action="store_true")
args = parser.parse_args()
if args.force and os.path.exists(args.output_path):
os.remove(args.output_path)
processor = FaceProcessorVision(
args.video_path, args.output_path,
args.uuid, args.sample_interval
)
print(f"\nFace detection completed: {total_processed} frames processed")
print(f"Frames with faces: {len(face_data['frames'])}")
# Step 1: Vision detection (bbox + pose via ANE)
detection = processor.process_with_swift()
return face_data
# Step 2: CoreML embedding + save
processor.embed_and_save(detection)
def _convert_to_face_result(face_data: dict) -> dict:
"""Convert ResumeFramework output to FaceResult format expected by Rust."""
metadata = face_data.get("metadata", {})
raw_frames = face_data.get("frames", {})
fps = metadata.get("fps", 30.0)
frames = []
for frame_key in sorted(raw_frames.keys(), key=lambda k: int(k)):
f = raw_frames[frame_key]
faces = []
for raw_face in f.get("faces", []):
pose = raw_face.get("pose_angle")
attributes = raw_face.get("attributes", {})
face = {
"face_id": None,
"x": raw_face["x"],
"y": raw_face["y"],
"width": raw_face["width"],
"height": raw_face["height"],
"confidence": raw_face.get("confidence", 0.0),
"embedding": raw_face.get("embedding"),
"landmarks": raw_face.get("landmarks"),
"attributes": {
"age": attributes.get("age") if attributes else None,
"gender": attributes.get("gender") if attributes else None,
},
}
faces.append(face)
frames.append({
"frame": f["frame_number"],
"timestamp": f["time_seconds"],
"faces": faces,
})
return {
"frame_count": len(frames),
"fps": fps,
"frames": frames,
}
# Clean up temp detection file
swift_out = args.output_path.replace(".json", "_detect.json")
if os.path.exists(swift_out):
os.remove(swift_out)
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Face Detection & Demographics with Resume Support")
parser.add_argument("video_path", help="Path to video file")
parser.add_argument("output_path", help="Output JSON path")
parser.add_argument("--uuid", "-u", help="UUID for Redis progress", default="")
parser.add_argument(
"--auto-save-interval",
"-a",
help="Auto-save interval in seconds",
type=int,
default=30,
)
parser.add_argument(
"--auto-save-frames",
"-f",
help="Auto-save interval in frames",
type=int,
default=300,
)
parser.add_argument(
"--force-restart",
"-r",
help="Force restart (ignore existing data)",
action="store_true",
)
parser.add_argument(
"--sample-interval",
"-s",
help="Frame sample interval",
type=int,
default=5,
)
args = parser.parse_args()
result = process_face(
args.video_path,
args.output_path,
args.uuid,
args.auto_save_interval,
args.auto_save_frames,
args.force_restart,
args.sample_interval,
)
face_result = _convert_to_face_result(result)
with open(args.output_path, "w") as f:
json.dump(face_result, f, indent=2)
main()

View File

@@ -1,243 +1,89 @@
#!/opt/homebrew/bin/python3.11
"""
OCR Processor - Text Recognition with Resume Support
Uses EasyOCR (local model)
Resume Feature:
- Auto-detect existing results and resume from last frame
- Auto-save at configurable intervals (default: 30 seconds)
- Ctrl+C gracefully saves and exits
OCR Processor Wrapper
Calls Swift Vision Framework OCR (swift_ocr) with fallback to PaddleOCR.
"""
import sys
import json
import argparse
import os
import time
import subprocess
import argparse
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from resume_framework import ResumeFramework, format_time, print_progress
SWIFT_OCR_PATH = os.path.join(
os.path.dirname(os.path.abspath(__file__)),
"swift_processors/.build/debug/swift_ocr"
)
SWIFT_OCR_ALT = os.path.join(
os.path.dirname(os.path.abspath(__file__)),
"swift_processors/.build/arm64-apple-macosx/debug/swift_ocr"
)
def process_ocr(
video_path: str,
output_path: str,
uuid: str = "",
auto_save_interval: int = 30,
auto_save_frames: int = 300,
force_restart: bool = False,
sample_interval: int = 30,
):
"""Process video for OCR using EasyOCR with resume support"""
recognition_level: str = "accurate",
) -> dict:
swift_bin = SWIFT_OCR_PATH
if not os.path.exists(swift_bin):
swift_bin = SWIFT_OCR_ALT
framework = ResumeFramework(
output_path=output_path,
processor_name="ocr",
uuid=uuid,
auto_save_interval=auto_save_interval,
auto_save_frames=auto_save_frames,
force_restart=force_restart,
if not os.path.exists(swift_bin):
print("[OCR] Swift binary not found, using PaddleOCR", file=sys.stderr)
return _fallback(video_path, output_path, uuid, sample_interval)
cmd = [swift_bin, video_path, output_path,
"--sample-interval", str(sample_interval),
"--recognition-level", recognition_level,
"--uuid", uuid]
print(f"[OCR] Running Swift OCR", file=sys.stderr)
result = subprocess.run(cmd, capture_output=True, text=True, timeout=7200)
if result.stdout:
print(result.stdout.strip(), file=sys.stderr)
if result.stderr:
print(result.stderr.strip(), file=sys.stderr)
if result.returncode != 0 or not os.path.exists(output_path):
print(f"[OCR] Swift OCR failed, falling back to PaddleOCR", file=sys.stderr)
return _fallback(video_path, output_path, uuid, sample_interval)
with open(output_path) as f:
return json.load(f)
def _fallback(video_path, output_path, uuid, sample_interval):
"""Fallback to original PaddleOCR implementation"""
import importlib
spec = importlib.util.spec_from_file_location(
"paddle_ocr",
os.path.join(os.path.dirname(__file__), "ocr_paddle.py")
)
framework.publish_info("OCR_START")
try:
import easyocr
except ImportError:
framework.publish_error("easyocr not installed")
result = {
"metadata": {"status": "error", "error": "easyocr not installed"},
"frames": {},
}
with open(output_path, "w") as f:
json.dump(result, f, indent=2)
framework.publish_progress(0, 0, "0 frames")
return result
framework.publish_info("OCR_LOADING_MODEL")
reader = easyocr.Reader(["en"], gpu=False, verbose=False)
framework.publish_info("OCR_MODEL_LOADED")
import cv2
cap = cv2.VideoCapture(video_path)
if not cap.isOpened():
print(f"Error: Cannot open video: {video_path}")
return {"metadata": {"status": "error"}, "frames": {}}
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
total_duration = total_frames / fps if fps > 0 else 0
cap.release()
framework.publish_info(f"fps={fps}, frames={total_frames}")
existing_data, last_checkpoint = framework.load_existing_data()
resume_mode = existing_data is not None and last_checkpoint > 0 and not force_restart
if resume_mode:
print(f"\nFound existing data: {output_path}")
print(f"Last processed frame: {last_checkpoint}")
print(f"Will resume from frame {last_checkpoint + 1}")
if resume_mode and existing_data:
ocr_data = existing_data
frame_count = last_checkpoint
processed_frames = set(int(k) for k in existing_data.get("frames", {}).keys())
cap = cv2.VideoCapture(video_path)
cap.set(cv2.CAP_PROP_POS_FRAMES, frame_count)
else:
ocr_data = {
"metadata": framework.init_metadata(
video_path=video_path,
fps=fps,
width=width,
height=height,
total_frames=total_frames,
total_duration=total_duration,
extra={"sample_interval": sample_interval},
),
"frames": {},
}
frame_count = 0
processed_frames = set()
cap = cv2.VideoCapture(video_path)
framework.set_data(ocr_data)
start_time = time.time()
framework.last_save_time = start_time
print(f"\nProcessing video: {total_frames} frames @ {fps:.2f} fps")
print(f"Auto-save every {auto_save_interval}s or {auto_save_frames} frames")
print(f"Resume from frame {frame_count + 1 if resume_mode else 1}")
print()
while True:
ret, frame = cap.read()
if not ret:
break
frame_count += 1
current_time = (frame_count - 1) / fps if fps > 0 else 0
if frame_count in processed_frames:
continue
if frame_count % sample_interval != 0:
continue
frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
try:
detections = reader.readtext(
frame_rgb, text_threshold=0.5, low_text=0.3, link_threshold=0.3
)
except Exception as e:
framework.publish_error(f"Frame {frame_count}: {e}")
detections = []
texts = []
for detection in detections:
det: tuple = tuple(detection)
bbox = list(det[0])
text: str = str(det[1])
confidence: float = float(det[2])
x = int(min(float(p[0]) for p in bbox))
y = int(min(float(p[1]) for p in bbox))
w = int(max(float(p[0]) for p in bbox) - x)
h = int(max(float(p[1]) for p in bbox) - y)
if text.strip():
texts.append(
{
"text": text,
"x": x,
"y": y,
"width": w,
"height": h,
"confidence": confidence,
}
)
if texts:
ocr_data["frames"][str(frame_count)] = {
"frame_number": frame_count,
"time_seconds": round(current_time, 3),
"time_formatted": format_time(current_time),
"texts": texts,
}
processed_frames.add(frame_count)
if frame_count % 500 == 0:
elapsed = time.time() - start_time
print_progress(frame_count, total_frames, elapsed, f"{len(texts)} texts")
framework.publish_progress(frame_count, total_frames, f"frame {frame_count}")
if framework.should_auto_save(frame_count):
framework.save_progress(frame_count, silent=True)
cap.release()
total_processed = len(processed_frames)
framework.finalize(
total_processed=total_processed,
extra_metadata={"sample_interval": sample_interval},
)
print(f"\nOCR completed: {total_processed} frames processed")
print(f"Frames with text: {len(ocr_data['frames'])}")
return ocr_data
if spec is None:
print("[OCR] No fallback available, returning empty result", file=sys.stderr)
return {"frame_count": 0, "fps": 0, "frames": []}
paddle = importlib.util.module_from_spec(spec)
spec.loader.exec_module(paddle)
return paddle.process_ocr(video_path, output_path, uuid, sample_interval=sample_interval)
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="OCR Text Recognition with Resume Support")
parser.add_argument("video_path", help="Path to video file")
parser.add_argument("output_path", help="Output JSON path")
parser.add_argument("--uuid", "-u", help="UUID for Redis progress", default="")
parser.add_argument(
"--auto-save-interval",
"-a",
help="Auto-save interval in seconds",
type=int,
default=30,
)
parser.add_argument(
"--auto-save-frames",
"-f",
help="Auto-save interval in frames",
type=int,
default=300,
)
parser.add_argument(
"--force-restart",
"-r",
help="Force restart (ignore existing data)",
action="store_true",
)
parser.add_argument(
"--sample-interval",
"-s",
help="Frame sample interval",
type=int,
default=30,
)
parser = argparse.ArgumentParser(description="OCR Processor (Swift Vision)")
parser.add_argument("video_path")
parser.add_argument("output_path")
parser.add_argument("--uuid", "-u", default="")
parser.add_argument("--sample-interval", type=int, default=30)
parser.add_argument("--recognition-level", choices=["fast", "accurate"], default="accurate")
args = parser.parse_args()
process_ocr(
args.video_path,
args.output_path,
args.uuid,
args.auto_save_interval,
args.auto_save_frames,
args.force_restart,
args.sample_interval,
)
result = process_ocr(args.video_path, args.output_path, args.uuid,
args.sample_interval, args.recognition_level)
with open(args.output_path, "w") as f:
json.dump(result, f, indent=2)
print(f"OCR: {len(result.get('frames', []))} frames with text")

View File

@@ -1,255 +1,119 @@
#!/opt/homebrew/bin/python3.11
"""
Pose Processor - Pose Estimation with Resume Support
Uses YOLOv8 Pose via ultralytics (local model)
Resume Feature:
- Auto-detect existing results and resume from last frame
- Auto-save at configurable intervals (default: 30 seconds)
- Ctrl+C gracefully saves and exits
Note: YOLOv8 Pose uses stream mode which is optimized for video processing.
For resume support, we need to process frames manually with OpenCV.
Pose Processor Wrapper
Calls Swift Vision Framework pose (swift_pose) with fallback to YOLOv8 Pose.
Uses VNDetectHumanBodyPoseRequest with ANE acceleration.
"""
import sys
import json
import argparse
import os
import time
import subprocess
import argparse
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from resume_framework import ResumeFramework, format_time, print_progress
KEYPOINT_NAMES = [
"nose",
"left_eye",
"right_eye",
"left_ear",
"right_ear",
"left_shoulder",
"right_shoulder",
"left_elbow",
"right_elbow",
"left_wrist",
"right_wrist",
"left_hip",
"right_hip",
"left_knee",
"right_knee",
"left_ankle",
"right_ankle",
]
SWIFT_POSE_PATH = os.path.join(
os.path.dirname(os.path.abspath(__file__)),
"swift_processors/.build/debug/swift_pose"
)
SWIFT_POSE_ALT = os.path.join(
os.path.dirname(os.path.abspath(__file__)),
"swift_processors/.build/arm64-apple-macosx/debug/swift_pose"
)
def process_pose(
video_path: str,
output_path: str,
uuid: str = "",
auto_save_interval: int = 30,
auto_save_frames: int = 300,
force_restart: bool = False,
):
"""Process video for pose estimation using YOLOv8 Pose with resume support"""
sample_interval: int = 30,
) -> dict:
swift_bin = SWIFT_POSE_PATH
if not os.path.exists(swift_bin):
swift_bin = SWIFT_POSE_ALT
framework = ResumeFramework(
output_path=output_path,
processor_name="pose",
uuid=uuid,
auto_save_interval=auto_save_interval,
auto_save_frames=auto_save_frames,
force_restart=force_restart,
)
if not os.path.exists(swift_bin):
print("[Pose] Swift binary not found, using YOLOv8 fallback", file=sys.stderr)
return _fallback(video_path, output_path, uuid, sample_interval)
framework.publish_info("POSE_START")
cmd = [swift_bin, video_path, output_path,
"--sample-interval", str(sample_interval),
"--uuid", uuid]
try:
from ultralytics import YOLO
except ImportError:
framework.publish_error("ultralytics not installed")
result = {
"metadata": {"status": "error", "error": "ultralytics not installed"},
"frames": {},
}
with open(output_path, "w") as f:
json.dump(result, f, indent=2)
return result
print(f"[Pose] Running Swift Pose (Vision Framework)", file=sys.stderr)
result = subprocess.run(cmd, capture_output=True, text=True, timeout=7200)
framework.publish_info("POSE_LOADING_MODEL")
if result.stdout:
for line in result.stdout.strip().split("\n"):
print(f" {line}", file=sys.stderr)
if result.stderr:
for line in result.stderr.strip().split("\n"):
print(f" {line}", file=sys.stderr)
model = YOLO("yolov8n-pose.pt")
if result.returncode != 0 or not os.path.exists(output_path):
print(f"[Pose] Swift Pose failed, falling back to YOLOv8", file=sys.stderr)
return _fallback(video_path, output_path, uuid, sample_interval)
with open(output_path) as f:
return json.load(f)
def _fallback(video_path, output_path, uuid, sample_interval):
"""Fallback to YOLOv8 Pose"""
from ultralytics import YOLO
import cv2
model = YOLO("yolov8n-pose.pt")
cap = cv2.VideoCapture(video_path)
if not cap.isOpened():
print(f"Error: Cannot open video: {video_path}")
return {"metadata": {"status": "error"}, "frames": {}}
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
total_duration = total_frames / fps if fps > 0 else 0
cap.release()
framework.publish_info(f"fps={fps}, frames={total_frames}")
existing_data, last_checkpoint = framework.load_existing_data()
resume_mode = existing_data is not None and last_checkpoint > 0 and not force_restart
if resume_mode:
print(f"\nFound existing data: {output_path}")
print(f"Last processed frame: {last_checkpoint}")
print(f"Will resume from frame {last_checkpoint + 1}")
if resume_mode and existing_data:
pose_data = existing_data
frame_count = last_checkpoint
processed_frames = set(int(k) for k in existing_data.get("frames", {}).keys())
cap = cv2.VideoCapture(video_path)
cap.set(cv2.CAP_PROP_POS_FRAMES, frame_count)
else:
pose_data = {
"metadata": framework.init_metadata(
video_path=video_path,
fps=fps,
width=width,
height=height,
total_frames=total_frames,
total_duration=total_duration,
extra={"model": "yolov8n-pose"},
),
"frames": {},
}
frame_count = 0
processed_frames = set()
cap = cv2.VideoCapture(video_path)
framework.set_data(pose_data)
start_time = time.time()
framework.last_save_time = start_time
print(f"\nProcessing video: {total_frames} frames @ {fps:.2f} fps")
print(f"Auto-save every {auto_save_interval}s or {auto_save_frames} frames")
print(f"Resume from frame {frame_count + 1 if resume_mode else 1}")
print()
while True:
frame_count = 0
frames = []
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
if frame_count % sample_interval == 0:
ts = frame_count / fps if fps > 0 else 0
results = model(frame, verbose=False, device="cpu")
persons = []
for r in results:
if r.keypoints is None:
continue
for kp_data in r.keypoints:
kps = kp_data.xy[0].cpu().numpy() if hasattr(kp_data, 'xy') else []
confs = kp_data.conf[0].cpu().numpy() if hasattr(kp_data, 'conf') else []
keypoints = []
names = ["nose", "left_eye", "right_eye", "left_ear", "right_ear",
"left_shoulder", "right_shoulder", "left_elbow", "right_elbow",
"left_wrist", "right_wrist", "left_hip", "right_hip",
"left_knee", "right_knee", "left_ankle", "right_ankle"]
for j, name in enumerate(names):
if j < len(kps):
x, y = float(kps[j][0]), float(kps[j][1])
c = float(confs[j]) if j < len(confs) else 0
keypoints.append({"name": name, "x": x, "y": y, "confidence": c})
if keypoints:
xs = [k["x"] for k in keypoints if k["confidence"] > 0.1]
ys = [k["y"] for k in keypoints if k["confidence"] > 0.1]
bbox = {"x": int(min(xs)), "y": int(min(ys)), "width": int(max(xs)-min(xs)), "height": int(max(ys)-min(ys))} if xs else {"x": 0, "y": 0, "width": 0, "height": 0}
persons.append({"keypoints": keypoints, "bbox": bbox})
if persons:
frames.append({"frame": frame_count, "timestamp": ts, "persons": persons})
frame_count += 1
current_time = (frame_count - 1) / fps if fps > 0 else 0
if frame_count in processed_frames:
continue
results = model(frame, conf=0.5, verbose=False, pose=True)
result = results[0]
persons = []
if result.keypoints is not None:
for person in result.keypoints:
keypoints = []
for i, kp in enumerate(person):
if len(kp) >= 3:
keypoints.append(
{
"name": KEYPOINT_NAMES[i]
if i < len(KEYPOINT_NAMES)
else f"kp_{i}",
"x": float(kp[0]),
"y": float(kp[1]),
"confidence": float(kp[2]),
}
)
valid_kps = [kp for kp in keypoints if kp["confidence"] > 0.3]
if valid_kps:
xs = [kp["x"] for kp in valid_kps]
ys = [kp["y"] for kp in valid_kps]
bbox = {
"x": int(min(xs)),
"y": int(min(ys)),
"width": int(max(xs) - min(xs)),
"height": int(max(ys) - min(ys)),
}
else:
bbox = {"x": 0, "y": 0, "width": 0, "height": 0}
persons.append({"keypoints": keypoints, "bbox": bbox})
if persons or frame_count % 30 == 0:
pose_data["frames"][str(frame_count)] = {
"frame_number": frame_count,
"time_seconds": round(current_time, 3),
"time_formatted": format_time(current_time),
"persons": persons,
}
processed_frames.add(frame_count)
if frame_count % 500 == 0:
elapsed = time.time() - start_time
print_progress(frame_count, total_frames, elapsed, f"{len(persons)} persons")
framework.publish_progress(frame_count, total_frames, f"frame {frame_count}")
if framework.should_auto_save(frame_count):
framework.save_progress(frame_count, silent=True)
cap.release()
total_processed = len(processed_frames)
framework.finalize(
total_processed=total_processed,
extra_metadata={"model": "yolov8n-pose"},
)
print(f"\nPose estimation completed: {total_processed} frames processed")
print(f"Frames with poses: {len([f for f in pose_data['frames'].values() if f['persons']])}")
return pose_data
result = {"frame_count": len(frames), "fps": fps, "frames": frames}
with open(output_path, "w") as f:
json.dump(result, f, indent=2)
return result
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Pose Estimation with Resume Support")
parser.add_argument("video_path", help="Path to video file")
parser.add_argument("output_path", help="Output JSON path")
parser.add_argument("--uuid", "-u", help="UUID for Redis progress", default="")
parser.add_argument(
"--auto-save-interval",
"-a",
help="Auto-save interval in seconds",
type=int,
default=30,
)
parser.add_argument(
"--auto-save-frames",
"-f",
help="Auto-save interval in frames",
type=int,
default=300,
)
parser.add_argument(
"--force-restart",
"-r",
help="Force restart (ignore existing data)",
action="store_true",
)
parser = argparse.ArgumentParser(description="Pose Processor (Swift Vision)")
parser.add_argument("video_path")
parser.add_argument("output_path")
parser.add_argument("--uuid", "-u", default="")
parser.add_argument("--sample-interval", type=int, default=30)
args = parser.parse_args()
process_pose(
args.video_path,
args.output_path,
args.uuid,
args.auto_save_interval,
args.auto_save_frames,
args.force_restart,
)
result = process_pose(args.video_path, args.output_path, args.uuid, args.sample_interval)
with open(args.output_path, "w") as f:
json.dump(result, f, indent=2)
print(f"Pose: {len(result.get('frames', []))} frames with poses")

View File

@@ -1 +1 @@
7861
16433

View File

@@ -534,8 +534,8 @@ relocations:
- { offset: 0x1AB065, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser12ArrayWrapperVyxGAA0cD8ProtocolA2aEP12currentIndexSivgTW', symObjAddr: 0x71EC, symBinAddr: 0x10000FE60, symSize: 0x24 }
- { offset: 0x1AB079, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser12ArrayWrapperVyxGAA0cD8ProtocolA2aEP7getNextypSgyFTW', symObjAddr: 0x7210, symBinAddr: 0x10000FE84, symSize: 0x14 }
- { offset: 0x1AB305, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser0A10DefinitionV4HelpV7OptionsV8rawValueSuvg', symObjAddr: 0x0, symBinAddr: 0x1000152A8, symSize: 0x4 }
- { offset: 0x1AB329, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser0A10DefinitionV4HelpV7OptionsV10isOptionalAGvpZ', symObjAddr: 0x1EBD8, symBinAddr: 0x100117438, symSize: 0x0 }
- { offset: 0x1ABDDD, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser0A10DefinitionV4HelpV7OptionsV11isRepeatingAGvpZ', symObjAddr: 0x1EBE0, symBinAddr: 0x100117440, symSize: 0x0 }
- { offset: 0x1AB329, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser0A10DefinitionV4HelpV7OptionsV10isOptionalAGvpZ', symObjAddr: 0x1EBD8, symBinAddr: 0x10011B448, symSize: 0x0 }
- { offset: 0x1ABDDD, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser0A10DefinitionV4HelpV7OptionsV11isRepeatingAGvpZ', symObjAddr: 0x1EBE0, symBinAddr: 0x10011B450, symSize: 0x0 }
- { offset: 0x1ABDEB, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser0A10DefinitionV4HelpV12defaultValueSSSgvpfi', symObjAddr: 0x78C, symBinAddr: 0x100015A34, symSize: 0xC }
- { offset: 0x1ABE03, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser0A10DefinitionV4HelpV10discussionAA0A10DiscussionOSgvpfi', symObjAddr: 0x9C8, symBinAddr: 0x100015C70, symSize: 0x14 }
- { offset: 0x1ABE1B, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser0A10DiscussionOSgWOy', symObjAddr: 0xA28, symBinAddr: 0x100015CD0, symSize: 0x70 }
@@ -1135,9 +1135,9 @@ relocations:
- { offset: 0x1B2C83, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser07LenientB0V5parseAA12ParsedValuesVyKF6$deferL0_yyF', symObjAddr: 0xC684, symBinAddr: 0x10002D19C, symSize: 0x90 }
- { offset: 0x1B2CD6, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser07LenientB0V5parseAA12ParsedValuesVyKFSbAA15ParsableCommand_pXpXEfU0_', symObjAddr: 0xC7E0, symBinAddr: 0x10002D2A0, symSize: 0x180 }
- { offset: 0x1B2F3A, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser0A10VisibilityV14RepresentationO21__derived_enum_equalsySbAE_AEtFZ', symObjAddr: 0x0, symBinAddr: 0x10002E714, symSize: 0xE8 }
- { offset: 0x1B2F5E, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser0A10VisibilityV7defaultACvpZ', symObjAddr: 0x5635, symBinAddr: 0x100117448, symSize: 0x0 }
- { offset: 0x1B31BC, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser0A10VisibilityV6hiddenACvpZ', symObjAddr: 0x5636, symBinAddr: 0x100117449, symSize: 0x0 }
- { offset: 0x1B31D6, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser0A10VisibilityV7privateACvpZ', symObjAddr: 0x5637, symBinAddr: 0x10011744A, symSize: 0x0 }
- { offset: 0x1B2F5E, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser0A10VisibilityV7defaultACvpZ', symObjAddr: 0x5635, symBinAddr: 0x10011B458, symSize: 0x0 }
- { offset: 0x1B31BC, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser0A10VisibilityV6hiddenACvpZ', symObjAddr: 0x5636, symBinAddr: 0x10011B459, symSize: 0x0 }
- { offset: 0x1B31D6, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser0A10VisibilityV7privateACvpZ', symObjAddr: 0x5637, symBinAddr: 0x10011B45A, symSize: 0x0 }
- { offset: 0x1B31E4, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser0A10VisibilityV14RepresentationOAESHAAWl', symObjAddr: 0x1E0, symBinAddr: 0x10002E8F4, symSize: 0x68 }
- { offset: 0x1B31F8, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser0A10VisibilityV7default_WZ', symObjAddr: 0x2CC, symBinAddr: 0x10002E9E0, symSize: 0x20 }
- { offset: 0x1B3212, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser0A10VisibilityV7defaultACvau', symObjAddr: 0x2F0, symBinAddr: 0x10002EA04, symSize: 0x50 }
@@ -1799,8 +1799,8 @@ relocations:
- { offset: 0x1BB359, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser14CompletionKindV6customyACSaySSGAE_SiSStYaYbcFZ', symObjAddr: 0x3D0, symBinAddr: 0x1000496F0, symSize: 0x4C }
- { offset: 0x1BB399, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser14CompletionKindV6customyACSaySSGAEcFZ', symObjAddr: 0x41C, symBinAddr: 0x10004973C, symSize: 0x4C }
- { offset: 0x1BB4BC, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser15CompletionShellV8rawValueSSvg', symObjAddr: 0x0, symBinAddr: 0x10004A264, symSize: 0x30 }
- { offset: 0x1BB4E0, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser15CompletionShellV11_requestingAA5MutexVyACSgGvpZ', symObjAddr: 0xD208, symBinAddr: 0x100117450, symSize: 0x0 }
- { offset: 0x1BB514, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser15CompletionShellV18_requestingVersionAA5MutexVySSSgGvpZ', symObjAddr: 0xD210, symBinAddr: 0x100117458, symSize: 0x0 }
- { offset: 0x1BB4E0, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser15CompletionShellV11_requestingAA5MutexVyACSgGvpZ', symObjAddr: 0xD208, symBinAddr: 0x10011B460, symSize: 0x0 }
- { offset: 0x1BB514, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser15CompletionShellV18_requestingVersionAA5MutexVySSSgGvpZ', symObjAddr: 0xD210, symBinAddr: 0x10011B468, symSize: 0x0 }
- { offset: 0x1BB6E1, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser15CompletionShellV11_requesting_WZ', symObjAddr: 0x8E0, symBinAddr: 0x10004AB04, symSize: 0x50 }
- { offset: 0x1BB6FB, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser15CompletionShellV11_requestingAA5MutexVyACSgGvau', symObjAddr: 0x930, symBinAddr: 0x10004AB54, symSize: 0x50 }
- { offset: 0x1BB724, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser15CompletionShellV18_requestingVersion_WZ', symObjAddr: 0xA88, symBinAddr: 0x10004ACAC, symSize: 0x50 }
@@ -1942,9 +1942,9 @@ relocations:
- { offset: 0x1BD733, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser14EnumerableFlagPAAE4help3forAA0A4HelpVSgx_tFZ', symObjAddr: 0x30, symBinAddr: 0x100051900, symSize: 0x6C }
- { offset: 0x1BD774, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser14EnumerableFlagPAAs23CustomStringConvertibleRzSYRzrlE11descriptionSSvg', symObjAddr: 0x9C, symBinAddr: 0x10005196C, symSize: 0x98 }
- { offset: 0x1BD8ED, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser15ValidationErrorV7messageSSvg', symObjAddr: 0x0, symBinAddr: 0x100051A04, symSize: 0x30 }
- { offset: 0x1BD911, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser8ExitCodeV7successACvpZ', symObjAddr: 0x6EC8, symBinAddr: 0x100117460, symSize: 0x0 }
- { offset: 0x1BDA42, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser8ExitCodeV7failureACvpZ', symObjAddr: 0x6ECC, symBinAddr: 0x100117464, symSize: 0x0 }
- { offset: 0x1BDA5C, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser8ExitCodeV17validationFailureACvpZ', symObjAddr: 0x6ED0, symBinAddr: 0x100117468, symSize: 0x0 }
- { offset: 0x1BD911, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser8ExitCodeV7successACvpZ', symObjAddr: 0x6EC8, symBinAddr: 0x10011B470, symSize: 0x0 }
- { offset: 0x1BDA42, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser8ExitCodeV7failureACvpZ', symObjAddr: 0x6ECC, symBinAddr: 0x10011B474, symSize: 0x0 }
- { offset: 0x1BDA5C, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser8ExitCodeV17validationFailureACvpZ', symObjAddr: 0x6ED0, symBinAddr: 0x10011B478, symSize: 0x0 }
- { offset: 0x1BDB11, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser15ValidationErrorVWOh', symObjAddr: 0x10C, symBinAddr: 0x100051B10, symSize: 0x28 }
- { offset: 0x1BDB25, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser8ExitCodeV7success_WZ', symObjAddr: 0x250, symBinAddr: 0x100051C54, symSize: 0x20 }
- { offset: 0x1BDB3F, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser8ExitCodeV7successACvau', symObjAddr: 0x270, symBinAddr: 0x100051C74, symSize: 0x50 }
@@ -2407,7 +2407,7 @@ relocations:
- { offset: 0x1C3F3C, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser11JSONEncoderOMa', symObjAddr: 0xB38, symBinAddr: 0x1000653F0, symSize: 0x14 }
- { offset: 0x1C3F5D, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser11JSONEncoderO6encodeySSxSERzlFZ', symObjAddr: 0x420, symBinAddr: 0x100064F0C, symSize: 0x400 }
- { offset: 0x1C4112, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser11HelpCommandV13configuration_WZ', symObjAddr: 0x0, symBinAddr: 0x100065404, symSize: 0x14C }
- { offset: 0x1C4136, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser11HelpCommandV13configurationAA0D13ConfigurationVvpZ', symObjAddr: 0xAFD0, symBinAddr: 0x100117470, symSize: 0x0 }
- { offset: 0x1C4136, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser11HelpCommandV13configurationAA0D13ConfigurationVvpZ', symObjAddr: 0xAFD0, symBinAddr: 0x10011B480, symSize: 0x0 }
- { offset: 0x1C4144, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser11HelpCommandV13configuration_WZ', symObjAddr: 0x0, symBinAddr: 0x100065404, symSize: 0x14C }
- { offset: 0x1C415E, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser11HelpCommandV13configurationAA0D13ConfigurationVvau', symObjAddr: 0x14C, symBinAddr: 0x100065550, symSize: 0x50 }
- { offset: 0x1C458E, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser11HelpCommandV11subcommandsSaySSGvpfP', symObjAddr: 0x338, symBinAddr: 0x1000655C8, symSize: 0xA8 }
@@ -2504,8 +2504,8 @@ relocations:
- { offset: 0x1C50C5, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser11HelpCommandVAA17ParsableArgumentsA2aDP12_errorPrefixSSvgZTW', symObjAddr: 0x2908, symBinAddr: 0x100067290, symSize: 0x14 }
- { offset: 0x1C50D9, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser11HelpCommandVSeAASe4fromxs7Decoder_p_tKcfCTW', symObjAddr: 0x291C, symBinAddr: 0x1000672A4, symSize: 0x6C }
- { offset: 0x1C5220, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser13HelpGeneratorV10helpIndent_WZ', symObjAddr: 0x0, symBinAddr: 0x100068074, symSize: 0x4 }
- { offset: 0x1C5244, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser13HelpGeneratorV10helpIndentSivpZ', symObjAddr: 0xE840, symBinAddr: 0x1000F2FF0, symSize: 0x0 }
- { offset: 0x1C525E, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser13HelpGeneratorV16labelColumnWidthSivpZ', symObjAddr: 0xE848, symBinAddr: 0x1000F2FF8, symSize: 0x0 }
- { offset: 0x1C5244, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser13HelpGeneratorV10helpIndentSivpZ', symObjAddr: 0xE840, symBinAddr: 0x1000F49B0, symSize: 0x0 }
- { offset: 0x1C525E, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser13HelpGeneratorV16labelColumnWidthSivpZ', symObjAddr: 0xE848, symBinAddr: 0x1000F49B8, symSize: 0x0 }
- { offset: 0x1C526C, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser13HelpGeneratorV10helpIndent_WZ', symObjAddr: 0x0, symBinAddr: 0x100068074, symSize: 0x4 }
- { offset: 0x1C5286, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser13HelpGeneratorV10helpIndentSivau', symObjAddr: 0x4, symBinAddr: 0x100068078, symSize: 0xC }
- { offset: 0x1C59CD, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser13HelpGeneratorV16labelColumnWidth_WZ', symObjAddr: 0x1C, symBinAddr: 0x100068090, symSize: 0x4 }
@@ -3353,7 +3353,7 @@ relocations:
- { offset: 0x1D124A, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser13ParentCommandV11descriptionSSvg', symObjAddr: 0x1558, symBinAddr: 0x10008F9B8, symSize: 0x1A0 }
- { offset: 0x1D1293, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser13ParentCommandVyxGs23CustomStringConvertibleAAsAEP11descriptionSSvgTW', symObjAddr: 0x1728, symBinAddr: 0x10008FB88, symSize: 0x14 }
- { offset: 0x1D1415, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser23_WrappedParsableCommandV12_commandNameSSvgZ', symObjAddr: 0x0, symBinAddr: 0x1000901C8, symSize: 0x300 }
- { offset: 0x1D143A, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser24directlyInitializedErrorSSvp', symObjAddr: 0x10D18, symBinAddr: 0x100117508, symSize: 0x0 }
- { offset: 0x1D143A, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser24directlyInitializedErrorSSvp', symObjAddr: 0x10D18, symBinAddr: 0x10011B518, symSize: 0x0 }
- { offset: 0x1D16F0, size: 0x8, addend: 0x0, symName: '_$ss16PartialRangeUpToVySS5IndexVGAByxGSXsWl', symObjAddr: 0x470, symBinAddr: 0x1000904C8, symSize: 0x74 }
- { offset: 0x1D1704, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser23_WrappedParsableCommandV7optionsxvpAA0D9ArgumentsRzlACyxGTK', symObjAddr: 0x5A0, symBinAddr: 0x100090580, symSize: 0x94 }
- { offset: 0x1D172A, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser23_WrappedParsableCommandV7optionsxvpAA0D9ArgumentsRzlACyxGTk', symObjAddr: 0x634, symBinAddr: 0x100090614, symSize: 0x94 }
@@ -3648,12 +3648,12 @@ relocations:
- { offset: 0x1D55C9, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser18InternalParseErrorOs0E0AAsADP9_userInfoyXlSgvgTW', symObjAddr: 0x78, symBinAddr: 0x10009B158, symSize: 0x14 }
- { offset: 0x1D55DD, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser18InternalParseErrorOs0E0AAsADP19_getEmbeddedNSErroryXlSgyFTW', symObjAddr: 0x8C, symBinAddr: 0x10009B16C, symSize: 0x14 }
- { offset: 0x1D56C6, size: 0x8, addend: 0x0, symName: '_$ss11CommandLineO14ArgumentParserE16_staticArguments_WZ', symObjAddr: 0x0, symBinAddr: 0x10009BF30, symSize: 0x1C }
- { offset: 0x1D56EA, size: 0x8, addend: 0x0, symName: '_$ss11CommandLineO14ArgumentParserE16_staticArgumentsSaySSGvpZ', symObjAddr: 0x99B0, symBinAddr: 0x100117518, symSize: 0x0 }
- { offset: 0x1D5704, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser8PlatformO11EnvironmentO3KeyV5shellAGvpZ', symObjAddr: 0x99B8, symBinAddr: 0x100117520, symSize: 0x0 }
- { offset: 0x1D5BA0, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser8PlatformO11EnvironmentO3KeyV7columnsAGvpZ', symObjAddr: 0x99C8, symBinAddr: 0x100117530, symSize: 0x0 }
- { offset: 0x1D5BBA, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser8PlatformO11EnvironmentO3KeyV5linesAGvpZ', symObjAddr: 0x99D8, symBinAddr: 0x100117540, symSize: 0x0 }
- { offset: 0x1D5BD4, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser8PlatformO11EnvironmentO3KeyV9shellNameAGvpZ', symObjAddr: 0x99E8, symBinAddr: 0x100117550, symSize: 0x0 }
- { offset: 0x1D5BEE, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser8PlatformO11EnvironmentO3KeyV12shellVersionAGvpZ', symObjAddr: 0x99F8, symBinAddr: 0x100117560, symSize: 0x0 }
- { offset: 0x1D56EA, size: 0x8, addend: 0x0, symName: '_$ss11CommandLineO14ArgumentParserE16_staticArgumentsSaySSGvpZ', symObjAddr: 0x99B0, symBinAddr: 0x10011B528, symSize: 0x0 }
- { offset: 0x1D5704, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser8PlatformO11EnvironmentO3KeyV5shellAGvpZ', symObjAddr: 0x99B8, symBinAddr: 0x10011B530, symSize: 0x0 }
- { offset: 0x1D5BA0, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser8PlatformO11EnvironmentO3KeyV7columnsAGvpZ', symObjAddr: 0x99C8, symBinAddr: 0x10011B540, symSize: 0x0 }
- { offset: 0x1D5BBA, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser8PlatformO11EnvironmentO3KeyV5linesAGvpZ', symObjAddr: 0x99D8, symBinAddr: 0x10011B550, symSize: 0x0 }
- { offset: 0x1D5BD4, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser8PlatformO11EnvironmentO3KeyV9shellNameAGvpZ', symObjAddr: 0x99E8, symBinAddr: 0x10011B560, symSize: 0x0 }
- { offset: 0x1D5BEE, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser8PlatformO11EnvironmentO3KeyV12shellVersionAGvpZ', symObjAddr: 0x99F8, symBinAddr: 0x10011B570, symSize: 0x0 }
- { offset: 0x1D5BFC, size: 0x8, addend: 0x0, symName: '_$ss11CommandLineO14ArgumentParserE16_staticArguments_WZ', symObjAddr: 0x0, symBinAddr: 0x10009BF30, symSize: 0x1C }
- { offset: 0x1D5C16, size: 0x8, addend: 0x0, symName: '_$ss11CommandLineO14ArgumentParserE16_staticArgumentsSaySSGvau', symObjAddr: 0x1C, symBinAddr: 0x10009BF4C, symSize: 0x50 }
- { offset: 0x1D5C34, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser8PlatformO11EnvironmentOySSSgAE3KeyVcipZAEmTK', symObjAddr: 0x654, symBinAddr: 0x10009C534, symSize: 0x64 }
@@ -5014,187 +5014,192 @@ relocations:
- { offset: 0x1E6B27, size: 0x8, addend: 0x0, symName: '_$s22ArgumentParserToolInfo0aD2V0VSHAASH4hash4intoys6HasherVz_tFTW', symObjAddr: 0x11BFC, symBinAddr: 0x1000D61A0, symSize: 0x44 }
- { offset: 0x1E6B3B, size: 0x8, addend: 0x0, symName: '_$s22ArgumentParserToolInfo0aD2V0VSHAASH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x11C40, symBinAddr: 0x1000D61E4, symSize: 0x14 }
- { offset: 0x1E6B4F, size: 0x8, addend: 0x0, symName: '_$s22ArgumentParserToolInfo0aD2V0VSQAASQ2eeoiySbx_xtFZTW', symObjAddr: 0x11C54, symBinAddr: 0x1000D61F8, symSize: 0x6C }
- { offset: 0x1E6CCD, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9inputPathSSvg', symObjAddr: 0x0, symBinAddr: 0x1000DCE28, symSize: 0x9C }
- { offset: 0x1E6EE7, size: 0x8, addend: 0x0, symName: '_$sSo37SFSpeechRecognizerAuthorizationStatusVSQSCSQ2eeoiySbx_xtFZTW', symObjAddr: 0x8EE8, symBinAddr: 0x1000E56CC, symSize: 0x48 }
- { offset: 0x1E711B, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVSQSCSQ2eeoiySbx_xtFZTW', symObjAddr: 0x9504, symBinAddr: 0x1000E5B04, symSize: 0x48 }
- { offset: 0x1E767C, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser0A0VySSGWOc', symObjAddr: 0x9C, symBinAddr: 0x1000DCEC4, symSize: 0x58 }
- { offset: 0x1E7690, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser0A0VySSGWOh', symObjAddr: 0x1B8, symBinAddr: 0x1000DCF1C, symSize: 0x34 }
- { offset: 0x1E76A4, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9inputPathSSvpACTK', symObjAddr: 0x230, symBinAddr: 0x1000DCF50, symSize: 0x78 }
- { offset: 0x1E76BC, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9inputPathSSvpACTk', symObjAddr: 0x2A8, symBinAddr: 0x1000DCFC8, symSize: 0x44 }
- { offset: 0x1E76D4, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10_inputPath33_D25DB757439FC08881580587A9BB3263LL14ArgumentParser0K0VySSGvpfi', symObjAddr: 0x558, symBinAddr: 0x1000DD200, symSize: 0xAC }
- { offset: 0x1E76EC, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10outputPathSSvpACTK', symObjAddr: 0x740, symBinAddr: 0x1000DD3E8, symSize: 0x78 }
- { offset: 0x1E7704, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10outputPathSSvpACTk', symObjAddr: 0x7B8, symBinAddr: 0x1000DD460, symSize: 0x44 }
- { offset: 0x1E771C, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV11_outputPath33_D25DB757439FC08881580587A9BB3263LL14ArgumentParser0K0VySSGvpfi', symObjAddr: 0xA00, symBinAddr: 0x1000DD6A8, symSize: 0xAC }
- { offset: 0x1E7734, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV4uuidSSvpfP', symObjAddr: 0xB4C, symBinAddr: 0x1000DD7F4, symSize: 0x13C }
- { offset: 0x1E7761, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV4uuidSSvpfF', symObjAddr: 0xCA8, symBinAddr: 0x1000DD930, symSize: 0x11C }
- { offset: 0x1E778E, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser6OptionVySSGWOc', symObjAddr: 0xE60, symBinAddr: 0x1000DDAE8, symSize: 0x58 }
- { offset: 0x1E77A2, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser6OptionVySSGWOh', symObjAddr: 0xEB8, symBinAddr: 0x1000DDB40, symSize: 0x34 }
- { offset: 0x1E77B6, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV4uuidSSvpACTK', symObjAddr: 0xEEC, symBinAddr: 0x1000DDB74, symSize: 0x78 }
- { offset: 0x1E77CE, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV4uuidSSvpACTk', symObjAddr: 0xF64, symBinAddr: 0x1000DDBEC, symSize: 0x44 }
- { offset: 0x1E77E6, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV5_uuid33_D25DB757439FC08881580587A9BB3263LL14ArgumentParser6OptionVySSGvpfi', symObjAddr: 0x11AC, symBinAddr: 0x1000DDE34, symSize: 0x28 }
- { offset: 0x1E77FE, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV8languageSSvpfP', symObjAddr: 0x1274, symBinAddr: 0x1000DDEFC, symSize: 0x13C }
- { offset: 0x1E782B, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV8languageSSvpfF', symObjAddr: 0x13B0, symBinAddr: 0x1000DE038, symSize: 0x11C }
- { offset: 0x1E7858, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV8languageSSvpACTK', symObjAddr: 0x1568, symBinAddr: 0x1000DE1F0, symSize: 0x78 }
- { offset: 0x1E7870, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV8languageSSvpACTk', symObjAddr: 0x15E0, symBinAddr: 0x1000DE268, symSize: 0x44 }
- { offset: 0x1E7888, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9_language33_D25DB757439FC08881580587A9BB3263LL14ArgumentParser6OptionVySSGvpfi', symObjAddr: 0x1828, symBinAddr: 0x1000DE4B0, symSize: 0x28 }
- { offset: 0x1E78A0, size: 0x8, addend: 0x0, symName: '_$sSo18SFSpeechRecognizerCMa', symObjAddr: 0x2084, symBinAddr: 0x1000DEBB8, symSize: 0x60 }
- { offset: 0x1E78B4, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV3runyyKFySo37SFSpeechRecognizerAuthorizationStatusVcfU_TA', symObjAddr: 0x54C0, symBinAddr: 0x1000E1ED8, symSize: 0xC }
- { offset: 0x1E78C8, size: 0x8, addend: 0x0, symName: '_$sSo37SFSpeechRecognizerAuthorizationStatusVIegy_ABIeyBy_TR', symObjAddr: 0x54CC, symBinAddr: 0x1000E1EE4, symSize: 0x50 }
- { offset: 0x1E78E0, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x551C, symBinAddr: 0x1000E1F34, symSize: 0x44 }
- { offset: 0x1E78F4, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x5560, symBinAddr: 0x1000E1F78, symSize: 0x18 }
- { offset: 0x1E7908, size: 0x8, addend: 0x0, symName: '_$sSo37SFSpeechRecognizerAuthorizationStatusVMa', symObjAddr: 0x5578, symBinAddr: 0x1000E1F90, symSize: 0x94 }
- { offset: 0x1E791C, size: 0x8, addend: 0x0, symName: '_$sSo37SFSpeechRecognizerAuthorizationStatusVABSQSCWl', symObjAddr: 0x560C, symBinAddr: 0x1000E2024, symSize: 0x6C }
- { offset: 0x1E7930, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVWOc', symObjAddr: 0x5694, symBinAddr: 0x1000E20AC, symSize: 0x110 }
- { offset: 0x1E7944, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVWOh', symObjAddr: 0x57A4, symBinAddr: 0x1000E21BC, symSize: 0x70 }
- { offset: 0x1E7958, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVMa', symObjAddr: 0x5814, symBinAddr: 0x1000E222C, symSize: 0x94 }
- { offset: 0x1E796C, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVABs10SetAlgebraSCWl', symObjAddr: 0x58A8, symBinAddr: 0x1000E22C0, symSize: 0x6C }
- { offset: 0x1E7980, size: 0x8, addend: 0x0, symName: '_$sSo29SFSpeechURLRecognitionRequestCMa', symObjAddr: 0x59B8, symBinAddr: 0x1000E2358, symSize: 0x60 }
- { offset: 0x1E7994, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV3runyyKFySo25SFSpeechRecognitionResultCSg_s5Error_pSgtcfU0_TA', symObjAddr: 0x67E8, symBinAddr: 0x1000E3188, symSize: 0x64 }
- { offset: 0x1E79A8, size: 0x8, addend: 0x0, symName: '_$sSo25SFSpeechRecognitionResultCSgs5Error_pSgIeggg_ACSo7NSErrorCSgIeyByy_TR', symObjAddr: 0x684C, symBinAddr: 0x1000E31EC, symSize: 0xC4 }
- { offset: 0x1E79C0, size: 0x8, addend: 0x0, symName: _block_copy_helper.10, symObjAddr: 0x6910, symBinAddr: 0x1000E32B0, symSize: 0x44 }
- { offset: 0x1E79D4, size: 0x8, addend: 0x0, symName: _block_destroy_helper.11, symObjAddr: 0x6954, symBinAddr: 0x1000E32F4, symSize: 0x18 }
- { offset: 0x1E79E8, size: 0x8, addend: 0x0, symName: '_$s10Foundation3URLVACSQAAWl', symObjAddr: 0x696C, symBinAddr: 0x1000E330C, symSize: 0x6C }
- { offset: 0x1E79FC, size: 0x8, addend: 0x0, symName: '_$sSo6NSTaskCMa', symObjAddr: 0x69D8, symBinAddr: 0x1000E3378, symSize: 0x60 }
- { offset: 0x1E7A10, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVAC14ArgumentParser15ParsableCommandAAWl', symObjAddr: 0x6ACC, symBinAddr: 0x1000E340C, symSize: 0x68 }
- { offset: 0x1E7A24, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOAFSHAAWl', symObjAddr: 0x7050, symBinAddr: 0x1000E3990, symSize: 0x68 }
- { offset: 0x1E7A38, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOAFs0D3KeyAAWl', symObjAddr: 0x72E8, symBinAddr: 0x1000E3C28, symSize: 0x68 }
- { offset: 0x1E7A4C, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser0A0VySSGACyxGSeAAWl', symObjAddr: 0x7BFC, symBinAddr: 0x1000E4490, symSize: 0x74 }
- { offset: 0x1E7A60, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9inputPath06outputE04uuid8languageAC14ArgumentParser0I0VySSG_AKS2StcfcfA_', symObjAddr: 0x7CE4, symBinAddr: 0x1000E4504, symSize: 0xAC }
- { offset: 0x1E7A7E, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9inputPath06outputE04uuid8languageAC14ArgumentParser0I0VySSG_AKS2StcfcfA0_', symObjAddr: 0x7D90, symBinAddr: 0x1000E45B0, symSize: 0xAC }
- { offset: 0x1E7A9C, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9inputPath06outputE04uuid8languageAC14ArgumentParser0I0VySSG_AKS2StcfcfA1_', symObjAddr: 0x7E3C, symBinAddr: 0x1000E465C, symSize: 0x28 }
- { offset: 0x1E7ABA, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9inputPath06outputE04uuid8languageAC14ArgumentParser0I0VySSG_AKS2StcfcfA2_', symObjAddr: 0x7E64, symBinAddr: 0x1000E4684, symSize: 0x28 }
- { offset: 0x1E7AD8, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV14ArgumentParser15ParsableCommandAAWI', symObjAddr: 0x812C, symBinAddr: 0x1000E494C, symSize: 0x28 }
- { offset: 0x1E7AEC, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVAC14ArgumentParser17ParsableArgumentsAAWl', symObjAddr: 0x8154, symBinAddr: 0x1000E4974, symSize: 0x68 }
- { offset: 0x1E7B00, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV14ArgumentParser17ParsableArgumentsAAWI', symObjAddr: 0x81BC, symBinAddr: 0x1000E49DC, symSize: 0x28 }
- { offset: 0x1E7B14, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVACSeAAWl', symObjAddr: 0x81E4, symBinAddr: 0x1000E4A04, symSize: 0x68 }
- { offset: 0x1E7B28, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVwCP', symObjAddr: 0x824C, symBinAddr: 0x1000E4A6C, symSize: 0x3C }
- { offset: 0x1E7B3C, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVwxx', symObjAddr: 0x8288, symBinAddr: 0x1000E4AA8, symSize: 0x6C }
- { offset: 0x1E7B50, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVwcp', symObjAddr: 0x82F4, symBinAddr: 0x1000E4B14, symSize: 0x110 }
- { offset: 0x1E7B64, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVwca', symObjAddr: 0x8404, symBinAddr: 0x1000E4C24, symSize: 0x154 }
- { offset: 0x1E7B78, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVwta', symObjAddr: 0x8584, symBinAddr: 0x1000E4D78, symSize: 0xE0 }
- { offset: 0x1E7B8C, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVwet', symObjAddr: 0x8664, symBinAddr: 0x1000E4E58, symSize: 0xF8 }
- { offset: 0x1E7BA0, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVwst', symObjAddr: 0x875C, symBinAddr: 0x1000E4F50, symSize: 0x1D8 }
- { offset: 0x1E7BB4, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVMa', symObjAddr: 0x8934, symBinAddr: 0x1000E5128, symSize: 0x14 }
- { offset: 0x1E7BC8, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOwet', symObjAddr: 0x8958, symBinAddr: 0x1000E513C, symSize: 0x168 }
- { offset: 0x1E7BDC, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOwst', symObjAddr: 0x8AC0, symBinAddr: 0x1000E52A4, symSize: 0x1FC }
- { offset: 0x1E7BF0, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOwug', symObjAddr: 0x8CBC, symBinAddr: 0x1000E54A0, symSize: 0x8 }
- { offset: 0x1E7C04, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOwup', symObjAddr: 0x8CC4, symBinAddr: 0x1000E54A8, symSize: 0x4 }
- { offset: 0x1E7C18, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOwui', symObjAddr: 0x8CC8, symBinAddr: 0x1000E54AC, symSize: 0x8 }
- { offset: 0x1E7C2C, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOMa', symObjAddr: 0x8CD0, symBinAddr: 0x1000E54B4, symSize: 0x14 }
- { offset: 0x1E7C40, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs9OptionSetSCSYWb', symObjAddr: 0x9610, symBinAddr: 0x1000E5C10, symSize: 0x14 }
- { offset: 0x1E7C54, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVABSYSCWl', symObjAddr: 0x9624, symBinAddr: 0x1000E5C24, symSize: 0x6C }
- { offset: 0x1E7C68, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs9OptionSetSCs0D7AlgebraPWb', symObjAddr: 0x9690, symBinAddr: 0x1000E5C90, symSize: 0x14 }
- { offset: 0x1E7C7C, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOs0D3KeyAAs28CustomDebugStringConvertiblePWb', symObjAddr: 0x96A4, symBinAddr: 0x1000E5CA4, symSize: 0x14 }
- { offset: 0x1E7C90, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOAFs28CustomDebugStringConvertibleAAWl', symObjAddr: 0x96B8, symBinAddr: 0x1000E5CB8, symSize: 0x68 }
- { offset: 0x1E7CA4, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOs0D3KeyAAs23CustomStringConvertiblePWb', symObjAddr: 0x9720, symBinAddr: 0x1000E5D20, symSize: 0x14 }
- { offset: 0x1E7CB8, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOAFs23CustomStringConvertibleAAWl', symObjAddr: 0x9734, symBinAddr: 0x1000E5D34, symSize: 0x68 }
- { offset: 0x1E7CCC, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOSHAASQWb', symObjAddr: 0x979C, symBinAddr: 0x1000E5D9C, symSize: 0x14 }
- { offset: 0x1E7CE0, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOAFSQAAWl', symObjAddr: 0x97B0, symBinAddr: 0x1000E5DB0, symSize: 0x68 }
- { offset: 0x1E7CF4, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCSQWb', symObjAddr: 0x9818, symBinAddr: 0x1000E5E18, symSize: 0x14 }
- { offset: 0x1E7D08, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVABSQSCWl', symObjAddr: 0x982C, symBinAddr: 0x1000E5E2C, symSize: 0x6C }
- { offset: 0x1E7D1C, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCs25ExpressibleByArrayLiteralPWb', symObjAddr: 0x9898, symBinAddr: 0x1000E5E98, symSize: 0x14 }
- { offset: 0x1E7D30, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVABs25ExpressibleByArrayLiteralSCWl', symObjAddr: 0x98AC, symBinAddr: 0x1000E5EAC, symSize: 0x6C }
- { offset: 0x1E7D44, size: 0x8, addend: 0x0, symName: '_$sSo37SFSpeechRecognizerAuthorizationStatusVABSYSCWl', symObjAddr: 0x9918, symBinAddr: 0x1000E5F18, symSize: 0x6C }
- { offset: 0x1E7D58, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVABs9OptionSetSCWl', symObjAddr: 0x9984, symBinAddr: 0x1000E5F84, symSize: 0x6C }
- { offset: 0x1E7D6C, size: 0x8, addend: 0x0, symName: '_$sSo22SFTranscriptionSegmentCMa', symObjAddr: 0x9A58, symBinAddr: 0x1000E5FF4, symSize: 0x60 }
- { offset: 0x1E7D80, size: 0x8, addend: 0x0, symName: '_$sSaySo22SFTranscriptionSegmentCGSayxGSlsWl', symObjAddr: 0x9AB8, symBinAddr: 0x1000E6054, symSize: 0x74 }
- { offset: 0x1E7D94, size: 0x8, addend: 0x0, symName: '_$ss16IndexingIteratorVySaySo22SFTranscriptionSegmentCGGWOh', symObjAddr: 0x9B2C, symBinAddr: 0x1000E60C8, symSize: 0x28 }
- { offset: 0x1E7DA8, size: 0x8, addend: 0x0, symName: '_$sSaySDySSypGGSayxGSlsWl', symObjAddr: 0x9B54, symBinAddr: 0x1000E60F0, symSize: 0x74 }
- { offset: 0x1E7DBC, size: 0x8, addend: 0x0, symName: '_$sSa22_allocateUninitializedySayxG_SpyxGtSiFZSo20NSDataWritingOptionsV_Tt0gq5', symObjAddr: 0x9BD4, symBinAddr: 0x1000E6164, symSize: 0xD4 }
- { offset: 0x1E7DE9, size: 0x8, addend: 0x0, symName: '_$sSo20NSDataWritingOptionsVMa', symObjAddr: 0x9CA8, symBinAddr: 0x1000E6238, symSize: 0x94 }
- { offset: 0x1E7DFE, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9inputPathSSvg', symObjAddr: 0x0, symBinAddr: 0x1000DCE28, symSize: 0x9C }
- { offset: 0x1E7E2E, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9inputPathSSvs', symObjAddr: 0x2EC, symBinAddr: 0x1000DD00C, symSize: 0x8C }
- { offset: 0x1E7E62, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9inputPathSSvM', symObjAddr: 0x378, symBinAddr: 0x1000DD098, symSize: 0xB0 }
- { offset: 0x1E7E87, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9inputPathSSvM.resume.0', symObjAddr: 0x428, symBinAddr: 0x1000DD148, symSize: 0xB8 }
- { offset: 0x1E7F4B, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10_inputPath33_D25DB757439FC08881580587A9BB3263LL14ArgumentParser0K0VySSGvg', symObjAddr: 0x604, symBinAddr: 0x1000DD2AC, symSize: 0x40 }
- { offset: 0x1E7F5F, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10_inputPath33_D25DB757439FC08881580587A9BB3263LL14ArgumentParser0K0VySSGvs', symObjAddr: 0x644, symBinAddr: 0x1000DD2EC, symSize: 0x60 }
- { offset: 0x1E7F73, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10outputPathSSvg', symObjAddr: 0x6A4, symBinAddr: 0x1000DD34C, symSize: 0x9C }
- { offset: 0x1E7F98, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10outputPathSSvs', symObjAddr: 0x7FC, symBinAddr: 0x1000DD4A4, symSize: 0x94 }
- { offset: 0x1E7FCC, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10outputPathSSvM', symObjAddr: 0x890, symBinAddr: 0x1000DD538, symSize: 0xB0 }
- { offset: 0x1E7FF1, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10outputPathSSvM.resume.0', symObjAddr: 0x940, symBinAddr: 0x1000DD5E8, symSize: 0xC0 }
- { offset: 0x1E8012, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV11_outputPath33_D25DB757439FC08881580587A9BB3263LL14ArgumentParser0K0VySSGvg', symObjAddr: 0xAAC, symBinAddr: 0x1000DD754, symSize: 0x40 }
- { offset: 0x1E8026, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV11_outputPath33_D25DB757439FC08881580587A9BB3263LL14ArgumentParser0K0VySSGvs', symObjAddr: 0xAEC, symBinAddr: 0x1000DD794, symSize: 0x60 }
- { offset: 0x1E803A, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV4uuidSSvg', symObjAddr: 0xDC4, symBinAddr: 0x1000DDA4C, symSize: 0x9C }
- { offset: 0x1E805F, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV4uuidSSvs', symObjAddr: 0xFA8, symBinAddr: 0x1000DDC30, symSize: 0x94 }
- { offset: 0x1E8093, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV4uuidSSvM', symObjAddr: 0x103C, symBinAddr: 0x1000DDCC4, symSize: 0xB0 }
- { offset: 0x1E80B8, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV4uuidSSvM.resume.0', symObjAddr: 0x10EC, symBinAddr: 0x1000DDD74, symSize: 0xC0 }
- { offset: 0x1E80D9, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV5_uuid33_D25DB757439FC08881580587A9BB3263LL14ArgumentParser6OptionVySSGvg', symObjAddr: 0x11D4, symBinAddr: 0x1000DDE5C, symSize: 0x40 }
- { offset: 0x1E80ED, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV5_uuid33_D25DB757439FC08881580587A9BB3263LL14ArgumentParser6OptionVySSGvs', symObjAddr: 0x1214, symBinAddr: 0x1000DDE9C, symSize: 0x60 }
- { offset: 0x1E8101, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV8languageSSvg', symObjAddr: 0x14CC, symBinAddr: 0x1000DE154, symSize: 0x9C }
- { offset: 0x1E8126, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV8languageSSvs', symObjAddr: 0x1624, symBinAddr: 0x1000DE2AC, symSize: 0x94 }
- { offset: 0x1E815A, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV8languageSSvM', symObjAddr: 0x16B8, symBinAddr: 0x1000DE340, symSize: 0xB0 }
- { offset: 0x1E817F, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV8languageSSvM.resume.0', symObjAddr: 0x1768, symBinAddr: 0x1000DE3F0, symSize: 0xC0 }
- { offset: 0x1E81A0, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9_language33_D25DB757439FC08881580587A9BB3263LL14ArgumentParser6OptionVySSGvg', symObjAddr: 0x1850, symBinAddr: 0x1000DE4D8, symSize: 0x40 }
- { offset: 0x1E81B4, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9_language33_D25DB757439FC08881580587A9BB3263LL14ArgumentParser6OptionVySSGvs', symObjAddr: 0x1890, symBinAddr: 0x1000DE518, symSize: 0x60 }
- { offset: 0x1E81C8, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV14detectLanguageSSyF', symObjAddr: 0x18F0, symBinAddr: 0x1000DE578, symSize: 0x640 }
- { offset: 0x1E83C8, size: 0x8, addend: 0x0, symName: '_$sSo18SFSpeechRecognizerC6localeABSg10Foundation6LocaleV_tcfC', symObjAddr: 0x20E4, symBinAddr: 0x1000DEC18, symSize: 0x3C }
- { offset: 0x1E83DC, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV3runyyKF', symObjAddr: 0x21A0, symBinAddr: 0x1000DEC54, symSize: 0x3118 }
- { offset: 0x1E85BB, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV3runyyKFySo37SFSpeechRecognizerAuthorizationStatusVcfU_', symObjAddr: 0x53FC, symBinAddr: 0x1000E1E14, symSize: 0x78 }
- { offset: 0x1E8604, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV3runyyKFySo25SFSpeechRecognitionResultCSg_s5Error_pSgtcfU0_', symObjAddr: 0x5A90, symBinAddr: 0x1000E2430, symSize: 0xCA0 }
- { offset: 0x1E8722, size: 0x8, addend: 0x0, symName: '_$sSo6NSTaskCABycfC', symObjAddr: 0x537C, symBinAddr: 0x1000E1D94, symSize: 0x2C }
- { offset: 0x1E8741, size: 0x8, addend: 0x0, symName: '_$sSo7NSErrorC6domain4code8userInfoABSS_SiSDySSypGSgtcfC', symObjAddr: 0x53A8, symBinAddr: 0x1000E1DC0, symSize: 0x54 }
- { offset: 0x1E8755, size: 0x8, addend: 0x0, symName: '_$sSo37SFSpeechRecognizerAuthorizationStatusV8rawValueSivg', symObjAddr: 0x5678, symBinAddr: 0x1000E2090, symSize: 0x1C }
- { offset: 0x1E8777, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV5write2to7optionsyAA3URLV_So20NSDataWritingOptionsVtKFfA0_', symObjAddr: 0x5914, symBinAddr: 0x1000E232C, symSize: 0x2C }
- { offset: 0x1E8796, size: 0x8, addend: 0x0, symName: '_$sSo29SFSpeechURLRecognitionRequestC3urlAB10Foundation3URLV_tcfC', symObjAddr: 0x5A18, symBinAddr: 0x1000E23B8, symSize: 0x3C }
- { offset: 0x1E87B6, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV5$mainyyFZ', symObjAddr: 0x6A98, symBinAddr: 0x1000E33D8, symSize: 0x34 }
- { offset: 0x1E87E2, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLO11stringValueAFSgSS_tcfC', symObjAddr: 0x6B34, symBinAddr: 0x1000E3474, symSize: 0x2B8 }
- { offset: 0x1E8804, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLO8intValueAFSgSi_tcfC', symObjAddr: 0x6DEC, symBinAddr: 0x1000E372C, symSize: 0x18 }
- { offset: 0x1E8826, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLO21__derived_enum_equalsySbAF_AFtFZ', symObjAddr: 0x6E04, symBinAddr: 0x1000E3744, symSize: 0x130 }
- { offset: 0x1E8863, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLO4hash4intoys6HasherVz_tF', symObjAddr: 0x6F34, symBinAddr: 0x1000E3874, symSize: 0xD4 }
- { offset: 0x1E8893, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLO9hashValueSivg', symObjAddr: 0x7008, symBinAddr: 0x1000E3948, symSize: 0x48 }
- { offset: 0x1E88B5, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLO8intValueSiSgvg', symObjAddr: 0x70B8, symBinAddr: 0x1000E39F8, symSize: 0x1C }
- { offset: 0x1E88D7, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLO11stringValueSSvg', symObjAddr: 0x70D4, symBinAddr: 0x1000E3A14, symSize: 0x104 }
- { offset: 0x1E8904, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOSQAASQ2eeoiySbx_xtFZTW', symObjAddr: 0x71D8, symBinAddr: 0x1000E3B18, symSize: 0x20 }
- { offset: 0x1E8918, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOSHAASH9hashValueSivgTW', symObjAddr: 0x71F8, symBinAddr: 0x1000E3B38, symSize: 0x18 }
- { offset: 0x1E892C, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOSHAASH4hash4intoys6HasherVz_tFTW', symObjAddr: 0x7210, symBinAddr: 0x1000E3B50, symSize: 0x18 }
- { offset: 0x1E8940, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOSHAASH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x7228, symBinAddr: 0x1000E3B68, symSize: 0x14 }
- { offset: 0x1E8954, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOs0D3KeyAAsAGP11stringValueSSvgTW', symObjAddr: 0x723C, symBinAddr: 0x1000E3B7C, symSize: 0x18 }
- { offset: 0x1E8968, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOs0D3KeyAAsAGP11stringValuexSgSS_tcfCTW', symObjAddr: 0x7254, symBinAddr: 0x1000E3B94, symSize: 0x28 }
- { offset: 0x1E897C, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOs0D3KeyAAsAGP8intValueSiSgvgTW', symObjAddr: 0x727C, symBinAddr: 0x1000E3BBC, symSize: 0x18 }
- { offset: 0x1E8990, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOs0D3KeyAAsAGP8intValuexSgSi_tcfCTW', symObjAddr: 0x7294, symBinAddr: 0x1000E3BD4, symSize: 0x28 }
- { offset: 0x1E89A4, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOs28CustomDebugStringConvertibleAAsAGP16debugDescriptionSSvgTW', symObjAddr: 0x72BC, symBinAddr: 0x1000E3BFC, symSize: 0x2C }
- { offset: 0x1E89B8, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOs23CustomStringConvertibleAAsAGP11descriptionSSvgTW', symObjAddr: 0x7350, symBinAddr: 0x1000E3C90, symSize: 0x2C }
- { offset: 0x1E89CC, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVACycfC', symObjAddr: 0x737C, symBinAddr: 0x1000E3CBC, symSize: 0x214 }
- { offset: 0x1E89F1, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV4fromACs7Decoder_p_tKcfC', symObjAddr: 0x7590, symBinAddr: 0x1000E3ED0, symSize: 0x5C0 }
- { offset: 0x1E8A15, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9inputPath06outputE04uuid8languageAC14ArgumentParser0I0VySSG_AKS2StcfC', symObjAddr: 0x7E8C, symBinAddr: 0x1000E46AC, symSize: 0xE0 }
- { offset: 0x1E8A34, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV14ArgumentParser15ParsableCommandAadEP13configurationAD0G13ConfigurationVvgZTW', symObjAddr: 0x7F6C, symBinAddr: 0x1000E478C, symSize: 0x3C }
- { offset: 0x1E8A48, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV14ArgumentParser15ParsableCommandAadEP12_commandNameSSvgZTW', symObjAddr: 0x7FA8, symBinAddr: 0x1000E47C8, symSize: 0x14 }
- { offset: 0x1E8A5C, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV14ArgumentParser15ParsableCommandAadEP3runyyKFTW', symObjAddr: 0x7FBC, symBinAddr: 0x1000E47DC, symSize: 0x44 }
- { offset: 0x1E8A70, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV14ArgumentParser17ParsableArgumentsAadEPxycfCTW', symObjAddr: 0x8000, symBinAddr: 0x1000E4820, symSize: 0x3C }
- { offset: 0x1E8A84, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV14ArgumentParser17ParsableArgumentsAadEP8validateyyKFTW', symObjAddr: 0x803C, symBinAddr: 0x1000E485C, symSize: 0x44 }
- { offset: 0x1E8A98, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV14ArgumentParser17ParsableArgumentsAadEP11_errorLabelSSvgZTW', symObjAddr: 0x8080, symBinAddr: 0x1000E48A0, symSize: 0x14 }
- { offset: 0x1E8AAC, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV14ArgumentParser17ParsableArgumentsAadEP12_errorPrefixSSvgZTW', symObjAddr: 0x8094, symBinAddr: 0x1000E48B4, symSize: 0x14 }
- { offset: 0x1E8AC0, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVSeAASe4fromxs7Decoder_p_tKcfCTW', symObjAddr: 0x80A8, symBinAddr: 0x1000E48C8, symSize: 0x6C }
- { offset: 0x1E8AD4, size: 0x8, addend: 0x0, symName: _asr_swift_main, symObjAddr: 0x8114, symBinAddr: 0x1000E4934, symSize: 0x18 }
- { offset: 0x1E8AE8, size: 0x8, addend: 0x0, symName: '_$sSo18SFSpeechRecognizerC6localeABSg10Foundation6LocaleV_tcfcTO', symObjAddr: 0x8CE4, symBinAddr: 0x1000E54C8, symSize: 0x80 }
- { offset: 0x1E8AFC, size: 0x8, addend: 0x0, symName: '_$sSo6NSTaskCABycfcTO', symObjAddr: 0x8D64, symBinAddr: 0x1000E5548, symSize: 0x18 }
- { offset: 0x1E8B10, size: 0x8, addend: 0x0, symName: '_$sSo7NSErrorC6domain4code8userInfoABSS_SiSDySSypGSgtcfcTO', symObjAddr: 0x8D7C, symBinAddr: 0x1000E5560, symSize: 0xE8 }
- { offset: 0x1E8B2F, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsV8rawValueABSu_tcfC', symObjAddr: 0x8E64, symBinAddr: 0x1000E5648, symSize: 0x4 }
- { offset: 0x1E8B43, size: 0x8, addend: 0x0, symName: '_$sSo29SFSpeechURLRecognitionRequestC3urlAB10Foundation3URLV_tcfcTO', symObjAddr: 0x8E68, symBinAddr: 0x1000E564C, symSize: 0x80 }
- { offset: 0x1E8B62, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACPxycfCTW', symObjAddr: 0x8F30, symBinAddr: 0x1000E5714, symSize: 0x40 }
- { offset: 0x1E8B76, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP8containsySb7ElementQzFTW', symObjAddr: 0x8F70, symBinAddr: 0x1000E5754, symSize: 0x38 }
- { offset: 0x1E8B8A, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP5unionyxxnFTW', symObjAddr: 0x8FA8, symBinAddr: 0x1000E578C, symSize: 0x3C }
- { offset: 0x1E8B9E, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP12intersectionyxxFTW', symObjAddr: 0x8FE4, symBinAddr: 0x1000E57C8, symSize: 0x3C }
- { offset: 0x1E8BB2, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP19symmetricDifferenceyxxnFTW', symObjAddr: 0x9020, symBinAddr: 0x1000E5804, symSize: 0x3C }
- { offset: 0x1E8BD1, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP6insertySb8inserted_7ElementQz17memberAfterInserttAHnFTW', symObjAddr: 0x905C, symBinAddr: 0x1000E5840, symSize: 0x4C }
- { offset: 0x1E8BFB, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP6removey7ElementQzSgAGFTW', symObjAddr: 0x928C, symBinAddr: 0x1000E588C, symSize: 0x3C }
- { offset: 0x1E8C0F, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP6update4with7ElementQzSgAHn_tFTW', symObjAddr: 0x92C8, symBinAddr: 0x1000E58C8, symSize: 0x3C }
- { offset: 0x1E8C23, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP9formUnionyyxnFTW', symObjAddr: 0x9304, symBinAddr: 0x1000E5904, symSize: 0x40 }
- { offset: 0x1E8C37, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP16formIntersectionyyxFTW', symObjAddr: 0x9344, symBinAddr: 0x1000E5944, symSize: 0x40 }
- { offset: 0x1E8C4B, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP23formSymmetricDifferenceyyxnFTW', symObjAddr: 0x9384, symBinAddr: 0x1000E5984, symSize: 0x40 }
- { offset: 0x1E8C5F, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP11subtractingyxxFTW', symObjAddr: 0x93C4, symBinAddr: 0x1000E59C4, symSize: 0x14 }
- { offset: 0x1E8C73, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP8isSubset2ofSbx_tFTW', symObjAddr: 0x93D8, symBinAddr: 0x1000E59D8, symSize: 0x18 }
- { offset: 0x1E8C87, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP10isDisjoint4withSbx_tFTW', symObjAddr: 0x93F0, symBinAddr: 0x1000E59F0, symSize: 0x18 }
- { offset: 0x1E8C9B, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP10isSuperset2ofSbx_tFTW', symObjAddr: 0x9408, symBinAddr: 0x1000E5A08, symSize: 0x18 }
- { offset: 0x1E8CAF, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP7isEmptySbvgTW', symObjAddr: 0x9420, symBinAddr: 0x1000E5A20, symSize: 0x18 }
- { offset: 0x1E8CC3, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACPyxqd__ncSTRd__7ElementQyd__AERtzlufCTW', symObjAddr: 0x9438, symBinAddr: 0x1000E5A38, symSize: 0x38 }
- { offset: 0x1E8CD7, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP8subtractyyxFTW', symObjAddr: 0x9470, symBinAddr: 0x1000E5A70, symSize: 0x14 }
- { offset: 0x1E8CF6, size: 0x8, addend: 0x0, symName: '_$sSo37SFSpeechRecognizerAuthorizationStatusVSYSCSY8rawValuexSg03RawF0Qz_tcfCTW', symObjAddr: 0x9484, symBinAddr: 0x1000E5A84, symSize: 0x30 }
- { offset: 0x1E8D15, size: 0x8, addend: 0x0, symName: '_$sSo37SFSpeechRecognizerAuthorizationStatusV8rawValueABSgSi_tcfC', symObjAddr: 0x94B4, symBinAddr: 0x1000E5AB4, symSize: 0x24 }
- { offset: 0x1E8D46, size: 0x8, addend: 0x0, symName: '_$sSo37SFSpeechRecognizerAuthorizationStatusVSYSCSY8rawValue03RawF0QzvgTW', symObjAddr: 0x94D8, symBinAddr: 0x1000E5AD8, symSize: 0x2C }
- { offset: 0x1E8D5A, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs25ExpressibleByArrayLiteralSCsACP05arrayF0x0eF7ElementQzd_tcfCTW', symObjAddr: 0x954C, symBinAddr: 0x1000E5B4C, symSize: 0x3C }
- { offset: 0x1E8D6E, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs9OptionSetSCsACP8rawValuex03RawF0Qz_tcfCTW', symObjAddr: 0x9588, symBinAddr: 0x1000E5B88, symSize: 0x2C }
- { offset: 0x1E8D82, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVSYSCSY8rawValuexSg03RawD0Qz_tcfCTW', symObjAddr: 0x95B4, symBinAddr: 0x1000E5BB4, symSize: 0x30 }
- { offset: 0x1E8D96, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVSYSCSY8rawValue03RawD0QzvgTW', symObjAddr: 0x95E4, symBinAddr: 0x1000E5BE4, symSize: 0x2C }
- { offset: 0x1E8DAA, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsV8rawValueSuvg', symObjAddr: 0x9A54, symBinAddr: 0x1000E5FF0, symSize: 0x4 }
- { offset: 0x1E6CCD, size: 0x8, addend: 0x0, symName: '_$s9asr_swift17mergeWordSegmentsySaySDySSypGGADF', symObjAddr: 0x0, symBinAddr: 0x1000DCE28, symSize: 0x1400 }
- { offset: 0x1E6EE7, size: 0x8, addend: 0x0, symName: '_$sSo37SFSpeechRecognizerAuthorizationStatusVSQSCSQ2eeoiySbx_xtFZTW', symObjAddr: 0xA928, symBinAddr: 0x1000E704C, symSize: 0x48 }
- { offset: 0x1E711B, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVSQSCSQ2eeoiySbx_xtFZTW', symObjAddr: 0xAF44, symBinAddr: 0x1000E7484, symSize: 0x48 }
- { offset: 0x1E7218, size: 0x8, addend: 0x0, symName: '_$s9asr_swift17mergeWordSegmentsySaySDySSypGGADF', symObjAddr: 0x0, symBinAddr: 0x1000DCE28, symSize: 0x1400 }
- { offset: 0x1E7415, size: 0x8, addend: 0x0, symName: '_$sSaySDySSypGGSayxGSlsWl', symObjAddr: 0x1480, symBinAddr: 0x1000DE228, symSize: 0x74 }
- { offset: 0x1E7429, size: 0x8, addend: 0x0, symName: '_$ss16IndexingIteratorVySaySDySSypGGGWOh', symObjAddr: 0x156C, symBinAddr: 0x1000DE29C, symSize: 0x28 }
- { offset: 0x1E743D, size: 0x8, addend: 0x0, symName: '_$sSDySSypGSgWOh', symObjAddr: 0x1594, symBinAddr: 0x1000DE2C4, symSize: 0x28 }
- { offset: 0x1E7451, size: 0x8, addend: 0x0, symName: '_$sSaySDySSypGGWOh', symObjAddr: 0x15BC, symBinAddr: 0x1000DE2EC, symSize: 0x28 }
- { offset: 0x1E7465, size: 0x8, addend: 0x0, symName: '_$sSDySSypGWOh', symObjAddr: 0x16A4, symBinAddr: 0x1000DE314, symSize: 0x28 }
- { offset: 0x1E7920, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser0A0VySSGWOc', symObjAddr: 0x17D0, symBinAddr: 0x1000DE3D8, symSize: 0x58 }
- { offset: 0x1E7934, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser0A0VySSGWOh', symObjAddr: 0x186C, symBinAddr: 0x1000DE430, symSize: 0x34 }
- { offset: 0x1E7948, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9inputPathSSvpACTK', symObjAddr: 0x18E4, symBinAddr: 0x1000DE464, symSize: 0x78 }
- { offset: 0x1E7960, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9inputPathSSvpACTk', symObjAddr: 0x195C, symBinAddr: 0x1000DE4DC, symSize: 0x44 }
- { offset: 0x1E7978, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10_inputPath33_D25DB757439FC08881580587A9BB3263LL14ArgumentParser0K0VySSGvpfi', symObjAddr: 0x1BE4, symBinAddr: 0x1000DE714, symSize: 0xAC }
- { offset: 0x1E7990, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10outputPathSSvpACTK', symObjAddr: 0x1DCC, symBinAddr: 0x1000DE8FC, symSize: 0x78 }
- { offset: 0x1E79A8, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10outputPathSSvpACTk', symObjAddr: 0x1E44, symBinAddr: 0x1000DE974, symSize: 0x44 }
- { offset: 0x1E79C0, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV11_outputPath33_D25DB757439FC08881580587A9BB3263LL14ArgumentParser0K0VySSGvpfi', symObjAddr: 0x208C, symBinAddr: 0x1000DEBBC, symSize: 0xAC }
- { offset: 0x1E79D8, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV4uuidSSvpfP', symObjAddr: 0x21D8, symBinAddr: 0x1000DED08, symSize: 0x13C }
- { offset: 0x1E7A05, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV4uuidSSvpfF', symObjAddr: 0x2334, symBinAddr: 0x1000DEE44, symSize: 0x11C }
- { offset: 0x1E7A32, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser6OptionVySSGWOc', symObjAddr: 0x24EC, symBinAddr: 0x1000DEFFC, symSize: 0x58 }
- { offset: 0x1E7A46, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser6OptionVySSGWOh', symObjAddr: 0x2544, symBinAddr: 0x1000DF054, symSize: 0x34 }
- { offset: 0x1E7A5A, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV4uuidSSvpACTK', symObjAddr: 0x2578, symBinAddr: 0x1000DF088, symSize: 0x78 }
- { offset: 0x1E7A72, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV4uuidSSvpACTk', symObjAddr: 0x25F0, symBinAddr: 0x1000DF100, symSize: 0x44 }
- { offset: 0x1E7A8A, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV5_uuid33_D25DB757439FC08881580587A9BB3263LL14ArgumentParser6OptionVySSGvpfi', symObjAddr: 0x2838, symBinAddr: 0x1000DF348, symSize: 0x28 }
- { offset: 0x1E7AA2, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV8languageSSvpfP', symObjAddr: 0x2900, symBinAddr: 0x1000DF410, symSize: 0x13C }
- { offset: 0x1E7ACF, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV8languageSSvpfF', symObjAddr: 0x2A3C, symBinAddr: 0x1000DF54C, symSize: 0x11C }
- { offset: 0x1E7AFC, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV8languageSSvpACTK', symObjAddr: 0x2BF4, symBinAddr: 0x1000DF704, symSize: 0x78 }
- { offset: 0x1E7B14, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV8languageSSvpACTk', symObjAddr: 0x2C6C, symBinAddr: 0x1000DF77C, symSize: 0x44 }
- { offset: 0x1E7B2C, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9_language33_D25DB757439FC08881580587A9BB3263LL14ArgumentParser6OptionVySSGvpfi', symObjAddr: 0x2EB4, symBinAddr: 0x1000DF9C4, symSize: 0x28 }
- { offset: 0x1E7B44, size: 0x8, addend: 0x0, symName: '_$sSo18SFSpeechRecognizerCMa', symObjAddr: 0x3658, symBinAddr: 0x1000E00CC, symSize: 0x60 }
- { offset: 0x1E7B58, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV3runyyKFySo37SFSpeechRecognizerAuthorizationStatusVcfU_TA', symObjAddr: 0x6B88, symBinAddr: 0x1000E34E0, symSize: 0xC }
- { offset: 0x1E7B6C, size: 0x8, addend: 0x0, symName: '_$sSo37SFSpeechRecognizerAuthorizationStatusVIegy_ABIeyBy_TR', symObjAddr: 0x6B94, symBinAddr: 0x1000E34EC, symSize: 0x50 }
- { offset: 0x1E7B84, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x6BE4, symBinAddr: 0x1000E353C, symSize: 0x44 }
- { offset: 0x1E7B98, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x6C28, symBinAddr: 0x1000E3580, symSize: 0x18 }
- { offset: 0x1E7BAC, size: 0x8, addend: 0x0, symName: '_$sSo37SFSpeechRecognizerAuthorizationStatusVMa', symObjAddr: 0x6C40, symBinAddr: 0x1000E3598, symSize: 0x94 }
- { offset: 0x1E7BC0, size: 0x8, addend: 0x0, symName: '_$sSo37SFSpeechRecognizerAuthorizationStatusVABSQSCWl', symObjAddr: 0x6CD4, symBinAddr: 0x1000E362C, symSize: 0x6C }
- { offset: 0x1E7BD4, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVWOc', symObjAddr: 0x6D5C, symBinAddr: 0x1000E36B4, symSize: 0x110 }
- { offset: 0x1E7BE8, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVWOh', symObjAddr: 0x6E6C, symBinAddr: 0x1000E37C4, symSize: 0x70 }
- { offset: 0x1E7BFC, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVMa', symObjAddr: 0x6EDC, symBinAddr: 0x1000E3834, symSize: 0x94 }
- { offset: 0x1E7C10, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVABs10SetAlgebraSCWl', symObjAddr: 0x6F70, symBinAddr: 0x1000E38C8, symSize: 0x6C }
- { offset: 0x1E7C24, size: 0x8, addend: 0x0, symName: '_$sSo29SFSpeechURLRecognitionRequestCMa', symObjAddr: 0x7080, symBinAddr: 0x1000E3960, symSize: 0x60 }
- { offset: 0x1E7C38, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV3runyyKFySo25SFSpeechRecognitionResultCSg_s5Error_pSgtcfU0_TA', symObjAddr: 0x8228, symBinAddr: 0x1000E4B08, symSize: 0x64 }
- { offset: 0x1E7C4C, size: 0x8, addend: 0x0, symName: '_$sSo25SFSpeechRecognitionResultCSgs5Error_pSgIeggg_ACSo7NSErrorCSgIeyByy_TR', symObjAddr: 0x828C, symBinAddr: 0x1000E4B6C, symSize: 0xC4 }
- { offset: 0x1E7C64, size: 0x8, addend: 0x0, symName: _block_copy_helper.10, symObjAddr: 0x8350, symBinAddr: 0x1000E4C30, symSize: 0x44 }
- { offset: 0x1E7C78, size: 0x8, addend: 0x0, symName: _block_destroy_helper.11, symObjAddr: 0x8394, symBinAddr: 0x1000E4C74, symSize: 0x18 }
- { offset: 0x1E7C8C, size: 0x8, addend: 0x0, symName: '_$s10Foundation3URLVACSQAAWl', symObjAddr: 0x83AC, symBinAddr: 0x1000E4C8C, symSize: 0x6C }
- { offset: 0x1E7CA0, size: 0x8, addend: 0x0, symName: '_$sSo6NSTaskCMa', symObjAddr: 0x8418, symBinAddr: 0x1000E4CF8, symSize: 0x60 }
- { offset: 0x1E7CB4, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVAC14ArgumentParser15ParsableCommandAAWl', symObjAddr: 0x850C, symBinAddr: 0x1000E4D8C, symSize: 0x68 }
- { offset: 0x1E7CC8, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOAFSHAAWl', symObjAddr: 0x8A90, symBinAddr: 0x1000E5310, symSize: 0x68 }
- { offset: 0x1E7CDC, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOAFs0D3KeyAAWl', symObjAddr: 0x8D28, symBinAddr: 0x1000E55A8, symSize: 0x68 }
- { offset: 0x1E7CF0, size: 0x8, addend: 0x0, symName: '_$s14ArgumentParser0A0VySSGACyxGSeAAWl', symObjAddr: 0x963C, symBinAddr: 0x1000E5E10, symSize: 0x74 }
- { offset: 0x1E7D04, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9inputPath06outputE04uuid8languageAC14ArgumentParser0I0VySSG_AKS2StcfcfA_', symObjAddr: 0x9724, symBinAddr: 0x1000E5E84, symSize: 0xAC }
- { offset: 0x1E7D22, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9inputPath06outputE04uuid8languageAC14ArgumentParser0I0VySSG_AKS2StcfcfA0_', symObjAddr: 0x97D0, symBinAddr: 0x1000E5F30, symSize: 0xAC }
- { offset: 0x1E7D40, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9inputPath06outputE04uuid8languageAC14ArgumentParser0I0VySSG_AKS2StcfcfA1_', symObjAddr: 0x987C, symBinAddr: 0x1000E5FDC, symSize: 0x28 }
- { offset: 0x1E7D5E, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9inputPath06outputE04uuid8languageAC14ArgumentParser0I0VySSG_AKS2StcfcfA2_', symObjAddr: 0x98A4, symBinAddr: 0x1000E6004, symSize: 0x28 }
- { offset: 0x1E7D7C, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV14ArgumentParser15ParsableCommandAAWI', symObjAddr: 0x9B6C, symBinAddr: 0x1000E62CC, symSize: 0x28 }
- { offset: 0x1E7D90, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVAC14ArgumentParser17ParsableArgumentsAAWl', symObjAddr: 0x9B94, symBinAddr: 0x1000E62F4, symSize: 0x68 }
- { offset: 0x1E7DA4, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV14ArgumentParser17ParsableArgumentsAAWI', symObjAddr: 0x9BFC, symBinAddr: 0x1000E635C, symSize: 0x28 }
- { offset: 0x1E7DB8, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVACSeAAWl', symObjAddr: 0x9C24, symBinAddr: 0x1000E6384, symSize: 0x68 }
- { offset: 0x1E7DCC, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVwCP', symObjAddr: 0x9C8C, symBinAddr: 0x1000E63EC, symSize: 0x3C }
- { offset: 0x1E7DE0, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVwxx', symObjAddr: 0x9CC8, symBinAddr: 0x1000E6428, symSize: 0x6C }
- { offset: 0x1E7DF4, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVwcp', symObjAddr: 0x9D34, symBinAddr: 0x1000E6494, symSize: 0x110 }
- { offset: 0x1E7E08, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVwca', symObjAddr: 0x9E44, symBinAddr: 0x1000E65A4, symSize: 0x154 }
- { offset: 0x1E7E1C, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVwta', symObjAddr: 0x9FC4, symBinAddr: 0x1000E66F8, symSize: 0xE0 }
- { offset: 0x1E7E30, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVwet', symObjAddr: 0xA0A4, symBinAddr: 0x1000E67D8, symSize: 0xF8 }
- { offset: 0x1E7E44, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVwst', symObjAddr: 0xA19C, symBinAddr: 0x1000E68D0, symSize: 0x1D8 }
- { offset: 0x1E7E58, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVMa', symObjAddr: 0xA374, symBinAddr: 0x1000E6AA8, symSize: 0x14 }
- { offset: 0x1E7E6C, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOwet', symObjAddr: 0xA398, symBinAddr: 0x1000E6ABC, symSize: 0x168 }
- { offset: 0x1E7E80, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOwst', symObjAddr: 0xA500, symBinAddr: 0x1000E6C24, symSize: 0x1FC }
- { offset: 0x1E7E94, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOwug', symObjAddr: 0xA6FC, symBinAddr: 0x1000E6E20, symSize: 0x8 }
- { offset: 0x1E7EA8, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOwup', symObjAddr: 0xA704, symBinAddr: 0x1000E6E28, symSize: 0x4 }
- { offset: 0x1E7EBC, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOwui', symObjAddr: 0xA708, symBinAddr: 0x1000E6E2C, symSize: 0x8 }
- { offset: 0x1E7ED0, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOMa', symObjAddr: 0xA710, symBinAddr: 0x1000E6E34, symSize: 0x14 }
- { offset: 0x1E7EE4, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs9OptionSetSCSYWb', symObjAddr: 0xB050, symBinAddr: 0x1000E7590, symSize: 0x14 }
- { offset: 0x1E7EF8, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVABSYSCWl', symObjAddr: 0xB064, symBinAddr: 0x1000E75A4, symSize: 0x6C }
- { offset: 0x1E7F0C, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs9OptionSetSCs0D7AlgebraPWb', symObjAddr: 0xB0D0, symBinAddr: 0x1000E7610, symSize: 0x14 }
- { offset: 0x1E7F20, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOs0D3KeyAAs28CustomDebugStringConvertiblePWb', symObjAddr: 0xB0E4, symBinAddr: 0x1000E7624, symSize: 0x14 }
- { offset: 0x1E7F34, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOAFs28CustomDebugStringConvertibleAAWl', symObjAddr: 0xB0F8, symBinAddr: 0x1000E7638, symSize: 0x68 }
- { offset: 0x1E7F48, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOs0D3KeyAAs23CustomStringConvertiblePWb', symObjAddr: 0xB160, symBinAddr: 0x1000E76A0, symSize: 0x14 }
- { offset: 0x1E7F5C, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOAFs23CustomStringConvertibleAAWl', symObjAddr: 0xB174, symBinAddr: 0x1000E76B4, symSize: 0x68 }
- { offset: 0x1E7F70, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOSHAASQWb', symObjAddr: 0xB1DC, symBinAddr: 0x1000E771C, symSize: 0x14 }
- { offset: 0x1E7F84, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOAFSQAAWl', symObjAddr: 0xB1F0, symBinAddr: 0x1000E7730, symSize: 0x68 }
- { offset: 0x1E7F98, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCSQWb', symObjAddr: 0xB258, symBinAddr: 0x1000E7798, symSize: 0x14 }
- { offset: 0x1E7FAC, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVABSQSCWl', symObjAddr: 0xB26C, symBinAddr: 0x1000E77AC, symSize: 0x6C }
- { offset: 0x1E7FC0, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCs25ExpressibleByArrayLiteralPWb', symObjAddr: 0xB2D8, symBinAddr: 0x1000E7818, symSize: 0x14 }
- { offset: 0x1E7FD4, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVABs25ExpressibleByArrayLiteralSCWl', symObjAddr: 0xB2EC, symBinAddr: 0x1000E782C, symSize: 0x6C }
- { offset: 0x1E7FE8, size: 0x8, addend: 0x0, symName: '_$sSo37SFSpeechRecognizerAuthorizationStatusVABSYSCWl', symObjAddr: 0xB358, symBinAddr: 0x1000E7898, symSize: 0x6C }
- { offset: 0x1E7FFC, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVABs9OptionSetSCWl', symObjAddr: 0xB3C4, symBinAddr: 0x1000E7904, symSize: 0x6C }
- { offset: 0x1E8010, size: 0x8, addend: 0x0, symName: '_$sSo22SFTranscriptionSegmentCMa', symObjAddr: 0xB498, symBinAddr: 0x1000E7974, symSize: 0x60 }
- { offset: 0x1E8024, size: 0x8, addend: 0x0, symName: '_$sSaySo22SFTranscriptionSegmentCGSayxGSlsWl', symObjAddr: 0xB4F8, symBinAddr: 0x1000E79D4, symSize: 0x74 }
- { offset: 0x1E8038, size: 0x8, addend: 0x0, symName: '_$ss16IndexingIteratorVySaySo22SFTranscriptionSegmentCGGWOh', symObjAddr: 0xB56C, symBinAddr: 0x1000E7A48, symSize: 0x28 }
- { offset: 0x1E804C, size: 0x8, addend: 0x0, symName: '_$sSa22_allocateUninitializedySayxG_SpyxGtSiFZSo20NSDataWritingOptionsV_Tt0gq5', symObjAddr: 0xB5A0, symBinAddr: 0x1000E7A70, symSize: 0xD4 }
- { offset: 0x1E8079, size: 0x8, addend: 0x0, symName: '_$sSo20NSDataWritingOptionsVMa', symObjAddr: 0xB674, symBinAddr: 0x1000E7B44, symSize: 0x94 }
- { offset: 0x1E808E, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9inputPathSSvg', symObjAddr: 0x1734, symBinAddr: 0x1000DE33C, symSize: 0x9C }
- { offset: 0x1E80BE, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9inputPathSSvs', symObjAddr: 0x19A0, symBinAddr: 0x1000DE520, symSize: 0x8C }
- { offset: 0x1E80F2, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9inputPathSSvM', symObjAddr: 0x1A2C, symBinAddr: 0x1000DE5AC, symSize: 0xB0 }
- { offset: 0x1E8117, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9inputPathSSvM.resume.0', symObjAddr: 0x1ADC, symBinAddr: 0x1000DE65C, symSize: 0xB8 }
- { offset: 0x1E81DB, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10_inputPath33_D25DB757439FC08881580587A9BB3263LL14ArgumentParser0K0VySSGvg', symObjAddr: 0x1C90, symBinAddr: 0x1000DE7C0, symSize: 0x40 }
- { offset: 0x1E81EF, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10_inputPath33_D25DB757439FC08881580587A9BB3263LL14ArgumentParser0K0VySSGvs', symObjAddr: 0x1CD0, symBinAddr: 0x1000DE800, symSize: 0x60 }
- { offset: 0x1E8203, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10outputPathSSvg', symObjAddr: 0x1D30, symBinAddr: 0x1000DE860, symSize: 0x9C }
- { offset: 0x1E8228, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10outputPathSSvs', symObjAddr: 0x1E88, symBinAddr: 0x1000DE9B8, symSize: 0x94 }
- { offset: 0x1E825C, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10outputPathSSvM', symObjAddr: 0x1F1C, symBinAddr: 0x1000DEA4C, symSize: 0xB0 }
- { offset: 0x1E8281, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10outputPathSSvM.resume.0', symObjAddr: 0x1FCC, symBinAddr: 0x1000DEAFC, symSize: 0xC0 }
- { offset: 0x1E82A2, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV11_outputPath33_D25DB757439FC08881580587A9BB3263LL14ArgumentParser0K0VySSGvg', symObjAddr: 0x2138, symBinAddr: 0x1000DEC68, symSize: 0x40 }
- { offset: 0x1E82B6, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV11_outputPath33_D25DB757439FC08881580587A9BB3263LL14ArgumentParser0K0VySSGvs', symObjAddr: 0x2178, symBinAddr: 0x1000DECA8, symSize: 0x60 }
- { offset: 0x1E82CA, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV4uuidSSvg', symObjAddr: 0x2450, symBinAddr: 0x1000DEF60, symSize: 0x9C }
- { offset: 0x1E82EF, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV4uuidSSvs', symObjAddr: 0x2634, symBinAddr: 0x1000DF144, symSize: 0x94 }
- { offset: 0x1E8323, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV4uuidSSvM', symObjAddr: 0x26C8, symBinAddr: 0x1000DF1D8, symSize: 0xB0 }
- { offset: 0x1E8348, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV4uuidSSvM.resume.0', symObjAddr: 0x2778, symBinAddr: 0x1000DF288, symSize: 0xC0 }
- { offset: 0x1E8369, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV5_uuid33_D25DB757439FC08881580587A9BB3263LL14ArgumentParser6OptionVySSGvg', symObjAddr: 0x2860, symBinAddr: 0x1000DF370, symSize: 0x40 }
- { offset: 0x1E837D, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV5_uuid33_D25DB757439FC08881580587A9BB3263LL14ArgumentParser6OptionVySSGvs', symObjAddr: 0x28A0, symBinAddr: 0x1000DF3B0, symSize: 0x60 }
- { offset: 0x1E8391, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV8languageSSvg', symObjAddr: 0x2B58, symBinAddr: 0x1000DF668, symSize: 0x9C }
- { offset: 0x1E83B6, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV8languageSSvs', symObjAddr: 0x2CB0, symBinAddr: 0x1000DF7C0, symSize: 0x94 }
- { offset: 0x1E83EA, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV8languageSSvM', symObjAddr: 0x2D44, symBinAddr: 0x1000DF854, symSize: 0xB0 }
- { offset: 0x1E840F, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV8languageSSvM.resume.0', symObjAddr: 0x2DF4, symBinAddr: 0x1000DF904, symSize: 0xC0 }
- { offset: 0x1E8430, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9_language33_D25DB757439FC08881580587A9BB3263LL14ArgumentParser6OptionVySSGvg', symObjAddr: 0x2EDC, symBinAddr: 0x1000DF9EC, symSize: 0x40 }
- { offset: 0x1E8444, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9_language33_D25DB757439FC08881580587A9BB3263LL14ArgumentParser6OptionVySSGvs', symObjAddr: 0x2F1C, symBinAddr: 0x1000DFA2C, symSize: 0x60 }
- { offset: 0x1E8458, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV14detectLanguageSSyF', symObjAddr: 0x2F7C, symBinAddr: 0x1000DFA8C, symSize: 0x640 }
- { offset: 0x1E8658, size: 0x8, addend: 0x0, symName: '_$sSo18SFSpeechRecognizerC6localeABSg10Foundation6LocaleV_tcfC', symObjAddr: 0x36B8, symBinAddr: 0x1000E012C, symSize: 0x3C }
- { offset: 0x1E866C, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV3runyyKF', symObjAddr: 0x3774, symBinAddr: 0x1000E0168, symSize: 0x320C }
- { offset: 0x1E884B, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV3runyyKFySo37SFSpeechRecognizerAuthorizationStatusVcfU_', symObjAddr: 0x6AC4, symBinAddr: 0x1000E341C, symSize: 0x78 }
- { offset: 0x1E8894, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV3runyyKFySo25SFSpeechRecognitionResultCSg_s5Error_pSgtcfU0_', symObjAddr: 0x7158, symBinAddr: 0x1000E3A38, symSize: 0x1018 }
- { offset: 0x1E89D1, size: 0x8, addend: 0x0, symName: '_$sSo6NSTaskCABycfC', symObjAddr: 0x6A44, symBinAddr: 0x1000E339C, symSize: 0x2C }
- { offset: 0x1E89F0, size: 0x8, addend: 0x0, symName: '_$sSo7NSErrorC6domain4code8userInfoABSS_SiSDySSypGSgtcfC', symObjAddr: 0x6A70, symBinAddr: 0x1000E33C8, symSize: 0x54 }
- { offset: 0x1E8A04, size: 0x8, addend: 0x0, symName: '_$sSo37SFSpeechRecognizerAuthorizationStatusV8rawValueSivg', symObjAddr: 0x6D40, symBinAddr: 0x1000E3698, symSize: 0x1C }
- { offset: 0x1E8A26, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV5write2to7optionsyAA3URLV_So20NSDataWritingOptionsVtKFfA0_', symObjAddr: 0x6FDC, symBinAddr: 0x1000E3934, symSize: 0x2C }
- { offset: 0x1E8A45, size: 0x8, addend: 0x0, symName: '_$sSo29SFSpeechURLRecognitionRequestC3urlAB10Foundation3URLV_tcfC', symObjAddr: 0x70E0, symBinAddr: 0x1000E39C0, symSize: 0x3C }
- { offset: 0x1E8A65, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV5$mainyyFZ', symObjAddr: 0x84D8, symBinAddr: 0x1000E4D58, symSize: 0x34 }
- { offset: 0x1E8A91, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLO11stringValueAFSgSS_tcfC', symObjAddr: 0x8574, symBinAddr: 0x1000E4DF4, symSize: 0x2B8 }
- { offset: 0x1E8AB3, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLO8intValueAFSgSi_tcfC', symObjAddr: 0x882C, symBinAddr: 0x1000E50AC, symSize: 0x18 }
- { offset: 0x1E8AD5, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLO21__derived_enum_equalsySbAF_AFtFZ', symObjAddr: 0x8844, symBinAddr: 0x1000E50C4, symSize: 0x130 }
- { offset: 0x1E8B12, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLO4hash4intoys6HasherVz_tF', symObjAddr: 0x8974, symBinAddr: 0x1000E51F4, symSize: 0xD4 }
- { offset: 0x1E8B42, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLO9hashValueSivg', symObjAddr: 0x8A48, symBinAddr: 0x1000E52C8, symSize: 0x48 }
- { offset: 0x1E8B64, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLO8intValueSiSgvg', symObjAddr: 0x8AF8, symBinAddr: 0x1000E5378, symSize: 0x1C }
- { offset: 0x1E8B86, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLO11stringValueSSvg', symObjAddr: 0x8B14, symBinAddr: 0x1000E5394, symSize: 0x104 }
- { offset: 0x1E8BB3, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOSQAASQ2eeoiySbx_xtFZTW', symObjAddr: 0x8C18, symBinAddr: 0x1000E5498, symSize: 0x20 }
- { offset: 0x1E8BC7, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOSHAASH9hashValueSivgTW', symObjAddr: 0x8C38, symBinAddr: 0x1000E54B8, symSize: 0x18 }
- { offset: 0x1E8BDB, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOSHAASH4hash4intoys6HasherVz_tFTW', symObjAddr: 0x8C50, symBinAddr: 0x1000E54D0, symSize: 0x18 }
- { offset: 0x1E8BEF, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOSHAASH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x8C68, symBinAddr: 0x1000E54E8, symSize: 0x14 }
- { offset: 0x1E8C03, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOs0D3KeyAAsAGP11stringValueSSvgTW', symObjAddr: 0x8C7C, symBinAddr: 0x1000E54FC, symSize: 0x18 }
- { offset: 0x1E8C17, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOs0D3KeyAAsAGP11stringValuexSgSS_tcfCTW', symObjAddr: 0x8C94, symBinAddr: 0x1000E5514, symSize: 0x28 }
- { offset: 0x1E8C2B, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOs0D3KeyAAsAGP8intValueSiSgvgTW', symObjAddr: 0x8CBC, symBinAddr: 0x1000E553C, symSize: 0x18 }
- { offset: 0x1E8C3F, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOs0D3KeyAAsAGP8intValuexSgSi_tcfCTW', symObjAddr: 0x8CD4, symBinAddr: 0x1000E5554, symSize: 0x28 }
- { offset: 0x1E8C53, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOs28CustomDebugStringConvertibleAAsAGP16debugDescriptionSSvgTW', symObjAddr: 0x8CFC, symBinAddr: 0x1000E557C, symSize: 0x2C }
- { offset: 0x1E8C67, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV10CodingKeys33_D25DB757439FC08881580587A9BB3263LLOs23CustomStringConvertibleAAsAGP11descriptionSSvgTW', symObjAddr: 0x8D90, symBinAddr: 0x1000E5610, symSize: 0x2C }
- { offset: 0x1E8C7B, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVACycfC', symObjAddr: 0x8DBC, symBinAddr: 0x1000E563C, symSize: 0x214 }
- { offset: 0x1E8CA0, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV4fromACs7Decoder_p_tKcfC', symObjAddr: 0x8FD0, symBinAddr: 0x1000E5850, symSize: 0x5C0 }
- { offset: 0x1E8CC4, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV9inputPath06outputE04uuid8languageAC14ArgumentParser0I0VySSG_AKS2StcfC', symObjAddr: 0x98CC, symBinAddr: 0x1000E602C, symSize: 0xE0 }
- { offset: 0x1E8CE3, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV14ArgumentParser15ParsableCommandAadEP13configurationAD0G13ConfigurationVvgZTW', symObjAddr: 0x99AC, symBinAddr: 0x1000E610C, symSize: 0x3C }
- { offset: 0x1E8CF7, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV14ArgumentParser15ParsableCommandAadEP12_commandNameSSvgZTW', symObjAddr: 0x99E8, symBinAddr: 0x1000E6148, symSize: 0x14 }
- { offset: 0x1E8D0B, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV14ArgumentParser15ParsableCommandAadEP3runyyKFTW', symObjAddr: 0x99FC, symBinAddr: 0x1000E615C, symSize: 0x44 }
- { offset: 0x1E8D1F, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV14ArgumentParser17ParsableArgumentsAadEPxycfCTW', symObjAddr: 0x9A40, symBinAddr: 0x1000E61A0, symSize: 0x3C }
- { offset: 0x1E8D33, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV14ArgumentParser17ParsableArgumentsAadEP8validateyyKFTW', symObjAddr: 0x9A7C, symBinAddr: 0x1000E61DC, symSize: 0x44 }
- { offset: 0x1E8D47, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV14ArgumentParser17ParsableArgumentsAadEP11_errorLabelSSvgZTW', symObjAddr: 0x9AC0, symBinAddr: 0x1000E6220, symSize: 0x14 }
- { offset: 0x1E8D5B, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftV14ArgumentParser17ParsableArgumentsAadEP12_errorPrefixSSvgZTW', symObjAddr: 0x9AD4, symBinAddr: 0x1000E6234, symSize: 0x14 }
- { offset: 0x1E8D6F, size: 0x8, addend: 0x0, symName: '_$s9asr_swift8ASRSwiftVSeAASe4fromxs7Decoder_p_tKcfCTW', symObjAddr: 0x9AE8, symBinAddr: 0x1000E6248, symSize: 0x6C }
- { offset: 0x1E8D83, size: 0x8, addend: 0x0, symName: _asr_swift_main, symObjAddr: 0x9B54, symBinAddr: 0x1000E62B4, symSize: 0x18 }
- { offset: 0x1E8D97, size: 0x8, addend: 0x0, symName: '_$sSo18SFSpeechRecognizerC6localeABSg10Foundation6LocaleV_tcfcTO', symObjAddr: 0xA724, symBinAddr: 0x1000E6E48, symSize: 0x80 }
- { offset: 0x1E8DAB, size: 0x8, addend: 0x0, symName: '_$sSo6NSTaskCABycfcTO', symObjAddr: 0xA7A4, symBinAddr: 0x1000E6EC8, symSize: 0x18 }
- { offset: 0x1E8DBF, size: 0x8, addend: 0x0, symName: '_$sSo7NSErrorC6domain4code8userInfoABSS_SiSDySSypGSgtcfcTO', symObjAddr: 0xA7BC, symBinAddr: 0x1000E6EE0, symSize: 0xE8 }
- { offset: 0x1E8DDE, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsV8rawValueABSu_tcfC', symObjAddr: 0xA8A4, symBinAddr: 0x1000E6FC8, symSize: 0x4 }
- { offset: 0x1E8DF2, size: 0x8, addend: 0x0, symName: '_$sSo29SFSpeechURLRecognitionRequestC3urlAB10Foundation3URLV_tcfcTO', symObjAddr: 0xA8A8, symBinAddr: 0x1000E6FCC, symSize: 0x80 }
- { offset: 0x1E8E11, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACPxycfCTW', symObjAddr: 0xA970, symBinAddr: 0x1000E7094, symSize: 0x40 }
- { offset: 0x1E8E25, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP8containsySb7ElementQzFTW', symObjAddr: 0xA9B0, symBinAddr: 0x1000E70D4, symSize: 0x38 }
- { offset: 0x1E8E39, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP5unionyxxnFTW', symObjAddr: 0xA9E8, symBinAddr: 0x1000E710C, symSize: 0x3C }
- { offset: 0x1E8E4D, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP12intersectionyxxFTW', symObjAddr: 0xAA24, symBinAddr: 0x1000E7148, symSize: 0x3C }
- { offset: 0x1E8E61, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP19symmetricDifferenceyxxnFTW', symObjAddr: 0xAA60, symBinAddr: 0x1000E7184, symSize: 0x3C }
- { offset: 0x1E8E80, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP6insertySb8inserted_7ElementQz17memberAfterInserttAHnFTW', symObjAddr: 0xAA9C, symBinAddr: 0x1000E71C0, symSize: 0x4C }
- { offset: 0x1E8EAA, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP6removey7ElementQzSgAGFTW', symObjAddr: 0xACCC, symBinAddr: 0x1000E720C, symSize: 0x3C }
- { offset: 0x1E8EBE, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP6update4with7ElementQzSgAHn_tFTW', symObjAddr: 0xAD08, symBinAddr: 0x1000E7248, symSize: 0x3C }
- { offset: 0x1E8ED2, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP9formUnionyyxnFTW', symObjAddr: 0xAD44, symBinAddr: 0x1000E7284, symSize: 0x40 }
- { offset: 0x1E8EE6, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP16formIntersectionyyxFTW', symObjAddr: 0xAD84, symBinAddr: 0x1000E72C4, symSize: 0x40 }
- { offset: 0x1E8EFA, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP23formSymmetricDifferenceyyxnFTW', symObjAddr: 0xADC4, symBinAddr: 0x1000E7304, symSize: 0x40 }
- { offset: 0x1E8F0E, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP11subtractingyxxFTW', symObjAddr: 0xAE04, symBinAddr: 0x1000E7344, symSize: 0x14 }
- { offset: 0x1E8F22, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP8isSubset2ofSbx_tFTW', symObjAddr: 0xAE18, symBinAddr: 0x1000E7358, symSize: 0x18 }
- { offset: 0x1E8F36, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP10isDisjoint4withSbx_tFTW', symObjAddr: 0xAE30, symBinAddr: 0x1000E7370, symSize: 0x18 }
- { offset: 0x1E8F4A, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP10isSuperset2ofSbx_tFTW', symObjAddr: 0xAE48, symBinAddr: 0x1000E7388, symSize: 0x18 }
- { offset: 0x1E8F5E, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP7isEmptySbvgTW', symObjAddr: 0xAE60, symBinAddr: 0x1000E73A0, symSize: 0x18 }
- { offset: 0x1E8F72, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACPyxqd__ncSTRd__7ElementQyd__AERtzlufCTW', symObjAddr: 0xAE78, symBinAddr: 0x1000E73B8, symSize: 0x38 }
- { offset: 0x1E8F86, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs10SetAlgebraSCsACP8subtractyyxFTW', symObjAddr: 0xAEB0, symBinAddr: 0x1000E73F0, symSize: 0x14 }
- { offset: 0x1E8FA5, size: 0x8, addend: 0x0, symName: '_$sSo37SFSpeechRecognizerAuthorizationStatusVSYSCSY8rawValuexSg03RawF0Qz_tcfCTW', symObjAddr: 0xAEC4, symBinAddr: 0x1000E7404, symSize: 0x30 }
- { offset: 0x1E8FC4, size: 0x8, addend: 0x0, symName: '_$sSo37SFSpeechRecognizerAuthorizationStatusV8rawValueABSgSi_tcfC', symObjAddr: 0xAEF4, symBinAddr: 0x1000E7434, symSize: 0x24 }
- { offset: 0x1E8FF5, size: 0x8, addend: 0x0, symName: '_$sSo37SFSpeechRecognizerAuthorizationStatusVSYSCSY8rawValue03RawF0QzvgTW', symObjAddr: 0xAF18, symBinAddr: 0x1000E7458, symSize: 0x2C }
- { offset: 0x1E9009, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs25ExpressibleByArrayLiteralSCsACP05arrayF0x0eF7ElementQzd_tcfCTW', symObjAddr: 0xAF8C, symBinAddr: 0x1000E74CC, symSize: 0x3C }
- { offset: 0x1E901D, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVs9OptionSetSCsACP8rawValuex03RawF0Qz_tcfCTW', symObjAddr: 0xAFC8, symBinAddr: 0x1000E7508, symSize: 0x2C }
- { offset: 0x1E9031, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVSYSCSY8rawValuexSg03RawD0Qz_tcfCTW', symObjAddr: 0xAFF4, symBinAddr: 0x1000E7534, symSize: 0x30 }
- { offset: 0x1E9045, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsVSYSCSY8rawValue03RawD0QzvgTW', symObjAddr: 0xB024, symBinAddr: 0x1000E7564, symSize: 0x2C }
- { offset: 0x1E9059, size: 0x8, addend: 0x0, symName: '_$sSo20NSJSONWritingOptionsV8rawValueSuvg', symObjAddr: 0xB494, symBinAddr: 0x1000E7970, symSize: 0x4 }
...

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -26,5 +26,89 @@ let package = Package(
path: ".",
sources: ["asrx_swift.swift"]
),
.executableTarget(
name: "speaker_test",
dependencies: [],
path: ".",
sources: ["speaker_test.swift"]
),
.executableTarget(
name: "speaker_meta_test",
dependencies: [],
path: ".",
sources: ["speaker_meta_test.swift"]
),
.executableTarget(
name: "face_vision_test",
dependencies: [
.product(name: "ArgumentParser", package: "swift-argument-parser"),
],
path: ".",
sources: ["face_vision_test.swift"]
),
.executableTarget(
name: "vision_object_test",
dependencies: [
.product(name: "ArgumentParser", package: "swift-argument-parser"),
],
path: ".",
sources: ["vision_object_test.swift"]
),
.executableTarget(
name: "swift_cut_test",
dependencies: [
.product(name: "ArgumentParser", package: "swift-argument-parser"),
],
path: ".",
sources: ["swift_cut_test.swift"]
),
.executableTarget(
name: "vision_ocr_test",
dependencies: [
.product(name: "ArgumentParser", package: "swift-argument-parser"),
],
path: ".",
sources: ["vision_ocr_test.swift"]
),
.executableTarget(
name: "swift_ocr",
dependencies: [
.product(name: "ArgumentParser", package: "swift-argument-parser"),
],
path: ".",
sources: ["swift_ocr.swift"]
),
.executableTarget(
name: "face_compare_test",
dependencies: [
.product(name: "ArgumentParser", package: "swift-argument-parser"),
],
path: ".",
sources: ["face_compare_test.swift"]
),
.executableTarget(
name: "pose_benchmark",
dependencies: [
.product(name: "ArgumentParser", package: "swift-argument-parser"),
],
path: ".",
sources: ["pose_benchmark.swift"]
),
.executableTarget(
name: "swift_pose",
dependencies: [
.product(name: "ArgumentParser", package: "swift-argument-parser"),
],
path: ".",
sources: ["swift_pose.swift"]
),
.executableTarget(
name: "swift_face",
dependencies: [
.product(name: "ArgumentParser", package: "swift-argument-parser"),
],
path: ".",
sources: ["swift_face.swift"]
),
]
)

View File

@@ -11,6 +11,69 @@ import ArgumentParser
/// -
/// -
/// segments
/// segment < 0.5s >= 0.5s
func mergeWordSegments(_ segments: [[String: Any]]) -> [[String: Any]] {
let gapThreshold: TimeInterval = 0.5
var merged: [[String: Any]] = []
var current: [String: Any]? = nil
for seg in segments {
guard let start = seg["start"] as? TimeInterval,
let end = seg["end"] as? TimeInterval,
let text = seg["text"] as? String,
let conf = seg["confidence"] as? Float else {
continue
}
if var cur = current {
let curEnd = cur["end"] as? TimeInterval ?? 0
let gap = start - curEnd
if gap < gapThreshold {
//
let curText = cur["text"] as? String ?? ""
let curConf = cur["confidence"] as? Float ?? 0
let wordCount = cur["_wordCount"] as? Int ?? 0
cur["text"] = curText + (curText.hasSuffix(" ") ? "" : " ") + text
cur["end"] = end
// confidence
let totalWords = wordCount + 1
cur["confidence"] = (curConf * Float(wordCount) + conf) / Float(totalWords)
cur["_wordCount"] = totalWords
current = cur
} else {
//
cur.removeValue(forKey: "_wordCount")
merged.append(cur)
current = [
"start": start,
"end": end,
"text": text,
"confidence": conf,
"_wordCount": 1
]
}
} else {
current = [
"start": start,
"end": end,
"text": text,
"confidence": conf,
"_wordCount": 1
]
}
}
if let cur = current {
var finalCur = cur
finalCur.removeValue(forKey: "_wordCount")
merged.append(finalCur)
}
return merged
}
@main
struct ASRSwift: ParsableCommand {
@Argument(help: "音訊/影片檔案路徑")
@@ -137,6 +200,13 @@ struct ASRSwift: ParsableCommand {
allSegments.append(seg)
}
// segments
if !allSegments.isEmpty {
let beforeCount = allSegments.count
allSegments = mergeWordSegments(allSegments)
print("[ASR_Swift] Merged segments: \(beforeCount)\(allSegments.count)")
}
// segment
if allSegments.isEmpty {
let fullText = result.bestTranscription.formattedString
@@ -155,7 +225,10 @@ struct ASRSwift: ParsableCommand {
}
// RunLoop Speech Framework main runloop callback
RunLoop.current.run(until: Date(timeIntervalSinceNow: 120))
// 使 semaphore timeout
while semaphore.wait(timeout: .now()) == .timedOut {
RunLoop.current.run(mode: .default, before: Date(timeIntervalSinceNow: 0.1))
}
task.cancel()
// 3. JSON

View File

@@ -268,8 +268,21 @@ def process_yolo(
if publisher:
publisher.info("yolo", "YOLO_LOADING_MODEL")
# Load YOLOv8 model
model = YOLO("yolov8n.pt")
# Load YOLO model (prefer CoreML for ANE acceleration, fallback to PyTorch)
model_path_mlpackage = os.path.join(
os.path.dirname(os.path.abspath(__file__)), "..", "yolov5nu.mlpackage"
)
model_path_pt = os.path.join(
os.path.dirname(os.path.abspath(__file__)), "..", "yolov5nu.pt"
)
if os.path.exists(model_path_mlpackage):
model = YOLO(model_path_mlpackage)
print("YOLO: CoreML model loaded (4.5x ANE acceleration)")
elif os.path.exists(model_path_pt):
model = YOLO(model_path_pt)
print("YOLO: PyTorch model loaded")
else:
model = YOLO("yolov5nu.pt") # will auto-download
# Get video info
import cv2