diff --git a/scripts/artifacts/Ph100UFEDdevcievaluesplist.py b/scripts/artifacts/Ph100UFEDdevcievaluesplist.py
index 1b39dcdb..70a2fd34 100644
--- a/scripts/artifacts/Ph100UFEDdevcievaluesplist.py
+++ b/scripts/artifacts/Ph100UFEDdevcievaluesplist.py
@@ -1,88 +1,77 @@
-# Author: Scott Koenig https://theforensicscooter.com/
-# Version: 1.0
-#
-# Description:
-# Parses basic data from */device_values.plist which is a part of a UFED Advance Logical acquisitions
-# with non-encrypted backups. The parsing of this file will allow for iLEAPP to parse some basic information
-# such as */PhotoData/Photos.sqlite.
-# Based on research and published blogs written by Scott Koenig https://theforensicscooter.com/
-
+__artifacts_v2__ = {
+ 'Ph100UFEDdevicevaluesPlist': {
+ 'name': 'Ph100-UFED-device-values-Plist',
+ 'description': 'Parses basic data from */device_values.plist which is a part of a UFED Advance Logical'
+ ' acquisitions with non-encrypted backups. The parsing of this file will allow for iLEAPP'
+ ' to parse some basic information such as */PhotoData/Photos.sqlite.'
+ ' Based on research and published blogs written by Scott Koenig https://theforensicscooter.com/',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains device_values.plist',
+ 'category': 'Photos-Z-Settings',
+ 'notes': '',
+ 'paths': ('*/device_values.plist',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import plistlib
import biplist
import nska_deserialize as nd
+from scripts.builds_ids import OS_build
import scripts.artifacts.artGlobals
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, logdevinfo, tsv, is_platform_windows
-
+from scripts.ilapfuncs import artifact_processor, logfunc, device_info, get_file_path
-def get_ph100ufeddevicevaluesplist(files_found, report_folder, seeker, wrap_text, timezone_offset):
- versionnum = 0
+@artifact_processor
+def Ph100UFEDdevicevaluesPlist(files_found, report_folder, seeker, wrap_text, timezone_offset):
data_list = []
- file_found = str(files_found[0])
- with open(file_found, "rb") as fp:
+ source_path = str(files_found[0])
+
+ with open(source_path, "rb") as fp:
pl = plistlib.load(fp)
for key, val in pl.items():
- data_list.append((key, val))
+ data_list.append((key, str(val)))
+
if key == "ProductVersion":
- scripts.artifacts.artGlobals.versionf = val
+ scripts.artifacts.artGlobals.versionf = str(val)
logfunc(f"iOS version: {val}")
- logdevinfo(f"iOS version: {val}")
+ device_info("devicevaluesplist-ufedadvlog", "Product Version", str(val), source_path)
if key == "BuildVersion":
- logdevinfo(f"BuildVersion: {val}")
+ logfunc(f"Build Version: {val}")
+ device_info("devicevaluesplist-ufedadvlog", "Build Version", str(val), source_path)
if key == "ProductType":
- logfunc(f"ProductType: {val}")
- logdevinfo(f"ProductType: {val}")
+ logfunc(f"Product Type: {val}")
+ device_info("devicevaluesplist-ufedadvlog", "Product Type", str(val), source_path)
if key == "HardwareModel":
- logdevinfo(f"HardwareModel: {val}")
+ logfunc(f"Hardware Model: {val}")
+ device_info("devicevaluesplist-ufedadvlog", "Hardware Model", str(val), source_path)
if key == "InternationalMobileEquipmentIdentity":
- logdevinfo(f"InternationalMobileEquipmentIdentity: {val}")
+ logfunc(f"IMEI: {val}")
+ device_info("devicevaluesplist-ufedadvlog", "IMEI", str(val), source_path)
if key == "SerialNumber":
- logdevinfo(f"SerialNumber: {val}")
+ logfunc(f"Serial Number: {val}")
+ device_info("devicevaluesplist-ufedadvlog", "Serial Number", str(val), source_path)
if key == "DeviceName":
- logdevinfo(f"DeviceName: {val}")
+ logfunc(f"Device Name: {val}")
+ device_info("devicevaluesplist-ufedadvlog", "Device Name", str(val), source_path)
if key == "PasswordProtected":
- logdevinfo(f"PasswordProtected: {val}")
+ logfunc(f"Password Protected: {val}")
+ device_info("devicevaluesplist-ufedadvlog", "Password Protected", str(val), source_path)
if key == "TimeZone":
- logdevinfo(f"TimeZone: {val}")
-
- description = ('Parses basic data from */device_values.plist which is a part of a UFED Advance Logical'
- ' acquisitions with non-encrypted backups. The parsing of this file will allow for iLEAPP'
- ' to parse some basic information such as */PhotoData/Photos.sqlite.'
- ' Based on research and published blogs written by Scott Koenig https://theforensicscooter.com/')
- report = ArtifactHtmlReport('Ph100-UFED-device-values-Plist')
- report.start_artifact_report(report_folder, 'Ph100-UFED-device-values-Plist', description)
- report.add_script()
- data_headers = ('Key', 'Values')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
+ logfunc(f"TimeZone: {val}")
+ device_info("devicevaluesplist-ufedadvlog", "TimeZone", str(val), source_path)
- tsvname = 'Ph100-UFED-device-values-Plist'
- tsv(report_folder, data_headers, data_list, tsvname)
+ else:
+ data_list.append((key, str(val)))
-
-__artifacts_v2__ = {
- 'Ph100-UFED-device-values-Plist': {
- 'name': 'UFED Adv Log Acquisition Ph100 UFED Device Values Plist',
- 'description': 'Parses basic data from */device_values.plist which is a part of a UFED Advance Logical'
- ' acquisitions with non-encrypted backups. The parsing of this file will allow for iLEAPP'
- ' to parse some basic information such as */PhotoData/Photos.sqlite.'
- ' Based on research and published blogs written by Scott Koenig https://theforensicscooter.com/',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '1.0',
- 'date': '2024-06-10',
- 'requirements': 'Acquisition that contains device_values.plist',
- 'category': 'Photos-Z-Settings',
- 'notes': '',
- 'paths': '*/device_values.plist',
- 'function': 'get_ph100ufeddevicevaluesplist'
- }
-}
+ data_headers = ('Property','Property Value')
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph11KwrdsCapsTitlesDescripsBasicAssetData.py b/scripts/artifacts/Ph11KwrdsCapsTitlesDescripsBasicAssetData.py
index 7266c4f6..435166e1 100644
--- a/scripts/artifacts/Ph11KwrdsCapsTitlesDescripsBasicAssetData.py
+++ b/scripts/artifacts/Ph11KwrdsCapsTitlesDescripsBasicAssetData.py
@@ -1,45 +1,55 @@
-# Photos.sqlite
-# Author: Scott Koenig
-# Version: 1.0
-#
-# Description:
-# Parses basic asset record data from */PhotoData/Photos.sqlite for assets that have Keywords, Captions, Titles,
-# Descriptions, Captions and Likes. (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0)
-# or (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0)
-# or (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0)
-# or (zCldSharedCommentLiked.ZISLIKE = 1)
-# I recommend opening the TSV generated report with Zimmerman's Tools
-# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results.
-# This parser is based on research and SQLite Queries written by Scott Koenig
-# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347
-#
+__artifacts_v2__ = {
+ 'Ph11KwrdsCapsTitlesDescripsLikesBasicAsstDataPhDaPsql': {
+ 'name': 'Ph11-KwrdsCapsTitlesDescripsLikesBasicAsstData-PhDaPsql',
+ 'description': 'Parses basic asset record data from iOS18 *PhotoData-Photos.sqlite for assets that have'
+ ' Keywords, Captions, Titles, Descriptions, Captions and Likes.'
+ ' (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or'
+ ' (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or'
+ ' (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0) or'
+ ' (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or'
+ ' (zCldSharedCommentLiked.ZISLIKE = 1). I recommend opening the TSV generated report'
+ ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer to view,'
+ ' search and filter the results. This parser is based on research and SQLite Queries'
+ ' written by Scott Koenig https://theforensicscooter.com/',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-B-Interaction_Artifacts',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
+@artifact_processor
+def Ph11KwrdsCapsTitlesDescripsLikesBasicAsstDataPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
-def get_ph11kwrdscapstitlesdescripsbasicassetdataphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
-
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
- if version.parse(iosversion) <= version.parse("10.3.4"):
- logfunc("Unsupported version for PhotoData-Photos.sqlite basic asset data from iOS " + iosversion)
+ if version.parse(iosversion) <= version.parse("13.7"):
+ logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -180,127 +190,102 @@ def get_ph11kwrdscapstitlesdescripsbasicassetdataphdapsql(files_found, report_fo
LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedCommentLiked ON zAsset.Z_PK = zCldSharedCommentLiked.ZLIKEDASSET
WHERE (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0) or (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or (zCldSharedCommentLiked.ZISLIKE = 1)
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70]))
-
- counter += 1
+ '''
- description = ('Parses basic asset record data from iOS14 *PhotoData-Photos.sqlite for assets that have'
- ' Keywords, Captions, Titles, Descriptions, Captions and Likes.'
- ' (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or'
- ' (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or'
- ' (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0) or'
- ' (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or'
- ' (zCldSharedCommentLiked.ZISLIKE = 1). I recommend opening the TSV generated report'
- ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer to view,'
- ' search and filter the results. This parser is based on research and SQLite Queries'
- ' written by Scott Koenig https://theforensicscooter.com/')
- report = ArtifactHtmlReport('Ph11 Keywords Captions Titles Descriptions Likes and Basic Asset Datas')
- report.start_artifact_report(report_folder, 'Ph11-KwrdsCapsTitlesDescripsLikesBasicAsstData-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-EXIF-String-5',
- 'zAsset-Modification Date-6',
- 'zAsset-Last Shared Date-7',
- 'zAsset-Trashed Date-8',
- 'zAsset-Directory-Path-9',
- 'zAsset-Filename-10',
- 'zAddAssetAttr- Original Filename-11',
- 'zCldMast- Original Filename-12',
- 'zAddAssetAttr- Creator Bundle ID-13',
- 'zAsset-Saved Asset Type-14',
- 'zAsset-Visibility State-15',
- 'zAssetDes-Long Description-16',
- 'zAddAssetAttr-Title-Comments via Cloud Website-17',
- 'zAddAssetAttr-Accessibility Description-18',
- 'zKeywrd-Shortcut-19',
- 'zKeywrd-Title-20',
- 'zCldSharedComment-Type-21',
- 'zCldSharedComment-Comment Text-22',
- 'zCldFeedEnt-Entry Date-23',
- 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-24',
- 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-25',
- 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-26',
- 'zCldFeedEnt-Entry Priority Number-27',
- 'zCldFeedEnt-Entry Type Number-28',
- 'zCldSharedComment-Cloud GUID-4TableStart-29',
- 'zCldSharedComment-Date-30',
- 'zCldSharedComment-Comment Client Date-31',
- 'zAsset-Cloud Last Viewed Comment Date-32',
- 'zCldSharedComment-Commenter Hashed Person ID-33',
- 'zCldSharedComment-Batch Comment-34',
- 'zCldSharedComment-Is a Caption-35',
- 'zAsset-Cloud Has Comments by Me-36',
- 'zCldSharedComment-Is My Comment-37',
- 'zCldSharedComment-Is Deletable-38',
- 'zAsset-Cloud Has Comments Conversation-39',
- 'zAsset-Cloud Has Unseen Comments-40',
- 'zCldSharedComment-Liked-41',
- 'zAddAssetAttr-Asset Description-42',
- 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-43',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-44',
- 'zCldFeedEnt-zPK= zCldShared keys-45',
- 'zCldFeedEnt-zENT-46',
- 'zCldFeedEnt-zOPT-47',
- 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-48',
- 'zCldFeedEnt-Entry Invitation Record GUID-49',
- 'zCldFeedEnt-Entry Cloud Asset GUID-50',
- 'zCldSharedComment-zPK-51',
- 'zCldSharedComment-zENT-52',
- 'zCldSharedComment-zOPT-53',
- 'zCldSharedComment-Commented Asset Key= zAsset-zPK-54',
- 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-55',
- 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-56',
- 'zCldSharedComment-Liked Asset Key= zAsset-zPK-57',
- 'zCldSharedComment-CldFeedLikeCommentEntry Key-58',
- 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-59',
- 'zCldSharedComment-Cloud GUID-60',
- 'zKeywrd-zPK-61',
- 'z1KeyWrds-36Keywords = zKeywrd-zPK-62',
- 'zKeywrd-zENT-63',
- 'zKeywrd-zOPT-64',
- 'zKeywrd-UUID-65',
- 'zAsset-zPK-66',
- 'z1KeyWrds-1AssetAttributes = zAddAssetAttr-zPK-67',
- 'zAddAssetAttr-zPK-68',
- 'zAsset-UUID = store.cloudphotodb-69',
- 'zAddAssetAttr-Master Fingerprint-70')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph11-KwrdsCapsTitlesDescripsLikesBasicAsstData-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70]))
- else:
- logfunc('No data available for iOS 14 Photos.sqlite Keywords Captions Titles Descriptions Basic Asst Data')
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-EXIF-String-5',
+ ('zAsset-Modification Date-6', 'datetime'),
+ ('zAsset-Last Shared Date-7', 'datetime'),
+ ('zAsset-Trashed Date-8', 'datetime'),
+ 'zAsset-Directory-Path-9',
+ 'zAsset-Filename-10',
+ 'zAddAssetAttr- Original Filename-11',
+ 'zCldMast- Original Filename-12',
+ 'zAddAssetAttr- Creator Bundle ID-13',
+ 'zAsset-Saved Asset Type-14',
+ 'zAsset-Visibility State-15',
+ 'zAssetDes-Long Description-16',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-17',
+ 'zAddAssetAttr-Accessibility Description-18',
+ 'zKeywrd-Shortcut-19',
+ 'zKeywrd-Title-20',
+ 'zCldSharedComment-Type-21',
+ 'zCldSharedComment-Comment Text-22',
+ ('zCldFeedEnt-Entry Date-23', 'datetime'),
+ 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-24',
+ 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-25',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-26',
+ 'zCldFeedEnt-Entry Priority Number-27',
+ 'zCldFeedEnt-Entry Type Number-28',
+ 'zCldSharedComment-Cloud GUID-4TableStart-29',
+ ('zCldSharedComment-Date-30', 'datetime'),
+ ('zCldSharedComment-Comment Client Date-31', 'datetime'),
+ ('zAsset-Cloud Last Viewed Comment Date-32', 'datetime'),
+ 'zCldSharedComment-Commenter Hashed Person ID-33',
+ 'zCldSharedComment-Batch Comment-34',
+ 'zCldSharedComment-Is a Caption-35',
+ 'zAsset-Cloud Has Comments by Me-36',
+ 'zCldSharedComment-Is My Comment-37',
+ 'zCldSharedComment-Is Deletable-38',
+ 'zAsset-Cloud Has Comments Conversation-39',
+ 'zAsset-Cloud Has Unseen Comments-40',
+ 'zCldSharedComment-Liked-41',
+ 'zAddAssetAttr-Asset Description-42',
+ 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-43',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-44',
+ 'zCldFeedEnt-zPK= zCldShared keys-45',
+ 'zCldFeedEnt-zENT-46',
+ 'zCldFeedEnt-zOPT-47',
+ 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-48',
+ 'zCldFeedEnt-Entry Invitation Record GUID-49',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-50',
+ 'zCldSharedComment-zPK-51',
+ 'zCldSharedComment-zENT-52',
+ 'zCldSharedComment-zOPT-53',
+ 'zCldSharedComment-Commented Asset Key= zAsset-zPK-54',
+ 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-55',
+ 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-56',
+ 'zCldSharedComment-Liked Asset Key= zAsset-zPK-57',
+ 'zCldSharedComment-CldFeedLikeCommentEntry Key-58',
+ 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-59',
+ 'zCldSharedComment-Cloud GUID-60',
+ 'zKeywrd-zPK-61',
+ 'z1KeyWrds-36Keywords = zKeywrd-zPK-62',
+ 'zKeywrd-zENT-63',
+ 'zKeywrd-zOPT-64',
+ 'zKeywrd-UUID-65',
+ 'zAsset-zPK-66',
+ 'z1KeyWrds-1AssetAttributes = zAddAssetAttr-zPK-67',
+ 'zAddAssetAttr-zPK-68',
+ 'zAsset-UUID = store.cloudphotodb-69',
+ 'zAddAssetAttr-Master Fingerprint-70')
+ data_list = get_sqlite_db_records(source_path, query)
- db.close()
- return
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -465,133 +450,108 @@ def get_ph11kwrdscapstitlesdescripsbasicassetdataphdapsql(files_found, report_fo
LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedCommentLiked ON zAsset.Z_PK = zCldSharedCommentLiked.ZLIKEDASSET
WHERE (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0) or (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or (zCldSharedCommentLiked.ZISLIKE = 1)
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75]))
+ '''
- counter += 1
-
- description = ('Parses basic asset record data from iOS15 *PhotoData-Photos.sqlite for assets that have'
- ' Keywords, Captions, Titles, Descriptions, Captions and Likes.'
- ' (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or'
- ' (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or'
- ' (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0) or'
- ' (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or'
- ' (zCldSharedCommentLiked.ZISLIKE = 1). I recommend opening the TSV generated report'
- ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer to view,'
- ' search and filter the results. This parser is based on research and SQLite Queries'
- ' written by Scott Koenig https://theforensicscooter.com/')
- report = ArtifactHtmlReport('Ph11 Keywords Captions Titles Descriptions Likes and Basic Asset Data')
- report.start_artifact_report(report_folder, 'Ph11-KwrdsCapsTitlesDescripsLikesBasicAsstData-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-EXIF-String-5',
- 'zAsset-Modification Date-6',
- 'zAsset-Last Shared Date-7',
- 'zAsset-Trashed Date-8',
- 'zAsset-Directory-Path-9',
- 'zAsset-Filename-10',
- 'zAddAssetAttr- Original Filename-11',
- 'zCldMast- Original Filename-12',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-13',
- 'zAddAssetAttr- Imported by Bundle Identifier-14',
- 'zAddAssetAttr- Imported By Display Name-15',
- 'zAsset-Saved Asset Type-16',
- 'zAsset-Syndication State-17',
- 'zAsset-Bundle Scope-18',
- 'zAddAssetAttr-Share Type-19',
- 'zAsset-Visibility State-20',
- 'zAssetDes-Long Description-21',
- 'zAddAssetAttr-Title-Comments via Cloud Website-22',
- 'zAddAssetAttr-Accessibility Description-23',
- 'zKeywrd-Shortcut-24',
- 'zKeywrd-Title-25',
- 'zCldSharedComment-Type-26',
- 'zCldSharedComment-Comment Text-27',
- 'zCldFeedEnt-Entry Date-28',
- 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-29',
- 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-30',
- 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-31',
- 'zCldFeedEnt-Entry Priority Number-32',
- 'zCldFeedEnt-Entry Type Number-33',
- 'zCldSharedComment-Cloud GUID-4TableStart-34',
- 'zCldSharedComment-Date-35',
- 'zCldSharedComment-Comment Client Date-36',
- 'zAsset-Cloud Last Viewed Comment Date-37',
- 'zCldSharedComment-Commenter Hashed Person ID-38',
- 'zCldSharedComment-Batch Comment-39',
- 'zCldSharedComment-Is a Caption-40',
- 'zAsset-Cloud Has Comments by Me-41',
- 'zCldSharedComment-Is My Comment-42',
- 'zCldSharedComment-Is Deletable-43',
- 'zAsset-Cloud Has Comments Conversation-44',
- 'zAsset-Cloud Has Unseen Comments-45',
- 'zCldSharedComment-Liked-46',
- 'zAddAssetAttr-Asset Description-47',
- 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-48',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-49',
- 'zCldFeedEnt-zPK= zCldShared keys-50',
- 'zCldFeedEnt-zENT-51',
- 'zCldFeedEnt-zOPT-52',
- 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-53',
- 'zCldFeedEnt-Entry Invitation Record GUID-54',
- 'zCldFeedEnt-Entry Cloud Asset GUID-55',
- 'zCldSharedComment-zPK-56',
- 'zCldSharedComment-zENT-57',
- 'zCldSharedComment-zOPT-58',
- 'zCldSharedComment-Commented Asset Key= zAsset-zPK-59',
- 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-60',
- 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-61',
- 'zCldSharedComment-Liked Asset Key= zAsset-zPK-62',
- 'zCldSharedComment-CldFeedLikeCommentEntry Key-63',
- 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-64',
- 'zCldSharedComment-Cloud GUID-65',
- 'zKeywrd-zPK-66',
- 'z1KeyWrds-38Keywords = zKeywrd-zPK-67',
- 'zKeywrd-zENT-68',
- 'zKeywrd-zOPT-69',
- 'zKeywrd-UUID-70',
- 'z1KeyWrds-1AssetAttributes = zAddAssetAttr-zPK-71',
- 'zAsset-zPK-72',
- 'zAddAssetAttr-zPK-73',
- 'zAsset-UUID = store.cloudphotodb-74',
- 'zAddAssetAttr-Master Fingerprint-75')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph11-KwrdsCapsTitlesDescripsLikesBasicAsstData-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75]))
- else:
- logfunc('No data available for iOS15 Photos.sqlite Keywords Captions Titles Descriptions Basic Asst Data')
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-EXIF-String-5',
+ ('zAsset-Modification Date-6', 'datetime'),
+ ('zAsset-Last Shared Date-7', 'datetime'),
+ ('zAsset-Trashed Date-8', 'datetime'),
+ 'zAsset-Directory-Path-9',
+ 'zAsset-Filename-10',
+ 'zAddAssetAttr- Original Filename-11',
+ 'zCldMast- Original Filename-12',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-13',
+ 'zAddAssetAttr- Imported by Bundle Identifier-14',
+ 'zAddAssetAttr- Imported By Display Name-15',
+ 'zAsset-Saved Asset Type-16',
+ 'zAsset-Syndication State-17',
+ 'zAsset-Bundle Scope-18',
+ 'zAddAssetAttr-Share Type-19',
+ 'zAsset-Visibility State-20',
+ 'zAssetDes-Long Description-21',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-22',
+ 'zAddAssetAttr-Accessibility Description-23',
+ 'zKeywrd-Shortcut-24',
+ 'zKeywrd-Title-25',
+ 'zCldSharedComment-Type-26',
+ 'zCldSharedComment-Comment Text-27',
+ ('zCldFeedEnt-Entry Date-28', 'datetime'),
+ 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-29',
+ 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-30',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-31',
+ 'zCldFeedEnt-Entry Priority Number-32',
+ 'zCldFeedEnt-Entry Type Number-33',
+ 'zCldSharedComment-Cloud GUID-4TableStart-34',
+ ('zCldSharedComment-Date-35', 'datetime'),
+ ('zCldSharedComment-Comment Client Date-36', 'datetime'),
+ ('zAsset-Cloud Last Viewed Comment Date-37', 'datetime'),
+ 'zCldSharedComment-Commenter Hashed Person ID-38',
+ 'zCldSharedComment-Batch Comment-39',
+ 'zCldSharedComment-Is a Caption-40',
+ 'zAsset-Cloud Has Comments by Me-41',
+ 'zCldSharedComment-Is My Comment-42',
+ 'zCldSharedComment-Is Deletable-43',
+ 'zAsset-Cloud Has Comments Conversation-44',
+ 'zAsset-Cloud Has Unseen Comments-45',
+ 'zCldSharedComment-Liked-46',
+ 'zAddAssetAttr-Asset Description-47',
+ 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-48',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-49',
+ 'zCldFeedEnt-zPK= zCldShared keys-50',
+ 'zCldFeedEnt-zENT-51',
+ 'zCldFeedEnt-zOPT-52',
+ 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-53',
+ 'zCldFeedEnt-Entry Invitation Record GUID-54',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-55',
+ 'zCldSharedComment-zPK-56',
+ 'zCldSharedComment-zENT-57',
+ 'zCldSharedComment-zOPT-58',
+ 'zCldSharedComment-Commented Asset Key= zAsset-zPK-59',
+ 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-60',
+ 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-61',
+ 'zCldSharedComment-Liked Asset Key= zAsset-zPK-62',
+ 'zCldSharedComment-CldFeedLikeCommentEntry Key-63',
+ 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-64',
+ 'zCldSharedComment-Cloud GUID-65',
+ 'zKeywrd-zPK-66',
+ 'z1KeyWrds-38Keywords = zKeywrd-zPK-67',
+ 'zKeywrd-zENT-68',
+ 'zKeywrd-zOPT-69',
+ 'zKeywrd-UUID-70',
+ 'z1KeyWrds-1AssetAttributes = zAddAssetAttr-zPK-71',
+ 'zAsset-zPK-72',
+ 'zAddAssetAttr-zPK-73',
+ 'zAsset-UUID = store.cloudphotodb-74',
+ 'zAddAssetAttr-Master Fingerprint-75')
+ data_list = get_sqlite_db_records(source_path, query)
- db.close()
- return
+ return data_headers, data_list, source_path
- elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17.6")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -762,135 +722,110 @@ def get_ph11kwrdscapstitlesdescripsbasicassetdataphdapsql(files_found, report_fo
LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedCommentLiked ON zAsset.Z_PK = zCldSharedCommentLiked.ZLIKEDASSET
WHERE (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0) or (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or (zCldSharedCommentLiked.ZISLIKE = 1)
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77]))
+ '''
- counter += 1
-
- description = ('Parses basic asset record data from iOS16-17 *PhotoData-Photos.sqlite for assets that have'
- ' Keywords, Captions, Titles, Descriptions, Captions and Likes.'
- ' (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or'
- ' (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or'
- ' (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0) or'
- ' (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or'
- ' (zCldSharedCommentLiked.ZISLIKE = 1). I recommend opening the TSV generated report'
- ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer to view,'
- ' search and filter the results. This parser is based on research and SQLite Queries'
- ' written by Scott Koenig https://theforensicscooter.com/')
- report = ArtifactHtmlReport('Ph11 Keywords Captions Titles Descriptions Likes and Basic Asset Data')
- report.start_artifact_report(report_folder, 'Ph11-KwrdsCapsTitlesDescripsLikesBasicAsstData-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-EXIF-String-5',
- 'zAsset-Modification Date-6',
- 'zAsset-Last Shared Date-7',
- 'zAsset-Trashed Date-8',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-9',
- 'zAsset-Directory-Path-10',
- 'zAsset-Filename-11',
- 'zAddAssetAttr- Original Filename-12',
- 'zCldMast- Original Filename-13',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-14',
- 'zAddAssetAttr- Imported by Bundle Identifier-15',
- 'zAddAssetAttr- Imported By Display Name-16',
- 'zAsset-Saved Asset Type-17',
- 'zAsset-Syndication State-18',
- 'zAsset-Bundle Scope-19',
- 'zAddAssetAttr-Share Type-20',
- 'zAsset-Active Library Scope Participation State-21',
- 'zAsset-Visibility State-22',
- 'zAssetDes-Long Description-23',
- 'zAddAssetAttr-Title-Comments via Cloud Website-24',
- 'zAddAssetAttr-Accessibility Description-25',
- 'zKeywrd-Shortcut-26',
- 'zKeywrd-Title-27',
- 'zCldSharedComment-Type-28',
- 'zCldSharedComment-Comment Text-29',
- 'zCldFeedEnt-Entry Date-30',
- 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-31',
- 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-32',
- 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-33',
- 'zCldFeedEnt-Entry Priority Number-34',
- 'zCldFeedEnt-Entry Type Number-35',
- 'zCldSharedComment-Cloud GUID-4TableStart-36',
- 'zCldSharedComment-Date-37',
- 'zCldSharedComment-Comment Client Date-38',
- 'zAsset-Cloud Last Viewed Comment Date-39',
- 'zCldSharedComment-Commenter Hashed Person ID-40',
- 'zCldSharedComment-Batch Comment-41',
- 'zCldSharedComment-Is a Caption-42',
- 'zAsset-Cloud Has Comments by Me-43',
- 'zCldSharedComment-Is My Comment-44',
- 'zCldSharedComment-Is Deletable-45',
- 'zAsset-Cloud Has Comments Conversation-46',
- 'zAsset-Cloud Has Unseen Comments-47',
- 'zCldSharedComment-Liked-48',
- 'zAddAssetAttr-Asset Description-49',
- 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-50',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-51',
- 'zCldFeedEnt-zPK= zCldShared keys-52',
- 'zCldFeedEnt-zENT-53',
- 'zCldFeedEnt-zOPT-54',
- 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-55',
- 'zCldFeedEnt-Entry Invitation Record GUID-56',
- 'zCldFeedEnt-Entry Cloud Asset GUID-57',
- 'zCldSharedComment-zPK-58',
- 'zCldSharedComment-zENT-59',
- 'zCldSharedComment-zOPT-60',
- 'zCldSharedComment-Commented Asset Key= zAsset-zPK-61',
- 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-62',
- 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-63',
- 'zCldSharedComment-Liked Asset Key= zAsset-zPK-64',
- 'zCldSharedComment-CldFeedLikeCommentEntry Key-65',
- 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-66',
- 'zCldSharedComment-Cloud GUID-67',
- 'zKeywrd-zPK-68',
- 'z1KeyWrds-40Keywords = zKeywrd-zPK-69',
- 'zKeywrd-zENT-70',
- 'zKeywrd-zOPT-71',
- 'zKeywrd-UUID-72',
- 'z1KeyWrds-1AssetAttributes = zAddAssetAttr-zPK-73',
- 'zAsset-zPK-74',
- 'zAddAssetAttr-zPK-75',
- 'zAsset-UUID = store.cloudphotodb-76',
- 'zAddAssetAttr-Master Fingerprint-77')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph11-KwrdsCapsTitlesDescripsLikesBasicAsstData-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- else:
- logfunc('No data available for iOS16-17 Photos.sqlite Keywords Captions Titles Descriptions Basic Asst Data')
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77]))
- db.close()
- return
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-EXIF-String-5',
+ ('zAsset-Modification Date-6', 'datetime'),
+ ('zAsset-Last Shared Date-7', 'datetime'),
+ ('zAsset-Trashed Date-8', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-9',
+ 'zAsset-Directory-Path-10',
+ 'zAsset-Filename-11',
+ 'zAddAssetAttr- Original Filename-12',
+ 'zCldMast- Original Filename-13',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-14',
+ 'zAddAssetAttr- Imported by Bundle Identifier-15',
+ 'zAddAssetAttr- Imported By Display Name-16',
+ 'zAsset-Saved Asset Type-17',
+ 'zAsset-Syndication State-18',
+ 'zAsset-Bundle Scope-19',
+ 'zAddAssetAttr-Share Type-20',
+ 'zAsset-Active Library Scope Participation State-21',
+ 'zAsset-Visibility State-22',
+ 'zAssetDes-Long Description-23',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-24',
+ 'zAddAssetAttr-Accessibility Description-25',
+ 'zKeywrd-Shortcut-26',
+ 'zKeywrd-Title-27',
+ 'zCldSharedComment-Type-28',
+ 'zCldSharedComment-Comment Text-29',
+ 'zCldFeedEnt-Entry Date-30',
+ 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-31',
+ 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-32',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-33',
+ 'zCldFeedEnt-Entry Priority Number-34',
+ 'zCldFeedEnt-Entry Type Number-35',
+ 'zCldSharedComment-Cloud GUID-4TableStart-36',
+ ('zCldSharedComment-Date-37', 'datetime'),
+ ('zCldSharedComment-Comment Client Date-38', 'datetime'),
+ ('zAsset-Cloud Last Viewed Comment Date-39', 'datetime'),
+ 'zCldSharedComment-Commenter Hashed Person ID-40',
+ 'zCldSharedComment-Batch Comment-41',
+ 'zCldSharedComment-Is a Caption-42',
+ 'zAsset-Cloud Has Comments by Me-43',
+ 'zCldSharedComment-Is My Comment-44',
+ 'zCldSharedComment-Is Deletable-45',
+ 'zAsset-Cloud Has Comments Conversation-46',
+ 'zAsset-Cloud Has Unseen Comments-47',
+ 'zCldSharedComment-Liked-48',
+ 'zAddAssetAttr-Asset Description-49',
+ 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-50',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-51',
+ 'zCldFeedEnt-zPK= zCldShared keys-52',
+ 'zCldFeedEnt-zENT-53',
+ 'zCldFeedEnt-zOPT-54',
+ 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-55',
+ 'zCldFeedEnt-Entry Invitation Record GUID-56',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-57',
+ 'zCldSharedComment-zPK-58',
+ 'zCldSharedComment-zENT-59',
+ 'zCldSharedComment-zOPT-60',
+ 'zCldSharedComment-Commented Asset Key= zAsset-zPK-61',
+ 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-62',
+ 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-63',
+ 'zCldSharedComment-Liked Asset Key= zAsset-zPK-64',
+ 'zCldSharedComment-CldFeedLikeCommentEntry Key-65',
+ 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-66',
+ 'zCldSharedComment-Cloud GUID-67',
+ 'zKeywrd-zPK-68',
+ 'z1KeyWrds-40Keywords = zKeywrd-zPK-69',
+ 'zKeywrd-zENT-70',
+ 'zKeywrd-zOPT-71',
+ 'zKeywrd-UUID-72',
+ 'z1KeyWrds-1AssetAttributes = zAddAssetAttr-zPK-73',
+ 'zAsset-zPK-74',
+ 'zAddAssetAttr-zPK-75',
+ 'zAsset-UUID = store.cloudphotodb-76',
+ 'zAddAssetAttr-Master Fingerprint-77')
+ data_list = get_sqlite_db_records(source_path, query)
- elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ return data_headers, data_list, source_path
+
+ elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -909,11 +844,6 @@ def get_ph11kwrdscapstitlesdescripsbasicassetdataphdapsql(files_found, report_fo
zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files',
zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr- Imported by Bundle Identifier',
zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr- Imported By Display Name',
- CASE zAsset.ZISRECENTLYSAVED
- WHEN 0 THEN '0-Not_Recently_Saved iOS18_Still_Testing-0'
- WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || ''
- END AS 'zAsset-Is_Recently_Saved-iOS18',
CASE zAsset.ZSAVEDASSETTYPE
WHEN 0 THEN '0-Saved-via-other-source-0'
WHEN 1 THEN '1-StillTesting-1'
@@ -958,18 +888,14 @@ def get_ph11kwrdscapstitlesdescripsbasicassetdataphdapsql(files_found, report_fo
WHEN 0 THEN '0-Visible-PL-CameraRoll-0'
WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2'
ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || ''
- END AS 'zAsset-Visibility State',
+ END AS 'zAsset-Visibility State',
zAssetDes.ZLONGDESCRIPTION AS 'zAssetDes-Long Description',
zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website',
zAddAssetAttr.ZACCESSIBILITYDESCRIPTION AS 'zAddAssetAttr-Accessibility Description',
zKeywrd.ZSHORTCUT AS 'zKeywrd-Shortcut',
zKeywrd.ZTITLE AS 'zKeywrd-Title',
- zGeneratedAsstDescrip.ZANALYSISVERSION AS 'zGeneratedAsstDescrip-Analysis_Version',
- zGeneratedAsstDescrip.ZANALYSISSOURCETYPE AS 'zGeneratedAsstDescrip-Analysis_Source_Type',
- DateTime(zGeneratedAsstDescrip.ZANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zGeneratedAsstDescrip-Analysis_Timestamp',
- zGeneratedAsstDescrip.ZDESCRIPTIONTEXT AS 'zGeneratedAsstDescrip-Description-Text',
zCldSharedComment.ZCOMMENTTYPE AS 'zCldSharedComment-Type',
- zCldSharedComment.ZCOMMENTTEXT AS 'zCldSharedComment-Comment Text',
+ zCldSharedComment.ZCOMMENTTEXT AS 'zCldSharedComment-Comment Text',
DateTime(zCldFeedEnt.ZENTRYDATE + 978307200, 'UNIXEPOCH') AS 'zCldFeedEnt-Entry Date',
zCldFeedEnt.ZENTRYALBUMGUID AS 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart',
zCldFeedEnt.ZENTRYINVITATIONRECORDGUID AS 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart',
@@ -1050,42 +976,31 @@ def get_ph11kwrdscapstitlesdescripsbasicassetdataphdapsql(files_found, report_fo
zCldSharedCommentLiked.Z_FOK_CLOUDFEEDLIKECOMMENTENTRY AS 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key',
zCldSharedComment.ZCLOUDGUID AS 'zCldSharedComment-Cloud GUID',
zKeywrd.Z_PK AS 'zKeywrd-zPK',
- z1KeyWrds.Z_48KEYWORDS AS 'z1KeyWrds-48Keywords = zKeywrd-zPK',
+ z1KeyWrds.Z_41KEYWORDS AS 'z1KeyWrds-41Keywords = zKeywrd-zPK',
zKeywrd.Z_ENT AS 'zKeywrd-zENT',
zKeywrd.Z_OPT AS 'zKeywrd-zOPT',
zKeywrd.ZUUID AS 'zKeywrd-UUID',
z1KeyWrds.Z_1ASSETATTRIBUTES AS 'z1KeyWrds-1AssetAttributes = zAddAssetAttr-zPK',
- zGeneratedAsstDescrip.ZASSET AS 'zGeneratedAsstDescrip-zAsset= zAsset-zPK',
- zAsset.ZGENERATEDASSETDESCRIPTION AS 'zAsset-Generated Asset Description= zGeneratedAsstDescrip-zPK',
- zGeneratedAsstDescrip.Z_PK AS 'zGeneratedAsstDescrip-zPK = zAsset-Generated Asset Description',
- zGeneratedAsstDescrip.Z_ENT AS 'zGeneratedAsstDescrip-zENT',
- zGeneratedAsstDescrip.Z_OPT AS 'zGeneratedAsstDescrip-zOPT',
zAsset.Z_PK AS 'zAsset-zPK',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18'
+ zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint'
FROM ZASSET zAsset
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
LEFT JOIN Z_1KEYWORDS z1KeyWrds ON zAddAssetAttr.Z_PK = z1KeyWrds.Z_1ASSETATTRIBUTES
- LEFT JOIN ZKEYWORD zKeywrd ON z1KeyWrds.Z_48KEYWORDS = zKeywrd.Z_PK
+ LEFT JOIN ZKEYWORD zKeywrd ON z1KeyWrds.Z_41KEYWORDS = zKeywrd.Z_PK
LEFT JOIN ZASSETDESCRIPTION zAssetDes ON zAssetDes.Z_PK = zAddAssetAttr.ZASSETDESCRIPTION
LEFT JOIN ZCLOUDFEEDENTRY zCldFeedEnt ON zAsset.ZCLOUDFEEDASSETSENTRY = zCldFeedEnt.Z_PK
LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedComment ON zAsset.Z_PK = zCldSharedComment.ZCOMMENTEDASSET
LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedCommentLiked ON zAsset.Z_PK = zCldSharedCommentLiked.ZLIKEDASSET
- LEFT JOIN ZGENERATEDASSETDESCRIPTION zGeneratedAsstDescrip ON zAsset.ZGENERATEDASSETDESCRIPTION = zGeneratedAsstDescrip.Z_PK
- WHERE (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0) or (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or (zCldSharedCommentLiked.ZISLIKE = 1) or (zGeneratedAsstDescrip.ZDESCRIPTIONTEXT > 0)
- ORDER BY zAsset.ZDATECREATED
- """)
+ WHERE (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0) or (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or (zCldSharedCommentLiked.ZISLIKE = 1)
+ ORDER BY zAsset.ZDATECREATED
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
@@ -1093,146 +1008,368 @@ def get_ph11kwrdscapstitlesdescripsbasicassetdataphdapsql(files_found, report_fo
row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88]))
+ row[73], row[74], row[75], row[76], row[77]))
- counter += 1
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-EXIF-String-5',
+ ('zAsset-Modification Date-6', 'datetime'),
+ ('zAsset-Last Shared Date-7', 'datetime'),
+ ('zAsset-Trashed Date-8', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-9',
+ 'zAsset-Directory-Path-10',
+ 'zAsset-Filename-11',
+ 'zAddAssetAttr- Original Filename-12',
+ 'zCldMast- Original Filename-13',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-14',
+ 'zAddAssetAttr- Imported by Bundle Identifier-15',
+ 'zAddAssetAttr- Imported By Display Name-16',
+ 'zAsset-Saved Asset Type-17',
+ 'zAsset-Syndication State-18',
+ 'zAsset-Bundle Scope-19',
+ 'zAddAssetAttr-Share Type-20',
+ 'zAsset-Active Library Scope Participation State-21',
+ 'zAsset-Visibility State-22',
+ 'zAssetDes-Long Description-23',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-24',
+ 'zAddAssetAttr-Accessibility Description-25',
+ 'zKeywrd-Shortcut-26',
+ 'zKeywrd-Title-27',
+ 'zCldSharedComment-Type-28',
+ 'zCldSharedComment-Comment Text-29',
+ ('zCldFeedEnt-Entry Date-30', 'datetime'),
+ 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-31',
+ 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-32',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-33',
+ 'zCldFeedEnt-Entry Priority Number-34',
+ 'zCldFeedEnt-Entry Type Number-35',
+ 'zCldSharedComment-Cloud GUID-4TableStart-36',
+ ('zCldSharedComment-Date-37', 'datetime'),
+ ('zCldSharedComment-Comment Client Date-38', 'datetime'),
+ ('zAsset-Cloud Last Viewed Comment Date-39', 'datetime'),
+ 'zCldSharedComment-Commenter Hashed Person ID-40',
+ 'zCldSharedComment-Batch Comment-41',
+ 'zCldSharedComment-Is a Caption-42',
+ 'zAsset-Cloud Has Comments by Me-43',
+ 'zCldSharedComment-Is My Comment-44',
+ 'zCldSharedComment-Is Deletable-45',
+ 'zAsset-Cloud Has Comments Conversation-46',
+ 'zAsset-Cloud Has Unseen Comments-47',
+ 'zCldSharedComment-Liked-48',
+ 'zAddAssetAttr-Asset Description-49',
+ 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-50',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-51',
+ 'zCldFeedEnt-zPK= zCldShared keys-52',
+ 'zCldFeedEnt-zENT-53',
+ 'zCldFeedEnt-zOPT-54',
+ 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-55',
+ 'zCldFeedEnt-Entry Invitation Record GUID-56',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-57',
+ 'zCldSharedComment-zPK-58',
+ 'zCldSharedComment-zENT-59',
+ 'zCldSharedComment-zOPT-60',
+ 'zCldSharedComment-Commented Asset Key= zAsset-zPK-61',
+ 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-62',
+ 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-63',
+ 'zCldSharedComment-Liked Asset Key= zAsset-zPK-64',
+ 'zCldSharedComment-CldFeedLikeCommentEntry Key-65',
+ 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-66',
+ 'zCldSharedComment-Cloud GUID-67',
+ 'zKeywrd-zPK-68',
+ 'z1KeyWrds-41Keywords = zKeywrd-zPK-69',
+ 'zKeywrd-zENT-70',
+ 'zKeywrd-zOPT-71',
+ 'zKeywrd-UUID-72',
+ 'z1KeyWrds-1AssetAttributes = zAddAssetAttr-zPK-73',
+ 'zAsset-zPK-74',
+ 'zAddAssetAttr-zPK-75',
+ 'zAsset-UUID = store.cloudphotodb-76',
+ 'zAddAssetAttr-Master Fingerprint-77')
+ data_list = get_sqlite_db_records(source_path, query)
- description = ('Parses basic asset record data from iOS18 *PhotoData-Photos.sqlite for assets that have'
- ' Keywords, Captions, Titles, Descriptions, Captions and Likes.'
- ' (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or'
- ' (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or'
- ' (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0) or'
- ' (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or'
- ' (zCldSharedCommentLiked.ZISLIKE = 1). I recommend opening the TSV generated report'
- ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer to view,'
- ' search and filter the results. This parser is based on research and SQLite Queries'
- ' written by Scott Koenig https://theforensicscooter.com/')
- report = ArtifactHtmlReport('Ph11 Keywords Captions Titles Descriptions Likes and Basic Asset Data')
- report.start_artifact_report(report_folder, 'Ph11-KwrdsCapsTitlesDescripsLikesBasicAsstData-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-EXIF-String-5',
- 'zAsset-Modification Date-6',
- 'zAsset-Last Shared Date-7',
- 'zAsset-Trashed Date-8',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-9',
- 'zAsset-Directory-Path-10',
- 'zAsset-Filename-11',
- 'zAddAssetAttr- Original Filename-12',
- 'zCldMast- Original Filename-13',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-14',
- 'zAddAssetAttr- Imported by Bundle Identifier-15',
- 'zAddAssetAttr- Imported By Display Name-16',
- 'zAsset-Is_Recently_Saved-iOS18-17',
- 'zAsset-Saved Asset Type-18',
- 'zAsset-Syndication State-19',
- 'zAsset-Bundle Scope-20',
- 'zAddAssetAttr-Share Type-21',
- 'zAsset-Active Library Scope Participation State-22',
- 'zAsset-Visibility State-23',
- 'zAssetDes-Long Description-24',
- 'zAddAssetAttr-Title-Comments via Cloud Website-25',
- 'zAddAssetAttr-Accessibility Description-26',
- 'zKeywrd-Shortcut-27',
- 'zKeywrd-Title-28',
- 'zGeneratedAsstDescrip-Analysis_Version-29',
- 'zGeneratedAsstDescrip-Analysis_Source_Type-30',
- 'zGeneratedAsstDescrip-Analysis_Timestamp-31',
- 'zGeneratedAsstDescrip-Description-Text-32',
- 'zCldSharedComment-Type-33',
- 'zCldSharedComment-Comment Text-34',
- 'zCldFeedEnt-Entry Date-35',
- 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-36',
- 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-37',
- 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-38',
- 'zCldFeedEnt-Entry Priority Number-39',
- 'zCldFeedEnt-Entry Type Number-40',
- 'zCldSharedComment-Cloud GUID-4TableStart-41',
- 'zCldSharedComment-Date-42',
- 'zCldSharedComment-Comment Client Date-43',
- 'zAsset-Cloud Last Viewed Comment Date-44',
- 'zCldSharedComment-Commenter Hashed Person ID-45',
- 'zCldSharedComment-Batch Comment-46',
- 'zCldSharedComment-Is a Caption-47',
- 'zAsset-Cloud Has Comments by Me-48',
- 'zCldSharedComment-Is My Comment-49',
- 'zCldSharedComment-Is Deletable-50',
- 'zAsset-Cloud Has Comments Conversation-51',
- 'zAsset-Cloud Has Unseen Comments-52',
- 'zCldSharedComment-Liked-53',
- 'zAddAssetAttr-Asset Description-54',
- 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-55',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-56',
- 'zCldFeedEnt-zPK= zCldShared keys-57',
- 'zCldFeedEnt-zENT-58',
- 'zCldFeedEnt-zOPT-59',
- 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-60',
- 'zCldFeedEnt-Entry Invitation Record GUID-61',
- 'zCldFeedEnt-Entry Cloud Asset GUID-62',
- 'zCldSharedComment-zPK-63',
- 'zCldSharedComment-zENT-64',
- 'zCldSharedComment-zOPT-65',
- 'zCldSharedComment-Commented Asset Key= zAsset-zPK-66',
- 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-67',
- 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-68',
- 'zCldSharedComment-Liked Asset Key= zAsset-zPK-69',
- 'zCldSharedComment-CldFeedLikeCommentEntry Key-70',
- 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-71',
- 'zCldSharedComment-Cloud GUID-72',
- 'zKeywrd-zPK-73',
- 'z1KeyWrds-48Keywords = zKeywrd-zPK-74',
- 'zKeywrd-zENT-75',
- 'zKeywrd-zOPT-76',
- 'zKeywrd-UUID-77',
- 'z1KeyWrds-1AssetAttributes = zAddAssetAttr-zPK-78',
- 'zGeneratedAsstDescrip-zAsset= zAsset-zPK-79',
- 'zAsset-Generated Asset Description= zGeneratedAsstDescrip-zPK-80',
- 'zGeneratedAsstDescrip-zPK = zAsset-Generated Asset Description-81',
- 'zGeneratedAsstDescrip-zENT-82',
- 'zGeneratedAsstDescrip-zOPT-83',
- 'zAsset-zPK-84',
- 'zAddAssetAttr-zPK-85',
- 'zAsset-UUID = store.cloudphotodb-86',
- 'zAddAssetAttr-Original Stable Hash-iOS18-87',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-88')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
+ return data_headers, data_list, source_path
- tsvname = 'Ph11-KwrdsCapsTitlesDescripsLikesBasicAsstData-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
+ elif version.parse(iosversion) >= version.parse("18"):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- else:
- logfunc('No data available for iOS 18 Photos.sqlite basic asset data one record per zAsset-zPK')
+ query = '''
+ SELECT
+ DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
+ DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
+ DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date',
+ DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date',
+ zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name',
+ zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String',
+ DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
+ DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date',
+ DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
+ zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK',
+ zAsset.ZDIRECTORY AS 'zAsset-Directory-Path',
+ zAsset.ZFILENAME AS 'zAsset-Filename',
+ zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename',
+ zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename',
+ zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files',
+ zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr- Imported by Bundle Identifier',
+ zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr- Imported By Display Name',
+ CASE zAsset.ZISRECENTLYSAVED
+ WHEN 0 THEN '0-Not_Recently_Saved-0'
+ WHEN 1 THEN '1-Recently_Saved-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || ''
+ END AS 'zAsset-Is_Recently_Saved',
+ CASE zAsset.ZSAVEDASSETTYPE
+ WHEN 0 THEN '0-Saved-via-other-source-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ WHEN 2 THEN '2-StillTesting-2'
+ WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3'
+ WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4'
+ WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5'
+ WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6'
+ WHEN 7 THEN '7-StillTesting-7'
+ WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8'
+ WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || ''
+ END AS 'zAsset-Saved Asset Type',
+ CASE zAsset.ZSYNDICATIONSTATE
+ WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0'
+ WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1'
+ WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2'
+ WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3'
+ WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8'
+ WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9'
+ WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || ''
+ END AS 'zAsset-Syndication State',
+ CASE zAsset.ZBUNDLESCOPE
+ WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0'
+ WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1'
+ WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2'
+ WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || ''
+ END AS 'zAsset-Bundle Scope',
+ CASE zAddAssetAttr.ZSHARETYPE
+ WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0'
+ WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || ''
+ END AS 'zAddAssetAttr-Share Type',
+ CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE
+ WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0'
+ WHEN 1 THEN '1-Asset-In-Active-SPL-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || ''
+ END AS 'zAsset-Active Library Scope Participation State',
+ CASE zAsset.ZVISIBILITYSTATE
+ WHEN 0 THEN '0-Visible-PL-CameraRoll-0'
+ WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || ''
+ END AS 'zAsset-Visibility State',
+ zAssetDes.ZLONGDESCRIPTION AS 'zAssetDes-Long Description',
+ zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website',
+ zAddAssetAttr.ZACCESSIBILITYDESCRIPTION AS 'zAddAssetAttr-Accessibility Description',
+ zKeywrd.ZSHORTCUT AS 'zKeywrd-Shortcut',
+ zKeywrd.ZTITLE AS 'zKeywrd-Title',
+ zCldSharedComment.ZCOMMENTTYPE AS 'zCldSharedComment-Type',
+ zCldSharedComment.ZCOMMENTTEXT AS 'zCldSharedComment-Comment Text',
+ DateTime(zCldFeedEnt.ZENTRYDATE + 978307200, 'UNIXEPOCH') AS 'zCldFeedEnt-Entry Date',
+ zCldFeedEnt.ZENTRYALBUMGUID AS 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart',
+ zCldFeedEnt.ZENTRYINVITATIONRECORDGUID AS 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart',
+ zCldFeedEnt.ZENTRYCLOUDASSETGUID AS 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart',
+ CASE zCldFeedEnt.ZENTRYPRIORITYNUMBER
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYPRIORITYNUMBER || ''
+ END AS 'zCldFeedEnt-Entry Priority Number',
+ CASE zCldFeedEnt.ZENTRYTYPENUMBER
+ WHEN 1 THEN 'Is My Shared Asset-1'
+ WHEN 2 THEN '2-StillTesting-2'
+ WHEN 3 THEN '3-StillTesting-3'
+ WHEN 4 THEN 'Not My Shared Asset-4'
+ WHEN 5 THEN 'Asset in Album with Invite Record-5'
+ ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYTYPENUMBER || ''
+ END AS 'zCldFeedEnt-Entry Type Number',
+ zCldSharedComment.ZCLOUDGUID AS 'zCldSharedComment-Cloud GUID-4TableStart',
+ DateTime(zCldSharedComment.ZCOMMENTDATE + 978307200, 'UNIXEPOCH') AS 'zCldSharedComment-Date',
+ DateTime(zCldSharedComment.ZCOMMENTCLIENTDATE + 978307200, 'UNIXEPOCH') AS 'zCldSharedComment-Comment Client Date',
+ DateTime(zAsset.ZCLOUDLASTVIEWEDCOMMENTDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Last Viewed Comment Date',
+ zCldSharedComment.ZCOMMENTERHASHEDPERSONID AS 'zCldSharedComment-Commenter Hashed Person ID',
+ CASE zCldSharedComment.ZISBATCHCOMMENT
+ WHEN 0 THEN 'Not Batch Comment-0'
+ WHEN 1 THEN 'Batch Comment-1'
+ ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISBATCHCOMMENT || ''
+ END AS 'zCldSharedComment-Batch Comment',
+ CASE zCldSharedComment.ZISCAPTION
+ WHEN 0 THEN 'Not a Caption-0'
+ WHEN 1 THEN 'Caption-1'
+ ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISCAPTION || ''
+ END AS 'zCldSharedComment-Is a Caption',
+ CASE zAsset.ZCLOUDHASCOMMENTSBYME
+ WHEN 1 THEN 'Device Apple Acnt Commented-Liked Asset-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASCOMMENTSBYME || ''
+ END AS 'zAsset-Cloud Has Comments by Me',
+ CASE zCldSharedComment.ZISMYCOMMENT
+ WHEN 0 THEN 'Not My Comment-0'
+ WHEN 1 THEN 'My Comment-1'
+ ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISMYCOMMENT || ''
+ END AS 'zCldSharedComment-Is My Comment',
+ CASE zCldSharedComment.ZISDELETABLE
+ WHEN 0 THEN 'Not Deletable-0'
+ WHEN 1 THEN 'Deletable-1'
+ ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISDELETABLE || ''
+ END AS 'zCldSharedComment-Is Deletable',
+ CASE zAsset.ZCLOUDHASCOMMENTSCONVERSATION
+ WHEN 1 THEN 'Device Apple Acnt Commented-Liked Conversation-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASCOMMENTSCONVERSATION || ''
+ END AS 'zAsset-Cloud Has Comments Conversation',
+ CASE zAsset.ZCLOUDHASUNSEENCOMMENTS
+ WHEN 0 THEN 'zAsset No Unseen Comments-0'
+ WHEN 1 THEN 'zAsset Unseen Comments-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASUNSEENCOMMENTS || ''
+ END AS 'zAsset-Cloud Has Unseen Comments',
+ CASE zCldSharedCommentLiked.ZISLIKE
+ WHEN 0 THEN 'Asset Not Liked-0'
+ WHEN 1 THEN 'Asset Liked-1'
+ ELSE 'Unknown-New-Value!: ' || zCldSharedCommentLiked.ZISLIKE || ''
+ END AS 'zCldSharedComment-Liked',
+ zAddAssetAttr.ZASSETDESCRIPTION AS 'zAddAssetAttr-Asset Description',
+ zAsset.ZCLOUDFEEDASSETSENTRY AS 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK',
+ zAsset.Z_FOK_CLOUDFEEDASSETSENTRY AS 'zAsset-FOK-Cloud Feed Asset Entry Key',
+ zCldFeedEnt.Z_PK AS 'zCldFeedEnt-zPK= zCldShared keys',
+ zCldFeedEnt.Z_ENT AS 'zCldFeedEnt-zENT',
+ zCldFeedEnt.Z_OPT AS 'zCldFeedEnt-zOPT',
+ zCldFeedEnt.ZENTRYALBUMGUID AS 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID',
+ zCldFeedEnt.ZENTRYINVITATIONRECORDGUID AS 'zCldFeedEnt-Entry Invitation Record GUID',
+ zCldFeedEnt.ZENTRYCLOUDASSETGUID AS 'zCldFeedEnt-Entry Cloud Asset GUID',
+ zCldSharedComment.Z_PK AS 'zCldSharedComment-zPK',
+ zCldSharedComment.Z_ENT AS 'zCldSharedComment-zENT',
+ zCldSharedComment.Z_OPT AS 'zCldSharedComment-zOPT',
+ zCldSharedComment.ZCOMMENTEDASSET AS 'zCldSharedComment-Commented Asset Key= zAsset-zPK',
+ zCldSharedComment.ZCLOUDFEEDCOMMENTENTRY AS 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK',
+ zCldSharedComment.Z_FOK_CLOUDFEEDCOMMENTENTRY AS 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key',
+ zCldSharedCommentLiked.ZLIKEDASSET AS 'zCldSharedComment-Liked Asset Key= zAsset-zPK',
+ zCldSharedCommentLiked.ZCLOUDFEEDLIKECOMMENTENTRY AS 'zCldSharedComment-CldFeedLikeCommentEntry Key',
+ zCldSharedCommentLiked.Z_FOK_CLOUDFEEDLIKECOMMENTENTRY AS 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key',
+ zCldSharedComment.ZCLOUDGUID AS 'zCldSharedComment-Cloud GUID',
+ zKeywrd.Z_PK AS 'zKeywrd-zPK',
+ z1KeyWrds.Z_47KEYWORDS AS 'z1KeyWrds-47Keywords = zKeywrd-zPK',
+ zKeywrd.Z_ENT AS 'zKeywrd-zENT',
+ zKeywrd.Z_OPT AS 'zKeywrd-zOPT',
+ zKeywrd.ZUUID AS 'zKeywrd-UUID',
+ z1KeyWrds.Z_1ASSETATTRIBUTES AS 'z1KeyWrds-1AssetAttributes = zAddAssetAttr-zPK',
+ zAsset.Z_PK AS 'zAsset-zPK',
+ zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
+ zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash'
+ FROM ZASSET zAsset
+ LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
+ LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
+ LEFT JOIN Z_1KEYWORDS z1KeyWrds ON zAddAssetAttr.Z_PK = z1KeyWrds.Z_1ASSETATTRIBUTES
+ LEFT JOIN ZKEYWORD zKeywrd ON z1KeyWrds.Z_47KEYWORDS = zKeywrd.Z_PK
+ LEFT JOIN ZASSETDESCRIPTION zAssetDes ON zAssetDes.Z_PK = zAddAssetAttr.ZASSETDESCRIPTION
+ LEFT JOIN ZCLOUDFEEDENTRY zCldFeedEnt ON zAsset.ZCLOUDFEEDASSETSENTRY = zCldFeedEnt.Z_PK
+ LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedComment ON zAsset.Z_PK = zCldSharedComment.ZCOMMENTEDASSET
+ LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedCommentLiked ON zAsset.Z_PK = zCldSharedCommentLiked.ZLIKEDASSET
+ WHERE (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0) or (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or (zCldSharedCommentLiked.ZISLIKE = 1)
+ ORDER BY zAsset.ZDATECREATED
+ '''
- db.close()
- return
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79]))
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-EXIF-String-5',
+ ('zAsset-Modification Date-6', 'datetime'),
+ ('zAsset-Last Shared Date-7', 'datetime'),
+ ('zAsset-Trashed Date-8', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-9',
+ 'zAsset-Directory-Path-10',
+ 'zAsset-Filename-11',
+ 'zAddAssetAttr- Original Filename-12',
+ 'zCldMast- Original Filename-13',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-14',
+ 'zAddAssetAttr- Imported by Bundle Identifier-15',
+ 'zAddAssetAttr- Imported By Display Name-16',
+ 'zAsset-Is_Recently_Saved-17',
+ 'zAsset-Saved Asset Type-18',
+ 'zAsset-Syndication State-19',
+ 'zAsset-Bundle Scope-20',
+ 'zAddAssetAttr-Share Type-21',
+ 'zAsset-Active Library Scope Participation State-22',
+ 'zAsset-Visibility State-23',
+ 'zAssetDes-Long Description-24',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-25',
+ 'zAddAssetAttr-Accessibility Description-26',
+ 'zKeywrd-Shortcut-27',
+ 'zKeywrd-Title-28',
+ 'zCldSharedComment-Type-29',
+ 'zCldSharedComment-Comment Text-30',
+ ('zCldFeedEnt-Entry Date-31', 'datetime'),
+ 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-32',
+ 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-33',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-34',
+ 'zCldFeedEnt-Entry Priority Number-35',
+ 'zCldFeedEnt-Entry Type Number-36',
+ 'zCldSharedComment-Cloud GUID-4TableStart-37',
+ ('zCldSharedComment-Date-38', 'datetime'),
+ ('zCldSharedComment-Comment Client Date-39', 'datetime'),
+ ('zAsset-Cloud Last Viewed Comment Date-40', 'datetime'),
+ 'zCldSharedComment-Commenter Hashed Person ID-41',
+ 'zCldSharedComment-Batch Comment-42',
+ 'zCldSharedComment-Is a Caption-43',
+ 'zAsset-Cloud Has Comments by Me-44',
+ 'zCldSharedComment-Is My Comment-45',
+ 'zCldSharedComment-Is Deletable-46',
+ 'zAsset-Cloud Has Comments Conversation-47',
+ 'zAsset-Cloud Has Unseen Comments-48',
+ 'zCldSharedComment-Liked-49',
+ 'zAddAssetAttr-Asset Description-50',
+ 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-51',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-52',
+ 'zCldFeedEnt-zPK= zCldShared keys-53',
+ 'zCldFeedEnt-zENT-54',
+ 'zCldFeedEnt-zOPT-55',
+ 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-56',
+ 'zCldFeedEnt-Entry Invitation Record GUID-57',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-58',
+ 'zCldSharedComment-zPK-59',
+ 'zCldSharedComment-zENT-60',
+ 'zCldSharedComment-zOPT-61',
+ 'zCldSharedComment-Commented Asset Key= zAsset-zPK-62',
+ 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-63',
+ 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-64',
+ 'zCldSharedComment-Liked Asset Key= zAsset-zPK-65',
+ 'zCldSharedComment-CldFeedLikeCommentEntry Key-66',
+ 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-67',
+ 'zCldSharedComment-Cloud GUID-68',
+ 'zKeywrd-zPK-69',
+ 'z1KeyWrds-47Keywords = zKeywrd-zPK-70',
+ 'zKeywrd-zENT-71',
+ 'zKeywrd-zOPT-72',
+ 'zKeywrd-UUID-73',
+ 'z1KeyWrds-1AssetAttributes = zAddAssetAttr-zPK-74',
+ 'zAsset-zPK-75',
+ 'zAddAssetAttr-zPK-76',
+ 'zAsset-UUID = store.cloudphotodb-77',
+ 'zAddAssetAttr-Original Stable Hash-78',
+ 'zAddAssetAttr.Adjusted Stable Hash-79')
+ data_list = get_sqlite_db_records(source_path, query)
-__artifacts_v2__ = {
- 'Ph11-KwrdsCapsTitlesDescripsLikesBasicAsstData-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite Ph11 Keywords Captions Titles Descriptions Likes and Basic Asset Data',
- 'description': 'Parses basic asset record data from iOS18 *PhotoData-Photos.sqlite for assets that have'
- ' Keywords, Captions, Titles, Descriptions, Captions and Likes.'
- ' (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or'
- ' (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or'
- ' (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0) or'
- ' (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or'
- ' (zCldSharedCommentLiked.ZISLIKE = 1). I recommend opening the TSV generated report'
- ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer to view,'
- ' search and filter the results. This parser is based on research and SQLite Queries'
- ' written by Scott Koenig https://theforensicscooter.com/',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '1.0',
- 'date': '2024-06-20',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-B-Interaction_Artifacts',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph11kwrdscapstitlesdescripsbasicassetdataphdapsql'
- }
-}
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph15PeopleandDetFacesNAD.py b/scripts/artifacts/Ph15PeopleandDetFacesNAD.py
index 82d13fe1..be681188 100644
--- a/scripts/artifacts/Ph15PeopleandDetFacesNAD.py
+++ b/scripts/artifacts/Ph15PeopleandDetFacesNAD.py
@@ -1,43 +1,62 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 2.0
-#
-# Description:
-# Parses data from Photos.sqlite for people - detected faces - face crop data supports iOS 14-18.
-# The results could produce multiple records for a single asset.
-# This parser is based on research and SQLite queries written by Scott Koenig
-# This is very large query and script, I recommend opening the TSV generated report with Zimmerman's Tools
-# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results.
-# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347
-#
+__artifacts_v2__ = {
+ 'Ph15_1PeopleFacesNADPhDaPsql': {
+ 'name': 'Ph15.1-People & Faces NAD-PhDaPsql',
+ 'description': 'Parses data from PhotoData-Photos.sqlite for people - detected faces - face crop data.'
+ ' The results may contain multiple records per ZASSET table Z_PK value and supports iOS 14-18.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-G-People_Faces_Data',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ },
+ 'Ph15_2PeopleFacesNADSyndPL': {
+ 'name': 'Ph15.2-People & Faces NAD-SyndPL',
+ 'description': 'Parses data from Syndication.photoslibrary-database-Photos.sqlite for'
+ ' people - detected faces - face crop data. The results may contain multiple records'
+ ' per ZASSET table Z_PK value and supports iOS 14-18.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite',
+ 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts',
+ 'notes': '',
+ 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import nska_deserialize as nd
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
-
-
-def get_ph15peopledetfacephdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import media_to_html, artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
- for file_found in files_found:
- file_found = str(file_found)
+@artifact_processor
+def Ph15_1PeopleFacesNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("13.7"):
- logfunc("Unsupported version for PhotoData-Photos.sqlite people - detected faces - face crop data from iOS " + iosversion)
+ logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
zDetFace.ZASSET AS 'zDetFace-AssetForFace= zAsset-zPK',
zFaceCrop.ZASSET AS 'zFaceCrop-Asset Key',
@@ -305,179 +324,158 @@ def get_ph15peopledetfacephdapsql(files_found, report_folder, seeker, wrap_text,
LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON
LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP
ORDER BY zDetFace.Z_PK
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- personcontactmatchingdictionary = ''
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- facecropresourcedata_blob = ''
-
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- if row[3] is not None:
- pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[89] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[3])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- personcontactmatchingdictionary = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[89])
- else:
- logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[89])
-
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- if row[10] is not None:
- pathto = os.path.join(report_folder, 'FaceCropFor_' + row[87] + '.jpg')
- with open(pathto, 'wb') as file:
- file.write(row[10])
- facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
-
- data_list.append((row[0], row[1], row[2],
- personcontactmatchingdictionary,
- row[4], row[5], row[6], row[7], row[8], row[9],
- facecropresourcedata_blob,
- row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91]))
-
- counter += 1
-
- description = 'Parses record data from PhotoData-Photos.sqlite for' \
- ' people - detected faces - face crop data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 14.'
- report = ArtifactHtmlReport('Ph15.1-People & Faces NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph15.1-People & Faces NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0',
- 'zFaceCrop-Asset Key-1',
- 'zDetFacePrint-Data-SeeRawDBData-2',
- 'zPerson-Contact Matching Dictionary-3',
- 'zPerson-Verified Type-4',
- 'zPerson-Display Name-5',
- 'zPerson-Full Name-6',
- 'zPerson-Cloud Verified Type-7',
- 'zFaceCrop-State-8',
- 'zFaceCrop-Type-9',
- 'zFaceCrop-Resource Data-10',
- 'zDetFace-Confirmed Face Crop Generation State-11',
- 'zDetFace-Manual-12',
- 'zDetFace-VIP Model Type-13',
- 'zDetFace-Name Source-14',
- 'zDetFace-Cloud Name Source-15',
- 'zPerson-Type-16',
- 'zPerson-Gender Type-17',
- 'zDetFace-Gender Type-18',
- 'zDetFace-Center X-19',
- 'zDetFace-Center Y-20',
- 'zPerson-Age Type Estimate-21',
- 'zDetFace-Age Type Estimate-22',
- 'zDetFace-Hair Color Type-23',
- 'zDetFace-Facial Hair Type-24',
- 'zDetFace-Has Smile-25',
- 'zDetFace-Smile Type-26',
- 'zDetFace-Lip Makeup Type-27',
- 'zDetFace-Eyes State-28',
- 'zDetFace-Is Left Eye Closed-29',
- 'zDetFace-Is Right Eye Closed-30',
- 'zDetFace-Eye Glasses Type-31',
- 'zDetFace-Eye Makeup Type-32',
- 'zDetFace-Cluster Sequence Number Key-33',
- 'zDetFace-Grouping ID-34',
- 'zDetFace-Master ID-35',
- 'zDetFace-Quality-36',
- 'zDetFace-Quality Measure-37',
- 'zDetFace-Source Height-38',
- 'zDetFace-Source Width-39',
- 'zDetFace-Asset Visible-40',
- 'zDetFace-Hidden/Asset Hidden-41',
- 'zDetFace-In Trash/Recently Deleted-42',
- 'zDetFace-Cloud Local State-43',
- 'zDetFace-Training Type-44',
- 'zDetFace.Pose Yaw-45',
- 'zDetFace-Roll-46',
- 'zDetFace-Size-47',
- 'zDetFace-Cluster Sequence Number-48',
- 'zDetFace-Blur Score-49',
- 'zDetFacePrint-Face Print Version-50',
- 'zDetFaceGroup-UUID-51',
- 'zDetFaceGroup-Person Builder State-52',
- 'zDetFaceGroup-UnNamed Face Count-53',
- 'zPerson-Face Count-54',
- 'zDetFace-Face Algorithm Version-55',
- 'zDetFace-Adjustment Version-56',
- 'zPerson-In Person Naming Model-57',
- 'zPerson-Key Face Pick Source Key-58',
- 'zPerson-Manual Order Key-59',
- 'zPerson-Question Type-60',
- 'zPerson-Suggested For Client Type-61',
- 'zPerson-Merge Target Person-62',
- 'zPerson-Cloud Local State-63',
- 'zFaceCrop-Cloud Local State-64',
- 'zFaceCrop-Cloud Type-65',
- 'zPerson-Cloud Delete State-66',
- 'zFaceCrop-Cloud Delete State-67',
- 'zDetFace-zPK-68',
- 'zDetFacePrint-Face Key-69',
- 'zPerson-KeyFace=zDetFace-zPK-70',
- 'zFaceCrop-Face Key-71',
- 'zPerson-zPK=zDetFace-Person-72',
- 'zDetFace-PersonForFace= zPerson-zPK-73',
- 'zDetFace-Person Being Key Face-74',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-75',
- 'zDetFace-Face Print-76',
- 'zDetFacePrint-zPK-77',
- 'zDetFace-Face Crop-78',
- 'zFaceCrop-zPK-79',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-80',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-81',
- 'zPerson-Assoc Face Group Key-82',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-83',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-84',
- 'zDetFaceGroup-zPK-85',
- 'zDetFace-UUID-86',
- 'zFaceCrop-UUID-87',
- 'zFaceCrop-Invalid Merge Candidate Person UUID-88',
- 'zPerson-Person UUID-89',
- 'zPerson-Person URI-90',
- 'zDetFaceGroup-UUID-91')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph15.1-People & Faces NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph15.1-People & Faces NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite people - detected faces - face crop data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ personcontactmatchingdictionary = ''
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ facecropresourcedata_blob = ''
+
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ if row[3] is not None:
+ pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[89] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[3])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ personcontactmatchingdictionary = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[89])
+ else:
+ logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[89])
+
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ if row[10] is not None:
+ pathto = os.path.join(report_folder, 'FaceCropFor_' + row[87] + '.jpg')
+ with open(pathto, 'wb') as file:
+ file.write(row[10])
+ facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
+
+ data_list.append((row[0], row[1], row[2],
+ personcontactmatchingdictionary,
+ row[4], row[5], row[6], row[7], row[8], row[9],
+ facecropresourcedata_blob,
+ row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91]))
+
+ data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0',
+ 'zFaceCrop-Asset Key-1',
+ 'zDetFacePrint-Data-SeeRawDBData-2',
+ 'zPerson-Contact Matching Dictionary-3',
+ 'zPerson-Verified Type-4',
+ 'zPerson-Display Name-5',
+ 'zPerson-Full Name-6',
+ 'zPerson-Cloud Verified Type-7',
+ 'zFaceCrop-State-8',
+ 'zFaceCrop-Type-9',
+ 'zFaceCrop-Resource Data-10',
+ 'zDetFace-Confirmed Face Crop Generation State-11',
+ 'zDetFace-Manual-12',
+ 'zDetFace-VIP Model Type-13',
+ 'zDetFace-Name Source-14',
+ 'zDetFace-Cloud Name Source-15',
+ 'zPerson-Type-16',
+ 'zPerson-Gender Type-17',
+ 'zDetFace-Gender Type-18',
+ 'zDetFace-Center X-19',
+ 'zDetFace-Center Y-20',
+ 'zPerson-Age Type Estimate-21',
+ 'zDetFace-Age Type Estimate-22',
+ 'zDetFace-Hair Color Type-23',
+ 'zDetFace-Facial Hair Type-24',
+ 'zDetFace-Has Smile-25',
+ 'zDetFace-Smile Type-26',
+ 'zDetFace-Lip Makeup Type-27',
+ 'zDetFace-Eyes State-28',
+ 'zDetFace-Is Left Eye Closed-29',
+ 'zDetFace-Is Right Eye Closed-30',
+ 'zDetFace-Eye Glasses Type-31',
+ 'zDetFace-Eye Makeup Type-32',
+ 'zDetFace-Cluster Sequence Number Key-33',
+ 'zDetFace-Grouping ID-34',
+ 'zDetFace-Master ID-35',
+ 'zDetFace-Quality-36',
+ 'zDetFace-Quality Measure-37',
+ 'zDetFace-Source Height-38',
+ 'zDetFace-Source Width-39',
+ 'zDetFace-Asset Visible-40',
+ 'zDetFace-Hidden/Asset Hidden-41',
+ 'zDetFace-In Trash/Recently Deleted-42',
+ 'zDetFace-Cloud Local State-43',
+ 'zDetFace-Training Type-44',
+ 'zDetFace.Pose Yaw-45',
+ 'zDetFace-Roll-46',
+ 'zDetFace-Size-47',
+ 'zDetFace-Cluster Sequence Number-48',
+ 'zDetFace-Blur Score-49',
+ 'zDetFacePrint-Face Print Version-50',
+ 'zDetFaceGroup-UUID-51',
+ 'zDetFaceGroup-Person Builder State-52',
+ 'zDetFaceGroup-UnNamed Face Count-53',
+ 'zPerson-Face Count-54',
+ 'zDetFace-Face Algorithm Version-55',
+ 'zDetFace-Adjustment Version-56',
+ 'zPerson-In Person Naming Model-57',
+ 'zPerson-Key Face Pick Source Key-58',
+ 'zPerson-Manual Order Key-59',
+ 'zPerson-Question Type-60',
+ 'zPerson-Suggested For Client Type-61',
+ 'zPerson-Merge Target Person-62',
+ 'zPerson-Cloud Local State-63',
+ 'zFaceCrop-Cloud Local State-64',
+ 'zFaceCrop-Cloud Type-65',
+ 'zPerson-Cloud Delete State-66',
+ 'zFaceCrop-Cloud Delete State-67',
+ 'zDetFace-zPK-68',
+ 'zDetFacePrint-Face Key-69',
+ 'zPerson-KeyFace=zDetFace-zPK-70',
+ 'zFaceCrop-Face Key-71',
+ 'zPerson-zPK=zDetFace-Person-72',
+ 'zDetFace-PersonForFace= zPerson-zPK-73',
+ 'zDetFace-Person Being Key Face-74',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-75',
+ 'zDetFace-Face Print-76',
+ 'zDetFacePrint-zPK-77',
+ 'zDetFace-Face Crop-78',
+ 'zFaceCrop-zPK-79',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-80',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-81',
+ 'zPerson-Assoc Face Group Key-82',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-83',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-84',
+ 'zDetFaceGroup-zPK-85',
+ 'zDetFace-UUID-86',
+ 'zFaceCrop-UUID-87',
+ 'zFaceCrop-Invalid Merge Candidate Person UUID-88',
+ 'zPerson-Person UUID-89',
+ 'zPerson-Person URI-90',
+ 'zDetFaceGroup-UUID-91')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
zDetFace.ZASSET AS 'zDetFace-AssetForFace= zAsset-zPK',
zFaceCrop.ZASSET AS 'zFaceCrop-Asset Key',
@@ -833,196 +831,175 @@ def get_ph15peopledetfacephdapsql(files_found, report_folder, seeker, wrap_text,
LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON
LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP
ORDER BY zDetFace.Z_PK
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- personcontactmatchingdictionary = ''
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- facecropresourcedata_blob = ''
-
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- if row[3] is not None:
- pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[105] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[3])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- personcontactmatchingdictionary = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[105])
- else:
- logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[105])
-
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- if row[10] is not None:
- pathto = os.path.join(report_folder, 'FaceCropFor_' + row[103] + '.jpg')
- with open(pathto, 'wb') as file:
- file.write(row[10])
- facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
-
- data_list.append((row[0], row[1], row[2],
- personcontactmatchingdictionary,
- row[4], row[5], row[6], row[7], row[8], row[9],
- facecropresourcedata_blob,
- row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107]))
-
- counter += 1
-
- description = 'Parses data from PhotoData-Photos.sqlite for' \
- ' people - detected faces - face crop data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 15.'
- report = ArtifactHtmlReport('Ph15.1-People & Faces NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph15.1-People & Faces NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0',
- 'zFaceCrop-Asset Key-1',
- 'zDetFacePrint-Data-SeeRawDBData-2',
- 'zPerson-Contact Matching Dictionary-3',
- 'zPerson-Verified Type-4',
- 'zPerson-Display Name-5',
- 'zPerson-Full Name-6',
- 'zPerson-Cloud Verified Type-7',
- 'zFaceCrop-State-8',
- 'zFaceCrop-Type-9',
- 'zFaceCrop-Resource Data-10',
- 'zDetFace-Confirmed Face Crop Generation State-11',
- 'zDetFace-Manual-12',
- 'zDetFace-Detection Type-13',
- 'zPerson-Detection Type-14',
- 'zDetFace-VIP Model Type-15',
- 'zDetFace-Name Source-16',
- 'zDetFace-Cloud Name Source-17',
- 'zPerson-Type-18',
- 'zPerson-Gender Type-19',
- 'zDetFace-Gender Type-20',
- 'zDetFace-Center X-21',
- 'zDetFace-Center Y-22',
- 'zPerson-Age Type Estimate-23',
- 'zDetFace-Age Type Estimate-24',
- 'zDetFace-Ethnicity Type-25',
- 'zDetFace-Skin Tone Type-26',
- 'zDetFace-Hair Type-27',
- 'zDetFace-Hair Color Type-28',
- 'zDetFace-Head Gear Type-29',
- 'zDetFace-Facial Hair Type-30',
- 'zDetFace-Has Face Mask-31',
- 'zDetFace-Pose Type-32',
- 'zDetFace-Face Expression Type-33',
- 'zDetFace-Has Smile-34',
- 'zDetFace-Smile Type-35',
- 'zDetFace-Lip Makeup Type-36',
- 'zDetFace-Eyes State-37',
- 'zDetFace-Is Left Eye Closed-38',
- 'zDetFace-Is Right Eye Closed-39',
- 'zDetFace-Gaze Center X-40',
- 'zDetFace-Gaze Center Y-41',
- 'zDetFace-Face Gaze Type-42',
- 'zDetFace-Eye Glasses Type-43',
- 'zDetFace-Eye Makeup Type-44',
- 'zDetFace-Cluster Squence Number Key-45',
- 'zDetFace-Grouping ID-46',
- 'zDetFace-Master ID-47',
- 'zDetFace-Quality-48',
- 'zDetFace-Quality Measure-49',
- 'zDetFace-Source Height-50',
- 'zDetFace-Source Width-51',
- 'zDetFace-Asset Visible-52',
- 'zDetFace-Hidden/Asset Hidden-53',
- 'zDetFace-In Trash/Recently Deleted-54',
- 'zDetFace-Cloud Local State-55',
- 'zDetFace-Training Type-56',
- 'zDetFace.Pose Yaw-57',
- 'zDetFace-Body Center X-58',
- 'zDetFace-Body Center Y-59',
- 'zDetFace-Body Height-60',
- 'zDetFace-Body Width-61',
- 'zDetFace-Roll-62',
- 'zDetFace-Size-63',
- 'zDetFace-Cluster Squence Number-64',
- 'zDetFace-Blur Score-65',
- 'zDetFacePrint-Face Print Version-66',
- 'zDetFaceGroup-UUID-67',
- 'zDetFaceGroup-Person Builder State-68',
- 'zDetFaceGroup-UnNamed Face Count-69',
- 'zPerson-Face Count-70',
- 'zDetFace-Face Algorithm Version-71',
- 'zDetFace-Adjustment Version-72',
- 'zPerson-In Person Naming Model-73',
- 'zPerson-Key Face Pick Source Key-74',
- 'zPerson-Manual Order Key-75',
- 'zPerson-Question Type-76',
- 'zPerson-Suggested For Client Type-77',
- 'zPerson-Merge Target Person-78',
- 'zPerson-Cloud Local State-79',
- 'zFaceCrop-Cloud Local State-80',
- 'zFaceCrop-Cloud Type-81',
- 'zPerson-Cloud Delete State-82',
- 'zFaceCrop-Cloud Delete State-83',
- 'zDetFace-zPK-84',
- 'zDetFacePrint-Face Key-85',
- 'zPerson-KeyFace=zDetFace-zPK-86',
- 'zFaceCrop-Face Key-87',
- 'zPerson-zPK=zDetFace-Person-88',
- 'zDetFace-PersonForFace= zPerson-zPK-89',
- 'zDetFace-Person Being Key Face-90',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-91',
- 'zDetFace-Face Print-92',
- 'zDetFacePrint-zPK-93',
- 'zDetFace-Face Crop-94',
- 'zFaceCrop-zPK-95',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-96',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-97',
- 'zPerson-Assoc Face Group Key-98',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-99',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-100',
- 'zDetFaceGroup-zPK-101',
- 'zDetFace-UUID-102',
- 'zFaceCrop-UUID-103',
- 'zFaceCrop-Invalid Merge Canidate Person UUID-104',
- 'zPerson-Person UUID-105',
- 'zPerson-Person URI-106',
- 'zDetFaceGroup-UUID-107')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph15.1-People & Faces NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph15.1-People & Faces NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite people - detected faces - face crop data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ personcontactmatchingdictionary = ''
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ facecropresourcedata_blob = ''
+
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ if row[3] is not None:
+ pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[105] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[3])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ personcontactmatchingdictionary = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[105])
+ else:
+ logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[105])
+
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ if row[10] is not None:
+ pathto = os.path.join(report_folder, 'FaceCropFor_' + row[103] + '.jpg')
+ with open(pathto, 'wb') as file:
+ file.write(row[10])
+ facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
+
+ data_list.append((row[0], row[1], row[2],
+ personcontactmatchingdictionary,
+ row[4], row[5], row[6], row[7], row[8], row[9],
+ facecropresourcedata_blob,
+ row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107]))
+
+ data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0',
+ 'zFaceCrop-Asset Key-1',
+ 'zDetFacePrint-Data-SeeRawDBData-2',
+ 'zPerson-Contact Matching Dictionary-3',
+ 'zPerson-Verified Type-4',
+ 'zPerson-Display Name-5',
+ 'zPerson-Full Name-6',
+ 'zPerson-Cloud Verified Type-7',
+ 'zFaceCrop-State-8',
+ 'zFaceCrop-Type-9',
+ 'zFaceCrop-Resource Data-10',
+ 'zDetFace-Confirmed Face Crop Generation State-11',
+ 'zDetFace-Manual-12',
+ 'zDetFace-Detection Type-13',
+ 'zPerson-Detection Type-14',
+ 'zDetFace-VIP Model Type-15',
+ 'zDetFace-Name Source-16',
+ 'zDetFace-Cloud Name Source-17',
+ 'zPerson-Type-18',
+ 'zPerson-Gender Type-19',
+ 'zDetFace-Gender Type-20',
+ 'zDetFace-Center X-21',
+ 'zDetFace-Center Y-22',
+ 'zPerson-Age Type Estimate-23',
+ 'zDetFace-Age Type Estimate-24',
+ 'zDetFace-Ethnicity Type-25',
+ 'zDetFace-Skin Tone Type-26',
+ 'zDetFace-Hair Type-27',
+ 'zDetFace-Hair Color Type-28',
+ 'zDetFace-Head Gear Type-29',
+ 'zDetFace-Facial Hair Type-30',
+ 'zDetFace-Has Face Mask-31',
+ 'zDetFace-Pose Type-32',
+ 'zDetFace-Face Expression Type-33',
+ 'zDetFace-Has Smile-34',
+ 'zDetFace-Smile Type-35',
+ 'zDetFace-Lip Makeup Type-36',
+ 'zDetFace-Eyes State-37',
+ 'zDetFace-Is Left Eye Closed-38',
+ 'zDetFace-Is Right Eye Closed-39',
+ 'zDetFace-Gaze Center X-40',
+ 'zDetFace-Gaze Center Y-41',
+ 'zDetFace-Face Gaze Type-42',
+ 'zDetFace-Eye Glasses Type-43',
+ 'zDetFace-Eye Makeup Type-44',
+ 'zDetFace-Cluster Squence Number Key-45',
+ 'zDetFace-Grouping ID-46',
+ 'zDetFace-Master ID-47',
+ 'zDetFace-Quality-48',
+ 'zDetFace-Quality Measure-49',
+ 'zDetFace-Source Height-50',
+ 'zDetFace-Source Width-51',
+ 'zDetFace-Asset Visible-52',
+ 'zDetFace-Hidden/Asset Hidden-53',
+ 'zDetFace-In Trash/Recently Deleted-54',
+ 'zDetFace-Cloud Local State-55',
+ 'zDetFace-Training Type-56',
+ 'zDetFace.Pose Yaw-57',
+ 'zDetFace-Body Center X-58',
+ 'zDetFace-Body Center Y-59',
+ 'zDetFace-Body Height-60',
+ 'zDetFace-Body Width-61',
+ 'zDetFace-Roll-62',
+ 'zDetFace-Size-63',
+ 'zDetFace-Cluster Squence Number-64',
+ 'zDetFace-Blur Score-65',
+ 'zDetFacePrint-Face Print Version-66',
+ 'zDetFaceGroup-UUID-67',
+ 'zDetFaceGroup-Person Builder State-68',
+ 'zDetFaceGroup-UnNamed Face Count-69',
+ 'zPerson-Face Count-70',
+ 'zDetFace-Face Algorithm Version-71',
+ 'zDetFace-Adjustment Version-72',
+ 'zPerson-In Person Naming Model-73',
+ 'zPerson-Key Face Pick Source Key-74',
+ 'zPerson-Manual Order Key-75',
+ 'zPerson-Question Type-76',
+ 'zPerson-Suggested For Client Type-77',
+ 'zPerson-Merge Target Person-78',
+ 'zPerson-Cloud Local State-79',
+ 'zFaceCrop-Cloud Local State-80',
+ 'zFaceCrop-Cloud Type-81',
+ 'zPerson-Cloud Delete State-82',
+ 'zFaceCrop-Cloud Delete State-83',
+ 'zDetFace-zPK-84',
+ 'zDetFacePrint-Face Key-85',
+ 'zPerson-KeyFace=zDetFace-zPK-86',
+ 'zFaceCrop-Face Key-87',
+ 'zPerson-zPK=zDetFace-Person-88',
+ 'zDetFace-PersonForFace= zPerson-zPK-89',
+ 'zDetFace-Person Being Key Face-90',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-91',
+ 'zDetFace-Face Print-92',
+ 'zDetFacePrint-zPK-93',
+ 'zDetFace-Face Crop-94',
+ 'zFaceCrop-zPK-95',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-96',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-97',
+ 'zPerson-Assoc Face Group Key-98',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-99',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-100',
+ 'zDetFaceGroup-zPK-101',
+ 'zDetFace-UUID-102',
+ 'zFaceCrop-UUID-103',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-104',
+ 'zPerson-Person UUID-105',
+ 'zPerson-Person URI-106',
+ 'zDetFaceGroup-UUID-107')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
zDetFace.ZASSET AS 'zDetFace-AssetForFace= zAsset-zPK',
zFaceCrop.ZASSET AS 'zFaceCrop-Asset Key',
@@ -1380,199 +1357,178 @@ def get_ph15peopledetfacephdapsql(files_found, report_folder, seeker, wrap_text,
LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON
LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP
ORDER BY zDetFace.Z_PK
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- personcontactmatchingdictionary = ''
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- facecropresourcedata_blob = ''
-
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- if row[3] is not None:
- pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[107] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[3])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- personcontactmatchingdictionary = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[107])
- else:
- logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[107])
-
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- if row[10] is not None:
- pathto = os.path.join(report_folder, 'FaceCropFor_' + row[105] + '.jpg')
- with open(pathto, 'wb') as file:
- file.write(row[10])
- facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
-
- data_list.append((row[0], row[1], row[2],
- personcontactmatchingdictionary,
- row[4], row[5], row[6], row[7], row[8], row[9],
- facecropresourcedata_blob,
- row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109]))
-
- counter += 1
-
- description = 'Parses data from PhotoData-Photos.sqlite for' \
- ' people - detected faces - face crop data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 16.'
- report = ArtifactHtmlReport('Ph15.1-People & Faces NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph15.1-People & Faces NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0',
- 'zFaceCrop-Asset Key-1',
- 'zDetFacePrint-Data-SeeRawDBData-2',
- 'zPerson-Contact Matching Dictionary-3',
- 'zPerson-Verified Type-4',
- 'zPerson-Display Name-5',
- 'zPerson-Full Name-6',
- 'zPerson-Cloud Verified Type-7',
- 'zFaceCrop-State-8',
- 'zFaceCrop-Type-9',
- 'zFaceCrop-Resource Data-10',
- 'zDetFace-Confirmed Face Crop Generation State-11',
- 'zDetFace-Manual-12',
- 'zDetFace-Detection Type-13',
- 'zPerson-Detection Type-14',
- 'zDetFace-VIP Model Type-15',
- 'zDetFace-Name Source-16',
- 'zDetFace-Cloud Name Source-17',
- 'zPerson-Merge Candidate Confidence-18',
- 'zPerson-Type-19',
- 'zPerson-Gender Type-20',
- 'zDetFace-Gender Type-21',
- 'zDetFace-Center X-22',
- 'zDetFace-Center Y-23',
- 'zPerson-Age Type Estimate-24',
- 'zDetFace-Age Type Estimate-25',
- 'zDetFace-Ethnicity Type-26',
- 'zDetFace-Skin Tone Type-27',
- 'zDetFace-Hair Type-28',
- 'zDetFace-Hair Color Type-29',
- 'zDetFace-Head Gear Type-30',
- 'zDetFace-Facial Hair Type-31',
- 'zDetFace-Has Face Mask-32',
- 'zDetFace-Pose Type-33',
- 'zDetFace-Face Expression Type-34',
- 'zDetFace-Has Smile-35',
- 'zDetFace-Smile Type-36',
- 'zDetFace-Lip Makeup Type-37',
- 'zDetFace-Eyes State-38',
- 'zDetFace-Is Left Eye Closed-39',
- 'zDetFace-Is Right Eye Closed-40',
- 'zDetFace-Gaze Center X-41',
- 'zDetFace-Gaze Center Y-42',
- 'zDetFace-Face Gaze Type-43',
- 'zDetFace-Eye Glasses Type-44',
- 'zDetFace-Eye Makeup Type-45',
- 'zDetFace-Cluster Squence Number Key-46',
- 'zDetFace-Grouping ID-47',
- 'zDetFace-Master ID-48',
- 'zDetFace-Quality-49',
- 'zDetFace-Quality Measure-50',
- 'zDetFace-Source Height-51',
- 'zDetFace-Source Width-52',
- 'zDetFace-Asset Visible-53',
- 'zDetFace-Hidden/Asset Hidden-54',
- 'zDetFace-In Trash/Recently Deleted-55',
- 'zDetFace-Cloud Local State-56',
- 'zDetFace-Training Type-57',
- 'zDetFace.Pose Yaw-58',
- 'zDetFace-Body Center X-59',
- 'zDetFace-Body Center Y-60',
- 'zDetFace-Body Height-61',
- 'zDetFace-Body Width-62',
- 'zDetFace-Roll-63',
- 'zDetFace-Size-64',
- 'zDetFace-Cluster Sequence Number-65',
- 'zDetFace-Blur Score-66',
- 'zDetFacePrint-Face Print Version-67',
- 'zDetFaceGroup-UUID-68',
- 'zDetFaceGroup-Person Builder State-69',
- 'zDetFaceGroup-UnNamed Face Count-70',
- 'zPerson-Face Count-71',
- 'zDetFace-Face Algorithm Version-72',
- 'zDetFace-Adjustment Version-73',
- 'zPerson-In Person Naming Model-74',
- 'zPerson-Key Face Pick Source Key-75',
- 'zPerson-Manual Order Key-76',
- 'zPerson-Question Type-77',
- 'zPerson-Suggested For Client Type-78',
- 'zPerson-Merge Target Person-79',
- 'zPerson-Cloud Local State-80',
- 'zFaceCrop-Cloud Local State-81',
- 'zFaceCrop-Cloud Type-82',
- 'zPerson-Cloud Delete State-83',
- 'zFaceCrop-Cloud Delete State-84',
- 'zDetFace-zPK-85',
- 'zDetFacePrint-Face Key-86',
- 'zPerson-KeyFace=zDetFace-zPK-87',
- 'zFaceCrop-Face Key-88',
- 'zPerson-zPK=zDetFace-Person-89',
- 'zDetFace-PersonForFace= zPerson-zPK-90',
- 'zDetFace-Person Being Key Face-91',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-92',
- 'zDetFace-Face Print-93',
- 'zDetFacePrint-zPK-94',
- 'zDetFace-Face Crop-95',
- 'zFaceCrop-zPK-96',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-97',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-98',
- 'zPerson-Assoc Face Group Key-99',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-100',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-101',
- 'zDetFaceGroup-zPK-102',
- 'zPerson-Share Participant= zSharePartic-zPK-103',
- 'zDetFace-UUID-104',
- 'zFaceCrop-UUID-105',
- 'zFaceCrop-Invalid Merge Candidate Person UUID-106',
- 'zPerson-Person UUID-107',
- 'zPerson-Person URI-108',
- 'zDetFaceGroup-UUID-109')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph15.1-People & Faces NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph15.1-People & Faces NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite people - detected faces - face crop data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ personcontactmatchingdictionary = ''
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ facecropresourcedata_blob = ''
+
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ if row[3] is not None:
+ pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[107] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[3])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ personcontactmatchingdictionary = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[107])
+ else:
+ logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[107])
+
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ if row[10] is not None:
+ pathto = os.path.join(report_folder, 'FaceCropFor_' + row[105] + '.jpg')
+ with open(pathto, 'wb') as file:
+ file.write(row[10])
+ facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
+
+ data_list.append((row[0], row[1], row[2],
+ personcontactmatchingdictionary,
+ row[4], row[5], row[6], row[7], row[8], row[9],
+ facecropresourcedata_blob,
+ row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109]))
+
+ data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0',
+ 'zFaceCrop-Asset Key-1',
+ 'zDetFacePrint-Data-SeeRawDBData-2',
+ 'zPerson-Contact Matching Dictionary-3',
+ 'zPerson-Verified Type-4',
+ 'zPerson-Display Name-5',
+ 'zPerson-Full Name-6',
+ 'zPerson-Cloud Verified Type-7',
+ 'zFaceCrop-State-8',
+ 'zFaceCrop-Type-9',
+ 'zFaceCrop-Resource Data-10',
+ 'zDetFace-Confirmed Face Crop Generation State-11',
+ 'zDetFace-Manual-12',
+ 'zDetFace-Detection Type-13',
+ 'zPerson-Detection Type-14',
+ 'zDetFace-VIP Model Type-15',
+ 'zDetFace-Name Source-16',
+ 'zDetFace-Cloud Name Source-17',
+ 'zPerson-Merge Candidate Confidence-18',
+ 'zPerson-Type-19',
+ 'zPerson-Gender Type-20',
+ 'zDetFace-Gender Type-21',
+ 'zDetFace-Center X-22',
+ 'zDetFace-Center Y-23',
+ 'zPerson-Age Type Estimate-24',
+ 'zDetFace-Age Type Estimate-25',
+ 'zDetFace-Ethnicity Type-26',
+ 'zDetFace-Skin Tone Type-27',
+ 'zDetFace-Hair Type-28',
+ 'zDetFace-Hair Color Type-29',
+ 'zDetFace-Head Gear Type-30',
+ 'zDetFace-Facial Hair Type-31',
+ 'zDetFace-Has Face Mask-32',
+ 'zDetFace-Pose Type-33',
+ 'zDetFace-Face Expression Type-34',
+ 'zDetFace-Has Smile-35',
+ 'zDetFace-Smile Type-36',
+ 'zDetFace-Lip Makeup Type-37',
+ 'zDetFace-Eyes State-38',
+ 'zDetFace-Is Left Eye Closed-39',
+ 'zDetFace-Is Right Eye Closed-40',
+ 'zDetFace-Gaze Center X-41',
+ 'zDetFace-Gaze Center Y-42',
+ 'zDetFace-Face Gaze Type-43',
+ 'zDetFace-Eye Glasses Type-44',
+ 'zDetFace-Eye Makeup Type-45',
+ 'zDetFace-Cluster Squence Number Key-46',
+ 'zDetFace-Grouping ID-47',
+ 'zDetFace-Master ID-48',
+ 'zDetFace-Quality-49',
+ 'zDetFace-Quality Measure-50',
+ 'zDetFace-Source Height-51',
+ 'zDetFace-Source Width-52',
+ 'zDetFace-Asset Visible-53',
+ 'zDetFace-Hidden/Asset Hidden-54',
+ 'zDetFace-In Trash/Recently Deleted-55',
+ 'zDetFace-Cloud Local State-56',
+ 'zDetFace-Training Type-57',
+ 'zDetFace.Pose Yaw-58',
+ 'zDetFace-Body Center X-59',
+ 'zDetFace-Body Center Y-60',
+ 'zDetFace-Body Height-61',
+ 'zDetFace-Body Width-62',
+ 'zDetFace-Roll-63',
+ 'zDetFace-Size-64',
+ 'zDetFace-Cluster Sequence Number-65',
+ 'zDetFace-Blur Score-66',
+ 'zDetFacePrint-Face Print Version-67',
+ 'zDetFaceGroup-UUID-68',
+ 'zDetFaceGroup-Person Builder State-69',
+ 'zDetFaceGroup-UnNamed Face Count-70',
+ 'zPerson-Face Count-71',
+ 'zDetFace-Face Algorithm Version-72',
+ 'zDetFace-Adjustment Version-73',
+ 'zPerson-In Person Naming Model-74',
+ 'zPerson-Key Face Pick Source Key-75',
+ 'zPerson-Manual Order Key-76',
+ 'zPerson-Question Type-77',
+ 'zPerson-Suggested For Client Type-78',
+ 'zPerson-Merge Target Person-79',
+ 'zPerson-Cloud Local State-80',
+ 'zFaceCrop-Cloud Local State-81',
+ 'zFaceCrop-Cloud Type-82',
+ 'zPerson-Cloud Delete State-83',
+ 'zFaceCrop-Cloud Delete State-84',
+ 'zDetFace-zPK-85',
+ 'zDetFacePrint-Face Key-86',
+ 'zPerson-KeyFace=zDetFace-zPK-87',
+ 'zFaceCrop-Face Key-88',
+ 'zPerson-zPK=zDetFace-Person-89',
+ 'zDetFace-PersonForFace= zPerson-zPK-90',
+ 'zDetFace-Person Being Key Face-91',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-92',
+ 'zDetFace-Face Print-93',
+ 'zDetFacePrint-zPK-94',
+ 'zDetFace-Face Crop-95',
+ 'zFaceCrop-zPK-96',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-97',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-98',
+ 'zPerson-Assoc Face Group Key-99',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-100',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-101',
+ 'zDetFaceGroup-zPK-102',
+ 'zPerson-Share Participant= zSharePartic-zPK-103',
+ 'zDetFace-UUID-104',
+ 'zFaceCrop-UUID-105',
+ 'zFaceCrop-Invalid Merge Candidate Person UUID-106',
+ 'zPerson-Person UUID-107',
+ 'zPerson-Person URI-108',
+ 'zDetFaceGroup-UUID-109')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
zDetFace.ZASSETFORFACE AS 'zDetFace-AssetForFace= zAsset-zPK',
zDetFace.ZASSETFORTORSO AS 'zDetFace-AssetForTorso= zAsset-zPK',
@@ -1934,203 +1890,182 @@ def get_ph15peopledetfacephdapsql(files_found, report_folder, seeker, wrap_text,
LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON
LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP
ORDER BY zDetFace.Z_PK
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- personcontactmatchingdictionary = ''
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- facecropresourcedata_blob = ''
-
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- if row[5] is not None:
- pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[111] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[5])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- personcontactmatchingdictionary = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[111])
- else:
- logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[111])
-
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- if row[12] is not None:
- pathto = os.path.join(report_folder, 'FaceCropFor_' + row[109] + '.jpg')
- with open(pathto, 'wb') as file:
- file.write(row[12])
- facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
-
- data_list.append((row[0], row[1], row[2], row[3], row[4],
- personcontactmatchingdictionary,
- row[6], row[7], row[8], row[9], row[10], row[11],
- facecropresourcedata_blob,
- row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113]))
-
- counter += 1
-
- description = 'Parses data from PhotoData-Photos.sqlite for' \
- ' people - detected faces - face crop data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 17.'
- report = ArtifactHtmlReport('Ph15.1-People & Faces NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph15.1-People & Faces NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0',
- 'zDetFace-AssetForTorso= zAsset-zPK-1',
- 'zFaceCrop-Asset Key-2',
- 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-3',
- 'zDetFacePrint-Data-SeeRawDBData-4',
- 'zPerson-Contact Matching Dictionary-5',
- 'zPerson-Verified Type-6',
- 'zPerson-Display Name-7',
- 'zPerson-Full Name-8',
- 'zPerson-Cloud Verified Type-9',
- 'zFaceCrop-State-10',
- 'zFaceCrop-Type-11',
- 'zFaceCrop-Resource Data-12',
- 'zDetFace-Confirmed Face Crop Generation State-13',
- 'zDetFace-Manual-14',
- 'zDetFace-Detection Type-15',
- 'zPerson-Detection Type-16',
- 'zDetFace-VIP Model Type-17',
- 'zDetFace-Name Source-18',
- 'zDetFace-Cloud Name Source-19',
- 'zPerson-Merge Candidate Confidence-20',
- 'zPerson-Type-21',
- 'zPerson-Gender Type-22',
- 'zDetFace-Gender Type-23',
- 'zDetFace-Center X-24',
- 'zDetFace-Center Y-25',
- 'zPerson-Age Type Estimate-26',
- 'zDetFace-Age Type Estimate-27',
- 'zDetFace-Ethnicity Type-28',
- 'zDetFace-Skin Tone Type-29',
- 'zDetFace-Hair Type-30',
- 'zDetFace-Hair Color Type-31',
- 'zDetFace-Head Gear Type-32',
- 'zDetFace-Facial Hair Type-33',
- 'zDetFace-Has Face Mask-34',
- 'zDetFace-Pose Type-35',
- 'zDetFace-Face Expression Type-36',
- 'zDetFace-Has Smile-37',
- 'zDetFace-Smile Type-38',
- 'zDetFace-Lip Makeup Type-39',
- 'zDetFace-Eyes State-40',
- 'zDetFace-Is Left Eye Closed-41',
- 'zDetFace-Is Right Eye Closed-42',
- 'zDetFace-Gaze Center X-43',
- 'zDetFace-Gaze Center Y-44',
- 'zDetFace-Face Gaze Type-45',
- 'zDetFace-Eye Glasses Type-46',
- 'zDetFace-Eye Makeup Type-47',
- 'zDetFace-Cluster Sequence Number Key-48',
- 'zDetFace-Grouping ID-49',
- 'zDetFace-Master ID-50',
- 'zDetFace-Quality-51',
- 'zDetFace-Quality Measure-52',
- 'zDetFace-Source Height-53',
- 'zDetFace-Source Width-54',
- 'zDetFace-Asset Visible-55',
- 'zDetFace-Hidden/Asset Hidden-56',
- 'zDetFace-In Trash/Recently Deleted-57',
- 'zDetFace-Cloud Local State-58',
- 'zDetFace-Training Type-59',
- 'zDetFace.Pose Yaw-60',
- 'zDetFace-Body Center X-61',
- 'zDetFace-Body Center Y-62',
- 'zDetFace-Body Height-63',
- 'zDetFace-Body Width-64',
- 'zDetFace-Roll-65',
- 'zDetFace-Size-66',
- 'zDetFace-Cluster Sequence Number-67',
- 'zDetFace-Blur Score-68',
- 'zDetFacePrint-Face Print Version-69',
- 'zDetFaceGroup-UUID-70',
- 'zDetFaceGroup-Person Builder State-71',
- 'zDetFaceGroup-UnNamed Face Count-72',
- 'zPerson-Face Count-73',
- 'zDetFace-Face Algorithm Version-74',
- 'zDetFace-Adjustment Version-75',
- 'zPerson-In Person Naming Model-76',
- 'zPerson-Key Face Pick Source Key-77',
- 'zPerson-Manual Order Key-78',
- 'zPerson-Question Type-79',
- 'zPerson-Suggested For Client Type-80',
- 'zPerson-Merge Target Person-81',
- 'zPerson-Cloud Local State-82',
- 'zFaceCrop-Cloud Local State-83',
- 'zFaceCrop-Cloud Type-84',
- 'zPerson-Cloud Delete State-85',
- 'zFaceCrop-Cloud Delete State-86',
- 'zDetFace-zPK-87',
- 'zDetFacePrint-Face Key-88',
- 'zPerson-KeyFace=zDetFace-zPK-89',
- 'zFaceCrop-Face Key-90',
- 'zPerson-zPK=zDetFace-Person-91',
- 'zDetFace-PersonForFace= zPerson-zPK-92',
- 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-93',
- 'zDetFace-PersonForTorso= zPerson-zPK-94',
- 'zDetFace-Person Being Key Face-95',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-96',
- 'zDetFace-Face Print-97',
- 'zDetFacePrint-zPK-98',
- 'zDetFace-Face Crop-99',
- 'zFaceCrop-zPK-100',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-101',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-102',
- 'zPerson-Assoc Face Group Key-103',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-104',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-105',
- 'zDetFaceGroup-zPK-106',
- 'zPerson-Share Participant= zSharePartic-zPK-107',
- 'zDetFace-UUID-108',
- 'zFaceCrop-UUID-109',
- 'zFaceCrop-Invalid Merge Candidate Person UUID-110',
- 'zPerson-Person UUID-111',
- 'zPerson-Person URI-112',
- 'zDetFaceGroup-UUID-113')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph15.1-People & Faces NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph15.1-People & Faces NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite people - detected faces - face crop data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ personcontactmatchingdictionary = ''
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ facecropresourcedata_blob = ''
+
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ if row[5] is not None:
+ pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[111] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[5])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ personcontactmatchingdictionary = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[111])
+ else:
+ logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[111])
+
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ if row[12] is not None:
+ pathto = os.path.join(report_folder, 'FaceCropFor_' + row[109] + '.jpg')
+ with open(pathto, 'wb') as file:
+ file.write(row[12])
+ facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
+
+ data_list.append((row[0], row[1], row[2], row[3], row[4],
+ personcontactmatchingdictionary,
+ row[6], row[7], row[8], row[9], row[10], row[11],
+ facecropresourcedata_blob,
+ row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113]))
+
+ data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0',
+ 'zDetFace-AssetForTorso= zAsset-zPK-1',
+ 'zFaceCrop-Asset Key-2',
+ 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-3',
+ 'zDetFacePrint-Data-SeeRawDBData-4',
+ 'zPerson-Contact Matching Dictionary-5',
+ 'zPerson-Verified Type-6',
+ 'zPerson-Display Name-7',
+ 'zPerson-Full Name-8',
+ 'zPerson-Cloud Verified Type-9',
+ 'zFaceCrop-State-10',
+ 'zFaceCrop-Type-11',
+ 'zFaceCrop-Resource Data-12',
+ 'zDetFace-Confirmed Face Crop Generation State-13',
+ 'zDetFace-Manual-14',
+ 'zDetFace-Detection Type-15',
+ 'zPerson-Detection Type-16',
+ 'zDetFace-VIP Model Type-17',
+ 'zDetFace-Name Source-18',
+ 'zDetFace-Cloud Name Source-19',
+ 'zPerson-Merge Candidate Confidence-20',
+ 'zPerson-Type-21',
+ 'zPerson-Gender Type-22',
+ 'zDetFace-Gender Type-23',
+ 'zDetFace-Center X-24',
+ 'zDetFace-Center Y-25',
+ 'zPerson-Age Type Estimate-26',
+ 'zDetFace-Age Type Estimate-27',
+ 'zDetFace-Ethnicity Type-28',
+ 'zDetFace-Skin Tone Type-29',
+ 'zDetFace-Hair Type-30',
+ 'zDetFace-Hair Color Type-31',
+ 'zDetFace-Head Gear Type-32',
+ 'zDetFace-Facial Hair Type-33',
+ 'zDetFace-Has Face Mask-34',
+ 'zDetFace-Pose Type-35',
+ 'zDetFace-Face Expression Type-36',
+ 'zDetFace-Has Smile-37',
+ 'zDetFace-Smile Type-38',
+ 'zDetFace-Lip Makeup Type-39',
+ 'zDetFace-Eyes State-40',
+ 'zDetFace-Is Left Eye Closed-41',
+ 'zDetFace-Is Right Eye Closed-42',
+ 'zDetFace-Gaze Center X-43',
+ 'zDetFace-Gaze Center Y-44',
+ 'zDetFace-Face Gaze Type-45',
+ 'zDetFace-Eye Glasses Type-46',
+ 'zDetFace-Eye Makeup Type-47',
+ 'zDetFace-Cluster Sequence Number Key-48',
+ 'zDetFace-Grouping ID-49',
+ 'zDetFace-Master ID-50',
+ 'zDetFace-Quality-51',
+ 'zDetFace-Quality Measure-52',
+ 'zDetFace-Source Height-53',
+ 'zDetFace-Source Width-54',
+ 'zDetFace-Asset Visible-55',
+ 'zDetFace-Hidden/Asset Hidden-56',
+ 'zDetFace-In Trash/Recently Deleted-57',
+ 'zDetFace-Cloud Local State-58',
+ 'zDetFace-Training Type-59',
+ 'zDetFace.Pose Yaw-60',
+ 'zDetFace-Body Center X-61',
+ 'zDetFace-Body Center Y-62',
+ 'zDetFace-Body Height-63',
+ 'zDetFace-Body Width-64',
+ 'zDetFace-Roll-65',
+ 'zDetFace-Size-66',
+ 'zDetFace-Cluster Sequence Number-67',
+ 'zDetFace-Blur Score-68',
+ 'zDetFacePrint-Face Print Version-69',
+ 'zDetFaceGroup-UUID-70',
+ 'zDetFaceGroup-Person Builder State-71',
+ 'zDetFaceGroup-UnNamed Face Count-72',
+ 'zPerson-Face Count-73',
+ 'zDetFace-Face Algorithm Version-74',
+ 'zDetFace-Adjustment Version-75',
+ 'zPerson-In Person Naming Model-76',
+ 'zPerson-Key Face Pick Source Key-77',
+ 'zPerson-Manual Order Key-78',
+ 'zPerson-Question Type-79',
+ 'zPerson-Suggested For Client Type-80',
+ 'zPerson-Merge Target Person-81',
+ 'zPerson-Cloud Local State-82',
+ 'zFaceCrop-Cloud Local State-83',
+ 'zFaceCrop-Cloud Type-84',
+ 'zPerson-Cloud Delete State-85',
+ 'zFaceCrop-Cloud Delete State-86',
+ 'zDetFace-zPK-87',
+ 'zDetFacePrint-Face Key-88',
+ 'zPerson-KeyFace=zDetFace-zPK-89',
+ 'zFaceCrop-Face Key-90',
+ 'zPerson-zPK=zDetFace-Person-91',
+ 'zDetFace-PersonForFace= zPerson-zPK-92',
+ 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-93',
+ 'zDetFace-PersonForTorso= zPerson-zPK-94',
+ 'zDetFace-Person Being Key Face-95',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-96',
+ 'zDetFace-Face Print-97',
+ 'zDetFacePrint-zPK-98',
+ 'zDetFace-Face Crop-99',
+ 'zFaceCrop-zPK-100',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-101',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-102',
+ 'zPerson-Assoc Face Group Key-103',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-104',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-105',
+ 'zDetFaceGroup-zPK-106',
+ 'zPerson-Share Participant= zSharePartic-zPK-107',
+ 'zDetFace-UUID-108',
+ 'zFaceCrop-UUID-109',
+ 'zFaceCrop-Invalid Merge Candidate Person UUID-110',
+ 'zPerson-Person UUID-111',
+ 'zPerson-Person URI-112',
+ 'zDetFaceGroup-UUID-113')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
zDetFace.ZASSETFORFACE AS 'zDetFace-AssetForFace= zAsset-zPK',
zDetFace.ZASSETFORTORSO AS 'zDetFace-AssetForTorso= zAsset-zPK',
@@ -2146,7 +2081,7 @@ def get_ph15peopledetfacephdapsql(files_found, report_folder, seeker, wrap_text,
WHEN 1 THEN '1-Has_Contact Matching_Dictionary'
ELSE 'Unknown-New-Value!: ' || zPerson.ZVERIFIEDTYPE || ''
END AS 'zPerson-Verified Type',
- zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence-iOS18',
+ zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence',
zPerson.ZDISPLAYNAME AS 'zPerson-Display Name',
zPerson.ZFULLNAME AS 'zPerson-Full Name',
CASE zPerson.ZCLOUDVERIFIEDTYPE
@@ -2493,218 +2428,197 @@ def get_ph15peopledetfacephdapsql(files_found, report_folder, seeker, wrap_text,
LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON
LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP
ORDER BY zDetFace.Z_PK
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- personcontactmatchingdictionary = ''
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- facecropresourcedata_blob = ''
-
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- if row[5] is not None:
- pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[112] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[5])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- personcontactmatchingdictionary = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[112])
- else:
- logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[112])
-
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- if row[13] is not None:
- pathto = os.path.join(report_folder, 'FaceCropFor_' + row[110] + '.jpg')
- with open(pathto, 'wb') as file:
- file.write(row[13])
- facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
-
- data_list.append((row[0], row[1], row[2], row[3], row[4],
- personcontactmatchingdictionary,
- row[6], row[7], row[8], row[9], row[10], row[11], row[12],
- facecropresourcedata_blob,
- row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114]))
-
- counter += 1
-
- description = 'Parses data from PhotoData-Photos.sqlite for' \
- ' people - detected faces - face crop data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 18.'
- report = ArtifactHtmlReport('Ph15.1-People & Faces NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph15.1-People & Faces NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0',
- 'zDetFace-AssetForTorso= zAsset-zPK-1',
- 'zFaceCrop-Asset Key-2',
- 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-3',
- 'zDetFacePrint-Data-SeeRawDBData-4',
- 'zPerson-Contact Matching Dictionary-5',
- 'zPerson-Verified Type-6',
- 'zPerson-Is_Me_Confidence-iOS18-7',
- 'zPerson-Display Name-8',
- 'zPerson-Full Name-9',
- 'zPerson-Cloud Verified Type-10',
- 'zFaceCrop-State-11',
- 'zFaceCrop-Type-12',
- 'zFaceCrop-Resource Data-13',
- 'zDetFace-Confirmed Face Crop Generation State-14',
- 'zDetFace-Manual-15',
- 'zDetFace-Detection Type-16',
- 'zPerson-Detection Type-17',
- 'zDetFace-VIP Model Type-18',
- 'zDetFace-Name Source-19',
- 'zDetFace-Cloud Name Source-20',
- 'zPerson-Merge Candidate Confidence-21',
- 'zPerson-Type-22',
- 'zPerson-Gender Type-23',
- 'zDetFace-Gender Type-24',
- 'zDetFace-Center X-25',
- 'zDetFace-Center Y-26',
- 'zPerson-Age Type Estimate-27',
- 'zDetFace-Age Type Estimate-28',
- 'zDetFace-Ethnicity Type-29',
- 'zDetFace-Skin Tone Type-30',
- 'zDetFace-Hair Type-31',
- 'zDetFace-Hair Color Type-32',
- 'zDetFace-Head Gear Type-33',
- 'zDetFace-Facial Hair Type-34',
- 'zDetFace-Has Face Mask-35',
- 'zDetFace-Pose Type-36',
- 'zDetFace-Face Expression Type-37',
- 'zDetFace-Has Smile-38',
- 'zDetFace-Smile Type-39',
- 'zDetFace-Lip Makeup Type-40',
- 'zDetFace-Eyes State-41',
- 'zDetFace-Is Left Eye Closed-42',
- 'zDetFace-Is Right Eye Closed-43',
- 'zDetFace-Gaze Center X-44',
- 'zDetFace-Gaze Center Y-45',
- 'zDetFace-Face Gaze Type-46',
- 'zDetFace-Eye Glasses Type-47',
- 'zDetFace-Eye Makeup Type-48',
- 'zDetFace-Cluster Sequence Number Key-49',
- 'zDetFace-Grouping ID-50',
- 'zDetFace-Master ID-51',
- 'zDetFace-Quality-52',
- 'zDetFace-Quality Measure-53',
- 'zDetFace-Source Height-54',
- 'zDetFace-Source Width-55',
- 'zDetFace-Asset Visible-56',
- 'zDetFace-Hidden/Asset Hidden-57',
- 'zDetFace-In Trash/Recently Deleted-58',
- 'zDetFace-Cloud Local State-59',
- 'zDetFace-Training Type-60',
- 'zDetFace.Pose Yaw-61',
- 'zDetFace-Body Center X-62',
- 'zDetFace-Body Center Y-63',
- 'zDetFace-Body Height-64',
- 'zDetFace-Body Width-65',
- 'zDetFace-Roll-66',
- 'zDetFace-Size-67',
- 'zDetFace-Cluster Sequence Number-68',
- 'zDetFace-Blur Score-69',
- 'zDetFacePrint-Face Print Version-70',
- 'zDetFaceGroup-UUID-71',
- 'zDetFaceGroup-Person Builder State-72',
- 'zDetFaceGroup-UnNamed Face Count-73',
- 'zPerson-Face Count-74',
- 'zDetFace-Face Algorithm Version-75',
- 'zDetFace-Adjustment Version-76',
- 'zPerson-In Person Naming Model-77',
- 'zPerson-Key Face Pick Source Key-78',
- 'zPerson-Manual Order Key-79',
- 'zPerson-Question Type-80',
- 'zPerson-Suggested For Client Type-81',
- 'zPerson-Merge Target Person-82',
- 'zPerson-Cloud Local State-83',
- 'zFaceCrop-Cloud Local State-84',
- 'zFaceCrop-Cloud Type-85',
- 'zPerson-Cloud Delete State-86',
- 'zFaceCrop-Cloud Delete State-87',
- 'zDetFace-zPK-88',
- 'zDetFacePrint-Face Key-89',
- 'zPerson-KeyFace=zDetFace-zPK-90',
- 'zFaceCrop-Face Key-91',
- 'zPerson-zPK=zDetFace-Person-92',
- 'zDetFace-PersonForFace= zPerson-zPK-93',
- 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-94',
- 'zDetFace-PersonForTorso= zPerson-zPK-95',
- 'zDetFace-Person Being Key Face-96',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-97',
- 'zDetFace-Face Print-98',
- 'zDetFacePrint-zPK-99',
- 'zDetFace-Face Crop-100',
- 'zFaceCrop-zPK-101',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-102',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-103',
- 'zPerson-Assoc Face Group Key-104',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-105',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-106',
- 'zDetFaceGroup-zPK-107',
- 'zPerson-Share Participant= zSharePartic-zPK-108',
- 'zDetFace-UUID-109',
- 'zFaceCrop-UUID-110',
- 'zFaceCrop-Invalid Merge Candidate Person UUID-111',
- 'zPerson-Person UUID-112',
- 'zPerson-Person URI-113',
- 'zDetFaceGroup-UUID-114')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph15.1-People & Faces NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph15.1-People & Faces NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite people - detected faces - face crop data')
-
- db.close()
- return
-
-
-def get_ph15peopledetfacesyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset):
-
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ personcontactmatchingdictionary = ''
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ facecropresourcedata_blob = ''
+
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ if row[5] is not None:
+ pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[112] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[5])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ personcontactmatchingdictionary = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[112])
+ else:
+ logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[112])
+
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ if row[13] is not None:
+ pathto = os.path.join(report_folder, 'FaceCropFor_' + row[110] + '.jpg')
+ with open(pathto, 'wb') as file:
+ file.write(row[13])
+ facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
+
+ data_list.append((row[0], row[1], row[2], row[3], row[4],
+ personcontactmatchingdictionary,
+ row[6], row[7], row[8], row[9], row[10], row[11], row[12],
+ facecropresourcedata_blob,
+ row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114]))
+
+ data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0',
+ 'zDetFace-AssetForTorso= zAsset-zPK-1',
+ 'zFaceCrop-Asset Key-2',
+ 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-3',
+ 'zDetFacePrint-Data-SeeRawDBData-4',
+ 'zPerson-Contact Matching Dictionary-5',
+ 'zPerson-Verified Type-6',
+ 'zPerson-Is_Me_Confidence-7',
+ 'zPerson-Display Name-8',
+ 'zPerson-Full Name-9',
+ 'zPerson-Cloud Verified Type-10',
+ 'zFaceCrop-State-11',
+ 'zFaceCrop-Type-12',
+ 'zFaceCrop-Resource Data-13',
+ 'zDetFace-Confirmed Face Crop Generation State-14',
+ 'zDetFace-Manual-15',
+ 'zDetFace-Detection Type-16',
+ 'zPerson-Detection Type-17',
+ 'zDetFace-VIP Model Type-18',
+ 'zDetFace-Name Source-19',
+ 'zDetFace-Cloud Name Source-20',
+ 'zPerson-Merge Candidate Confidence-21',
+ 'zPerson-Type-22',
+ 'zPerson-Gender Type-23',
+ 'zDetFace-Gender Type-24',
+ 'zDetFace-Center X-25',
+ 'zDetFace-Center Y-26',
+ 'zPerson-Age Type Estimate-27',
+ 'zDetFace-Age Type Estimate-28',
+ 'zDetFace-Ethnicity Type-29',
+ 'zDetFace-Skin Tone Type-30',
+ 'zDetFace-Hair Type-31',
+ 'zDetFace-Hair Color Type-32',
+ 'zDetFace-Head Gear Type-33',
+ 'zDetFace-Facial Hair Type-34',
+ 'zDetFace-Has Face Mask-35',
+ 'zDetFace-Pose Type-36',
+ 'zDetFace-Face Expression Type-37',
+ 'zDetFace-Has Smile-38',
+ 'zDetFace-Smile Type-39',
+ 'zDetFace-Lip Makeup Type-40',
+ 'zDetFace-Eyes State-41',
+ 'zDetFace-Is Left Eye Closed-42',
+ 'zDetFace-Is Right Eye Closed-43',
+ 'zDetFace-Gaze Center X-44',
+ 'zDetFace-Gaze Center Y-45',
+ 'zDetFace-Face Gaze Type-46',
+ 'zDetFace-Eye Glasses Type-47',
+ 'zDetFace-Eye Makeup Type-48',
+ 'zDetFace-Cluster Sequence Number Key-49',
+ 'zDetFace-Grouping ID-50',
+ 'zDetFace-Master ID-51',
+ 'zDetFace-Quality-52',
+ 'zDetFace-Quality Measure-53',
+ 'zDetFace-Source Height-54',
+ 'zDetFace-Source Width-55',
+ 'zDetFace-Asset Visible-56',
+ 'zDetFace-Hidden/Asset Hidden-57',
+ 'zDetFace-In Trash/Recently Deleted-58',
+ 'zDetFace-Cloud Local State-59',
+ 'zDetFace-Training Type-60',
+ 'zDetFace.Pose Yaw-61',
+ 'zDetFace-Body Center X-62',
+ 'zDetFace-Body Center Y-63',
+ 'zDetFace-Body Height-64',
+ 'zDetFace-Body Width-65',
+ 'zDetFace-Roll-66',
+ 'zDetFace-Size-67',
+ 'zDetFace-Cluster Sequence Number-68',
+ 'zDetFace-Blur Score-69',
+ 'zDetFacePrint-Face Print Version-70',
+ 'zDetFaceGroup-UUID-71',
+ 'zDetFaceGroup-Person Builder State-72',
+ 'zDetFaceGroup-UnNamed Face Count-73',
+ 'zPerson-Face Count-74',
+ 'zDetFace-Face Algorithm Version-75',
+ 'zDetFace-Adjustment Version-76',
+ 'zPerson-In Person Naming Model-77',
+ 'zPerson-Key Face Pick Source Key-78',
+ 'zPerson-Manual Order Key-79',
+ 'zPerson-Question Type-80',
+ 'zPerson-Suggested For Client Type-81',
+ 'zPerson-Merge Target Person-82',
+ 'zPerson-Cloud Local State-83',
+ 'zFaceCrop-Cloud Local State-84',
+ 'zFaceCrop-Cloud Type-85',
+ 'zPerson-Cloud Delete State-86',
+ 'zFaceCrop-Cloud Delete State-87',
+ 'zDetFace-zPK-88',
+ 'zDetFacePrint-Face Key-89',
+ 'zPerson-KeyFace=zDetFace-zPK-90',
+ 'zFaceCrop-Face Key-91',
+ 'zPerson-zPK=zDetFace-Person-92',
+ 'zDetFace-PersonForFace= zPerson-zPK-93',
+ 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-94',
+ 'zDetFace-PersonForTorso= zPerson-zPK-95',
+ 'zDetFace-Person Being Key Face-96',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-97',
+ 'zDetFace-Face Print-98',
+ 'zDetFacePrint-zPK-99',
+ 'zDetFace-Face Crop-100',
+ 'zFaceCrop-zPK-101',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-102',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-103',
+ 'zPerson-Assoc Face Group Key-104',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-105',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-106',
+ 'zDetFaceGroup-zPK-107',
+ 'zPerson-Share Participant= zSharePartic-zPK-108',
+ 'zDetFace-UUID-109',
+ 'zFaceCrop-UUID-110',
+ 'zFaceCrop-Invalid Merge Candidate Person UUID-111',
+ 'zPerson-Person UUID-112',
+ 'zPerson-Person URI-113',
+ 'zDetFaceGroup-UUID-114')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
+@artifact_processor
+def Ph15_2PeopleFacesNADSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
+
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("13.7"):
- logfunc("Unsupported version for Syndication.photoslibrary-database-Photos.sqlite people - detected faces - face crop data iOS " + iosversion)
+ logfunc("Unsupported version for Syndication.photoslibrary iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
zDetFace.ZASSET AS 'zDetFace-AssetForFace= zAsset-zPK',
zFaceCrop.ZASSET AS 'zFaceCrop-Asset Key',
@@ -2972,179 +2886,158 @@ def get_ph15peopledetfacesyndpl(files_found, report_folder, seeker, wrap_text, t
LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON
LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP
ORDER BY zDetFace.Z_PK
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- personcontactmatchingdictionary = ''
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- facecropresourcedata_blob = ''
-
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- if row[3] is not None:
- pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[89] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[3])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- personcontactmatchingdictionary = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[89])
- else:
- logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[89])
-
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- if row[10] is not None:
- pathto = os.path.join(report_folder, 'FaceCropFor_' + row[87] + '.jpg')
- with open(pathto, 'wb') as file:
- file.write(row[10])
- facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
-
- data_list.append((row[0], row[1], row[2],
- personcontactmatchingdictionary,
- row[4], row[5], row[6], row[7], row[8], row[9],
- facecropresourcedata_blob,
- row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91]))
-
- counter += 1
-
- description = 'Parses data from Syndication.photoslibrary-database-Photos.sqlite for' \
- ' people - detected faces - face crop data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 14.'
- report = ArtifactHtmlReport('Ph15.2-People & Faces NAD-SyndPL')
- report.start_artifact_report(report_folder, 'Ph15.2-People & Faces NAD-SyndPL', description)
- report.add_script()
- data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0',
- 'zFaceCrop-Asset Key-1',
- 'zDetFacePrint-Data-SeeRawDBData-2',
- 'zPerson-Contact Matching Dictionary-3',
- 'zPerson-Verified Type-4',
- 'zPerson-Display Name-5',
- 'zPerson-Full Name-6',
- 'zPerson-Cloud Verified Type-7',
- 'zFaceCrop-State-8',
- 'zFaceCrop-Type-9',
- 'zFaceCrop-Resource Data-10',
- 'zDetFace-Confirmed Face Crop Generation State-11',
- 'zDetFace-Manual-12',
- 'zDetFace-VIP Model Type-13',
- 'zDetFace-Name Source-14',
- 'zDetFace-Cloud Name Source-15',
- 'zPerson-Type-16',
- 'zPerson-Gender Type-17',
- 'zDetFace-Gender Type-18',
- 'zDetFace-Center X-19',
- 'zDetFace-Center Y-20',
- 'zPerson-Age Type Estimate-21',
- 'zDetFace-Age Type Estimate-22',
- 'zDetFace-Hair Color Type-23',
- 'zDetFace-Facial Hair Type-24',
- 'zDetFace-Has Smile-25',
- 'zDetFace-Smile Type-26',
- 'zDetFace-Lip Makeup Type-27',
- 'zDetFace-Eyes State-28',
- 'zDetFace-Is Left Eye Closed-29',
- 'zDetFace-Is Right Eye Closed-30',
- 'zDetFace-Eye Glasses Type-31',
- 'zDetFace-Eye Makeup Type-32',
- 'zDetFace-Cluster Sequence Number Key-33',
- 'zDetFace-Grouping ID-34',
- 'zDetFace-Master ID-35',
- 'zDetFace-Quality-36',
- 'zDetFace-Quality Measure-37',
- 'zDetFace-Source Height-38',
- 'zDetFace-Source Width-39',
- 'zDetFace-Asset Visible-40',
- 'zDetFace-Hidden/Asset Hidden-41',
- 'zDetFace-In Trash/Recently Deleted-42',
- 'zDetFace-Cloud Local State-43',
- 'zDetFace-Training Type-44',
- 'zDetFace.Pose Yaw-45',
- 'zDetFace-Roll-46',
- 'zDetFace-Size-47',
- 'zDetFace-Cluster Sequence Number-48',
- 'zDetFace-Blur Score-49',
- 'zDetFacePrint-Face Print Version-50',
- 'zDetFaceGroup-UUID-51',
- 'zDetFaceGroup-Person Builder State-52',
- 'zDetFaceGroup-UnNamed Face Count-53',
- 'zPerson-Face Count-54',
- 'zDetFace-Face Algorithm Version-55',
- 'zDetFace-Adjustment Version-56',
- 'zPerson-In Person Naming Model-57',
- 'zPerson-Key Face Pick Source Key-58',
- 'zPerson-Manual Order Key-59',
- 'zPerson-Question Type-60',
- 'zPerson-Suggested For Client Type-61',
- 'zPerson-Merge Target Person-62',
- 'zPerson-Cloud Local State-63',
- 'zFaceCrop-Cloud Local State-64',
- 'zFaceCrop-Cloud Type-65',
- 'zPerson-Cloud Delete State-66',
- 'zFaceCrop-Cloud Delete State-67',
- 'zDetFace-zPK-68',
- 'zDetFacePrint-Face Key-69',
- 'zPerson-KeyFace=zDetFace-zPK-70',
- 'zFaceCrop-Face Key-71',
- 'zPerson-zPK=zDetFace-Person-72',
- 'zDetFace-PersonForFace= zPerson-zPK-73',
- 'zDetFace-Person Being Key Face-74',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-75',
- 'zDetFace-Face Print-76',
- 'zDetFacePrint-zPK-77',
- 'zDetFace-Face Crop-78',
- 'zFaceCrop-zPK-79',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-80',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-81',
- 'zPerson-Assoc Face Group Key-82',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-83',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-84',
- 'zDetFaceGroup-zPK-85',
- 'zDetFace-UUID-86',
- 'zFaceCrop-UUID-87',
- 'zFaceCrop-Invalid Merge Candidate Person UUID-88',
- 'zPerson-Person UUID-89',
- 'zPerson-Person URI-90',
- 'zDetFaceGroup-UUID-91')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph15.2-People & Faces NAD-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph15.2-People & Faces NAD-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite people - detected faces - face crop data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ personcontactmatchingdictionary = ''
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ facecropresourcedata_blob = ''
+
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ if row[3] is not None:
+ pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[89] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[3])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ personcontactmatchingdictionary = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[89])
+ else:
+ logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[89])
+
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ if row[10] is not None:
+ pathto = os.path.join(report_folder, 'FaceCropFor_' + row[87] + '.jpg')
+ with open(pathto, 'wb') as file:
+ file.write(row[10])
+ facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
+
+ data_list.append((row[0], row[1], row[2],
+ personcontactmatchingdictionary,
+ row[4], row[5], row[6], row[7], row[8], row[9],
+ facecropresourcedata_blob,
+ row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91]))
+
+ data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0',
+ 'zFaceCrop-Asset Key-1',
+ 'zDetFacePrint-Data-SeeRawDBData-2',
+ 'zPerson-Contact Matching Dictionary-3',
+ 'zPerson-Verified Type-4',
+ 'zPerson-Display Name-5',
+ 'zPerson-Full Name-6',
+ 'zPerson-Cloud Verified Type-7',
+ 'zFaceCrop-State-8',
+ 'zFaceCrop-Type-9',
+ 'zFaceCrop-Resource Data-10',
+ 'zDetFace-Confirmed Face Crop Generation State-11',
+ 'zDetFace-Manual-12',
+ 'zDetFace-VIP Model Type-13',
+ 'zDetFace-Name Source-14',
+ 'zDetFace-Cloud Name Source-15',
+ 'zPerson-Type-16',
+ 'zPerson-Gender Type-17',
+ 'zDetFace-Gender Type-18',
+ 'zDetFace-Center X-19',
+ 'zDetFace-Center Y-20',
+ 'zPerson-Age Type Estimate-21',
+ 'zDetFace-Age Type Estimate-22',
+ 'zDetFace-Hair Color Type-23',
+ 'zDetFace-Facial Hair Type-24',
+ 'zDetFace-Has Smile-25',
+ 'zDetFace-Smile Type-26',
+ 'zDetFace-Lip Makeup Type-27',
+ 'zDetFace-Eyes State-28',
+ 'zDetFace-Is Left Eye Closed-29',
+ 'zDetFace-Is Right Eye Closed-30',
+ 'zDetFace-Eye Glasses Type-31',
+ 'zDetFace-Eye Makeup Type-32',
+ 'zDetFace-Cluster Sequence Number Key-33',
+ 'zDetFace-Grouping ID-34',
+ 'zDetFace-Master ID-35',
+ 'zDetFace-Quality-36',
+ 'zDetFace-Quality Measure-37',
+ 'zDetFace-Source Height-38',
+ 'zDetFace-Source Width-39',
+ 'zDetFace-Asset Visible-40',
+ 'zDetFace-Hidden/Asset Hidden-41',
+ 'zDetFace-In Trash/Recently Deleted-42',
+ 'zDetFace-Cloud Local State-43',
+ 'zDetFace-Training Type-44',
+ 'zDetFace.Pose Yaw-45',
+ 'zDetFace-Roll-46',
+ 'zDetFace-Size-47',
+ 'zDetFace-Cluster Sequence Number-48',
+ 'zDetFace-Blur Score-49',
+ 'zDetFacePrint-Face Print Version-50',
+ 'zDetFaceGroup-UUID-51',
+ 'zDetFaceGroup-Person Builder State-52',
+ 'zDetFaceGroup-UnNamed Face Count-53',
+ 'zPerson-Face Count-54',
+ 'zDetFace-Face Algorithm Version-55',
+ 'zDetFace-Adjustment Version-56',
+ 'zPerson-In Person Naming Model-57',
+ 'zPerson-Key Face Pick Source Key-58',
+ 'zPerson-Manual Order Key-59',
+ 'zPerson-Question Type-60',
+ 'zPerson-Suggested For Client Type-61',
+ 'zPerson-Merge Target Person-62',
+ 'zPerson-Cloud Local State-63',
+ 'zFaceCrop-Cloud Local State-64',
+ 'zFaceCrop-Cloud Type-65',
+ 'zPerson-Cloud Delete State-66',
+ 'zFaceCrop-Cloud Delete State-67',
+ 'zDetFace-zPK-68',
+ 'zDetFacePrint-Face Key-69',
+ 'zPerson-KeyFace=zDetFace-zPK-70',
+ 'zFaceCrop-Face Key-71',
+ 'zPerson-zPK=zDetFace-Person-72',
+ 'zDetFace-PersonForFace= zPerson-zPK-73',
+ 'zDetFace-Person Being Key Face-74',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-75',
+ 'zDetFace-Face Print-76',
+ 'zDetFacePrint-zPK-77',
+ 'zDetFace-Face Crop-78',
+ 'zFaceCrop-zPK-79',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-80',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-81',
+ 'zPerson-Assoc Face Group Key-82',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-83',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-84',
+ 'zDetFaceGroup-zPK-85',
+ 'zDetFace-UUID-86',
+ 'zFaceCrop-UUID-87',
+ 'zFaceCrop-Invalid Merge Candidate Person UUID-88',
+ 'zPerson-Person UUID-89',
+ 'zPerson-Person URI-90',
+ 'zDetFaceGroup-UUID-91')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
zDetFace.ZASSET AS 'zDetFace-AssetForFace= zAsset-zPK',
zFaceCrop.ZASSET AS 'zFaceCrop-Asset Key',
@@ -3500,196 +3393,175 @@ def get_ph15peopledetfacesyndpl(files_found, report_folder, seeker, wrap_text, t
LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON
LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP
ORDER BY zDetFace.Z_PK
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- personcontactmatchingdictionary = ''
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- facecropresourcedata_blob = ''
-
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- if row[3] is not None:
- pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[105] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[3])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- personcontactmatchingdictionary = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[105])
- else:
- logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[105])
-
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- if row[10] is not None:
- pathto = os.path.join(report_folder, 'FaceCropFor_' + row[103] + '.jpg')
- with open(pathto, 'wb') as file:
- file.write(row[10])
- facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
-
- data_list.append((row[0], row[1], row[2],
- personcontactmatchingdictionary,
- row[4], row[5], row[6], row[7], row[8], row[9],
- facecropresourcedata_blob,
- row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107]))
-
- counter += 1
-
- description = 'Parses data from Syndication.photoslibrary-database-Photos.sqlite for' \
- ' people - detected faces - face crop data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 15.'
- report = ArtifactHtmlReport('Ph15.2-People & Faces NAD-SyndPL')
- report.start_artifact_report(report_folder, 'Ph15.2-People & Faces NAD-SyndPL', description)
- report.add_script()
- data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0',
- 'zFaceCrop-Asset Key-1',
- 'zDetFacePrint-Data-SeeRawDBData-2',
- 'zPerson-Contact Matching Dictionary-3',
- 'zPerson-Verified Type-4',
- 'zPerson-Display Name-5',
- 'zPerson-Full Name-6',
- 'zPerson-Cloud Verified Type-7',
- 'zFaceCrop-State-8',
- 'zFaceCrop-Type-9',
- 'zFaceCrop-Resource Data-10',
- 'zDetFace-Confirmed Face Crop Generation State-11',
- 'zDetFace-Manual-12',
- 'zDetFace-Detection Type-13',
- 'zPerson-Detection Type-14',
- 'zDetFace-VIP Model Type-15',
- 'zDetFace-Name Source-16',
- 'zDetFace-Cloud Name Source-17',
- 'zPerson-Type-18',
- 'zPerson-Gender Type-19',
- 'zDetFace-Gender Type-20',
- 'zDetFace-Center X-21',
- 'zDetFace-Center Y-22',
- 'zPerson-Age Type Estimate-23',
- 'zDetFace-Age Type Estimate-24',
- 'zDetFace-Ethnicity Type-25',
- 'zDetFace-Skin Tone Type-26',
- 'zDetFace-Hair Type-27',
- 'zDetFace-Hair Color Type-28',
- 'zDetFace-Head Gear Type-29',
- 'zDetFace-Facial Hair Type-30',
- 'zDetFace-Has Face Mask-31',
- 'zDetFace-Pose Type-32',
- 'zDetFace-Face Expression Type-33',
- 'zDetFace-Has Smile-34',
- 'zDetFace-Smile Type-35',
- 'zDetFace-Lip Makeup Type-36',
- 'zDetFace-Eyes State-37',
- 'zDetFace-Is Left Eye Closed-38',
- 'zDetFace-Is Right Eye Closed-39',
- 'zDetFace-Gaze Center X-40',
- 'zDetFace-Gaze Center Y-41',
- 'zDetFace-Face Gaze Type-42',
- 'zDetFace-Eye Glasses Type-43',
- 'zDetFace-Eye Makeup Type-44',
- 'zDetFace-Cluster Squence Number Key-45',
- 'zDetFace-Grouping ID-46',
- 'zDetFace-Master ID-47',
- 'zDetFace-Quality-48',
- 'zDetFace-Quality Measure-49',
- 'zDetFace-Source Height-50',
- 'zDetFace-Source Width-51',
- 'zDetFace-Asset Visible-52',
- 'zDetFace-Hidden/Asset Hidden-53',
- 'zDetFace-In Trash/Recently Deleted-54',
- 'zDetFace-Cloud Local State-55',
- 'zDetFace-Training Type-56',
- 'zDetFace.Pose Yaw-57',
- 'zDetFace-Body Center X-58',
- 'zDetFace-Body Center Y-59',
- 'zDetFace-Body Height-60',
- 'zDetFace-Body Width-61',
- 'zDetFace-Roll-62',
- 'zDetFace-Size-63',
- 'zDetFace-Cluster Squence Number-64',
- 'zDetFace-Blur Score-65',
- 'zDetFacePrint-Face Print Version-66',
- 'zDetFaceGroup-UUID-67',
- 'zDetFaceGroup-Person Builder State-68',
- 'zDetFaceGroup-UnNamed Face Count-69',
- 'zPerson-Face Count-70',
- 'zDetFace-Face Algorithm Version-71',
- 'zDetFace-Adjustment Version-72',
- 'zPerson-In Person Naming Model-73',
- 'zPerson-Key Face Pick Source Key-74',
- 'zPerson-Manual Order Key-75',
- 'zPerson-Question Type-76',
- 'zPerson-Suggested For Client Type-77',
- 'zPerson-Merge Target Person-78',
- 'zPerson-Cloud Local State-79',
- 'zFaceCrop-Cloud Local State-80',
- 'zFaceCrop-Cloud Type-81',
- 'zPerson-Cloud Delete State-82',
- 'zFaceCrop-Cloud Delete State-83',
- 'zDetFace-zPK-84',
- 'zDetFacePrint-Face Key-85',
- 'zPerson-KeyFace=zDetFace-zPK-86',
- 'zFaceCrop-Face Key-87',
- 'zPerson-zPK=zDetFace-Person-88',
- 'zDetFace-PersonForFace= zPerson-zPK-89',
- 'zDetFace-Person Being Key Face-90',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-91',
- 'zDetFace-Face Print-92',
- 'zDetFacePrint-zPK-93',
- 'zDetFace-Face Crop-94',
- 'zFaceCrop-zPK-95',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-96',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-97',
- 'zPerson-Assoc Face Group Key-98',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-99',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-100',
- 'zDetFaceGroup-zPK-101',
- 'zDetFace-UUID-102',
- 'zFaceCrop-UUID-103',
- 'zFaceCrop-Invalid Merge Canidate Person UUID-104',
- 'zPerson-Person UUID-105',
- 'zPerson-Person URI-106',
- 'zDetFaceGroup-UUID-107')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph15.2-People & Faces NAD-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph15.2-People & Faces NAD-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite people - detected faces - face crop data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ personcontactmatchingdictionary = ''
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ facecropresourcedata_blob = ''
+
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ if row[3] is not None:
+ pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[105] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[3])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ personcontactmatchingdictionary = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[105])
+ else:
+ logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[105])
+
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ if row[10] is not None:
+ pathto = os.path.join(report_folder, 'FaceCropFor_' + row[103] + '.jpg')
+ with open(pathto, 'wb') as file:
+ file.write(row[10])
+ facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
+
+ data_list.append((row[0], row[1], row[2],
+ personcontactmatchingdictionary,
+ row[4], row[5], row[6], row[7], row[8], row[9],
+ facecropresourcedata_blob,
+ row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107]))
+
+ data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0',
+ 'zFaceCrop-Asset Key-1',
+ 'zDetFacePrint-Data-SeeRawDBData-2',
+ 'zPerson-Contact Matching Dictionary-3',
+ 'zPerson-Verified Type-4',
+ 'zPerson-Display Name-5',
+ 'zPerson-Full Name-6',
+ 'zPerson-Cloud Verified Type-7',
+ 'zFaceCrop-State-8',
+ 'zFaceCrop-Type-9',
+ 'zFaceCrop-Resource Data-10',
+ 'zDetFace-Confirmed Face Crop Generation State-11',
+ 'zDetFace-Manual-12',
+ 'zDetFace-Detection Type-13',
+ 'zPerson-Detection Type-14',
+ 'zDetFace-VIP Model Type-15',
+ 'zDetFace-Name Source-16',
+ 'zDetFace-Cloud Name Source-17',
+ 'zPerson-Type-18',
+ 'zPerson-Gender Type-19',
+ 'zDetFace-Gender Type-20',
+ 'zDetFace-Center X-21',
+ 'zDetFace-Center Y-22',
+ 'zPerson-Age Type Estimate-23',
+ 'zDetFace-Age Type Estimate-24',
+ 'zDetFace-Ethnicity Type-25',
+ 'zDetFace-Skin Tone Type-26',
+ 'zDetFace-Hair Type-27',
+ 'zDetFace-Hair Color Type-28',
+ 'zDetFace-Head Gear Type-29',
+ 'zDetFace-Facial Hair Type-30',
+ 'zDetFace-Has Face Mask-31',
+ 'zDetFace-Pose Type-32',
+ 'zDetFace-Face Expression Type-33',
+ 'zDetFace-Has Smile-34',
+ 'zDetFace-Smile Type-35',
+ 'zDetFace-Lip Makeup Type-36',
+ 'zDetFace-Eyes State-37',
+ 'zDetFace-Is Left Eye Closed-38',
+ 'zDetFace-Is Right Eye Closed-39',
+ 'zDetFace-Gaze Center X-40',
+ 'zDetFace-Gaze Center Y-41',
+ 'zDetFace-Face Gaze Type-42',
+ 'zDetFace-Eye Glasses Type-43',
+ 'zDetFace-Eye Makeup Type-44',
+ 'zDetFace-Cluster Squence Number Key-45',
+ 'zDetFace-Grouping ID-46',
+ 'zDetFace-Master ID-47',
+ 'zDetFace-Quality-48',
+ 'zDetFace-Quality Measure-49',
+ 'zDetFace-Source Height-50',
+ 'zDetFace-Source Width-51',
+ 'zDetFace-Asset Visible-52',
+ 'zDetFace-Hidden/Asset Hidden-53',
+ 'zDetFace-In Trash/Recently Deleted-54',
+ 'zDetFace-Cloud Local State-55',
+ 'zDetFace-Training Type-56',
+ 'zDetFace.Pose Yaw-57',
+ 'zDetFace-Body Center X-58',
+ 'zDetFace-Body Center Y-59',
+ 'zDetFace-Body Height-60',
+ 'zDetFace-Body Width-61',
+ 'zDetFace-Roll-62',
+ 'zDetFace-Size-63',
+ 'zDetFace-Cluster Squence Number-64',
+ 'zDetFace-Blur Score-65',
+ 'zDetFacePrint-Face Print Version-66',
+ 'zDetFaceGroup-UUID-67',
+ 'zDetFaceGroup-Person Builder State-68',
+ 'zDetFaceGroup-UnNamed Face Count-69',
+ 'zPerson-Face Count-70',
+ 'zDetFace-Face Algorithm Version-71',
+ 'zDetFace-Adjustment Version-72',
+ 'zPerson-In Person Naming Model-73',
+ 'zPerson-Key Face Pick Source Key-74',
+ 'zPerson-Manual Order Key-75',
+ 'zPerson-Question Type-76',
+ 'zPerson-Suggested For Client Type-77',
+ 'zPerson-Merge Target Person-78',
+ 'zPerson-Cloud Local State-79',
+ 'zFaceCrop-Cloud Local State-80',
+ 'zFaceCrop-Cloud Type-81',
+ 'zPerson-Cloud Delete State-82',
+ 'zFaceCrop-Cloud Delete State-83',
+ 'zDetFace-zPK-84',
+ 'zDetFacePrint-Face Key-85',
+ 'zPerson-KeyFace=zDetFace-zPK-86',
+ 'zFaceCrop-Face Key-87',
+ 'zPerson-zPK=zDetFace-Person-88',
+ 'zDetFace-PersonForFace= zPerson-zPK-89',
+ 'zDetFace-Person Being Key Face-90',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-91',
+ 'zDetFace-Face Print-92',
+ 'zDetFacePrint-zPK-93',
+ 'zDetFace-Face Crop-94',
+ 'zFaceCrop-zPK-95',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-96',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-97',
+ 'zPerson-Assoc Face Group Key-98',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-99',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-100',
+ 'zDetFaceGroup-zPK-101',
+ 'zDetFace-UUID-102',
+ 'zFaceCrop-UUID-103',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-104',
+ 'zPerson-Person UUID-105',
+ 'zPerson-Person URI-106',
+ 'zDetFaceGroup-UUID-107')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
zDetFace.ZASSET AS 'zDetFace-AssetForFace= zAsset-zPK',
zFaceCrop.ZASSET AS 'zFaceCrop-Asset Key',
@@ -4047,199 +3919,178 @@ def get_ph15peopledetfacesyndpl(files_found, report_folder, seeker, wrap_text, t
LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON
LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP
ORDER BY zDetFace.Z_PK
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- personcontactmatchingdictionary = ''
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- facecropresourcedata_blob = ''
-
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- if row[3] is not None:
- pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[107] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[3])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- personcontactmatchingdictionary = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[107])
- else:
- logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[107])
-
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- if row[10] is not None:
- pathto = os.path.join(report_folder, 'FaceCropFor_' + row[105] + '.jpg')
- with open(pathto, 'wb') as file:
- file.write(row[10])
- facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
-
- data_list.append((row[0], row[1], row[2],
- personcontactmatchingdictionary,
- row[4], row[5], row[6], row[7], row[8], row[9],
- facecropresourcedata_blob,
- row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109]))
-
- counter += 1
-
- description = 'Parses data from Syndication.photoslibrary-database-Photos.sqlite for' \
- ' people - detected faces - face crop data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 16.'
- report = ArtifactHtmlReport('Ph15.2-People & Faces NAD-SyndPL')
- report.start_artifact_report(report_folder, 'Ph15.2-People & Faces NAD-SyndPL', description)
- report.add_script()
- data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0',
- 'zFaceCrop-Asset Key-1',
- 'zDetFacePrint-Data-SeeRawDBData-2',
- 'zPerson-Contact Matching Dictionary-3',
- 'zPerson-Verified Type-4',
- 'zPerson-Display Name-5',
- 'zPerson-Full Name-6',
- 'zPerson-Cloud Verified Type-7',
- 'zFaceCrop-State-8',
- 'zFaceCrop-Type-9',
- 'zFaceCrop-Resource Data-10',
- 'zDetFace-Confirmed Face Crop Generation State-11',
- 'zDetFace-Manual-12',
- 'zDetFace-Detection Type-13',
- 'zPerson-Detection Type-14',
- 'zDetFace-VIP Model Type-15',
- 'zDetFace-Name Source-16',
- 'zDetFace-Cloud Name Source-17',
- 'zPerson-Merge Candidate Confidence-18',
- 'zPerson-Type-19',
- 'zPerson-Gender Type-20',
- 'zDetFace-Gender Type-21',
- 'zDetFace-Center X-22',
- 'zDetFace-Center Y-23',
- 'zPerson-Age Type Estimate-24',
- 'zDetFace-Age Type Estimate-25',
- 'zDetFace-Ethnicity Type-26',
- 'zDetFace-Skin Tone Type-27',
- 'zDetFace-Hair Type-28',
- 'zDetFace-Hair Color Type-29',
- 'zDetFace-Head Gear Type-30',
- 'zDetFace-Facial Hair Type-31',
- 'zDetFace-Has Face Mask-32',
- 'zDetFace-Pose Type-33',
- 'zDetFace-Face Expression Type-34',
- 'zDetFace-Has Smile-35',
- 'zDetFace-Smile Type-36',
- 'zDetFace-Lip Makeup Type-37',
- 'zDetFace-Eyes State-38',
- 'zDetFace-Is Left Eye Closed-39',
- 'zDetFace-Is Right Eye Closed-40',
- 'zDetFace-Gaze Center X-41',
- 'zDetFace-Gaze Center Y-42',
- 'zDetFace-Face Gaze Type-43',
- 'zDetFace-Eye Glasses Type-44',
- 'zDetFace-Eye Makeup Type-45',
- 'zDetFace-Cluster Squence Number Key-46',
- 'zDetFace-Grouping ID-47',
- 'zDetFace-Master ID-48',
- 'zDetFace-Quality-49',
- 'zDetFace-Quality Measure-50',
- 'zDetFace-Source Height-51',
- 'zDetFace-Source Width-52',
- 'zDetFace-Asset Visible-53',
- 'zDetFace-Hidden/Asset Hidden-54',
- 'zDetFace-In Trash/Recently Deleted-55',
- 'zDetFace-Cloud Local State-56',
- 'zDetFace-Training Type-57',
- 'zDetFace.Pose Yaw-58',
- 'zDetFace-Body Center X-59',
- 'zDetFace-Body Center Y-60',
- 'zDetFace-Body Height-61',
- 'zDetFace-Body Width-62',
- 'zDetFace-Roll-63',
- 'zDetFace-Size-64',
- 'zDetFace-Cluster Squence Number-65',
- 'zDetFace-Blur Score-66',
- 'zDetFacePrint-Face Print Version-67',
- 'zDetFaceGroup-UUID-68',
- 'zDetFaceGroup-Person Builder State-69',
- 'zDetFaceGroup-UnNamed Face Count-70',
- 'zPerson-Face Count-71',
- 'zDetFace-Face Algorithm Version-72',
- 'zDetFace-Adjustment Version-73',
- 'zPerson-In Person Naming Model-74',
- 'zPerson-Key Face Pick Source Key-75',
- 'zPerson-Manual Order Key-76',
- 'zPerson-Question Type-77',
- 'zPerson-Suggested For Client Type-78',
- 'zPerson-Merge Target Person-79',
- 'zPerson-Cloud Local State-80',
- 'zFaceCrop-Cloud Local State-81',
- 'zFaceCrop-Cloud Type-82',
- 'zPerson-Cloud Delete State-83',
- 'zFaceCrop-Cloud Delete State-84',
- 'zDetFace-zPK-85',
- 'zDetFacePrint-Face Key-86',
- 'zPerson-KeyFace=zDetFace-zPK-87',
- 'zFaceCrop-Face Key-88',
- 'zPerson-zPK=zDetFace-Person-89',
- 'zDetFace-PersonForFace= zPerson-zPK-90',
- 'zDetFace-Person Being Key Face-91',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-92',
- 'zDetFace-Face Print-93',
- 'zDetFacePrint-zPK-94',
- 'zDetFace-Face Crop-95',
- 'zFaceCrop-zPK-96',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-97',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-98',
- 'zPerson-Assoc Face Group Key-99',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-100',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-101',
- 'zDetFaceGroup-zPK-102',
- 'zPerson-Share Participant= zSharePartic-zPK-103',
- 'zDetFace-UUID-104',
- 'zFaceCrop-UUID-105',
- 'zFaceCrop-Invalid Merge Canidate Person UUID-106',
- 'zPerson-Person UUID-107',
- 'zPerson-Person URI-108',
- 'zDetFaceGroup-UUID-109')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph15.2-People & Faces NAD-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph15.2-People & Faces NAD-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite people - detected faces - face crop data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ personcontactmatchingdictionary = ''
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ facecropresourcedata_blob = ''
+
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ if row[3] is not None:
+ pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[107] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[3])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ personcontactmatchingdictionary = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[107])
+ else:
+ logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[107])
+
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ if row[10] is not None:
+ pathto = os.path.join(report_folder, 'FaceCropFor_' + row[105] + '.jpg')
+ with open(pathto, 'wb') as file:
+ file.write(row[10])
+ facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
+
+ data_list.append((row[0], row[1], row[2],
+ personcontactmatchingdictionary,
+ row[4], row[5], row[6], row[7], row[8], row[9],
+ facecropresourcedata_blob,
+ row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109]))
+
+ data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0',
+ 'zFaceCrop-Asset Key-1',
+ 'zDetFacePrint-Data-SeeRawDBData-2',
+ 'zPerson-Contact Matching Dictionary-3',
+ 'zPerson-Verified Type-4',
+ 'zPerson-Display Name-5',
+ 'zPerson-Full Name-6',
+ 'zPerson-Cloud Verified Type-7',
+ 'zFaceCrop-State-8',
+ 'zFaceCrop-Type-9',
+ 'zFaceCrop-Resource Data-10',
+ 'zDetFace-Confirmed Face Crop Generation State-11',
+ 'zDetFace-Manual-12',
+ 'zDetFace-Detection Type-13',
+ 'zPerson-Detection Type-14',
+ 'zDetFace-VIP Model Type-15',
+ 'zDetFace-Name Source-16',
+ 'zDetFace-Cloud Name Source-17',
+ 'zPerson-Merge Candidate Confidence-18',
+ 'zPerson-Type-19',
+ 'zPerson-Gender Type-20',
+ 'zDetFace-Gender Type-21',
+ 'zDetFace-Center X-22',
+ 'zDetFace-Center Y-23',
+ 'zPerson-Age Type Estimate-24',
+ 'zDetFace-Age Type Estimate-25',
+ 'zDetFace-Ethnicity Type-26',
+ 'zDetFace-Skin Tone Type-27',
+ 'zDetFace-Hair Type-28',
+ 'zDetFace-Hair Color Type-29',
+ 'zDetFace-Head Gear Type-30',
+ 'zDetFace-Facial Hair Type-31',
+ 'zDetFace-Has Face Mask-32',
+ 'zDetFace-Pose Type-33',
+ 'zDetFace-Face Expression Type-34',
+ 'zDetFace-Has Smile-35',
+ 'zDetFace-Smile Type-36',
+ 'zDetFace-Lip Makeup Type-37',
+ 'zDetFace-Eyes State-38',
+ 'zDetFace-Is Left Eye Closed-39',
+ 'zDetFace-Is Right Eye Closed-40',
+ 'zDetFace-Gaze Center X-41',
+ 'zDetFace-Gaze Center Y-42',
+ 'zDetFace-Face Gaze Type-43',
+ 'zDetFace-Eye Glasses Type-44',
+ 'zDetFace-Eye Makeup Type-45',
+ 'zDetFace-Cluster Squence Number Key-46',
+ 'zDetFace-Grouping ID-47',
+ 'zDetFace-Master ID-48',
+ 'zDetFace-Quality-49',
+ 'zDetFace-Quality Measure-50',
+ 'zDetFace-Source Height-51',
+ 'zDetFace-Source Width-52',
+ 'zDetFace-Asset Visible-53',
+ 'zDetFace-Hidden/Asset Hidden-54',
+ 'zDetFace-In Trash/Recently Deleted-55',
+ 'zDetFace-Cloud Local State-56',
+ 'zDetFace-Training Type-57',
+ 'zDetFace.Pose Yaw-58',
+ 'zDetFace-Body Center X-59',
+ 'zDetFace-Body Center Y-60',
+ 'zDetFace-Body Height-61',
+ 'zDetFace-Body Width-62',
+ 'zDetFace-Roll-63',
+ 'zDetFace-Size-64',
+ 'zDetFace-Cluster Squence Number-65',
+ 'zDetFace-Blur Score-66',
+ 'zDetFacePrint-Face Print Version-67',
+ 'zDetFaceGroup-UUID-68',
+ 'zDetFaceGroup-Person Builder State-69',
+ 'zDetFaceGroup-UnNamed Face Count-70',
+ 'zPerson-Face Count-71',
+ 'zDetFace-Face Algorithm Version-72',
+ 'zDetFace-Adjustment Version-73',
+ 'zPerson-In Person Naming Model-74',
+ 'zPerson-Key Face Pick Source Key-75',
+ 'zPerson-Manual Order Key-76',
+ 'zPerson-Question Type-77',
+ 'zPerson-Suggested For Client Type-78',
+ 'zPerson-Merge Target Person-79',
+ 'zPerson-Cloud Local State-80',
+ 'zFaceCrop-Cloud Local State-81',
+ 'zFaceCrop-Cloud Type-82',
+ 'zPerson-Cloud Delete State-83',
+ 'zFaceCrop-Cloud Delete State-84',
+ 'zDetFace-zPK-85',
+ 'zDetFacePrint-Face Key-86',
+ 'zPerson-KeyFace=zDetFace-zPK-87',
+ 'zFaceCrop-Face Key-88',
+ 'zPerson-zPK=zDetFace-Person-89',
+ 'zDetFace-PersonForFace= zPerson-zPK-90',
+ 'zDetFace-Person Being Key Face-91',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-92',
+ 'zDetFace-Face Print-93',
+ 'zDetFacePrint-zPK-94',
+ 'zDetFace-Face Crop-95',
+ 'zFaceCrop-zPK-96',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-97',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-98',
+ 'zPerson-Assoc Face Group Key-99',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-100',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-101',
+ 'zDetFaceGroup-zPK-102',
+ 'zPerson-Share Participant= zSharePartic-zPK-103',
+ 'zDetFace-UUID-104',
+ 'zFaceCrop-UUID-105',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-106',
+ 'zPerson-Person UUID-107',
+ 'zPerson-Person URI-108',
+ 'zDetFaceGroup-UUID-109')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
zDetFace.ZASSETFORFACE AS 'zDetFace-AssetForFace= zAsset-zPK',
zDetFace.ZASSETFORTORSO AS 'zDetFace-AssetForTorso= zAsset-zPK',
@@ -4601,203 +4452,182 @@ def get_ph15peopledetfacesyndpl(files_found, report_folder, seeker, wrap_text, t
LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON
LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP
ORDER BY zDetFace.Z_PK
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- personcontactmatchingdictionary = ''
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- facecropresourcedata_blob = ''
-
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- if row[5] is not None:
- pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[111] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[5])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- personcontactmatchingdictionary = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[111])
- else:
- logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[111])
-
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- if row[12] is not None:
- pathto = os.path.join(report_folder, 'FaceCropFor_' + row[109] + '.jpg')
- with open(pathto, 'wb') as file:
- file.write(row[12])
- facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
-
- data_list.append((row[0], row[1], row[2], row[3], row[4],
- personcontactmatchingdictionary,
- row[6], row[7], row[8], row[9], row[10], row[11],
- facecropresourcedata_blob,
- row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113]))
-
- counter += 1
-
- description = 'Parses data from Syndication.photoslibrary-database-Photos.sqlite for' \
- ' people - detected faces - face crop data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 17.'
- report = ArtifactHtmlReport('Ph15.2-People & Faces NAD-SyndPL')
- report.start_artifact_report(report_folder, 'Ph15.2-People & Faces NAD-SyndPL', description)
- report.add_script()
- data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0',
- 'zDetFace-AssetForTorso= zAsset-zPK-1',
- 'zFaceCrop-Asset Key-2',
- 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-3',
- 'zDetFacePrint-Data-SeeRawDBData-4',
- 'zPerson-Contact Matching Dictionary-5',
- 'zPerson-Verified Type-6',
- 'zPerson-Display Name-7',
- 'zPerson-Full Name-8',
- 'zPerson-Cloud Verified Type-9',
- 'zFaceCrop-State-10',
- 'zFaceCrop-Type-11',
- 'zFaceCrop-Resource Data-12',
- 'zDetFace-Confirmed Face Crop Generation State-13',
- 'zDetFace-Manual-14',
- 'zDetFace-Detection Type-15',
- 'zPerson-Detection Type-16',
- 'zDetFace-VIP Model Type-17',
- 'zDetFace-Name Source-18',
- 'zDetFace-Cloud Name Source-19',
- 'zPerson-Merge Candidate Confidence-20',
- 'zPerson-Type-21',
- 'zPerson-Gender Type-22',
- 'zDetFace-Gender Type-23',
- 'zDetFace-Center X-24',
- 'zDetFace-Center Y-25',
- 'zPerson-Age Type Estimate-26',
- 'zDetFace-Age Type Estimate-27',
- 'zDetFace-Ethnicity Type-28',
- 'zDetFace-Skin Tone Type-29',
- 'zDetFace-Hair Type-30',
- 'zDetFace-Hair Color Type-31',
- 'zDetFace-Head Gear Type-32',
- 'zDetFace-Facial Hair Type-33',
- 'zDetFace-Has Face Mask-34',
- 'zDetFace-Pose Type-35',
- 'zDetFace-Face Expression Type-36',
- 'zDetFace-Has Smile-37',
- 'zDetFace-Smile Type-38',
- 'zDetFace-Lip Makeup Type-39',
- 'zDetFace-Eyes State-40',
- 'zDetFace-Is Left Eye Closed-41',
- 'zDetFace-Is Right Eye Closed-42',
- 'zDetFace-Gaze Center X-43',
- 'zDetFace-Gaze Center Y-44',
- 'zDetFace-Face Gaze Type-45',
- 'zDetFace-Eye Glasses Type-46',
- 'zDetFace-Eye Makeup Type-47',
- 'zDetFace-Cluster Squence Number Key-48',
- 'zDetFace-Grouping ID-49',
- 'zDetFace-Master ID-50',
- 'zDetFace-Quality-51',
- 'zDetFace-Quality Measure-52',
- 'zDetFace-Source Height-53',
- 'zDetFace-Source Width-54',
- 'zDetFace-Asset Visible-55',
- 'zDetFace-Hidden/Asset Hidden-56',
- 'zDetFace-In Trash/Recently Deleted-57',
- 'zDetFace-Cloud Local State-58',
- 'zDetFace-Training Type-59',
- 'zDetFace.Pose Yaw-60',
- 'zDetFace-Body Center X-61',
- 'zDetFace-Body Center Y-62',
- 'zDetFace-Body Height-63',
- 'zDetFace-Body Width-64',
- 'zDetFace-Roll-65',
- 'zDetFace-Size-66',
- 'zDetFace-Cluster Squence Number-67',
- 'zDetFace-Blur Score-68',
- 'zDetFacePrint-Face Print Version-69',
- 'zDetFaceGroup-UUID-70',
- 'zDetFaceGroup-Person Builder State-71',
- 'zDetFaceGroup-UnNamed Face Count-72',
- 'zPerson-Face Count-73',
- 'zDetFace-Face Algorithm Version-74',
- 'zDetFace-Adjustment Version-75',
- 'zPerson-In Person Naming Model-76',
- 'zPerson-Key Face Pick Source Key-77',
- 'zPerson-Manual Order Key-78',
- 'zPerson-Question Type-79',
- 'zPerson-Suggested For Client Type-80',
- 'zPerson-Merge Target Person-81',
- 'zPerson-Cloud Local State-82',
- 'zFaceCrop-Cloud Local State-83',
- 'zFaceCrop-Cloud Type-84',
- 'zPerson-Cloud Delete State-85',
- 'zFaceCrop-Cloud Delete State-86',
- 'zDetFace-zPK-87',
- 'zDetFacePrint-Face Key-88',
- 'zPerson-KeyFace=zDetFace-zPK-89',
- 'zFaceCrop-Face Key-90',
- 'zPerson-zPK=zDetFace-Person-91',
- 'zDetFace-PersonForFace= zPerson-zPK-92',
- 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-93',
- 'zDetFace-PersonForTorso= zPerson-zPK-94',
- 'zDetFace-Person Being Key Face-95',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-96',
- 'zDetFace-Face Print-97',
- 'zDetFacePrint-zPK-98',
- 'zDetFace-Face Crop-99',
- 'zFaceCrop-zPK-100',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-101',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-102',
- 'zPerson-Assoc Face Group Key-103',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-104',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-105',
- 'zDetFaceGroup-zPK-106',
- 'zPerson-Share Participant= zSharePartic-zPK-107',
- 'zDetFace-UUID-108',
- 'zFaceCrop-UUID-109',
- 'zFaceCrop-Invalid Merge Canidate Person UUID-110',
- 'zPerson-Person UUID-111',
- 'zPerson-Person URI-112',
- 'zDetFaceGroup-UUID-113')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph15.2-People & Faces NAD-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph15.2-People & Faces NAD-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite people - detected faces - face crop data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ personcontactmatchingdictionary = ''
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ facecropresourcedata_blob = ''
+
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ if row[5] is not None:
+ pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[111] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[5])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ personcontactmatchingdictionary = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[111])
+ else:
+ logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[111])
+
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ if row[12] is not None:
+ pathto = os.path.join(report_folder, 'FaceCropFor_' + row[109] + '.jpg')
+ with open(pathto, 'wb') as file:
+ file.write(row[12])
+ facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
+
+ data_list.append((row[0], row[1], row[2], row[3], row[4],
+ personcontactmatchingdictionary,
+ row[6], row[7], row[8], row[9], row[10], row[11],
+ facecropresourcedata_blob,
+ row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113]))
+
+ data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0',
+ 'zDetFace-AssetForTorso= zAsset-zPK-1',
+ 'zFaceCrop-Asset Key-2',
+ 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-3',
+ 'zDetFacePrint-Data-SeeRawDBData-4',
+ 'zPerson-Contact Matching Dictionary-5',
+ 'zPerson-Verified Type-6',
+ 'zPerson-Display Name-7',
+ 'zPerson-Full Name-8',
+ 'zPerson-Cloud Verified Type-9',
+ 'zFaceCrop-State-10',
+ 'zFaceCrop-Type-11',
+ 'zFaceCrop-Resource Data-12',
+ 'zDetFace-Confirmed Face Crop Generation State-13',
+ 'zDetFace-Manual-14',
+ 'zDetFace-Detection Type-15',
+ 'zPerson-Detection Type-16',
+ 'zDetFace-VIP Model Type-17',
+ 'zDetFace-Name Source-18',
+ 'zDetFace-Cloud Name Source-19',
+ 'zPerson-Merge Candidate Confidence-20',
+ 'zPerson-Type-21',
+ 'zPerson-Gender Type-22',
+ 'zDetFace-Gender Type-23',
+ 'zDetFace-Center X-24',
+ 'zDetFace-Center Y-25',
+ 'zPerson-Age Type Estimate-26',
+ 'zDetFace-Age Type Estimate-27',
+ 'zDetFace-Ethnicity Type-28',
+ 'zDetFace-Skin Tone Type-29',
+ 'zDetFace-Hair Type-30',
+ 'zDetFace-Hair Color Type-31',
+ 'zDetFace-Head Gear Type-32',
+ 'zDetFace-Facial Hair Type-33',
+ 'zDetFace-Has Face Mask-34',
+ 'zDetFace-Pose Type-35',
+ 'zDetFace-Face Expression Type-36',
+ 'zDetFace-Has Smile-37',
+ 'zDetFace-Smile Type-38',
+ 'zDetFace-Lip Makeup Type-39',
+ 'zDetFace-Eyes State-40',
+ 'zDetFace-Is Left Eye Closed-41',
+ 'zDetFace-Is Right Eye Closed-42',
+ 'zDetFace-Gaze Center X-43',
+ 'zDetFace-Gaze Center Y-44',
+ 'zDetFace-Face Gaze Type-45',
+ 'zDetFace-Eye Glasses Type-46',
+ 'zDetFace-Eye Makeup Type-47',
+ 'zDetFace-Cluster Squence Number Key-48',
+ 'zDetFace-Grouping ID-49',
+ 'zDetFace-Master ID-50',
+ 'zDetFace-Quality-51',
+ 'zDetFace-Quality Measure-52',
+ 'zDetFace-Source Height-53',
+ 'zDetFace-Source Width-54',
+ 'zDetFace-Asset Visible-55',
+ 'zDetFace-Hidden/Asset Hidden-56',
+ 'zDetFace-In Trash/Recently Deleted-57',
+ 'zDetFace-Cloud Local State-58',
+ 'zDetFace-Training Type-59',
+ 'zDetFace.Pose Yaw-60',
+ 'zDetFace-Body Center X-61',
+ 'zDetFace-Body Center Y-62',
+ 'zDetFace-Body Height-63',
+ 'zDetFace-Body Width-64',
+ 'zDetFace-Roll-65',
+ 'zDetFace-Size-66',
+ 'zDetFace-Cluster Squence Number-67',
+ 'zDetFace-Blur Score-68',
+ 'zDetFacePrint-Face Print Version-69',
+ 'zDetFaceGroup-UUID-70',
+ 'zDetFaceGroup-Person Builder State-71',
+ 'zDetFaceGroup-UnNamed Face Count-72',
+ 'zPerson-Face Count-73',
+ 'zDetFace-Face Algorithm Version-74',
+ 'zDetFace-Adjustment Version-75',
+ 'zPerson-In Person Naming Model-76',
+ 'zPerson-Key Face Pick Source Key-77',
+ 'zPerson-Manual Order Key-78',
+ 'zPerson-Question Type-79',
+ 'zPerson-Suggested For Client Type-80',
+ 'zPerson-Merge Target Person-81',
+ 'zPerson-Cloud Local State-82',
+ 'zFaceCrop-Cloud Local State-83',
+ 'zFaceCrop-Cloud Type-84',
+ 'zPerson-Cloud Delete State-85',
+ 'zFaceCrop-Cloud Delete State-86',
+ 'zDetFace-zPK-87',
+ 'zDetFacePrint-Face Key-88',
+ 'zPerson-KeyFace=zDetFace-zPK-89',
+ 'zFaceCrop-Face Key-90',
+ 'zPerson-zPK=zDetFace-Person-91',
+ 'zDetFace-PersonForFace= zPerson-zPK-92',
+ 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-93',
+ 'zDetFace-PersonForTorso= zPerson-zPK-94',
+ 'zDetFace-Person Being Key Face-95',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-96',
+ 'zDetFace-Face Print-97',
+ 'zDetFacePrint-zPK-98',
+ 'zDetFace-Face Crop-99',
+ 'zFaceCrop-zPK-100',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-101',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-102',
+ 'zPerson-Assoc Face Group Key-103',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-104',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-105',
+ 'zDetFaceGroup-zPK-106',
+ 'zPerson-Share Participant= zSharePartic-zPK-107',
+ 'zDetFace-UUID-108',
+ 'zFaceCrop-UUID-109',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-110',
+ 'zPerson-Person UUID-111',
+ 'zPerson-Person URI-112',
+ 'zDetFaceGroup-UUID-113')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
zDetFace.ZASSETFORFACE AS 'zDetFace-AssetForFace= zAsset-zPK',
zDetFace.ZASSETFORTORSO AS 'zDetFace-AssetForTorso= zAsset-zPK',
@@ -4813,7 +4643,7 @@ def get_ph15peopledetfacesyndpl(files_found, report_folder, seeker, wrap_text, t
WHEN 1 THEN '1-Has_Contact Matching_Dictionary'
ELSE 'Unknown-New-Value!: ' || zPerson.ZVERIFIEDTYPE || ''
END AS 'zPerson-Verified Type',
- zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence-iOS18',
+ zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence',
zPerson.ZDISPLAYNAME AS 'zPerson-Display Name',
zPerson.ZFULLNAME AS 'zPerson-Full Name',
CASE zPerson.ZCLOUDVERIFIEDTYPE
@@ -5160,226 +4990,175 @@ def get_ph15peopledetfacesyndpl(files_found, report_folder, seeker, wrap_text, t
LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON
LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP
ORDER BY zDetFace.Z_PK
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- personcontactmatchingdictionary = ''
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- facecropresourcedata_blob = ''
-
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- if row[5] is not None:
- pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[112] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[5])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- personcontactmatchingdictionary = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[112])
- else:
- logfunc(
- 'Error reading exported plist from zPerson-Contact Matching Dictionary' + row[112])
-
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- if row[13] is not None:
- pathto = os.path.join(report_folder, 'FaceCropFor_' + row[110] + '.jpg')
- with open(pathto, 'wb') as file:
- file.write(row[13])
- facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ personcontactmatchingdictionary = ''
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ facecropresourcedata_blob = ''
+
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ if row[5] is not None:
+ pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[112] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[5])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ personcontactmatchingdictionary = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[112])
+ else:
+ logfunc(
+ 'Error reading exported plist from zPerson-Contact Matching Dictionary' + row[112])
+
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ if row[13] is not None:
+ pathto = os.path.join(report_folder, 'FaceCropFor_' + row[110] + '.jpg')
+ with open(pathto, 'wb') as file:
+ file.write(row[13])
+ facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
+
+ data_list.append((row[0], row[1], row[2], row[3], row[4],
+ personcontactmatchingdictionary,
+ row[6], row[7], row[8], row[9], row[10], row[11], row[12],
+ facecropresourcedata_blob,
+ row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114]))
+
+ data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0',
+ 'zDetFace-AssetForTorso= zAsset-zPK-1',
+ 'zFaceCrop-Asset Key-2',
+ 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-3',
+ 'zDetFacePrint-Data-SeeRawDBData-4',
+ 'zPerson-Contact Matching Dictionary-5',
+ 'zPerson-Verified Type-6',
+ 'zPerson-Is_Me_Confidence-7',
+ 'zPerson-Display Name-8',
+ 'zPerson-Full Name-9',
+ 'zPerson-Cloud Verified Type-10',
+ 'zFaceCrop-State-11',
+ 'zFaceCrop-Type-12',
+ 'zFaceCrop-Resource Data-13',
+ 'zDetFace-Confirmed Face Crop Generation State-14',
+ 'zDetFace-Manual-15',
+ 'zDetFace-Detection Type-16',
+ 'zPerson-Detection Type-17',
+ 'zDetFace-VIP Model Type-18',
+ 'zDetFace-Name Source-19',
+ 'zDetFace-Cloud Name Source-20',
+ 'zPerson-Merge Candidate Confidence-21',
+ 'zPerson-Type-22',
+ 'zPerson-Gender Type-23',
+ 'zDetFace-Gender Type-24',
+ 'zDetFace-Center X-25',
+ 'zDetFace-Center Y-26',
+ 'zPerson-Age Type Estimate-27',
+ 'zDetFace-Age Type Estimate-28',
+ 'zDetFace-Ethnicity Type-29',
+ 'zDetFace-Skin Tone Type-30',
+ 'zDetFace-Hair Type-31',
+ 'zDetFace-Hair Color Type-32',
+ 'zDetFace-Head Gear Type-33',
+ 'zDetFace-Facial Hair Type-34',
+ 'zDetFace-Has Face Mask-35',
+ 'zDetFace-Pose Type-36',
+ 'zDetFace-Face Expression Type-37',
+ 'zDetFace-Has Smile-38',
+ 'zDetFace-Smile Type-39',
+ 'zDetFace-Lip Makeup Type-40',
+ 'zDetFace-Eyes State-41',
+ 'zDetFace-Is Left Eye Closed-42',
+ 'zDetFace-Is Right Eye Closed-43',
+ 'zDetFace-Gaze Center X-44',
+ 'zDetFace-Gaze Center Y-45',
+ 'zDetFace-Face Gaze Type-46',
+ 'zDetFace-Eye Glasses Type-47',
+ 'zDetFace-Eye Makeup Type-48',
+ 'zDetFace-Cluster Sequence Number Key-49',
+ 'zDetFace-Grouping ID-50',
+ 'zDetFace-Master ID-51',
+ 'zDetFace-Quality-52',
+ 'zDetFace-Quality Measure-53',
+ 'zDetFace-Source Height-54',
+ 'zDetFace-Source Width-55',
+ 'zDetFace-Asset Visible-56',
+ 'zDetFace-Hidden/Asset Hidden-57',
+ 'zDetFace-In Trash/Recently Deleted-58',
+ 'zDetFace-Cloud Local State-59',
+ 'zDetFace-Training Type-60',
+ 'zDetFace.Pose Yaw-61',
+ 'zDetFace-Body Center X-62',
+ 'zDetFace-Body Center Y-63',
+ 'zDetFace-Body Height-64',
+ 'zDetFace-Body Width-65',
+ 'zDetFace-Roll-66',
+ 'zDetFace-Size-67',
+ 'zDetFace-Cluster Sequence Number-68',
+ 'zDetFace-Blur Score-69',
+ 'zDetFacePrint-Face Print Version-70',
+ 'zDetFaceGroup-UUID-71',
+ 'zDetFaceGroup-Person Builder State-72',
+ 'zDetFaceGroup-UnNamed Face Count-73',
+ 'zPerson-Face Count-74',
+ 'zDetFace-Face Algorithm Version-75',
+ 'zDetFace-Adjustment Version-76',
+ 'zPerson-In Person Naming Model-77',
+ 'zPerson-Key Face Pick Source Key-78',
+ 'zPerson-Manual Order Key-79',
+ 'zPerson-Question Type-80',
+ 'zPerson-Suggested For Client Type-81',
+ 'zPerson-Merge Target Person-82',
+ 'zPerson-Cloud Local State-83',
+ 'zFaceCrop-Cloud Local State-84',
+ 'zFaceCrop-Cloud Type-85',
+ 'zPerson-Cloud Delete State-86',
+ 'zFaceCrop-Cloud Delete State-87',
+ 'zDetFace-zPK-88',
+ 'zDetFacePrint-Face Key-89',
+ 'zPerson-KeyFace=zDetFace-zPK-90',
+ 'zFaceCrop-Face Key-91',
+ 'zPerson-zPK=zDetFace-Person-92',
+ 'zDetFace-PersonForFace= zPerson-zPK-93',
+ 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-94',
+ 'zDetFace-PersonForTorso= zPerson-zPK-95',
+ 'zDetFace-Person Being Key Face-96',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-97',
+ 'zDetFace-Face Print-98',
+ 'zDetFacePrint-zPK-99',
+ 'zDetFace-Face Crop-100',
+ 'zFaceCrop-zPK-101',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-102',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-103',
+ 'zPerson-Assoc Face Group Key-104',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-105',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-106',
+ 'zDetFaceGroup-zPK-107',
+ 'zPerson-Share Participant= zSharePartic-zPK-108',
+ 'zDetFace-UUID-109',
+ 'zFaceCrop-UUID-110',
+ 'zFaceCrop-Invalid Merge Candidate Person UUID-111',
+ 'zPerson-Person UUID-112',
+ 'zPerson-Person URI-113',
+ 'zDetFaceGroup-UUID-114')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
- data_list.append((row[0], row[1], row[2], row[3], row[4],
- personcontactmatchingdictionary,
- row[6], row[7], row[8], row[9], row[10], row[11], row[12],
- facecropresourcedata_blob,
- row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114]))
- counter += 1
- description = 'Parses data from Syndication.photoslibrary-database-Photos.sqlite for' \
- ' people - detected faces - face crop data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 18.'
- report = ArtifactHtmlReport('Ph15.2-People & Faces NAD-SyndPL')
- report.start_artifact_report(report_folder, 'Ph15.2-People & Faces NAD-SyndPL', description)
- report.add_script()
- data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0',
- 'zDetFace-AssetForTorso= zAsset-zPK-1',
- 'zFaceCrop-Asset Key-2',
- 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-3',
- 'zDetFacePrint-Data-SeeRawDBData-4',
- 'zPerson-Contact Matching Dictionary-5',
- 'zPerson-Verified Type-6',
- 'zPerson-Is_Me_Confidence-iOS18-7',
- 'zPerson-Display Name-8',
- 'zPerson-Full Name-9',
- 'zPerson-Cloud Verified Type-10',
- 'zFaceCrop-State-11',
- 'zFaceCrop-Type-12',
- 'zFaceCrop-Resource Data-13',
- 'zDetFace-Confirmed Face Crop Generation State-14',
- 'zDetFace-Manual-15',
- 'zDetFace-Detection Type-16',
- 'zPerson-Detection Type-17',
- 'zDetFace-VIP Model Type-18',
- 'zDetFace-Name Source-19',
- 'zDetFace-Cloud Name Source-20',
- 'zPerson-Merge Candidate Confidence-21',
- 'zPerson-Type-22',
- 'zPerson-Gender Type-23',
- 'zDetFace-Gender Type-24',
- 'zDetFace-Center X-25',
- 'zDetFace-Center Y-26',
- 'zPerson-Age Type Estimate-27',
- 'zDetFace-Age Type Estimate-28',
- 'zDetFace-Ethnicity Type-29',
- 'zDetFace-Skin Tone Type-30',
- 'zDetFace-Hair Type-31',
- 'zDetFace-Hair Color Type-32',
- 'zDetFace-Head Gear Type-33',
- 'zDetFace-Facial Hair Type-34',
- 'zDetFace-Has Face Mask-35',
- 'zDetFace-Pose Type-36',
- 'zDetFace-Face Expression Type-37',
- 'zDetFace-Has Smile-38',
- 'zDetFace-Smile Type-39',
- 'zDetFace-Lip Makeup Type-40',
- 'zDetFace-Eyes State-41',
- 'zDetFace-Is Left Eye Closed-42',
- 'zDetFace-Is Right Eye Closed-43',
- 'zDetFace-Gaze Center X-44',
- 'zDetFace-Gaze Center Y-45',
- 'zDetFace-Face Gaze Type-46',
- 'zDetFace-Eye Glasses Type-47',
- 'zDetFace-Eye Makeup Type-48',
- 'zDetFace-Cluster Sequence Number Key-49',
- 'zDetFace-Grouping ID-50',
- 'zDetFace-Master ID-51',
- 'zDetFace-Quality-52',
- 'zDetFace-Quality Measure-53',
- 'zDetFace-Source Height-54',
- 'zDetFace-Source Width-55',
- 'zDetFace-Asset Visible-56',
- 'zDetFace-Hidden/Asset Hidden-57',
- 'zDetFace-In Trash/Recently Deleted-58',
- 'zDetFace-Cloud Local State-59',
- 'zDetFace-Training Type-60',
- 'zDetFace.Pose Yaw-61',
- 'zDetFace-Body Center X-62',
- 'zDetFace-Body Center Y-63',
- 'zDetFace-Body Height-64',
- 'zDetFace-Body Width-65',
- 'zDetFace-Roll-66',
- 'zDetFace-Size-67',
- 'zDetFace-Cluster Sequence Number-68',
- 'zDetFace-Blur Score-69',
- 'zDetFacePrint-Face Print Version-70',
- 'zDetFaceGroup-UUID-71',
- 'zDetFaceGroup-Person Builder State-72',
- 'zDetFaceGroup-UnNamed Face Count-73',
- 'zPerson-Face Count-74',
- 'zDetFace-Face Algorithm Version-75',
- 'zDetFace-Adjustment Version-76',
- 'zPerson-In Person Naming Model-77',
- 'zPerson-Key Face Pick Source Key-78',
- 'zPerson-Manual Order Key-79',
- 'zPerson-Question Type-80',
- 'zPerson-Suggested For Client Type-81',
- 'zPerson-Merge Target Person-82',
- 'zPerson-Cloud Local State-83',
- 'zFaceCrop-Cloud Local State-84',
- 'zFaceCrop-Cloud Type-85',
- 'zPerson-Cloud Delete State-86',
- 'zFaceCrop-Cloud Delete State-87',
- 'zDetFace-zPK-88',
- 'zDetFacePrint-Face Key-89',
- 'zPerson-KeyFace=zDetFace-zPK-90',
- 'zFaceCrop-Face Key-91',
- 'zPerson-zPK=zDetFace-Person-92',
- 'zDetFace-PersonForFace= zPerson-zPK-93',
- 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-94',
- 'zDetFace-PersonForTorso= zPerson-zPK-95',
- 'zDetFace-Person Being Key Face-96',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-97',
- 'zDetFace-Face Print-98',
- 'zDetFacePrint-zPK-99',
- 'zDetFace-Face Crop-100',
- 'zFaceCrop-zPK-101',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-102',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-103',
- 'zPerson-Assoc Face Group Key-104',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-105',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-106',
- 'zDetFaceGroup-zPK-107',
- 'zPerson-Share Participant= zSharePartic-zPK-108',
- 'zDetFace-UUID-109',
- 'zFaceCrop-UUID-110',
- 'zFaceCrop-Invalid Merge Candidate Person UUID-111',
- 'zPerson-Person UUID-112',
- 'zPerson-Person URI-113',
- 'zDetFaceGroup-UUID-114')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph15.2-People & Faces NAD-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph15.2-People & Faces NAD-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite people - detected faces - face crop data')
-
- db.close()
- return
-
-
-__artifacts_v2__ = {
- 'Ph15-1-People & Faces NAD-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite 15.1 People and Faces Data No Asset Data',
- 'description': 'Parses data from PhotoData-Photos.sqlite for people - detected faces - face crop data.'
- ' The results may contain multiple records per ZASSET table Z_PK value and supports iOS 14-18.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-12',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-G-People_Faces_Data',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph15peopledetfacephdapsql'
- },
- 'Ph15-2-People & Faces NAD-SyndPL': {
- 'name': 'SyndPL Photos.sqlite 15.2 People and Faces Data No Asset Data',
- 'description': 'Parses data from Syndication.photoslibrary-database-Photos.sqlite for'
- ' people - detected faces - face crop data. The results may contain multiple records'
- ' per ZASSET table Z_PK value and supports iOS 14-18.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-12',
- 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite',
- 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts',
- 'notes': '',
- 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',
- 'function': 'get_ph15peopledetfacesyndpl'
- }
-}
diff --git a/scripts/artifacts/Ph16AssetPeopleandDetFaces.py b/scripts/artifacts/Ph16AssetPeopleandDetFaces.py
index 24f9907f..50c0a0f3 100644
--- a/scripts/artifacts/Ph16AssetPeopleandDetFaces.py
+++ b/scripts/artifacts/Ph16AssetPeopleandDetFaces.py
@@ -1,43 +1,63 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 2.0
-#
-# Description:
-# Parses basic asset record data from Photos.sqlite to include people and detected face data supports iOS 14-18.
-# The results could produce multiple records for a single asset.
-# This parser is based on research and SQLite queries written by Scott Koenig
-# This is very large query and script, I recommend opening the TSV generated report with Zimmerman's Tools
-# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results.
-# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347
-#
+__artifacts_v2__ = {
+ 'Ph16_1PeopleFacesAssetDataPhDaPsql': {
+ 'name': 'Ph16.1-People & Faces Asset Data-PhDaPsql',
+ 'description': 'Parses basic asset record data from PhotoData-Photos.sqlite for basic asset'
+ ' people and faces data. The results may contain multiple records per ZASSET table Z_PK value'
+ ' and supports iOS 14-18.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-G-People_Faces_Data',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ },
+ 'Ph16_2PeopleFacesAssetDataSyndPL': {
+ 'name': 'Ph16.2-People & Faces Asset Data-SyndPL',
+ 'description': 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite'
+ ' for basic asset people and faces data. The results may contain multiple records'
+ ' per ZASSET table Z_PK value and supports iOS 14-18.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite',
+ 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts',
+ 'notes': '',
+ 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import nska_deserialize as nd
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
-
-
-def get_ph16assetpeopledetfacephdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import media_to_html, artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
- for file_found in files_found:
- file_found = str(file_found)
+@artifact_processor
+def Ph16_1PeopleFacesAssetDataPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("13.7"):
- logfunc("Unsupported version for PhotoData-Photos.sqlite basic asset people and face data from iOS " + iosversion)
+ logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -354,207 +374,186 @@ def get_ph16assetpeopledetfacephdapsql(files_found, report_folder, seeker, wrap_
LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP
WHERE zDetFace.Z_PK > 0
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- personcontactmatchingdictionary = ''
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- facecropresourcedata_blob = ''
-
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- if row[22] is not None:
- pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[108] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[22])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- personcontactmatchingdictionary = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[108])
- else:
- logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[108])
-
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- if row[29] is not None:
- pathto = os.path.join(report_folder, 'FaceCropFor_' + row[106] + '.jpg')
- with open(pathto, 'wb') as file:
- file.write(row[29])
- facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
-
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21],
- personcontactmatchingdictionary,
- row[23], row[24], row[25], row[26], row[27], row[28],
- facecropresourcedata_blob,
- row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \
- ' basic asset, people and detected faces data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 14.'
- report = ArtifactHtmlReport('Ph16.1-People & Faces Asset Data-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph16.1-People & Faces Asset Data-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-Time Zone Offset-5',
- 'zAddAssetAttr-EXIF-String-6',
- 'zAsset-Directory-Path-7',
- 'zAsset-Filename-8',
- 'zAddAssetAttr- Original Filename-9',
- 'zCldMast- Original Filename-10',
- 'zAsset-Trashed Date-11',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-12',
- 'zAddAssetAttr-Creator Bundle ID-13',
- 'zAddAssetAttr-Imported By Display Name-14',
- 'zCldMast-Imported by Bundle ID-15',
- 'zCldMast-Imported by Display Name-16',
- 'zAsset-Visibility State-17',
- 'zFaceCrop-Face Area Points-18',
- 'zAsset-Face Adjustment Version-19',
- 'zAddAssetAttr-Face_Regions-SeeRawDBData-20',
- 'zDetFacePrint-Data-SeeRawDBData-21',
- 'zPerson-Contact Matching Dictionary-22',
- 'zPerson-Verified Type-23',
- 'zPerson-Display Name-24',
- 'zPerson-Full Name-25',
- 'zPerson-Cloud Verified Type-26',
- 'zFaceCrop-State-27',
- 'zFaceCrop-Type-28',
- 'zFaceCrop-Resource Data-29',
- 'zDetFace-Confirmed Face Crop Generation State-30',
- 'zDetFace-Manual-31',
- 'zDetFace-VIP Model Type-32',
- 'zDetFace-Name Source-33',
- 'zDetFace-Cloud Name Source-34',
- 'zPerson-Type-35',
- 'zPerson-Gender Type-36',
- 'zDetFace-Gender Type-37',
- 'zDetFace-Center X-38',
- 'zDetFace-Center Y-39',
- 'zPerson-Age Type Estimate-40',
- 'zDetFace-Age Type Estimate-41',
- 'zDetFace-Hair Color Type-42',
- 'zDetFace-Facial Hair Type-43',
- 'zDetFace-Has Smile-44',
- 'zDetFace-Smile Type-45',
- 'zDetFace-Lip Makeup Type-46',
- 'zDetFace-Eyes State-47',
- 'zDetFace-Is Left Eye Closed-48',
- 'zDetFace-Is Right Eye Closed-49',
- 'zDetFace-Eye Glasses Type-50',
- 'zDetFace-Eye Makeup Type-51',
- 'zDetFace-Cluster Sequence Number Key-52',
- 'zDetFace-Grouping ID-53',
- 'zDetFace-Master ID-54',
- 'zDetFace-Quality-55',
- 'zDetFace-Quality Measure-56',
- 'zDetFace-Source Height-57',
- 'zDetFace-Source Width-58',
- 'zDetFace-Asset Visible-59',
- 'zDetFace-Hidden/Asset Hidden-60',
- 'zDetFace-In Trash/Recently Deleted-61',
- 'zDetFace-Cloud Local State-62',
- 'zDetFace-Training Type-63',
- 'zDetFace.Pose Yaw-64',
- 'zDetFace-Roll-65',
- 'zDetFace-Size-66',
- 'zDetFace-Cluster Sequence Number-67',
- 'zDetFace-Blur Score-68',
- 'zDetFacePrint-Face Print Version-69',
- 'zDetFaceGroup-UUID-70',
- 'zDetFaceGroup-Person Builder State-71',
- 'zDetFaceGroup-UnNamed Face Count-72',
- 'zPerson-Face Count-73',
- 'zDetFace-Face Algorithm Version-74',
- 'zDetFace-Adjustment Version-75',
- 'zPerson-In Person Naming Model-76',
- 'zPerson-Key Face Pick Source Key-77',
- 'zPerson-Manual Order Key-78',
- 'zPerson-Question Type-79',
- 'zPerson-Suggested For Client Type-80',
- 'zPerson-Merge Target Person-81',
- 'zPerson-Cloud Local State-82',
- 'zFaceCrop-Cloud Local State-83',
- 'zFaceCrop-Cloud Type-84',
- 'zPerson-Cloud Delete State-85',
- 'zFaceCrop-Cloud Delete State-86',
- 'zDetFace-zPK-87',
- 'zDetFacePrint-Face Key-88',
- 'zPerson-KeyFace=zDetFace-zPK-89',
- 'zFaceCrop-Face Key-90',
- 'zPerson-zPK=zDetFace-Person-91',
- 'zDetFace-PersonForFace= zPerson-zPK-92',
- 'zDetFace-Person Being Key Face-93',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-94',
- 'zDetFace-Face Print-95',
- 'zDetFacePrint-zPK-96',
- 'zDetFace-Face Crop-97',
- 'zFaceCrop-zPK-98',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-99',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-100',
- 'zPerson-Assoc Face Group Key-101',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-102',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-103',
- 'zDetFaceGroup-zPK-104',
- 'zDetFace-UUID-105',
- 'zFaceCrop-UUID-106',
- 'zFaceCrop-Invalid Merge Candidate Person UUID-107',
- 'zPerson-Person UUID-108',
- 'zPerson-Person URI-109',
- 'zDetFaceGroup-UUID-110',
- 'zDetFace-AssetForFace= zAsset-zPK-111',
- 'zFaceCrop-Asset Key-112',
- 'zAsset-zPK-113',
- 'zAddAssetAttr-zPK-114',
- 'zAsset-UUID = store.cloudphotodb-115',
- 'zAddAssetAttr-Master Fingerprint-116')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph16.1-People & Faces Asset Data-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph16.1-People & Faces Asset Data-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite people faces and basic asset data data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ personcontactmatchingdictionary = ''
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ facecropresourcedata_blob = ''
+
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ if row[22] is not None:
+ pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[108] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[22])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ personcontactmatchingdictionary = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[108])
+ else:
+ logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[108])
+
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ if row[29] is not None:
+ pathto = os.path.join(report_folder, 'FaceCropFor_' + row[106] + '.jpg')
+ with open(pathto, 'wb') as file:
+ file.write(row[29])
+ facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
+
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21],
+ personcontactmatchingdictionary,
+ row[23], row[24], row[25], row[26], row[27], row[28],
+ facecropresourcedata_blob,
+ row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-Time Zone Offset-5',
+ 'zAddAssetAttr-EXIF-String-6',
+ 'zAsset-Directory-Path-7',
+ 'zAsset-Filename-8',
+ 'zAddAssetAttr- Original Filename-9',
+ 'zCldMast- Original Filename-10',
+ ('zAsset-Trashed Date-11', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-12',
+ 'zAddAssetAttr-Creator Bundle ID-13',
+ 'zAddAssetAttr-Imported By Display Name-14',
+ 'zCldMast-Imported by Bundle ID-15',
+ 'zCldMast-Imported by Display Name-16',
+ 'zAsset-Visibility State-17',
+ 'zFaceCrop-Face Area Points-18',
+ 'zAsset-Face Adjustment Version-19',
+ 'zAddAssetAttr-Face_Regions-SeeRawDBData-20',
+ 'zDetFacePrint-Data-SeeRawDBData-21',
+ 'zPerson-Contact Matching Dictionary-22',
+ 'zPerson-Verified Type-23',
+ 'zPerson-Display Name-24',
+ 'zPerson-Full Name-25',
+ 'zPerson-Cloud Verified Type-26',
+ 'zFaceCrop-State-27',
+ 'zFaceCrop-Type-28',
+ 'zFaceCrop-Resource Data-29',
+ 'zDetFace-Confirmed Face Crop Generation State-30',
+ 'zDetFace-Manual-31',
+ 'zDetFace-VIP Model Type-32',
+ 'zDetFace-Name Source-33',
+ 'zDetFace-Cloud Name Source-34',
+ 'zPerson-Type-35',
+ 'zPerson-Gender Type-36',
+ 'zDetFace-Gender Type-37',
+ 'zDetFace-Center X-38',
+ 'zDetFace-Center Y-39',
+ 'zPerson-Age Type Estimate-40',
+ 'zDetFace-Age Type Estimate-41',
+ 'zDetFace-Hair Color Type-42',
+ 'zDetFace-Facial Hair Type-43',
+ 'zDetFace-Has Smile-44',
+ 'zDetFace-Smile Type-45',
+ 'zDetFace-Lip Makeup Type-46',
+ 'zDetFace-Eyes State-47',
+ 'zDetFace-Is Left Eye Closed-48',
+ 'zDetFace-Is Right Eye Closed-49',
+ 'zDetFace-Eye Glasses Type-50',
+ 'zDetFace-Eye Makeup Type-51',
+ 'zDetFace-Cluster Sequence Number Key-52',
+ 'zDetFace-Grouping ID-53',
+ 'zDetFace-Master ID-54',
+ 'zDetFace-Quality-55',
+ 'zDetFace-Quality Measure-56',
+ 'zDetFace-Source Height-57',
+ 'zDetFace-Source Width-58',
+ 'zDetFace-Asset Visible-59',
+ 'zDetFace-Hidden/Asset Hidden-60',
+ 'zDetFace-In Trash/Recently Deleted-61',
+ 'zDetFace-Cloud Local State-62',
+ 'zDetFace-Training Type-63',
+ 'zDetFace.Pose Yaw-64',
+ 'zDetFace-Roll-65',
+ 'zDetFace-Size-66',
+ 'zDetFace-Cluster Sequence Number-67',
+ 'zDetFace-Blur Score-68',
+ 'zDetFacePrint-Face Print Version-69',
+ 'zDetFaceGroup-UUID-70',
+ 'zDetFaceGroup-Person Builder State-71',
+ 'zDetFaceGroup-UnNamed Face Count-72',
+ 'zPerson-Face Count-73',
+ 'zDetFace-Face Algorithm Version-74',
+ 'zDetFace-Adjustment Version-75',
+ 'zPerson-In Person Naming Model-76',
+ 'zPerson-Key Face Pick Source Key-77',
+ 'zPerson-Manual Order Key-78',
+ 'zPerson-Question Type-79',
+ 'zPerson-Suggested For Client Type-80',
+ 'zPerson-Merge Target Person-81',
+ 'zPerson-Cloud Local State-82',
+ 'zFaceCrop-Cloud Local State-83',
+ 'zFaceCrop-Cloud Type-84',
+ 'zPerson-Cloud Delete State-85',
+ 'zFaceCrop-Cloud Delete State-86',
+ 'zDetFace-zPK-87',
+ 'zDetFacePrint-Face Key-88',
+ 'zPerson-KeyFace=zDetFace-zPK-89',
+ 'zFaceCrop-Face Key-90',
+ 'zPerson-zPK=zDetFace-Person-91',
+ 'zDetFace-PersonForFace= zPerson-zPK-92',
+ 'zDetFace-Person Being Key Face-93',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-94',
+ 'zDetFace-Face Print-95',
+ 'zDetFacePrint-zPK-96',
+ 'zDetFace-Face Crop-97',
+ 'zFaceCrop-zPK-98',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-99',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-100',
+ 'zPerson-Assoc Face Group Key-101',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-102',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-103',
+ 'zDetFaceGroup-zPK-104',
+ 'zDetFace-UUID-105',
+ 'zFaceCrop-UUID-106',
+ 'zFaceCrop-Invalid Merge Candidate Person UUID-107',
+ 'zPerson-Person UUID-108',
+ 'zPerson-Person URI-109',
+ 'zDetFaceGroup-UUID-110',
+ 'zDetFace-AssetForFace= zAsset-zPK-111',
+ 'zFaceCrop-Asset Key-112',
+ 'zAsset-zPK-113',
+ 'zAddAssetAttr-zPK-114',
+ 'zAsset-UUID = store.cloudphotodb-115',
+ 'zAddAssetAttr-Master Fingerprint-116')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -962,229 +961,208 @@ def get_ph16assetpeopledetfacephdapsql(files_found, report_folder, seeker, wrap_
LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP
WHERE zDetFace.Z_PK > 0
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- personcontactmatchingdictionary = ''
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- facecropresourcedata_blob = ''
-
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- if row[25] is not None:
- pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[127] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[25])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- personcontactmatchingdictionary = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[127])
- else:
- logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[127])
-
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- if row[32] is not None:
- pathto = os.path.join(report_folder, 'FaceCropFor_' + row[125] + '.jpg')
- with open(pathto, 'wb') as file:
- file.write(row[32])
- facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
-
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24],
- personcontactmatchingdictionary,
- row[26], row[27],
- row[28], row[29], row[30], row[31],
- facecropresourcedata_blob,
- row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \
- ' basic asset, people and detected faces data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 15.'
- report = ArtifactHtmlReport('Ph16.1-People & Faces Asset Data-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph16.1-People & Faces Asset Data-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-Time Zone Offset-5',
- 'zAddAssetAttr-EXIF-String-6',
- 'zAsset-Directory-Path-7',
- 'zAsset-Filename-8',
- 'zAddAssetAttr- Original Filename-9',
- 'zCldMast- Original Filename-10',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
- 'zAsset- Conversation= zGenAlbum_zPK-12',
- 'zAsset-Trashed Date-13',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14',
- 'zAddAssetAttr-Imported by Bundle ID-15',
- 'zAddAssetAttr-Imported By Display Name-16',
- 'zCldMast-Imported by Bundle ID-17',
- 'zCldMast-Imported by Display Name-18',
- 'zAsset-Visibility State-19',
- 'zFaceCrop-Face Area Points-20',
- 'zAsset-Face Adjustment Version-21',
- 'zAddAssetAttr-Face_Regions-SeeRawDBData-22',
- 'zAddAssetAttr-Face Analysis Version-23',
- 'zDetFacePrint-Data-SeeRawDBData-24',
- 'zPerson-Contact Matching Dictionary-25',
- 'zPerson-Verified Type-26',
- 'zPerson-Display Name-27',
- 'zPerson-Full Name-28',
- 'zPerson-Cloud Verified Type-29',
- 'zFaceCrop-State-30',
- 'zFaceCrop-Type-31',
- 'zFaceCrop-Resource Data-32',
- 'zDetFace-Confirmed Face Crop Generation State-33',
- 'zDetFace-Manual-34',
- 'zDetFace-Detection Type-35',
- 'zPerson-Detection Type-36',
- 'zDetFace-VIP Model Type-37',
- 'zDetFace-Name Source-38',
- 'zDetFace-Cloud Name Source-39',
- 'zPerson-Type-40',
- 'zPerson-Gender Type-41',
- 'zDetFace-Gender Type-42',
- 'zDetFace-Center X-43',
- 'zDetFace-Center Y-44',
- 'zPerson-Age Type Estimate-45',
- 'zDetFace-Age Type Estimate-46',
- 'zDetFace-Ethnicity Type-47',
- 'zDetFace-Skin Tone Type-48',
- 'zDetFace-Hair Type-49',
- 'zDetFace-Hair Color Type-50',
- 'zDetFace-Head Gear Type-51',
- 'zDetFace-Facial Hair Type-52',
- 'zDetFace-Has Face Mask-53',
- 'zDetFace-Pose Type-54',
- 'zDetFace-Face Expression Type-55',
- 'zDetFace-Has Smile-56',
- 'zDetFace-Smile Type-57',
- 'zDetFace-Lip Makeup Type-58',
- 'zDetFace-Eyes State-59',
- 'zDetFace-Is Left Eye Closed-60',
- 'zDetFace-Is Right Eye Closed-61',
- 'zDetFace-Gaze Center X-62',
- 'zDetFace-Gaze Center Y-63',
- 'zDetFace-Face Gaze Type-64',
- 'zDetFace-Eye Glasses Type-65',
- 'zDetFace-Eye Makeup Type-66',
- 'zDetFace-Cluster Sequence Number Key-67',
- 'zDetFace-Grouping ID-68',
- 'zDetFace-Master ID-69',
- 'zDetFace-Quality-70',
- 'zDetFace-Quality Measure-71',
- 'zDetFace-Source Height-72',
- 'zDetFace-Source Width-73',
- 'zDetFace-Asset Visible-74',
- 'zDetFace-Hidden/Asset Hidden-75',
- 'zDetFace-In Trash/Recently Deleted-76',
- 'zDetFace-Cloud Local State-77',
- 'zDetFace-Training Type-78',
- 'zDetFace.Pose Yaw-79',
- 'zDetFace-Body Center X-80',
- 'zDetFace-Body Center Y-81',
- 'zDetFace-Body Height-82',
- 'zDetFace-Body Width-83',
- 'zDetFace-Roll-84',
- 'zDetFace-Size-85',
- 'zDetFace-Cluster Sequence Number-86',
- 'zDetFace-Blur Score-87',
- 'zDetFacePrint-Face Print Version-88',
- 'zDetFaceGroup-UUID-89',
- 'zDetFaceGroup-Person Builder State-90',
- 'zDetFaceGroup-UnNamed Face Count-91',
- 'zPerson-Face Count-92',
- 'zDetFace-Face Algorithm Version-93',
- 'zDetFace-Adjustment Version-94',
- 'zPerson-In Person Naming Model-95',
- 'zPerson-Key Face Pick Source Key-96',
- 'zPerson-Manual Order Key-97',
- 'zPerson-Question Type-98',
- 'zPerson-Suggested For Client Type-99',
- 'zPerson-Merge Target Person-100',
- 'zPerson-Cloud Local State-101',
- 'zFaceCrop-Cloud Local State-102',
- 'zFaceCrop-Cloud Type-103',
- 'zPerson-Cloud Delete State-104',
- 'zFaceCrop-Cloud Delete State-105',
- 'zDetFace-zPK-106',
- 'zDetFacePrint-Face Key-107',
- 'zPerson-KeyFace=zDetFace-zPK-108',
- 'zFaceCrop-Face Key-109',
- 'zPerson-zPK=zDetFace-Person-110',
- 'zDetFace-PersonForFace= zPerson-zPK-111',
- 'zDetFace-Person Being Key Face-112',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-113',
- 'zDetFace-Face Print-114',
- 'zDetFacePrint-zPK-115',
- 'zDetFace-Face Crop-116',
- 'zFaceCrop-zPK-117',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-118',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-119',
- 'zPerson-Assoc Face Group Key-120',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-121',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-122',
- 'zDetFaceGroup-zPK-123',
- 'zDetFace-UUID-124',
- 'zFaceCrop-UUID-125',
- 'zFaceCrop-Invalid Merge Candidate Person UUID-126',
- 'zPerson-Person UUID-127',
- 'zPerson-Person URI-128',
- 'zDetFaceGroup-UUID-129',
- 'zDetFace-AssetForFace= zAsset-zPK-130',
- 'zFaceCrop-Asset Key-131',
- 'zAsset-zPK-132',
- 'zAddAssetAttr-zPK-133',
- 'zAsset-UUID = store.cloudphotodb-134',
- 'zAddAssetAttr-Master Fingerprint-135')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph16.1-People & Faces Asset Data-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph16.1-People & Faces Asset Data-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite people faces and basic asset data data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ personcontactmatchingdictionary = ''
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ facecropresourcedata_blob = ''
+
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ if row[25] is not None:
+ pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[127] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[25])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ personcontactmatchingdictionary = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[127])
+ else:
+ logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[127])
+
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ if row[32] is not None:
+ pathto = os.path.join(report_folder, 'FaceCropFor_' + row[125] + '.jpg')
+ with open(pathto, 'wb') as file:
+ file.write(row[32])
+ facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
+
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24],
+ personcontactmatchingdictionary,
+ row[26], row[27],
+ row[28], row[29], row[30], row[31],
+ facecropresourcedata_blob,
+ row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-Time Zone Offset-5',
+ 'zAddAssetAttr-EXIF-String-6',
+ 'zAsset-Directory-Path-7',
+ 'zAsset-Filename-8',
+ 'zAddAssetAttr- Original Filename-9',
+ 'zCldMast- Original Filename-10',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
+ 'zAsset- Conversation= zGenAlbum_zPK-12',
+ ('zAsset-Trashed Date-13', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14',
+ 'zAddAssetAttr-Imported by Bundle ID-15',
+ 'zAddAssetAttr-Imported By Display Name-16',
+ 'zCldMast-Imported by Bundle ID-17',
+ 'zCldMast-Imported by Display Name-18',
+ 'zAsset-Visibility State-19',
+ 'zFaceCrop-Face Area Points-20',
+ 'zAsset-Face Adjustment Version-21',
+ 'zAddAssetAttr-Face_Regions-SeeRawDBData-22',
+ 'zAddAssetAttr-Face Analysis Version-23',
+ 'zDetFacePrint-Data-SeeRawDBData-24',
+ 'zPerson-Contact Matching Dictionary-25',
+ 'zPerson-Verified Type-26',
+ 'zPerson-Display Name-27',
+ 'zPerson-Full Name-28',
+ 'zPerson-Cloud Verified Type-29',
+ 'zFaceCrop-State-30',
+ 'zFaceCrop-Type-31',
+ 'zFaceCrop-Resource Data-32',
+ 'zDetFace-Confirmed Face Crop Generation State-33',
+ 'zDetFace-Manual-34',
+ 'zDetFace-Detection Type-35',
+ 'zPerson-Detection Type-36',
+ 'zDetFace-VIP Model Type-37',
+ 'zDetFace-Name Source-38',
+ 'zDetFace-Cloud Name Source-39',
+ 'zPerson-Type-40',
+ 'zPerson-Gender Type-41',
+ 'zDetFace-Gender Type-42',
+ 'zDetFace-Center X-43',
+ 'zDetFace-Center Y-44',
+ 'zPerson-Age Type Estimate-45',
+ 'zDetFace-Age Type Estimate-46',
+ 'zDetFace-Ethnicity Type-47',
+ 'zDetFace-Skin Tone Type-48',
+ 'zDetFace-Hair Type-49',
+ 'zDetFace-Hair Color Type-50',
+ 'zDetFace-Head Gear Type-51',
+ 'zDetFace-Facial Hair Type-52',
+ 'zDetFace-Has Face Mask-53',
+ 'zDetFace-Pose Type-54',
+ 'zDetFace-Face Expression Type-55',
+ 'zDetFace-Has Smile-56',
+ 'zDetFace-Smile Type-57',
+ 'zDetFace-Lip Makeup Type-58',
+ 'zDetFace-Eyes State-59',
+ 'zDetFace-Is Left Eye Closed-60',
+ 'zDetFace-Is Right Eye Closed-61',
+ 'zDetFace-Gaze Center X-62',
+ 'zDetFace-Gaze Center Y-63',
+ 'zDetFace-Face Gaze Type-64',
+ 'zDetFace-Eye Glasses Type-65',
+ 'zDetFace-Eye Makeup Type-66',
+ 'zDetFace-Cluster Sequence Number Key-67',
+ 'zDetFace-Grouping ID-68',
+ 'zDetFace-Master ID-69',
+ 'zDetFace-Quality-70',
+ 'zDetFace-Quality Measure-71',
+ 'zDetFace-Source Height-72',
+ 'zDetFace-Source Width-73',
+ 'zDetFace-Asset Visible-74',
+ 'zDetFace-Hidden/Asset Hidden-75',
+ 'zDetFace-In Trash/Recently Deleted-76',
+ 'zDetFace-Cloud Local State-77',
+ 'zDetFace-Training Type-78',
+ 'zDetFace.Pose Yaw-79',
+ 'zDetFace-Body Center X-80',
+ 'zDetFace-Body Center Y-81',
+ 'zDetFace-Body Height-82',
+ 'zDetFace-Body Width-83',
+ 'zDetFace-Roll-84',
+ 'zDetFace-Size-85',
+ 'zDetFace-Cluster Sequence Number-86',
+ 'zDetFace-Blur Score-87',
+ 'zDetFacePrint-Face Print Version-88',
+ 'zDetFaceGroup-UUID-89',
+ 'zDetFaceGroup-Person Builder State-90',
+ 'zDetFaceGroup-UnNamed Face Count-91',
+ 'zPerson-Face Count-92',
+ 'zDetFace-Face Algorithm Version-93',
+ 'zDetFace-Adjustment Version-94',
+ 'zPerson-In Person Naming Model-95',
+ 'zPerson-Key Face Pick Source Key-96',
+ 'zPerson-Manual Order Key-97',
+ 'zPerson-Question Type-98',
+ 'zPerson-Suggested For Client Type-99',
+ 'zPerson-Merge Target Person-100',
+ 'zPerson-Cloud Local State-101',
+ 'zFaceCrop-Cloud Local State-102',
+ 'zFaceCrop-Cloud Type-103',
+ 'zPerson-Cloud Delete State-104',
+ 'zFaceCrop-Cloud Delete State-105',
+ 'zDetFace-zPK-106',
+ 'zDetFacePrint-Face Key-107',
+ 'zPerson-KeyFace=zDetFace-zPK-108',
+ 'zFaceCrop-Face Key-109',
+ 'zPerson-zPK=zDetFace-Person-110',
+ 'zDetFace-PersonForFace= zPerson-zPK-111',
+ 'zDetFace-Person Being Key Face-112',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-113',
+ 'zDetFace-Face Print-114',
+ 'zDetFacePrint-zPK-115',
+ 'zDetFace-Face Crop-116',
+ 'zFaceCrop-zPK-117',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-118',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-119',
+ 'zPerson-Assoc Face Group Key-120',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-121',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-122',
+ 'zDetFaceGroup-zPK-123',
+ 'zDetFace-UUID-124',
+ 'zFaceCrop-UUID-125',
+ 'zFaceCrop-Invalid Merge Candidate Person UUID-126',
+ 'zPerson-Person UUID-127',
+ 'zPerson-Person URI-128',
+ 'zDetFaceGroup-UUID-129',
+ 'zDetFace-AssetForFace= zAsset-zPK-130',
+ 'zFaceCrop-Asset Key-131',
+ 'zAsset-zPK-132',
+ 'zAddAssetAttr-zPK-133',
+ 'zAsset-UUID = store.cloudphotodb-134',
+ 'zAddAssetAttr-Master Fingerprint-135')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -1595,231 +1573,210 @@ def get_ph16assetpeopledetfacephdapsql(files_found, report_folder, seeker, wrap_
LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP
WHERE zDetFace.Z_PK > 0
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- personcontactmatchingdictionary = ''
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- facecropresourcedata_blob = ''
-
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- if row[26] is not None:
- pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[130] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[26])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- personcontactmatchingdictionary = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[130])
- else:
- logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[130])
-
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- if row[33] is not None:
- pathto = os.path.join(report_folder, 'FaceCropFor_' + row[128] + '.jpg')
- with open(pathto, 'wb') as file:
- file.write(row[33])
- facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
-
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25],
- personcontactmatchingdictionary,
- row[27], row[28], row[29], row[30], row[31], row[32],
- facecropresourcedata_blob,
- row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \
- ' basic asset, people and detected faces data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 16.'
- report = ArtifactHtmlReport('Ph16.1-People & Faces Asset Data-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph16.1-People & Faces Asset Data-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-Time Zone Offset-5',
- 'zAddAssetAttr-EXIF-String-6',
- 'zAsset-Directory-Path-7',
- 'zAsset-Filename-8',
- 'zAddAssetAttr- Original Filename-9',
- 'zCldMast- Original Filename-10',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
- 'zAsset- Conversation= zGenAlbum_zPK-12',
- 'zAsset-Trashed Date-13',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-15',
- 'zAddAssetAttr-Imported by Bundle ID-16',
- 'zAddAssetAttr-Imported By Display Name-17',
- 'zCldMast-Imported by Bundle ID-18',
- 'zCldMast-Imported by Display Name-19',
- 'zAsset-Visibility State-20',
- 'zFaceCrop-Face Area Points-21',
- 'zAsset-Face Adjustment Version-22',
- 'zAddAssetAttr-Face_Regions-SeeRawDBData-23',
- 'zAddAssetAttr-Face Analysis Version-24',
- 'zDetFacePrint-Data-SeeRawDBData-25',
- 'zPerson-Contact Matching Dictionary-26',
- 'zPerson-Verified Type-27',
- 'zPerson-Display Name-28',
- 'zPerson-Full Name-29',
- 'zPerson-Cloud Verified Type-30',
- 'zFaceCrop-State-31',
- 'zFaceCrop-Type-32',
- 'zFaceCrop-Resource Data-33',
- 'zDetFace-Confirmed Face Crop Generation State-34',
- 'zDetFace-Manual-35',
- 'zDetFace-Detection Type-36',
- 'zPerson-Detection Type-37',
- 'zDetFace-VIP Model Type-38',
- 'zDetFace-Name Source-39',
- 'zDetFace-Cloud Name Source-40',
- 'zPerson-Merge Candidate Confidence-41',
- 'zPerson-Type-42',
- 'zPerson-Gender Type-43',
- 'zDetFace-Gender Type-44',
- 'zDetFace-Center X-45',
- 'zDetFace-Center Y-46',
- 'zPerson-Age Type Estimate-47',
- 'zDetFace-Age Type Estimate-48',
- 'zDetFace-Ethnicity Type-49',
- 'zDetFace-Skin Tone Type-50',
- 'zDetFace-Hair Type-51',
- 'zDetFace-Hair Color Type-52',
- 'zDetFace-Head Gear Type-53',
- 'zDetFace-Facial Hair Type-54',
- 'zDetFace-Has Face Mask-55',
- 'zDetFace-Pose Type-56',
- 'zDetFace-Face Expression Type-57',
- 'zDetFace-Has Smile-58',
- 'zDetFace-Smile Type-59',
- 'zDetFace-Lip Makeup Type-60',
- 'zDetFace-Eyes State-61',
- 'zDetFace-Is Left Eye Closed-62',
- 'zDetFace-Is Right Eye Closed-63',
- 'zDetFace-Gaze Center X-64',
- 'zDetFace-Gaze Center Y-65',
- 'zDetFace-Face Gaze Type-66',
- 'zDetFace-Eye Glasses Type-67',
- 'zDetFace-Eye Makeup Type-68',
- 'zDetFace-Cluster Sequence Number Key-69',
- 'zDetFace-Grouping ID-70',
- 'zDetFace-Master ID-71',
- 'zDetFace-Quality-72',
- 'zDetFace-Quality Measure-73',
- 'zDetFace-Source Height-74',
- 'zDetFace-Source Width-75',
- 'zDetFace-Asset Visible-76',
- 'zDetFace-Hidden/Asset Hidden-77',
- 'zDetFace-In Trash/Recently Deleted-78',
- 'zDetFace-Cloud Local State-79',
- 'zDetFace-Training Type-80',
- 'zDetFace.Pose Yaw-81',
- 'zDetFace-Body Center X-82',
- 'zDetFace-Body Center Y-83',
- 'zDetFace-Body Height-84',
- 'zDetFace-Body Width-85',
- 'zDetFace-Roll-86',
- 'zDetFace-Size-87',
- 'zDetFace-Cluster Sequence Number-88',
- 'zDetFace-Blur Score-89',
- 'zDetFacePrint-Face Print Version-90',
- 'zDetFaceGroup-UUID-91',
- 'zDetFaceGroup-Person Builder State-92',
- 'zDetFaceGroup-UnNamed Face Count-93',
- 'zPerson-Face Count-94',
- 'zDetFace-Face Algorithm Version-95',
- 'zDetFace-Adjustment Version-96',
- 'zPerson-In Person Naming Model-97',
- 'zPerson-Key Face Pick Source Key-98',
- 'zPerson-Manual Order Key-99',
- 'zPerson-Question Type-100',
- 'zPerson-Suggested For Client Type-101',
- 'zPerson-Merge Target Person-102',
- 'zPerson-Cloud Local State-103',
- 'zFaceCrop-Cloud Local State-104',
- 'zFaceCrop-Cloud Type-105',
- 'zPerson-Cloud Delete State-106',
- 'zFaceCrop-Cloud Delete State-107',
- 'zDetFace-zPK-108',
- 'zDetFacePrint-Face Key-109',
- 'zPerson-KeyFace=zDetFace-zPK-110',
- 'zFaceCrop-Face Key-111',
- 'zPerson-zPK=zDetFace-Person-112',
- 'zDetFace-PersonForFace= zPerson-zPK-113',
- 'zDetFace-Person Being Key Face-114',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-115',
- 'zDetFace-Face Print-116',
- 'zDetFacePrint-zPK-117',
- 'zDetFace-Face Crop-118',
- 'zFaceCrop-zPK-119',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-120',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-121',
- 'zPerson-Assoc Face Group Key-122',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-123',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-124',
- 'zDetFaceGroup-zPK-125',
- 'zPerson-Share Participant= zSharePartic-zPK-126',
- 'zDetFace-UUID-127',
- 'zFaceCrop-UUID-128',
- 'zFaceCrop-Invalid Merge Candidate Person UUID-129',
- 'zPerson-Person UUID-130',
- 'zPerson-Person URI-131',
- 'zDetFaceGroup-UUID-132',
- 'zDetFace-AssetForFace= zAsset-zPK-133',
- 'zFaceCrop-Asset Key-134',
- 'zAsset-zPK-135',
- 'zAddAssetAttr-zPK-136',
- 'zAsset-UUID = store.cloudphotodb-137',
- 'zAddAssetAttr-Master Fingerprint-138')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph16.1-People & Faces Asset Data-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph16.1-People & Faces Asset Data-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite people faces and basic asset data data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ personcontactmatchingdictionary = ''
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ facecropresourcedata_blob = ''
+
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ if row[26] is not None:
+ pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[130] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[26])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ personcontactmatchingdictionary = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[130])
+ else:
+ logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[130])
+
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ if row[33] is not None:
+ pathto = os.path.join(report_folder, 'FaceCropFor_' + row[128] + '.jpg')
+ with open(pathto, 'wb') as file:
+ file.write(row[33])
+ facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
+
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25],
+ personcontactmatchingdictionary,
+ row[27], row[28], row[29], row[30], row[31], row[32],
+ facecropresourcedata_blob,
+ row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-Time Zone Offset-5',
+ 'zAddAssetAttr-EXIF-String-6',
+ 'zAsset-Directory-Path-7',
+ 'zAsset-Filename-8',
+ 'zAddAssetAttr- Original Filename-9',
+ 'zCldMast- Original Filename-10',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
+ 'zAsset- Conversation= zGenAlbum_zPK-12',
+ ('zAsset-Trashed Date-13', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14',
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-15',
+ 'zAddAssetAttr-Imported by Bundle ID-16',
+ 'zAddAssetAttr-Imported By Display Name-17',
+ 'zCldMast-Imported by Bundle ID-18',
+ 'zCldMast-Imported by Display Name-19',
+ 'zAsset-Visibility State-20',
+ 'zFaceCrop-Face Area Points-21',
+ 'zAsset-Face Adjustment Version-22',
+ 'zAddAssetAttr-Face_Regions-SeeRawDBData-23',
+ 'zAddAssetAttr-Face Analysis Version-24',
+ 'zDetFacePrint-Data-SeeRawDBData-25',
+ 'zPerson-Contact Matching Dictionary-26',
+ 'zPerson-Verified Type-27',
+ 'zPerson-Display Name-28',
+ 'zPerson-Full Name-29',
+ 'zPerson-Cloud Verified Type-30',
+ 'zFaceCrop-State-31',
+ 'zFaceCrop-Type-32',
+ 'zFaceCrop-Resource Data-33',
+ 'zDetFace-Confirmed Face Crop Generation State-34',
+ 'zDetFace-Manual-35',
+ 'zDetFace-Detection Type-36',
+ 'zPerson-Detection Type-37',
+ 'zDetFace-VIP Model Type-38',
+ 'zDetFace-Name Source-39',
+ 'zDetFace-Cloud Name Source-40',
+ 'zPerson-Merge Candidate Confidence-41',
+ 'zPerson-Type-42',
+ 'zPerson-Gender Type-43',
+ 'zDetFace-Gender Type-44',
+ 'zDetFace-Center X-45',
+ 'zDetFace-Center Y-46',
+ 'zPerson-Age Type Estimate-47',
+ 'zDetFace-Age Type Estimate-48',
+ 'zDetFace-Ethnicity Type-49',
+ 'zDetFace-Skin Tone Type-50',
+ 'zDetFace-Hair Type-51',
+ 'zDetFace-Hair Color Type-52',
+ 'zDetFace-Head Gear Type-53',
+ 'zDetFace-Facial Hair Type-54',
+ 'zDetFace-Has Face Mask-55',
+ 'zDetFace-Pose Type-56',
+ 'zDetFace-Face Expression Type-57',
+ 'zDetFace-Has Smile-58',
+ 'zDetFace-Smile Type-59',
+ 'zDetFace-Lip Makeup Type-60',
+ 'zDetFace-Eyes State-61',
+ 'zDetFace-Is Left Eye Closed-62',
+ 'zDetFace-Is Right Eye Closed-63',
+ 'zDetFace-Gaze Center X-64',
+ 'zDetFace-Gaze Center Y-65',
+ 'zDetFace-Face Gaze Type-66',
+ 'zDetFace-Eye Glasses Type-67',
+ 'zDetFace-Eye Makeup Type-68',
+ 'zDetFace-Cluster Sequence Number Key-69',
+ 'zDetFace-Grouping ID-70',
+ 'zDetFace-Master ID-71',
+ 'zDetFace-Quality-72',
+ 'zDetFace-Quality Measure-73',
+ 'zDetFace-Source Height-74',
+ 'zDetFace-Source Width-75',
+ 'zDetFace-Asset Visible-76',
+ 'zDetFace-Hidden/Asset Hidden-77',
+ 'zDetFace-In Trash/Recently Deleted-78',
+ 'zDetFace-Cloud Local State-79',
+ 'zDetFace-Training Type-80',
+ 'zDetFace.Pose Yaw-81',
+ 'zDetFace-Body Center X-82',
+ 'zDetFace-Body Center Y-83',
+ 'zDetFace-Body Height-84',
+ 'zDetFace-Body Width-85',
+ 'zDetFace-Roll-86',
+ 'zDetFace-Size-87',
+ 'zDetFace-Cluster Sequence Number-88',
+ 'zDetFace-Blur Score-89',
+ 'zDetFacePrint-Face Print Version-90',
+ 'zDetFaceGroup-UUID-91',
+ 'zDetFaceGroup-Person Builder State-92',
+ 'zDetFaceGroup-UnNamed Face Count-93',
+ 'zPerson-Face Count-94',
+ 'zDetFace-Face Algorithm Version-95',
+ 'zDetFace-Adjustment Version-96',
+ 'zPerson-In Person Naming Model-97',
+ 'zPerson-Key Face Pick Source Key-98',
+ 'zPerson-Manual Order Key-99',
+ 'zPerson-Question Type-100',
+ 'zPerson-Suggested For Client Type-101',
+ 'zPerson-Merge Target Person-102',
+ 'zPerson-Cloud Local State-103',
+ 'zFaceCrop-Cloud Local State-104',
+ 'zFaceCrop-Cloud Type-105',
+ 'zPerson-Cloud Delete State-106',
+ 'zFaceCrop-Cloud Delete State-107',
+ 'zDetFace-zPK-108',
+ 'zDetFacePrint-Face Key-109',
+ 'zPerson-KeyFace=zDetFace-zPK-110',
+ 'zFaceCrop-Face Key-111',
+ 'zPerson-zPK=zDetFace-Person-112',
+ 'zDetFace-PersonForFace= zPerson-zPK-113',
+ 'zDetFace-Person Being Key Face-114',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-115',
+ 'zDetFace-Face Print-116',
+ 'zDetFacePrint-zPK-117',
+ 'zDetFace-Face Crop-118',
+ 'zFaceCrop-zPK-119',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-120',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-121',
+ 'zPerson-Assoc Face Group Key-122',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-123',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-124',
+ 'zDetFaceGroup-zPK-125',
+ 'zPerson-Share Participant= zSharePartic-zPK-126',
+ 'zDetFace-UUID-127',
+ 'zFaceCrop-UUID-128',
+ 'zFaceCrop-Invalid Merge Candidate Person UUID-129',
+ 'zPerson-Person UUID-130',
+ 'zPerson-Person URI-131',
+ 'zDetFaceGroup-UUID-132',
+ 'zDetFace-AssetForFace= zAsset-zPK-133',
+ 'zFaceCrop-Asset Key-134',
+ 'zAsset-zPK-135',
+ 'zAddAssetAttr-zPK-136',
+ 'zAsset-UUID = store.cloudphotodb-137',
+ 'zAddAssetAttr-Master Fingerprint-138')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -2234,236 +2191,215 @@ def get_ph16assetpeopledetfacephdapsql(files_found, report_folder, seeker, wrap_
LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP
WHERE zDetFace.Z_PK > 0
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- personcontactmatchingdictionary = ''
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- facecropresourcedata_blob = ''
-
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- if row[27] is not None:
- pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[133] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[27])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- personcontactmatchingdictionary = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[133])
- else:
- logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[133])
-
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- if row[34] is not None:
- pathto = os.path.join(report_folder, 'FaceCropFor_' + row[131] + '.jpg')
- with open(pathto, 'wb') as file:
- file.write(row[34])
- facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
-
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26],
- personcontactmatchingdictionary,
- row[28], row[29], row[30], row[31], row[32], row[33],
- facecropresourcedata_blob,
- row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \
- ' basic asset, people and detected faces data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 17.'
- report = ArtifactHtmlReport('Ph16.1-People & Faces Asset Data-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph16.1-People & Faces Asset Data-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-Time Zone Offset-5',
- 'zAddAssetAttr-EXIF-String-6',
- 'zAsset-Directory-Path-7',
- 'zAsset-Filename-8',
- 'zAddAssetAttr- Original Filename-9',
- 'zCldMast- Original Filename-10',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
- 'zAsset- Conversation= zGenAlbum_zPK-12',
- 'zAsset-Trashed Date-13',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-15',
- 'zAddAssetAttr-Imported by Bundle ID-16',
- 'zAddAssetAttr-Imported By Display Name-17',
- 'zCldMast-Imported by Bundle ID-18',
- 'zCldMast-Imported by Display Name-19',
- 'zAsset-Visibility State-20',
- 'zFaceCrop-Face Area Points-21',
- 'zAsset-Face Adjustment Version-22',
- 'zAddAssetAttr-Face_Regions-SeeRawDBData-23',
- 'zAddAssetAttr-Face Analysis Version-24',
- 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-25',
- 'zDetFacePrint-Data-SeeRawDBData-26',
- 'zPerson-Contact Matching Dictionary-27',
- 'zPerson-Verified Type-28',
- 'zPerson-Display Name-29',
- 'zPerson-Full Name-30',
- 'zPerson-Cloud Verified Type-31',
- 'zFaceCrop-State-32',
- 'zFaceCrop-Type-33',
- 'zFaceCrop-Resource Data-34',
- 'zDetFace-Confirmed Face Crop Generation State-35',
- 'zDetFace-Manual-36',
- 'zDetFace-Detection Type-37',
- 'zPerson-Detection Type-38',
- 'zDetFace-VIP Model Type-39',
- 'zDetFace-Name Source-40',
- 'zDetFace-Cloud Name Source-41',
- 'zPerson-Merge Candidate Confidence-42',
- 'zPerson-Type-43',
- 'zPerson-Gender Type-44',
- 'zDetFace-Gender Type-45',
- 'zDetFace-Center X-46',
- 'zDetFace-Center Y-47',
- 'zPerson-Age Type Estimate-48',
- 'zDetFace-Age Type Estimate-49',
- 'zDetFace-Ethnicity Type-50',
- 'zDetFace-Skin Tone Type-51',
- 'zDetFace-Hair Type-52',
- 'zDetFace-Hair Color Type-53',
- 'zDetFace-Head Gear Type-54',
- 'zDetFace-Facial Hair Type-55',
- 'zDetFace-Has Face Mask-56',
- 'zDetFace-Pose Type-57',
- 'zDetFace-Face Expression Type-58',
- 'zDetFace-Has Smile-59',
- 'zDetFace-Smile Type-60',
- 'zDetFace-Lip Makeup Type-61',
- 'zDetFace-Eyes State-62',
- 'zDetFace-Is Left Eye Closed-63',
- 'zDetFace-Is Right Eye Closed-64',
- 'zDetFace-Gaze Center X-65',
- 'zDetFace-Gaze Center Y-66',
- 'zDetFace-Face Gaze Type-67',
- 'zDetFace-Eye Glasses Type-68',
- 'zDetFace-Eye Makeup Type-69',
- 'zDetFace-Cluster Squence Number Key-70',
- 'zDetFace-Grouping ID-71',
- 'zDetFace-Master ID-72',
- 'zDetFace-Quality-73',
- 'zDetFace-Quality Measure-74',
- 'zDetFace-Source Height-75',
- 'zDetFace-Source Width-76',
- 'zDetFace-Asset Visible-77',
- 'zDetFace-Hidden/Asset Hidden-78',
- 'zDetFace-In Trash/Recently Deleted-79',
- 'zDetFace-Cloud Local State-80',
- 'zDetFace-Training Type-81',
- 'zDetFace.Pose Yaw-82',
- 'zDetFace-Body Center X-83',
- 'zDetFace-Body Center Y-84',
- 'zDetFace-Body Height-85',
- 'zDetFace-Body Width-86',
- 'zDetFace-Roll-87',
- 'zDetFace-Size-88',
- 'zDetFace-Cluster Sequence Number-89',
- 'zDetFace-Blur Score-90',
- 'zDetFacePrint-Face Print Version-91',
- 'zDetFaceGroup-UUID-92',
- 'zDetFaceGroup-Person Builder State-93',
- 'zDetFaceGroup-UnNamed Face Count-94',
- 'zPerson-Face Count-95',
- 'zDetFace-Face Algorithm Version-96',
- 'zDetFace-Adjustment Version-97',
- 'zPerson-In Person Naming Model-98',
- 'zPerson-Key Face Pick Source Key-99',
- 'zPerson-Manual Order Key-100',
- 'zPerson-Question Type-101',
- 'zPerson-Suggested For Client Type-102',
- 'zPerson-Merge Target Person-103',
- 'zPerson-Cloud Local State-104',
- 'zFaceCrop-Cloud Local State-105',
- 'zFaceCrop-Cloud Type-106',
- 'zPerson-Cloud Delete State-107',
- 'zFaceCrop-Cloud Delete State-108',
- 'zDetFace-zPK-109',
- 'zDetFacePrint-Face Key-110',
- 'zPerson-KeyFace=zDetFace-zPK-111',
- 'zFaceCrop-Face Key-112',
- 'zPerson-zPK=zDetFace-Person-113',
- 'zDetFace-PersonForFace= zPerson-zPK-114',
- 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-115',
- 'zDetFace-PersonForTorso= zPerson-zPK-116',
- 'zDetFace-Person Being Key Face-117',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-118',
- 'zDetFace-Face Print-119',
- 'zDetFacePrint-zPK-120',
- 'zDetFace-Face Crop-121',
- 'zFaceCrop-zPK-122',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-123',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-124',
- 'zPerson-Assoc Face Group Key-125',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-126',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-127',
- 'zDetFaceGroup-zPK-128',
- 'zPerson-Share Participant= zSharePartic-zPK-129',
- 'zDetFace-UUID-130',
- 'zFaceCrop-UUID-131',
- 'zFaceCrop-Invalid Merge Candidate Person UUID-132',
- 'zPerson-Person UUID-133',
- 'zPerson-Person URI-134',
- 'zDetFaceGroup-UUID-135',
- 'zDetFace-AssetForFace= zAsset-zPK-136',
- 'zDetFace-AssetForTorso= zAsset-zPK-137',
- 'zFaceCrop-Asset Key-138',
- 'zAsset-zPK-139',
- 'zAddAssetAttr-zPK-140',
- 'zAsset-UUID = store.cloudphotodb-141',
- 'zAddAssetAttr-Master Fingerprint-142')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph16.1-People & Faces Asset Data-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph16.1-People & Faces Asset Data-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite people faces and basic asset data data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ personcontactmatchingdictionary = ''
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ facecropresourcedata_blob = ''
+
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ if row[27] is not None:
+ pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[133] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[27])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ personcontactmatchingdictionary = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[133])
+ else:
+ logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[133])
+
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ if row[34] is not None:
+ pathto = os.path.join(report_folder, 'FaceCropFor_' + row[131] + '.jpg')
+ with open(pathto, 'wb') as file:
+ file.write(row[34])
+ facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
+
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26],
+ personcontactmatchingdictionary,
+ row[28], row[29], row[30], row[31], row[32], row[33],
+ facecropresourcedata_blob,
+ row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-Time Zone Offset-5',
+ 'zAddAssetAttr-EXIF-String-6',
+ 'zAsset-Directory-Path-7',
+ 'zAsset-Filename-8',
+ 'zAddAssetAttr- Original Filename-9',
+ 'zCldMast- Original Filename-10',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
+ 'zAsset- Conversation= zGenAlbum_zPK-12',
+ ('zAsset-Trashed Date-13', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14',
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-15',
+ 'zAddAssetAttr-Imported by Bundle ID-16',
+ 'zAddAssetAttr-Imported By Display Name-17',
+ 'zCldMast-Imported by Bundle ID-18',
+ 'zCldMast-Imported by Display Name-19',
+ 'zAsset-Visibility State-20',
+ 'zFaceCrop-Face Area Points-21',
+ 'zAsset-Face Adjustment Version-22',
+ 'zAddAssetAttr-Face_Regions-SeeRawDBData-23',
+ 'zAddAssetAttr-Face Analysis Version-24',
+ 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-25',
+ 'zDetFacePrint-Data-SeeRawDBData-26',
+ 'zPerson-Contact Matching Dictionary-27',
+ 'zPerson-Verified Type-28',
+ 'zPerson-Display Name-29',
+ 'zPerson-Full Name-30',
+ 'zPerson-Cloud Verified Type-31',
+ 'zFaceCrop-State-32',
+ 'zFaceCrop-Type-33',
+ 'zFaceCrop-Resource Data-34',
+ 'zDetFace-Confirmed Face Crop Generation State-35',
+ 'zDetFace-Manual-36',
+ 'zDetFace-Detection Type-37',
+ 'zPerson-Detection Type-38',
+ 'zDetFace-VIP Model Type-39',
+ 'zDetFace-Name Source-40',
+ 'zDetFace-Cloud Name Source-41',
+ 'zPerson-Merge Candidate Confidence-42',
+ 'zPerson-Type-43',
+ 'zPerson-Gender Type-44',
+ 'zDetFace-Gender Type-45',
+ 'zDetFace-Center X-46',
+ 'zDetFace-Center Y-47',
+ 'zPerson-Age Type Estimate-48',
+ 'zDetFace-Age Type Estimate-49',
+ 'zDetFace-Ethnicity Type-50',
+ 'zDetFace-Skin Tone Type-51',
+ 'zDetFace-Hair Type-52',
+ 'zDetFace-Hair Color Type-53',
+ 'zDetFace-Head Gear Type-54',
+ 'zDetFace-Facial Hair Type-55',
+ 'zDetFace-Has Face Mask-56',
+ 'zDetFace-Pose Type-57',
+ 'zDetFace-Face Expression Type-58',
+ 'zDetFace-Has Smile-59',
+ 'zDetFace-Smile Type-60',
+ 'zDetFace-Lip Makeup Type-61',
+ 'zDetFace-Eyes State-62',
+ 'zDetFace-Is Left Eye Closed-63',
+ 'zDetFace-Is Right Eye Closed-64',
+ 'zDetFace-Gaze Center X-65',
+ 'zDetFace-Gaze Center Y-66',
+ 'zDetFace-Face Gaze Type-67',
+ 'zDetFace-Eye Glasses Type-68',
+ 'zDetFace-Eye Makeup Type-69',
+ 'zDetFace-Cluster Squence Number Key-70',
+ 'zDetFace-Grouping ID-71',
+ 'zDetFace-Master ID-72',
+ 'zDetFace-Quality-73',
+ 'zDetFace-Quality Measure-74',
+ 'zDetFace-Source Height-75',
+ 'zDetFace-Source Width-76',
+ 'zDetFace-Asset Visible-77',
+ 'zDetFace-Hidden/Asset Hidden-78',
+ 'zDetFace-In Trash/Recently Deleted-79',
+ 'zDetFace-Cloud Local State-80',
+ 'zDetFace-Training Type-81',
+ 'zDetFace.Pose Yaw-82',
+ 'zDetFace-Body Center X-83',
+ 'zDetFace-Body Center Y-84',
+ 'zDetFace-Body Height-85',
+ 'zDetFace-Body Width-86',
+ 'zDetFace-Roll-87',
+ 'zDetFace-Size-88',
+ 'zDetFace-Cluster Sequence Number-89',
+ 'zDetFace-Blur Score-90',
+ 'zDetFacePrint-Face Print Version-91',
+ 'zDetFaceGroup-UUID-92',
+ 'zDetFaceGroup-Person Builder State-93',
+ 'zDetFaceGroup-UnNamed Face Count-94',
+ 'zPerson-Face Count-95',
+ 'zDetFace-Face Algorithm Version-96',
+ 'zDetFace-Adjustment Version-97',
+ 'zPerson-In Person Naming Model-98',
+ 'zPerson-Key Face Pick Source Key-99',
+ 'zPerson-Manual Order Key-100',
+ 'zPerson-Question Type-101',
+ 'zPerson-Suggested For Client Type-102',
+ 'zPerson-Merge Target Person-103',
+ 'zPerson-Cloud Local State-104',
+ 'zFaceCrop-Cloud Local State-105',
+ 'zFaceCrop-Cloud Type-106',
+ 'zPerson-Cloud Delete State-107',
+ 'zFaceCrop-Cloud Delete State-108',
+ 'zDetFace-zPK-109',
+ 'zDetFacePrint-Face Key-110',
+ 'zPerson-KeyFace=zDetFace-zPK-111',
+ 'zFaceCrop-Face Key-112',
+ 'zPerson-zPK=zDetFace-Person-113',
+ 'zDetFace-PersonForFace= zPerson-zPK-114',
+ 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-115',
+ 'zDetFace-PersonForTorso= zPerson-zPK-116',
+ 'zDetFace-Person Being Key Face-117',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-118',
+ 'zDetFace-Face Print-119',
+ 'zDetFacePrint-zPK-120',
+ 'zDetFace-Face Crop-121',
+ 'zFaceCrop-zPK-122',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-123',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-124',
+ 'zPerson-Assoc Face Group Key-125',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-126',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-127',
+ 'zDetFaceGroup-zPK-128',
+ 'zPerson-Share Participant= zSharePartic-zPK-129',
+ 'zDetFace-UUID-130',
+ 'zFaceCrop-UUID-131',
+ 'zFaceCrop-Invalid Merge Candidate Person UUID-132',
+ 'zPerson-Person UUID-133',
+ 'zPerson-Person URI-134',
+ 'zDetFaceGroup-UUID-135',
+ 'zDetFace-AssetForFace= zAsset-zPK-136',
+ 'zDetFace-AssetForTorso= zAsset-zPK-137',
+ 'zFaceCrop-Asset Key-138',
+ 'zAsset-zPK-139',
+ 'zAddAssetAttr-zPK-140',
+ 'zAsset-UUID = store.cloudphotodb-141',
+ 'zAddAssetAttr-Master Fingerprint-142')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -2507,7 +2443,7 @@ def get_ph16assetpeopledetfacephdapsql(files_found, report_folder, seeker, wrap_
WHEN 0 THEN '0-Obs in iOS 18 still testing-0'
WHEN 1 THEN '1-Obs in iOS 18 still testing-1'
ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZHASPEOPLESCENEMIDORGREATERCONFIDENCE || ''
- END AS 'zAddAssetAttr-Has_People_Scene Mid_Or_Greater_Confidence-iOS18',
+ END AS 'zAddAssetAttr-Has_People_Scene Mid_Or_Greater_Confidence',
zAddAssetAttr.ZFACEANALYSISVERSION AS 'zAddAssetAttr-Face Analysis Version',
zDetFace.ZASSETFORTEMPORALDETECTEDFACES AS 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK',
CASE
@@ -2520,7 +2456,7 @@ def get_ph16assetpeopledetfacephdapsql(files_found, report_folder, seeker, wrap_
WHEN 1 THEN '1-Has_Contact Matching_Dictionary'
ELSE 'Unknown-New-Value!: ' || zPerson.ZVERIFIEDTYPE || ''
END AS 'zPerson-Verified Type',
- zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence-iOS18',
+ zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence',
zPerson.ZDISPLAYNAME AS 'zPerson-Display Name',
zPerson.ZFULLNAME AS 'zPerson-Full Name',
CASE zPerson.ZCLOUDVERIFIEDTYPE
@@ -2867,8 +2803,8 @@ def get_ph16assetpeopledetfacephdapsql(files_found, report_folder, seeker, wrap_
zAsset.Z_PK AS 'zAsset-zPK',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18'
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash'
FROM ZASSET zAsset
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES
@@ -2885,252 +2821,231 @@ def get_ph16assetpeopledetfacephdapsql(files_found, report_folder, seeker, wrap_
LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP
WHERE zDetFace.Z_PK > 0
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- personcontactmatchingdictionary = ''
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- facecropresourcedata_blob = ''
-
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- if row[28] is not None:
- pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[135] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[28])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- personcontactmatchingdictionary = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[135])
- else:
- logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[135])
-
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- if row[36] is not None:
- pathto = os.path.join(report_folder, 'FaceCropFor_' + row[133] + '.jpg')
- with open(pathto, 'wb') as file:
- file.write(row[36])
- facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
-
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- personcontactmatchingdictionary,
- row[29], row[30], row[31], row[32], row[33], row[34], row[35],
- facecropresourcedata_blob,
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142], row[143], row[144], row[145]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \
- ' basic asset, people and detected faces data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 18.'
- report = ArtifactHtmlReport('Ph16.1-People & Faces Asset Data-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph16.1-People & Faces Asset Data-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-Time Zone Offset-5',
- 'zAddAssetAttr-EXIF-String-6',
- 'zAsset-Directory-Path-7',
- 'zAsset-Filename-8',
- 'zAddAssetAttr- Original Filename-9',
- 'zCldMast- Original Filename-10',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
- 'zAsset- Conversation= zGenAlbum_zPK-12',
- 'zAsset-Trashed Date-13',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-15',
- 'zAddAssetAttr-Imported by Bundle ID-16',
- 'zAddAssetAttr-Imported By Display Name-17',
- 'zCldMast-Imported by Bundle ID-18',
- 'zCldMast-Imported by Display Name-19',
- 'zAsset-Visibility State-20',
- 'zFaceCrop-Face Area Points-21',
- 'zAddAssetAttr-Has_People_Scene Mid_Or_Greater_Confidence-iOS18-22',
- 'zAsset-Face Adjustment Version-23',
- 'zAddAssetAttr-Face_Regions-SeeRawDBData-24',
- 'zAddAssetAttr-Face Analysis Version-25',
- 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-26',
- 'zDetFacePrint-Data-SeeRawDBData-27',
- 'zPerson-Contact Matching Dictionary-28',
- 'zPerson-Verified Type-29',
- 'zPerson-Is_Me_Confidence-iOS18-30',
- 'zPerson-Display Name-31',
- 'zPerson-Full Name-32',
- 'zPerson-Cloud Verified Type-33',
- 'zFaceCrop-State-34',
- 'zFaceCrop-Type-35',
- 'zFaceCrop-Resource Data-36',
- 'zDetFace-Confirmed Face Crop Generation State-37',
- 'zDetFace-Manual-38',
- 'zDetFace-Detection Type-39',
- 'zPerson-Detection Type-40',
- 'zDetFace-VIP Model Type-41',
- 'zDetFace-Name Source-42',
- 'zDetFace-Cloud Name Source-43',
- 'zPerson-Merge Candidate Confidence-44',
- 'zPerson-Type-45',
- 'zPerson-Gender Type-46',
- 'zDetFace-Gender Type-47',
- 'zDetFace-Center X-48',
- 'zDetFace-Center Y-49',
- 'zPerson-Age Type Estimate-50',
- 'zDetFace-Age Type Estimate-51',
- 'zDetFace-Ethnicity Type-52',
- 'zDetFace-Skin Tone Type-53',
- 'zDetFace-Hair Type-54',
- 'zDetFace-Hair Color Type-55',
- 'zDetFace-Head Gear Type-56',
- 'zDetFace-Facial Hair Type-57',
- 'zDetFace-Has Face Mask-58',
- 'zDetFace-Pose Type-59',
- 'zDetFace-Face Expression Type-60',
- 'zDetFace-Has Smile-61',
- 'zDetFace-Smile Type-62',
- 'zDetFace-Lip Makeup Type-63',
- 'zDetFace-Eyes State-64',
- 'zDetFace-Is Left Eye Closed-65',
- 'zDetFace-Is Right Eye Closed-66',
- 'zDetFace-Gaze Center X-67',
- 'zDetFace-Gaze Center Y-68',
- 'zDetFace-Face Gaze Type-69',
- 'zDetFace-Eye Glasses Type-70',
- 'zDetFace-Eye Makeup Type-71',
- 'zDetFace-Cluster Squence Number Key-72',
- 'zDetFace-Grouping ID-73',
- 'zDetFace-Master ID-74',
- 'zDetFace-Quality-75',
- 'zDetFace-Quality Measure-76',
- 'zDetFace-Source Height-77',
- 'zDetFace-Source Width-78',
- 'zDetFace-Asset Visible-79',
- 'zDetFace-Hidden/Asset Hidden-80',
- 'zDetFace-In Trash/Recently Deleted-81',
- 'zDetFace-Cloud Local State-82',
- 'zDetFace-Training Type-83',
- 'zDetFace.Pose Yaw-84',
- 'zDetFace-Body Center X-85',
- 'zDetFace-Body Center Y-86',
- 'zDetFace-Body Height-87',
- 'zDetFace-Body Width-88',
- 'zDetFace-Roll-89',
- 'zDetFace-Size-90',
- 'zDetFace-Cluster Sequence Number-91',
- 'zDetFace-Blur Score-92',
- 'zDetFacePrint-Face Print Version-93',
- 'zDetFaceGroup-UUID-94',
- 'zDetFaceGroup-Person Builder State-95',
- 'zDetFaceGroup-UnNamed Face Count-96',
- 'zPerson-Face Count-97',
- 'zDetFace-Face Algorithm Version-98',
- 'zDetFace-Adjustment Version-99',
- 'zPerson-In Person Naming Model-100',
- 'zPerson-Key Face Pick Source Key-101',
- 'zPerson-Manual Order Key-102',
- 'zPerson-Question Type-103',
- 'zPerson-Suggested For Client Type-104',
- 'zPerson-Merge Target Person-105',
- 'zPerson-Cloud Local State-106',
- 'zFaceCrop-Cloud Local State-107',
- 'zFaceCrop-Cloud Type-108',
- 'zPerson-Cloud Delete State-109',
- 'zFaceCrop-Cloud Delete State-110',
- 'zDetFace-zPK-111',
- 'zDetFacePrint-Face Key-112',
- 'zPerson-KeyFace=zDetFace-zPK-113',
- 'zFaceCrop-Face Key-114',
- 'zPerson-zPK=zDetFace-Person-115',
- 'zDetFace-PersonForFace= zPerson-zPK-116',
- 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-117',
- 'zDetFace-PersonForTorso= zPerson-zPK-118',
- 'zDetFace-Person Being Key Face-119',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-120',
- 'zDetFace-Face Print-121',
- 'zDetFacePrint-zPK-122',
- 'zDetFace-Face Crop-123',
- 'zFaceCrop-zPK-124',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-125',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-126',
- 'zPerson-Assoc Face Group Key-127',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-128',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-129',
- 'zDetFaceGroup-zPK-130',
- 'zPerson-Share Participant= zSharePartic-zPK-131',
- 'zDetFace-UUID-132',
- 'zFaceCrop-UUID-133',
- 'zFaceCrop-Invalid Merge Candidate Person UUID-134',
- 'zPerson-Person UUID-135',
- 'zPerson-Person URI-136',
- 'zDetFaceGroup-UUID-137',
- 'zDetFace-AssetForFace= zAsset-zPK-138',
- 'zDetFace-AssetForTorso= zAsset-zPK-139',
- 'zFaceCrop-Asset Key-140',
- 'zAsset-zPK-141',
- 'zAddAssetAttr-zPK-142',
- 'zAsset-UUID = store.cloudphotodb-143',
- 'zAddAssetAttr-Original Stable Hash-iOS18-144',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-145')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph16.1-People & Faces Asset Data-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph16.1-People & Faces Asset Data-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite people faces and basic asset data data')
-
- db.close()
- return
-
-
-def get_ph16assetpeopledetfacesyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset):
-
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ personcontactmatchingdictionary = ''
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ facecropresourcedata_blob = ''
+
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ if row[28] is not None:
+ pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[135] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[28])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ personcontactmatchingdictionary = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[135])
+ else:
+ logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[135])
+
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ if row[36] is not None:
+ pathto = os.path.join(report_folder, 'FaceCropFor_' + row[133] + '.jpg')
+ with open(pathto, 'wb') as file:
+ file.write(row[36])
+ facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
+
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ personcontactmatchingdictionary,
+ row[29], row[30], row[31], row[32], row[33], row[34], row[35],
+ facecropresourcedata_blob,
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-Time Zone Offset-5',
+ 'zAddAssetAttr-EXIF-String-6',
+ 'zAsset-Directory-Path-7',
+ 'zAsset-Filename-8',
+ 'zAddAssetAttr- Original Filename-9',
+ 'zCldMast- Original Filename-10',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
+ 'zAsset- Conversation= zGenAlbum_zPK-12',
+ ('zAsset-Trashed Date-13', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14',
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-15',
+ 'zAddAssetAttr-Imported by Bundle ID-16',
+ 'zAddAssetAttr-Imported By Display Name-17',
+ 'zCldMast-Imported by Bundle ID-18',
+ 'zCldMast-Imported by Display Name-19',
+ 'zAsset-Visibility State-20',
+ 'zFaceCrop-Face Area Points-21',
+ 'zAddAssetAttr-Has_People_Scene Mid_Or_Greater_Confidence-22',
+ 'zAsset-Face Adjustment Version-23',
+ 'zAddAssetAttr-Face_Regions-SeeRawDBData-24',
+ 'zAddAssetAttr-Face Analysis Version-25',
+ 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-26',
+ 'zDetFacePrint-Data-SeeRawDBData-27',
+ 'zPerson-Contact Matching Dictionary-28',
+ 'zPerson-Verified Type-29',
+ 'zPerson-Is_Me_Confidence-30',
+ 'zPerson-Display Name-31',
+ 'zPerson-Full Name-32',
+ 'zPerson-Cloud Verified Type-33',
+ 'zFaceCrop-State-34',
+ 'zFaceCrop-Type-35',
+ 'zFaceCrop-Resource Data-36',
+ 'zDetFace-Confirmed Face Crop Generation State-37',
+ 'zDetFace-Manual-38',
+ 'zDetFace-Detection Type-39',
+ 'zPerson-Detection Type-40',
+ 'zDetFace-VIP Model Type-41',
+ 'zDetFace-Name Source-42',
+ 'zDetFace-Cloud Name Source-43',
+ 'zPerson-Merge Candidate Confidence-44',
+ 'zPerson-Type-45',
+ 'zPerson-Gender Type-46',
+ 'zDetFace-Gender Type-47',
+ 'zDetFace-Center X-48',
+ 'zDetFace-Center Y-49',
+ 'zPerson-Age Type Estimate-50',
+ 'zDetFace-Age Type Estimate-51',
+ 'zDetFace-Ethnicity Type-52',
+ 'zDetFace-Skin Tone Type-53',
+ 'zDetFace-Hair Type-54',
+ 'zDetFace-Hair Color Type-55',
+ 'zDetFace-Head Gear Type-56',
+ 'zDetFace-Facial Hair Type-57',
+ 'zDetFace-Has Face Mask-58',
+ 'zDetFace-Pose Type-59',
+ 'zDetFace-Face Expression Type-60',
+ 'zDetFace-Has Smile-61',
+ 'zDetFace-Smile Type-62',
+ 'zDetFace-Lip Makeup Type-63',
+ 'zDetFace-Eyes State-64',
+ 'zDetFace-Is Left Eye Closed-65',
+ 'zDetFace-Is Right Eye Closed-66',
+ 'zDetFace-Gaze Center X-67',
+ 'zDetFace-Gaze Center Y-68',
+ 'zDetFace-Face Gaze Type-69',
+ 'zDetFace-Eye Glasses Type-70',
+ 'zDetFace-Eye Makeup Type-71',
+ 'zDetFace-Cluster Squence Number Key-72',
+ 'zDetFace-Grouping ID-73',
+ 'zDetFace-Master ID-74',
+ 'zDetFace-Quality-75',
+ 'zDetFace-Quality Measure-76',
+ 'zDetFace-Source Height-77',
+ 'zDetFace-Source Width-78',
+ 'zDetFace-Asset Visible-79',
+ 'zDetFace-Hidden/Asset Hidden-80',
+ 'zDetFace-In Trash/Recently Deleted-81',
+ 'zDetFace-Cloud Local State-82',
+ 'zDetFace-Training Type-83',
+ 'zDetFace.Pose Yaw-84',
+ 'zDetFace-Body Center X-85',
+ 'zDetFace-Body Center Y-86',
+ 'zDetFace-Body Height-87',
+ 'zDetFace-Body Width-88',
+ 'zDetFace-Roll-89',
+ 'zDetFace-Size-90',
+ 'zDetFace-Cluster Sequence Number-91',
+ 'zDetFace-Blur Score-92',
+ 'zDetFacePrint-Face Print Version-93',
+ 'zDetFaceGroup-UUID-94',
+ 'zDetFaceGroup-Person Builder State-95',
+ 'zDetFaceGroup-UnNamed Face Count-96',
+ 'zPerson-Face Count-97',
+ 'zDetFace-Face Algorithm Version-98',
+ 'zDetFace-Adjustment Version-99',
+ 'zPerson-In Person Naming Model-100',
+ 'zPerson-Key Face Pick Source Key-101',
+ 'zPerson-Manual Order Key-102',
+ 'zPerson-Question Type-103',
+ 'zPerson-Suggested For Client Type-104',
+ 'zPerson-Merge Target Person-105',
+ 'zPerson-Cloud Local State-106',
+ 'zFaceCrop-Cloud Local State-107',
+ 'zFaceCrop-Cloud Type-108',
+ 'zPerson-Cloud Delete State-109',
+ 'zFaceCrop-Cloud Delete State-110',
+ 'zDetFace-zPK-111',
+ 'zDetFacePrint-Face Key-112',
+ 'zPerson-KeyFace=zDetFace-zPK-113',
+ 'zFaceCrop-Face Key-114',
+ 'zPerson-zPK=zDetFace-Person-115',
+ 'zDetFace-PersonForFace= zPerson-zPK-116',
+ 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-117',
+ 'zDetFace-PersonForTorso= zPerson-zPK-118',
+ 'zDetFace-Person Being Key Face-119',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-120',
+ 'zDetFace-Face Print-121',
+ 'zDetFacePrint-zPK-122',
+ 'zDetFace-Face Crop-123',
+ 'zFaceCrop-zPK-124',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-125',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-126',
+ 'zPerson-Assoc Face Group Key-127',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-128',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-129',
+ 'zDetFaceGroup-zPK-130',
+ 'zPerson-Share Participant= zSharePartic-zPK-131',
+ 'zDetFace-UUID-132',
+ 'zFaceCrop-UUID-133',
+ 'zFaceCrop-Invalid Merge Candidate Person UUID-134',
+ 'zPerson-Person UUID-135',
+ 'zPerson-Person URI-136',
+ 'zDetFaceGroup-UUID-137',
+ 'zDetFace-AssetForFace= zAsset-zPK-138',
+ 'zDetFace-AssetForTorso= zAsset-zPK-139',
+ 'zFaceCrop-Asset Key-140',
+ 'zAsset-zPK-141',
+ 'zAddAssetAttr-zPK-142',
+ 'zAsset-UUID = store.cloudphotodb-143',
+ 'zAddAssetAttr-Original Stable Hash-144',
+ 'zAddAssetAttr.Adjusted Stable Hash-145')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
+@artifact_processor
+def Ph16_2PeopleFacesAssetDataSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
+
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("13.7"):
- logfunc("Unsupported version for Syndication.photoslibrary-database-Photos.sqlite basic asset people and face data iOS " + iosversion)
+ logfunc("Unsupported version for Syndication.photoslibrary iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -3447,207 +3362,186 @@ def get_ph16assetpeopledetfacesyndpl(files_found, report_folder, seeker, wrap_te
LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP
WHERE zDetFace.Z_PK > 0
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- personcontactmatchingdictionary = ''
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- facecropresourcedata_blob = ''
-
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- if row[22] is not None:
- pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[108] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[22])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- personcontactmatchingdictionary = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[108])
- else:
- logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[108])
-
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- if row[29] is not None:
- pathto = os.path.join(report_folder, 'FaceCropFor_' + row[106] + '.jpg')
- with open(pathto, 'wb') as file:
- file.write(row[29])
- facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
-
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21],
- personcontactmatchingdictionary,
- row[23], row[24], row[25], row[26], row[27], row[28],
- facecropresourcedata_blob,
- row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116]))
-
- counter += 1
-
- description = 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite for' \
- ' basic asset, people and detected faces data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 14.'
- report = ArtifactHtmlReport('Ph16.2-People & Faces Asset Data-SyndPL')
- report.start_artifact_report(report_folder, 'Ph16.2-People & Faces Asset Data-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-Time Zone Offset-5',
- 'zAddAssetAttr-EXIF-String-6',
- 'zAsset-Directory-Path-7',
- 'zAsset-Filename-8',
- 'zAddAssetAttr- Original Filename-9',
- 'zCldMast- Original Filename-10',
- 'zAsset-Trashed Date-11',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-12',
- 'zAddAssetAttr-Creator Bundle ID-13',
- 'zAddAssetAttr-Imported By Display Name-14',
- 'zCldMast-Imported by Bundle ID-15',
- 'zCldMast-Imported by Display Name-16',
- 'zAsset-Visibility State-17',
- 'zFaceCrop-Face Area Points-18',
- 'zAsset-Face Adjustment Version-19',
- 'zAddAssetAttr-Face_Regions-SeeRawDBData-20',
- 'zDetFacePrint-Data-SeeRawDBData-21',
- 'zPerson-Contact Matching Dictionary-22',
- 'zPerson-Verified Type-23',
- 'zPerson-Display Name-24',
- 'zPerson-Full Name-25',
- 'zPerson-Cloud Verified Type-26',
- 'zFaceCrop-State-27',
- 'zFaceCrop-Type-28',
- 'zFaceCrop-Resource Data-29',
- 'zDetFace-Confirmed Face Crop Generation State-30',
- 'zDetFace-Manual-31',
- 'zDetFace-VIP Model Type-32',
- 'zDetFace-Name Source-33',
- 'zDetFace-Cloud Name Source-34',
- 'zPerson-Type-35',
- 'zPerson-Gender Type-36',
- 'zDetFace-Gender Type-37',
- 'zDetFace-Center X-38',
- 'zDetFace-Center Y-39',
- 'zPerson-Age Type Estimate-40',
- 'zDetFace-Age Type Estimate-41',
- 'zDetFace-Hair Color Type-42',
- 'zDetFace-Facial Hair Type-43',
- 'zDetFace-Has Smile-44',
- 'zDetFace-Smile Type-45',
- 'zDetFace-Lip Makeup Type-46',
- 'zDetFace-Eyes State-47',
- 'zDetFace-Is Left Eye Closed-48',
- 'zDetFace-Is Right Eye Closed-49',
- 'zDetFace-Eye Glasses Type-50',
- 'zDetFace-Eye Makeup Type-51',
- 'zDetFace-Cluster Sequence Number Key-52',
- 'zDetFace-Grouping ID-53',
- 'zDetFace-Master ID-54',
- 'zDetFace-Quality-55',
- 'zDetFace-Quality Measure-56',
- 'zDetFace-Source Height-57',
- 'zDetFace-Source Width-58',
- 'zDetFace-Asset Visible-59',
- 'zDetFace-Hidden/Asset Hidden-60',
- 'zDetFace-In Trash/Recently Deleted-61',
- 'zDetFace-Cloud Local State-62',
- 'zDetFace-Training Type-63',
- 'zDetFace.Pose Yaw-64',
- 'zDetFace-Roll-65',
- 'zDetFace-Size-66',
- 'zDetFace-Cluster Sequence Number-67',
- 'zDetFace-Blur Score-68',
- 'zDetFacePrint-Face Print Version-69',
- 'zDetFaceGroup-UUID-70',
- 'zDetFaceGroup-Person Builder State-71',
- 'zDetFaceGroup-UnNamed Face Count-72',
- 'zPerson-Face Count-73',
- 'zDetFace-Face Algorithm Version-74',
- 'zDetFace-Adjustment Version-75',
- 'zPerson-In Person Naming Model-76',
- 'zPerson-Key Face Pick Source Key-77',
- 'zPerson-Manual Order Key-78',
- 'zPerson-Question Type-79',
- 'zPerson-Suggested For Client Type-80',
- 'zPerson-Merge Target Person-81',
- 'zPerson-Cloud Local State-82',
- 'zFaceCrop-Cloud Local State-83',
- 'zFaceCrop-Cloud Type-84',
- 'zPerson-Cloud Delete State-85',
- 'zFaceCrop-Cloud Delete State-86',
- 'zDetFace-zPK-87',
- 'zDetFacePrint-Face Key-88',
- 'zPerson-KeyFace=zDetFace-zPK-89',
- 'zFaceCrop-Face Key-90',
- 'zPerson-zPK=zDetFace-Person-91',
- 'zDetFace-PersonForFace= zPerson-zPK-92',
- 'zDetFace-Person Being Key Face-93',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-94',
- 'zDetFace-Face Print-95',
- 'zDetFacePrint-zPK-96',
- 'zDetFace-Face Crop-97',
- 'zFaceCrop-zPK-98',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-99',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-100',
- 'zPerson-Assoc Face Group Key-101',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-102',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-103',
- 'zDetFaceGroup-zPK-104',
- 'zDetFace-UUID-105',
- 'zFaceCrop-UUID-106',
- 'zFaceCrop-Invalid Merge Candidate Person UUID-107',
- 'zPerson-Person UUID-108',
- 'zPerson-Person URI-109',
- 'zDetFaceGroup-UUID-110',
- 'zDetFace-AssetForFace= zAsset-zPK-111',
- 'zFaceCrop-Asset Key-112',
- 'zAsset-zPK-113',
- 'zAddAssetAttr-zPK-114',
- 'zAsset-UUID = store.cloudphotodb-115',
- 'zAddAssetAttr-Master Fingerprint-116')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph16.2-People & Faces Asset Data-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph16.2-People & Faces Asset Data-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite people faces and basic asset data data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ personcontactmatchingdictionary = ''
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ facecropresourcedata_blob = ''
+
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ if row[22] is not None:
+ pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[108] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[22])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ personcontactmatchingdictionary = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[108])
+ else:
+ logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[108])
+
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ if row[29] is not None:
+ pathto = os.path.join(report_folder, 'FaceCropFor_' + row[106] + '.jpg')
+ with open(pathto, 'wb') as file:
+ file.write(row[29])
+ facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
+
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21],
+ personcontactmatchingdictionary,
+ row[23], row[24], row[25], row[26], row[27], row[28],
+ facecropresourcedata_blob,
+ row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-Time Zone Offset-5',
+ 'zAddAssetAttr-EXIF-String-6',
+ 'zAsset-Directory-Path-7',
+ 'zAsset-Filename-8',
+ 'zAddAssetAttr- Original Filename-9',
+ 'zCldMast- Original Filename-10',
+ ('zAsset-Trashed Date-11', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-12',
+ 'zAddAssetAttr-Creator Bundle ID-13',
+ 'zAddAssetAttr-Imported By Display Name-14',
+ 'zCldMast-Imported by Bundle ID-15',
+ 'zCldMast-Imported by Display Name-16',
+ 'zAsset-Visibility State-17',
+ 'zFaceCrop-Face Area Points-18',
+ 'zAsset-Face Adjustment Version-19',
+ 'zAddAssetAttr-Face_Regions-SeeRawDBData-20',
+ 'zDetFacePrint-Data-SeeRawDBData-21',
+ 'zPerson-Contact Matching Dictionary-22',
+ 'zPerson-Verified Type-23',
+ 'zPerson-Display Name-24',
+ 'zPerson-Full Name-25',
+ 'zPerson-Cloud Verified Type-26',
+ 'zFaceCrop-State-27',
+ 'zFaceCrop-Type-28',
+ 'zFaceCrop-Resource Data-29',
+ 'zDetFace-Confirmed Face Crop Generation State-30',
+ 'zDetFace-Manual-31',
+ 'zDetFace-VIP Model Type-32',
+ 'zDetFace-Name Source-33',
+ 'zDetFace-Cloud Name Source-34',
+ 'zPerson-Type-35',
+ 'zPerson-Gender Type-36',
+ 'zDetFace-Gender Type-37',
+ 'zDetFace-Center X-38',
+ 'zDetFace-Center Y-39',
+ 'zPerson-Age Type Estimate-40',
+ 'zDetFace-Age Type Estimate-41',
+ 'zDetFace-Hair Color Type-42',
+ 'zDetFace-Facial Hair Type-43',
+ 'zDetFace-Has Smile-44',
+ 'zDetFace-Smile Type-45',
+ 'zDetFace-Lip Makeup Type-46',
+ 'zDetFace-Eyes State-47',
+ 'zDetFace-Is Left Eye Closed-48',
+ 'zDetFace-Is Right Eye Closed-49',
+ 'zDetFace-Eye Glasses Type-50',
+ 'zDetFace-Eye Makeup Type-51',
+ 'zDetFace-Cluster Sequence Number Key-52',
+ 'zDetFace-Grouping ID-53',
+ 'zDetFace-Master ID-54',
+ 'zDetFace-Quality-55',
+ 'zDetFace-Quality Measure-56',
+ 'zDetFace-Source Height-57',
+ 'zDetFace-Source Width-58',
+ 'zDetFace-Asset Visible-59',
+ 'zDetFace-Hidden/Asset Hidden-60',
+ 'zDetFace-In Trash/Recently Deleted-61',
+ 'zDetFace-Cloud Local State-62',
+ 'zDetFace-Training Type-63',
+ 'zDetFace.Pose Yaw-64',
+ 'zDetFace-Roll-65',
+ 'zDetFace-Size-66',
+ 'zDetFace-Cluster Sequence Number-67',
+ 'zDetFace-Blur Score-68',
+ 'zDetFacePrint-Face Print Version-69',
+ 'zDetFaceGroup-UUID-70',
+ 'zDetFaceGroup-Person Builder State-71',
+ 'zDetFaceGroup-UnNamed Face Count-72',
+ 'zPerson-Face Count-73',
+ 'zDetFace-Face Algorithm Version-74',
+ 'zDetFace-Adjustment Version-75',
+ 'zPerson-In Person Naming Model-76',
+ 'zPerson-Key Face Pick Source Key-77',
+ 'zPerson-Manual Order Key-78',
+ 'zPerson-Question Type-79',
+ 'zPerson-Suggested For Client Type-80',
+ 'zPerson-Merge Target Person-81',
+ 'zPerson-Cloud Local State-82',
+ 'zFaceCrop-Cloud Local State-83',
+ 'zFaceCrop-Cloud Type-84',
+ 'zPerson-Cloud Delete State-85',
+ 'zFaceCrop-Cloud Delete State-86',
+ 'zDetFace-zPK-87',
+ 'zDetFacePrint-Face Key-88',
+ 'zPerson-KeyFace=zDetFace-zPK-89',
+ 'zFaceCrop-Face Key-90',
+ 'zPerson-zPK=zDetFace-Person-91',
+ 'zDetFace-PersonForFace= zPerson-zPK-92',
+ 'zDetFace-Person Being Key Face-93',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-94',
+ 'zDetFace-Face Print-95',
+ 'zDetFacePrint-zPK-96',
+ 'zDetFace-Face Crop-97',
+ 'zFaceCrop-zPK-98',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-99',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-100',
+ 'zPerson-Assoc Face Group Key-101',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-102',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-103',
+ 'zDetFaceGroup-zPK-104',
+ 'zDetFace-UUID-105',
+ 'zFaceCrop-UUID-106',
+ 'zFaceCrop-Invalid Merge Candidate Person UUID-107',
+ 'zPerson-Person UUID-108',
+ 'zPerson-Person URI-109',
+ 'zDetFaceGroup-UUID-110',
+ 'zDetFace-AssetForFace= zAsset-zPK-111',
+ 'zFaceCrop-Asset Key-112',
+ 'zAsset-zPK-113',
+ 'zAddAssetAttr-zPK-114',
+ 'zAsset-UUID = store.cloudphotodb-115',
+ 'zAddAssetAttr-Master Fingerprint-116')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -4055,229 +3949,208 @@ def get_ph16assetpeopledetfacesyndpl(files_found, report_folder, seeker, wrap_te
LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP
WHERE zDetFace.Z_PK > 0
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- personcontactmatchingdictionary = ''
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- facecropresourcedata_blob = ''
-
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- if row[25] is not None:
- pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[127] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[25])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- personcontactmatchingdictionary = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[127])
- else:
- logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[127])
-
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- if row[32] is not None:
- pathto = os.path.join(report_folder, 'FaceCropFor_' + row[125] + '.jpg')
- with open(pathto, 'wb') as file:
- file.write(row[32])
- facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
-
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24],
- personcontactmatchingdictionary,
- row[26], row[27],
- row[28], row[29], row[30], row[31],
- facecropresourcedata_blob,
- row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135]))
-
- counter += 1
-
- description = 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite for' \
- ' basic asset, people and detected faces data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 15.'
- report = ArtifactHtmlReport('Ph16.2-People & Faces Asset Data-SyndPL')
- report.start_artifact_report(report_folder, 'Ph16.2-People & Faces Asset Data-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-Time Zone Offset-5',
- 'zAddAssetAttr-EXIF-String-6',
- 'zAsset-Directory-Path-7',
- 'zAsset-Filename-8',
- 'zAddAssetAttr- Original Filename-9',
- 'zCldMast- Original Filename-10',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
- 'zAsset- Conversation= zGenAlbum_zPK-12',
- 'zAsset-Trashed Date-13',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14',
- 'zAddAssetAttr-Imported by Bundle ID-15',
- 'zAddAssetAttr-Imported By Display Name-16',
- 'zCldMast-Imported by Bundle ID-17',
- 'zCldMast-Imported by Display Name-18',
- 'zAsset-Visibility State-19',
- 'zFaceCrop-Face Area Points-20',
- 'zAsset-Face Adjustment Version-21',
- 'zAddAssetAttr-Face_Regions-SeeRawDBData-22',
- 'zAddAssetAttr-Face Analysis Version-23',
- 'zDetFacePrint-Data-SeeRawDBData-24',
- 'zPerson-Contact Matching Dictionary-25',
- 'zPerson-Verified Type-26',
- 'zPerson-Display Name-27',
- 'zPerson-Full Name-28',
- 'zPerson-Cloud Verified Type-29',
- 'zFaceCrop-State-30',
- 'zFaceCrop-Type-31',
- 'zFaceCrop-Resource Data-32',
- 'zDetFace-Confirmed Face Crop Generation State-33',
- 'zDetFace-Manual-34',
- 'zDetFace-Detection Type-35',
- 'zPerson-Detection Type-36',
- 'zDetFace-VIP Model Type-37',
- 'zDetFace-Name Source-38',
- 'zDetFace-Cloud Name Source-39',
- 'zPerson-Type-40',
- 'zPerson-Gender Type-41',
- 'zDetFace-Gender Type-42',
- 'zDetFace-Center X-43',
- 'zDetFace-Center Y-44',
- 'zPerson-Age Type Estimate-45',
- 'zDetFace-Age Type Estimate-46',
- 'zDetFace-Ethnicity Type-47',
- 'zDetFace-Skin Tone Type-48',
- 'zDetFace-Hair Type-49',
- 'zDetFace-Hair Color Type-50',
- 'zDetFace-Head Gear Type-51',
- 'zDetFace-Facial Hair Type-52',
- 'zDetFace-Has Face Mask-53',
- 'zDetFace-Pose Type-54',
- 'zDetFace-Face Expression Type-55',
- 'zDetFace-Has Smile-56',
- 'zDetFace-Smile Type-57',
- 'zDetFace-Lip Makeup Type-58',
- 'zDetFace-Eyes State-59',
- 'zDetFace-Is Left Eye Closed-60',
- 'zDetFace-Is Right Eye Closed-61',
- 'zDetFace-Gaze Center X-62',
- 'zDetFace-Gaze Center Y-63',
- 'zDetFace-Face Gaze Type-64',
- 'zDetFace-Eye Glasses Type-65',
- 'zDetFace-Eye Makeup Type-66',
- 'zDetFace-Cluster Sequence Number Key-67',
- 'zDetFace-Grouping ID-68',
- 'zDetFace-Master ID-69',
- 'zDetFace-Quality-70',
- 'zDetFace-Quality Measure-71',
- 'zDetFace-Source Height-72',
- 'zDetFace-Source Width-73',
- 'zDetFace-Asset Visible-74',
- 'zDetFace-Hidden/Asset Hidden-75',
- 'zDetFace-In Trash/Recently Deleted-76',
- 'zDetFace-Cloud Local State-77',
- 'zDetFace-Training Type-78',
- 'zDetFace.Pose Yaw-79',
- 'zDetFace-Body Center X-80',
- 'zDetFace-Body Center Y-81',
- 'zDetFace-Body Height-82',
- 'zDetFace-Body Width-83',
- 'zDetFace-Roll-84',
- 'zDetFace-Size-85',
- 'zDetFace-Cluster Squence Number-86',
- 'zDetFace-Blur Score-87',
- 'zDetFacePrint-Face Print Version-88',
- 'zDetFaceGroup-UUID-89',
- 'zDetFaceGroup-Person Builder State-90',
- 'zDetFaceGroup-UnNamed Face Count-91',
- 'zPerson-Face Count-92',
- 'zDetFace-Face Algorithm Version-93',
- 'zDetFace-Adjustment Version-94',
- 'zPerson-In Person Naming Model-95',
- 'zPerson-Key Face Pick Source Key-96',
- 'zPerson-Manual Order Key-97',
- 'zPerson-Question Type-98',
- 'zPerson-Suggested For Client Type-99',
- 'zPerson-Merge Target Person-100',
- 'zPerson-Cloud Local State-101',
- 'zFaceCrop-Cloud Local State-102',
- 'zFaceCrop-Cloud Type-103',
- 'zPerson-Cloud Delete State-104',
- 'zFaceCrop-Cloud Delete State-105',
- 'zDetFace-zPK-106',
- 'zDetFacePrint-Face Key-107',
- 'zPerson-KeyFace=zDetFace-zPK-108',
- 'zFaceCrop-Face Key-109',
- 'zPerson-zPK=zDetFace-Person-110',
- 'zDetFace-PersonForFace= zPerson-zPK-111',
- 'zDetFace-Person Being Key Face-112',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-113',
- 'zDetFace-Face Print-114',
- 'zDetFacePrint-zPK-115',
- 'zDetFace-Face Crop-116',
- 'zFaceCrop-zPK-117',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-118',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-119',
- 'zPerson-Assoc Face Group Key-120',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-121',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-122',
- 'zDetFaceGroup-zPK-123',
- 'zDetFace-UUID-124',
- 'zFaceCrop-UUID-125',
- 'zFaceCrop-Invalid Merge Candidate Person UUID-126',
- 'zPerson-Person UUID-127',
- 'zPerson-Person URI-128',
- 'zDetFaceGroup-UUID-129',
- 'zDetFace-AssetForFace= zAsset-zPK-130',
- 'zFaceCrop-Asset Key-131',
- 'zAsset-zPK-132',
- 'zAddAssetAttr-zPK-133',
- 'zAsset-UUID = store.cloudphotodb-134',
- 'zAddAssetAttr-Master Fingerprint-135')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph16.2-People & Faces Asset Data-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph16.2-People & Faces Asset Data-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite people faces and basic asset data data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ personcontactmatchingdictionary = ''
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ facecropresourcedata_blob = ''
+
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ if row[25] is not None:
+ pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[127] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[25])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ personcontactmatchingdictionary = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[127])
+ else:
+ logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[127])
+
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ if row[32] is not None:
+ pathto = os.path.join(report_folder, 'FaceCropFor_' + row[125] + '.jpg')
+ with open(pathto, 'wb') as file:
+ file.write(row[32])
+ facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
+
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24],
+ personcontactmatchingdictionary,
+ row[26], row[27],
+ row[28], row[29], row[30], row[31],
+ facecropresourcedata_blob,
+ row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-Time Zone Offset-5',
+ 'zAddAssetAttr-EXIF-String-6',
+ 'zAsset-Directory-Path-7',
+ 'zAsset-Filename-8',
+ 'zAddAssetAttr- Original Filename-9',
+ 'zCldMast- Original Filename-10',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
+ 'zAsset- Conversation= zGenAlbum_zPK-12',
+ ('zAsset-Trashed Date-13', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14',
+ 'zAddAssetAttr-Imported by Bundle ID-15',
+ 'zAddAssetAttr-Imported By Display Name-16',
+ 'zCldMast-Imported by Bundle ID-17',
+ 'zCldMast-Imported by Display Name-18',
+ 'zAsset-Visibility State-19',
+ 'zFaceCrop-Face Area Points-20',
+ 'zAsset-Face Adjustment Version-21',
+ 'zAddAssetAttr-Face_Regions-SeeRawDBData-22',
+ 'zAddAssetAttr-Face Analysis Version-23',
+ 'zDetFacePrint-Data-SeeRawDBData-24',
+ 'zPerson-Contact Matching Dictionary-25',
+ 'zPerson-Verified Type-26',
+ 'zPerson-Display Name-27',
+ 'zPerson-Full Name-28',
+ 'zPerson-Cloud Verified Type-29',
+ 'zFaceCrop-State-30',
+ 'zFaceCrop-Type-31',
+ 'zFaceCrop-Resource Data-32',
+ 'zDetFace-Confirmed Face Crop Generation State-33',
+ 'zDetFace-Manual-34',
+ 'zDetFace-Detection Type-35',
+ 'zPerson-Detection Type-36',
+ 'zDetFace-VIP Model Type-37',
+ 'zDetFace-Name Source-38',
+ 'zDetFace-Cloud Name Source-39',
+ 'zPerson-Type-40',
+ 'zPerson-Gender Type-41',
+ 'zDetFace-Gender Type-42',
+ 'zDetFace-Center X-43',
+ 'zDetFace-Center Y-44',
+ 'zPerson-Age Type Estimate-45',
+ 'zDetFace-Age Type Estimate-46',
+ 'zDetFace-Ethnicity Type-47',
+ 'zDetFace-Skin Tone Type-48',
+ 'zDetFace-Hair Type-49',
+ 'zDetFace-Hair Color Type-50',
+ 'zDetFace-Head Gear Type-51',
+ 'zDetFace-Facial Hair Type-52',
+ 'zDetFace-Has Face Mask-53',
+ 'zDetFace-Pose Type-54',
+ 'zDetFace-Face Expression Type-55',
+ 'zDetFace-Has Smile-56',
+ 'zDetFace-Smile Type-57',
+ 'zDetFace-Lip Makeup Type-58',
+ 'zDetFace-Eyes State-59',
+ 'zDetFace-Is Left Eye Closed-60',
+ 'zDetFace-Is Right Eye Closed-61',
+ 'zDetFace-Gaze Center X-62',
+ 'zDetFace-Gaze Center Y-63',
+ 'zDetFace-Face Gaze Type-64',
+ 'zDetFace-Eye Glasses Type-65',
+ 'zDetFace-Eye Makeup Type-66',
+ 'zDetFace-Cluster Sequence Number Key-67',
+ 'zDetFace-Grouping ID-68',
+ 'zDetFace-Master ID-69',
+ 'zDetFace-Quality-70',
+ 'zDetFace-Quality Measure-71',
+ 'zDetFace-Source Height-72',
+ 'zDetFace-Source Width-73',
+ 'zDetFace-Asset Visible-74',
+ 'zDetFace-Hidden/Asset Hidden-75',
+ 'zDetFace-In Trash/Recently Deleted-76',
+ 'zDetFace-Cloud Local State-77',
+ 'zDetFace-Training Type-78',
+ 'zDetFace.Pose Yaw-79',
+ 'zDetFace-Body Center X-80',
+ 'zDetFace-Body Center Y-81',
+ 'zDetFace-Body Height-82',
+ 'zDetFace-Body Width-83',
+ 'zDetFace-Roll-84',
+ 'zDetFace-Size-85',
+ 'zDetFace-Cluster Squence Number-86',
+ 'zDetFace-Blur Score-87',
+ 'zDetFacePrint-Face Print Version-88',
+ 'zDetFaceGroup-UUID-89',
+ 'zDetFaceGroup-Person Builder State-90',
+ 'zDetFaceGroup-UnNamed Face Count-91',
+ 'zPerson-Face Count-92',
+ 'zDetFace-Face Algorithm Version-93',
+ 'zDetFace-Adjustment Version-94',
+ 'zPerson-In Person Naming Model-95',
+ 'zPerson-Key Face Pick Source Key-96',
+ 'zPerson-Manual Order Key-97',
+ 'zPerson-Question Type-98',
+ 'zPerson-Suggested For Client Type-99',
+ 'zPerson-Merge Target Person-100',
+ 'zPerson-Cloud Local State-101',
+ 'zFaceCrop-Cloud Local State-102',
+ 'zFaceCrop-Cloud Type-103',
+ 'zPerson-Cloud Delete State-104',
+ 'zFaceCrop-Cloud Delete State-105',
+ 'zDetFace-zPK-106',
+ 'zDetFacePrint-Face Key-107',
+ 'zPerson-KeyFace=zDetFace-zPK-108',
+ 'zFaceCrop-Face Key-109',
+ 'zPerson-zPK=zDetFace-Person-110',
+ 'zDetFace-PersonForFace= zPerson-zPK-111',
+ 'zDetFace-Person Being Key Face-112',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-113',
+ 'zDetFace-Face Print-114',
+ 'zDetFacePrint-zPK-115',
+ 'zDetFace-Face Crop-116',
+ 'zFaceCrop-zPK-117',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-118',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-119',
+ 'zPerson-Assoc Face Group Key-120',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-121',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-122',
+ 'zDetFaceGroup-zPK-123',
+ 'zDetFace-UUID-124',
+ 'zFaceCrop-UUID-125',
+ 'zFaceCrop-Invalid Merge Candidate Person UUID-126',
+ 'zPerson-Person UUID-127',
+ 'zPerson-Person URI-128',
+ 'zDetFaceGroup-UUID-129',
+ 'zDetFace-AssetForFace= zAsset-zPK-130',
+ 'zFaceCrop-Asset Key-131',
+ 'zAsset-zPK-132',
+ 'zAddAssetAttr-zPK-133',
+ 'zAsset-UUID = store.cloudphotodb-134',
+ 'zAddAssetAttr-Master Fingerprint-135')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -4688,231 +4561,210 @@ def get_ph16assetpeopledetfacesyndpl(files_found, report_folder, seeker, wrap_te
LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP
WHERE zDetFace.Z_PK > 0
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- personcontactmatchingdictionary = ''
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- facecropresourcedata_blob = ''
-
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- if row[26] is not None:
- pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[130] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[26])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- personcontactmatchingdictionary = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[130])
- else:
- logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[130])
-
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- if row[33] is not None:
- pathto = os.path.join(report_folder, 'FaceCropFor_' + row[128] + '.jpg')
- with open(pathto, 'wb') as file:
- file.write(row[33])
- facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
-
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25],
- personcontactmatchingdictionary,
- row[27], row[28], row[29], row[30], row[31], row[32],
- facecropresourcedata_blob,
- row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138]))
-
- counter += 1
-
- description = 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite for' \
- ' basic asset, people and detected faces data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 16.'
- report = ArtifactHtmlReport('Ph16.2-People & Faces Asset Data-SyndPL')
- report.start_artifact_report(report_folder, 'Ph16.2-People & Faces Asset Data-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-Time Zone Offset-5',
- 'zAddAssetAttr-EXIF-String-6',
- 'zAsset-Directory-Path-7',
- 'zAsset-Filename-8',
- 'zAddAssetAttr- Original Filename-9',
- 'zCldMast- Original Filename-10',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
- 'zAsset- Conversation= zGenAlbum_zPK-12',
- 'zAsset-Trashed Date-13',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-15',
- 'zAddAssetAttr-Imported by Bundle ID-16',
- 'zAddAssetAttr-Imported By Display Name-17',
- 'zCldMast-Imported by Bundle ID-18',
- 'zCldMast-Imported by Display Name-19',
- 'zAsset-Visibility State-20',
- 'zFaceCrop-Face Area Points-21',
- 'zAsset-Face Adjustment Version-22',
- 'zAddAssetAttr-Face_Regions-SeeRawDBData-23',
- 'zAddAssetAttr-Face Analysis Version-24',
- 'zDetFacePrint-Data-SeeRawDBData-25',
- 'zPerson-Contact Matching Dictionary-26',
- 'zPerson-Verified Type-27',
- 'zPerson-Display Name-28',
- 'zPerson-Full Name-29',
- 'zPerson-Cloud Verified Type-30',
- 'zFaceCrop-State-31',
- 'zFaceCrop-Type-32',
- 'zFaceCrop-Resource Data-33',
- 'zDetFace-Confirmed Face Crop Generation State-34',
- 'zDetFace-Manual-35',
- 'zDetFace-Detection Type-36',
- 'zPerson-Detection Type-37',
- 'zDetFace-VIP Model Type-38',
- 'zDetFace-Name Source-39',
- 'zDetFace-Cloud Name Source-40',
- 'zPerson-Merge Candidate Confidence-41',
- 'zPerson-Type-42',
- 'zPerson-Gender Type-43',
- 'zDetFace-Gender Type-44',
- 'zDetFace-Center X-45',
- 'zDetFace-Center Y-46',
- 'zPerson-Age Type Estimate-47',
- 'zDetFace-Age Type Estimate-48',
- 'zDetFace-Ethnicity Type-49',
- 'zDetFace-Skin Tone Type-50',
- 'zDetFace-Hair Type-51',
- 'zDetFace-Hair Color Type-52',
- 'zDetFace-Head Gear Type-53',
- 'zDetFace-Facial Hair Type-54',
- 'zDetFace-Has Face Mask-55',
- 'zDetFace-Pose Type-56',
- 'zDetFace-Face Expression Type-57',
- 'zDetFace-Has Smile-58',
- 'zDetFace-Smile Type-59',
- 'zDetFace-Lip Makeup Type-60',
- 'zDetFace-Eyes State-61',
- 'zDetFace-Is Left Eye Closed-62',
- 'zDetFace-Is Right Eye Closed-63',
- 'zDetFace-Gaze Center X-64',
- 'zDetFace-Gaze Center Y-65',
- 'zDetFace-Face Gaze Type-66',
- 'zDetFace-Eye Glasses Type-67',
- 'zDetFace-Eye Makeup Type-68',
- 'zDetFace-Cluster Sequence Number Key-69',
- 'zDetFace-Grouping ID-70',
- 'zDetFace-Master ID-71',
- 'zDetFace-Quality-72',
- 'zDetFace-Quality Measure-73',
- 'zDetFace-Source Height-74',
- 'zDetFace-Source Width-75',
- 'zDetFace-Asset Visible-76',
- 'zDetFace-Hidden/Asset Hidden-77',
- 'zDetFace-In Trash/Recently Deleted-78',
- 'zDetFace-Cloud Local State-79',
- 'zDetFace-Training Type-80',
- 'zDetFace.Pose Yaw-81',
- 'zDetFace-Body Center X-82',
- 'zDetFace-Body Center Y-83',
- 'zDetFace-Body Height-84',
- 'zDetFace-Body Width-85',
- 'zDetFace-Roll-86',
- 'zDetFace-Size-87',
- 'zDetFace-Cluster Sequence Number-88',
- 'zDetFace-Blur Score-89',
- 'zDetFacePrint-Face Print Version-90',
- 'zDetFaceGroup-UUID-91',
- 'zDetFaceGroup-Person Builder State-92',
- 'zDetFaceGroup-UnNamed Face Count-93',
- 'zPerson-Face Count-94',
- 'zDetFace-Face Algorithm Version-95',
- 'zDetFace-Adjustment Version-96',
- 'zPerson-In Person Naming Model-97',
- 'zPerson-Key Face Pick Source Key-98',
- 'zPerson-Manual Order Key-99',
- 'zPerson-Question Type-100',
- 'zPerson-Suggested For Client Type-101',
- 'zPerson-Merge Target Person-102',
- 'zPerson-Cloud Local State-103',
- 'zFaceCrop-Cloud Local State-104',
- 'zFaceCrop-Cloud Type-105',
- 'zPerson-Cloud Delete State-106',
- 'zFaceCrop-Cloud Delete State-107',
- 'zDetFace-zPK-108',
- 'zDetFacePrint-Face Key-109',
- 'zPerson-KeyFace=zDetFace-zPK-110',
- 'zFaceCrop-Face Key-111',
- 'zPerson-zPK=zDetFace-Person-112',
- 'zDetFace-PersonForFace= zPerson-zPK-113',
- 'zDetFace-Person Being Key Face-114',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-115',
- 'zDetFace-Face Print-116',
- 'zDetFacePrint-zPK-117',
- 'zDetFace-Face Crop-118',
- 'zFaceCrop-zPK-119',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-120',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-121',
- 'zPerson-Assoc Face Group Key-122',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-123',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-124',
- 'zDetFaceGroup-zPK-125',
- 'zPerson-Share Participant= zSharePartic-zPK-126',
- 'zDetFace-UUID-127',
- 'zFaceCrop-UUID-128',
- 'zFaceCrop-Invalid Merge Candidate Person UUID-129',
- 'zPerson-Person UUID-130',
- 'zPerson-Person URI-131',
- 'zDetFaceGroup-UUID-132',
- 'zDetFace-AssetForFace= zAsset-zPK-133',
- 'zFaceCrop-Asset Key-134',
- 'zAsset-zPK-135',
- 'zAddAssetAttr-zPK-136',
- 'zAsset-UUID = store.cloudphotodb-137',
- 'zAddAssetAttr-Master Fingerprint-138')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph16.2-People & Faces Asset Data-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph16.2-People & Faces Asset Data-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite people faces and basic asset data data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ personcontactmatchingdictionary = ''
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ facecropresourcedata_blob = ''
+
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ if row[26] is not None:
+ pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[130] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[26])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ personcontactmatchingdictionary = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[130])
+ else:
+ logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[130])
+
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ if row[33] is not None:
+ pathto = os.path.join(report_folder, 'FaceCropFor_' + row[128] + '.jpg')
+ with open(pathto, 'wb') as file:
+ file.write(row[33])
+ facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
+
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25],
+ personcontactmatchingdictionary,
+ row[27], row[28], row[29], row[30], row[31], row[32],
+ facecropresourcedata_blob,
+ row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-Time Zone Offset-5',
+ 'zAddAssetAttr-EXIF-String-6',
+ 'zAsset-Directory-Path-7',
+ 'zAsset-Filename-8',
+ 'zAddAssetAttr- Original Filename-9',
+ 'zCldMast- Original Filename-10',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
+ 'zAsset- Conversation= zGenAlbum_zPK-12',
+ ('zAsset-Trashed Date-13', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14',
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-15',
+ 'zAddAssetAttr-Imported by Bundle ID-16',
+ 'zAddAssetAttr-Imported By Display Name-17',
+ 'zCldMast-Imported by Bundle ID-18',
+ 'zCldMast-Imported by Display Name-19',
+ 'zAsset-Visibility State-20',
+ 'zFaceCrop-Face Area Points-21',
+ 'zAsset-Face Adjustment Version-22',
+ 'zAddAssetAttr-Face_Regions-SeeRawDBData-23',
+ 'zAddAssetAttr-Face Analysis Version-24',
+ 'zDetFacePrint-Data-SeeRawDBData-25',
+ 'zPerson-Contact Matching Dictionary-26',
+ 'zPerson-Verified Type-27',
+ 'zPerson-Display Name-28',
+ 'zPerson-Full Name-29',
+ 'zPerson-Cloud Verified Type-30',
+ 'zFaceCrop-State-31',
+ 'zFaceCrop-Type-32',
+ 'zFaceCrop-Resource Data-33',
+ 'zDetFace-Confirmed Face Crop Generation State-34',
+ 'zDetFace-Manual-35',
+ 'zDetFace-Detection Type-36',
+ 'zPerson-Detection Type-37',
+ 'zDetFace-VIP Model Type-38',
+ 'zDetFace-Name Source-39',
+ 'zDetFace-Cloud Name Source-40',
+ 'zPerson-Merge Candidate Confidence-41',
+ 'zPerson-Type-42',
+ 'zPerson-Gender Type-43',
+ 'zDetFace-Gender Type-44',
+ 'zDetFace-Center X-45',
+ 'zDetFace-Center Y-46',
+ 'zPerson-Age Type Estimate-47',
+ 'zDetFace-Age Type Estimate-48',
+ 'zDetFace-Ethnicity Type-49',
+ 'zDetFace-Skin Tone Type-50',
+ 'zDetFace-Hair Type-51',
+ 'zDetFace-Hair Color Type-52',
+ 'zDetFace-Head Gear Type-53',
+ 'zDetFace-Facial Hair Type-54',
+ 'zDetFace-Has Face Mask-55',
+ 'zDetFace-Pose Type-56',
+ 'zDetFace-Face Expression Type-57',
+ 'zDetFace-Has Smile-58',
+ 'zDetFace-Smile Type-59',
+ 'zDetFace-Lip Makeup Type-60',
+ 'zDetFace-Eyes State-61',
+ 'zDetFace-Is Left Eye Closed-62',
+ 'zDetFace-Is Right Eye Closed-63',
+ 'zDetFace-Gaze Center X-64',
+ 'zDetFace-Gaze Center Y-65',
+ 'zDetFace-Face Gaze Type-66',
+ 'zDetFace-Eye Glasses Type-67',
+ 'zDetFace-Eye Makeup Type-68',
+ 'zDetFace-Cluster Sequence Number Key-69',
+ 'zDetFace-Grouping ID-70',
+ 'zDetFace-Master ID-71',
+ 'zDetFace-Quality-72',
+ 'zDetFace-Quality Measure-73',
+ 'zDetFace-Source Height-74',
+ 'zDetFace-Source Width-75',
+ 'zDetFace-Asset Visible-76',
+ 'zDetFace-Hidden/Asset Hidden-77',
+ 'zDetFace-In Trash/Recently Deleted-78',
+ 'zDetFace-Cloud Local State-79',
+ 'zDetFace-Training Type-80',
+ 'zDetFace.Pose Yaw-81',
+ 'zDetFace-Body Center X-82',
+ 'zDetFace-Body Center Y-83',
+ 'zDetFace-Body Height-84',
+ 'zDetFace-Body Width-85',
+ 'zDetFace-Roll-86',
+ 'zDetFace-Size-87',
+ 'zDetFace-Cluster Sequence Number-88',
+ 'zDetFace-Blur Score-89',
+ 'zDetFacePrint-Face Print Version-90',
+ 'zDetFaceGroup-UUID-91',
+ 'zDetFaceGroup-Person Builder State-92',
+ 'zDetFaceGroup-UnNamed Face Count-93',
+ 'zPerson-Face Count-94',
+ 'zDetFace-Face Algorithm Version-95',
+ 'zDetFace-Adjustment Version-96',
+ 'zPerson-In Person Naming Model-97',
+ 'zPerson-Key Face Pick Source Key-98',
+ 'zPerson-Manual Order Key-99',
+ 'zPerson-Question Type-100',
+ 'zPerson-Suggested For Client Type-101',
+ 'zPerson-Merge Target Person-102',
+ 'zPerson-Cloud Local State-103',
+ 'zFaceCrop-Cloud Local State-104',
+ 'zFaceCrop-Cloud Type-105',
+ 'zPerson-Cloud Delete State-106',
+ 'zFaceCrop-Cloud Delete State-107',
+ 'zDetFace-zPK-108',
+ 'zDetFacePrint-Face Key-109',
+ 'zPerson-KeyFace=zDetFace-zPK-110',
+ 'zFaceCrop-Face Key-111',
+ 'zPerson-zPK=zDetFace-Person-112',
+ 'zDetFace-PersonForFace= zPerson-zPK-113',
+ 'zDetFace-Person Being Key Face-114',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-115',
+ 'zDetFace-Face Print-116',
+ 'zDetFacePrint-zPK-117',
+ 'zDetFace-Face Crop-118',
+ 'zFaceCrop-zPK-119',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-120',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-121',
+ 'zPerson-Assoc Face Group Key-122',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-123',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-124',
+ 'zDetFaceGroup-zPK-125',
+ 'zPerson-Share Participant= zSharePartic-zPK-126',
+ 'zDetFace-UUID-127',
+ 'zFaceCrop-UUID-128',
+ 'zFaceCrop-Invalid Merge Candidate Person UUID-129',
+ 'zPerson-Person UUID-130',
+ 'zPerson-Person URI-131',
+ 'zDetFaceGroup-UUID-132',
+ 'zDetFace-AssetForFace= zAsset-zPK-133',
+ 'zFaceCrop-Asset Key-134',
+ 'zAsset-zPK-135',
+ 'zAddAssetAttr-zPK-136',
+ 'zAsset-UUID = store.cloudphotodb-137',
+ 'zAddAssetAttr-Master Fingerprint-138')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -5327,236 +5179,215 @@ def get_ph16assetpeopledetfacesyndpl(files_found, report_folder, seeker, wrap_te
LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP
WHERE zDetFace.Z_PK > 0
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- personcontactmatchingdictionary = ''
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- facecropresourcedata_blob = ''
-
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- if row[27] is not None:
- pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[133] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[27])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- personcontactmatchingdictionary = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[133])
- else:
- logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[133])
-
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- if row[34] is not None:
- pathto = os.path.join(report_folder, 'FaceCropFor_' + row[131] + '.jpg')
- with open(pathto, 'wb') as file:
- file.write(row[34])
- facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
-
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26],
- personcontactmatchingdictionary,
- row[28], row[29], row[30], row[31], row[32], row[33],
- facecropresourcedata_blob,
- row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142]))
-
- counter += 1
-
- description = 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite for' \
- ' basic asset, people and detected faces data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 17.'
- report = ArtifactHtmlReport('Ph16.2-People & Faces Asset Data-SyndPL')
- report.start_artifact_report(report_folder, 'Ph16.2-People & Faces Asset Data-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-Time Zone Offset-5',
- 'zAddAssetAttr-EXIF-String-6',
- 'zAsset-Directory-Path-7',
- 'zAsset-Filename-8',
- 'zAddAssetAttr- Original Filename-9',
- 'zCldMast- Original Filename-10',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
- 'zAsset- Conversation= zGenAlbum_zPK-12',
- 'zAsset-Trashed Date-13',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-15',
- 'zAddAssetAttr-Imported by Bundle ID-16',
- 'zAddAssetAttr-Imported By Display Name-17',
- 'zCldMast-Imported by Bundle ID-18',
- 'zCldMast-Imported by Display Name-19',
- 'zAsset-Visibility State-20',
- 'zFaceCrop-Face Area Points-21',
- 'zAsset-Face Adjustment Version-22',
- 'zAddAssetAttr-Face_Regions-SeeRawDBData-23',
- 'zAddAssetAttr-Face Analysis Version-24',
- 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-25',
- 'zDetFacePrint-Data-SeeRawDBData-26',
- 'zPerson-Contact Matching Dictionary-27',
- 'zPerson-Verified Type-28',
- 'zPerson-Display Name-29',
- 'zPerson-Full Name-30',
- 'zPerson-Cloud Verified Type-31',
- 'zFaceCrop-State-32',
- 'zFaceCrop-Type-33',
- 'zFaceCrop-Resource Data-34',
- 'zDetFace-Confirmed Face Crop Generation State-35',
- 'zDetFace-Manual-36',
- 'zDetFace-Detection Type-37',
- 'zPerson-Detection Type-38',
- 'zDetFace-VIP Model Type-39',
- 'zDetFace-Name Source-40',
- 'zDetFace-Cloud Name Source-41',
- 'zPerson-Merge Candidate Confidence-42',
- 'zPerson-Type-43',
- 'zPerson-Gender Type-44',
- 'zDetFace-Gender Type-45',
- 'zDetFace-Center X-46',
- 'zDetFace-Center Y-47',
- 'zPerson-Age Type Estimate-48',
- 'zDetFace-Age Type Estimate-49',
- 'zDetFace-Ethnicity Type-50',
- 'zDetFace-Skin Tone Type-51',
- 'zDetFace-Hair Type-52',
- 'zDetFace-Hair Color Type-53',
- 'zDetFace-Head Gear Type-54',
- 'zDetFace-Facial Hair Type-55',
- 'zDetFace-Has Face Mask-56',
- 'zDetFace-Pose Type-57',
- 'zDetFace-Face Expression Type-58',
- 'zDetFace-Has Smile-59',
- 'zDetFace-Smile Type-60',
- 'zDetFace-Lip Makeup Type-61',
- 'zDetFace-Eyes State-62',
- 'zDetFace-Is Left Eye Closed-63',
- 'zDetFace-Is Right Eye Closed-64',
- 'zDetFace-Gaze Center X-65',
- 'zDetFace-Gaze Center Y-66',
- 'zDetFace-Face Gaze Type-67',
- 'zDetFace-Eye Glasses Type-68',
- 'zDetFace-Eye Makeup Type-69',
- 'zDetFace-Cluster Squence Number Key-70',
- 'zDetFace-Grouping ID-71',
- 'zDetFace-Master ID-72',
- 'zDetFace-Quality-73',
- 'zDetFace-Quality Measure-74',
- 'zDetFace-Source Height-75',
- 'zDetFace-Source Width-76',
- 'zDetFace-Asset Visible-77',
- 'zDetFace-Hidden/Asset Hidden-78',
- 'zDetFace-In Trash/Recently Deleted-79',
- 'zDetFace-Cloud Local State-80',
- 'zDetFace-Training Type-81',
- 'zDetFace.Pose Yaw-82',
- 'zDetFace-Body Center X-83',
- 'zDetFace-Body Center Y-84',
- 'zDetFace-Body Height-85',
- 'zDetFace-Body Width-86',
- 'zDetFace-Roll-87',
- 'zDetFace-Size-88',
- 'zDetFace-Cluster Sequence Number-89',
- 'zDetFace-Blur Score-90',
- 'zDetFacePrint-Face Print Version-91',
- 'zDetFaceGroup-UUID-92',
- 'zDetFaceGroup-Person Builder State-93',
- 'zDetFaceGroup-UnNamed Face Count-94',
- 'zPerson-Face Count-95',
- 'zDetFace-Face Algorithm Version-96',
- 'zDetFace-Adjustment Version-97',
- 'zPerson-In Person Naming Model-98',
- 'zPerson-Key Face Pick Source Key-99',
- 'zPerson-Manual Order Key-100',
- 'zPerson-Question Type-101',
- 'zPerson-Suggested For Client Type-102',
- 'zPerson-Merge Target Person-103',
- 'zPerson-Cloud Local State-104',
- 'zFaceCrop-Cloud Local State-105',
- 'zFaceCrop-Cloud Type-106',
- 'zPerson-Cloud Delete State-107',
- 'zFaceCrop-Cloud Delete State-108',
- 'zDetFace-zPK-109',
- 'zDetFacePrint-Face Key-110',
- 'zPerson-KeyFace=zDetFace-zPK-111',
- 'zFaceCrop-Face Key-112',
- 'zPerson-zPK=zDetFace-Person-113',
- 'zDetFace-PersonForFace= zPerson-zPK-114',
- 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-115',
- 'zDetFace-PersonForTorso= zPerson-zPK-116',
- 'zDetFace-Person Being Key Face-117',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-118',
- 'zDetFace-Face Print-119',
- 'zDetFacePrint-zPK-120',
- 'zDetFace-Face Crop-121',
- 'zFaceCrop-zPK-122',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-123',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-124',
- 'zPerson-Assoc Face Group Key-125',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-126',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-127',
- 'zDetFaceGroup-zPK-128',
- 'zPerson-Share Participant= zSharePartic-zPK-129',
- 'zDetFace-UUID-130',
- 'zFaceCrop-UUID-131',
- 'zFaceCrop-Invalid Merge Candidate Person UUID-132',
- 'zPerson-Person UUID-133',
- 'zPerson-Person URI-134',
- 'zDetFaceGroup-UUID-135',
- 'zDetFace-AssetForFace= zAsset-zPK-136',
- 'zDetFace-AssetForTorso= zAsset-zPK-137',
- 'zFaceCrop-Asset Key-138',
- 'zAsset-zPK-139',
- 'zAddAssetAttr-zPK-140',
- 'zAsset-UUID = store.cloudphotodb-141',
- 'zAddAssetAttr-Master Fingerprint-142')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph16.2-People & Faces Asset Data-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph16.2-People & Faces Asset Data-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite people faces and basic asset data data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ personcontactmatchingdictionary = ''
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ facecropresourcedata_blob = ''
+
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ if row[27] is not None:
+ pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[133] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[27])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ personcontactmatchingdictionary = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[133])
+ else:
+ logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[133])
+
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ if row[34] is not None:
+ pathto = os.path.join(report_folder, 'FaceCropFor_' + row[131] + '.jpg')
+ with open(pathto, 'wb') as file:
+ file.write(row[34])
+ facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
+
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26],
+ personcontactmatchingdictionary,
+ row[28], row[29], row[30], row[31], row[32], row[33],
+ facecropresourcedata_blob,
+ row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-Time Zone Offset-5',
+ 'zAddAssetAttr-EXIF-String-6',
+ 'zAsset-Directory-Path-7',
+ 'zAsset-Filename-8',
+ 'zAddAssetAttr- Original Filename-9',
+ 'zCldMast- Original Filename-10',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
+ 'zAsset- Conversation= zGenAlbum_zPK-12',
+ ('zAsset-Trashed Date-13', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14',
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-15',
+ 'zAddAssetAttr-Imported by Bundle ID-16',
+ 'zAddAssetAttr-Imported By Display Name-17',
+ 'zCldMast-Imported by Bundle ID-18',
+ 'zCldMast-Imported by Display Name-19',
+ 'zAsset-Visibility State-20',
+ 'zFaceCrop-Face Area Points-21',
+ 'zAsset-Face Adjustment Version-22',
+ 'zAddAssetAttr-Face_Regions-SeeRawDBData-23',
+ 'zAddAssetAttr-Face Analysis Version-24',
+ 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-25',
+ 'zDetFacePrint-Data-SeeRawDBData-26',
+ 'zPerson-Contact Matching Dictionary-27',
+ 'zPerson-Verified Type-28',
+ 'zPerson-Display Name-29',
+ 'zPerson-Full Name-30',
+ 'zPerson-Cloud Verified Type-31',
+ 'zFaceCrop-State-32',
+ 'zFaceCrop-Type-33',
+ 'zFaceCrop-Resource Data-34',
+ 'zDetFace-Confirmed Face Crop Generation State-35',
+ 'zDetFace-Manual-36',
+ 'zDetFace-Detection Type-37',
+ 'zPerson-Detection Type-38',
+ 'zDetFace-VIP Model Type-39',
+ 'zDetFace-Name Source-40',
+ 'zDetFace-Cloud Name Source-41',
+ 'zPerson-Merge Candidate Confidence-42',
+ 'zPerson-Type-43',
+ 'zPerson-Gender Type-44',
+ 'zDetFace-Gender Type-45',
+ 'zDetFace-Center X-46',
+ 'zDetFace-Center Y-47',
+ 'zPerson-Age Type Estimate-48',
+ 'zDetFace-Age Type Estimate-49',
+ 'zDetFace-Ethnicity Type-50',
+ 'zDetFace-Skin Tone Type-51',
+ 'zDetFace-Hair Type-52',
+ 'zDetFace-Hair Color Type-53',
+ 'zDetFace-Head Gear Type-54',
+ 'zDetFace-Facial Hair Type-55',
+ 'zDetFace-Has Face Mask-56',
+ 'zDetFace-Pose Type-57',
+ 'zDetFace-Face Expression Type-58',
+ 'zDetFace-Has Smile-59',
+ 'zDetFace-Smile Type-60',
+ 'zDetFace-Lip Makeup Type-61',
+ 'zDetFace-Eyes State-62',
+ 'zDetFace-Is Left Eye Closed-63',
+ 'zDetFace-Is Right Eye Closed-64',
+ 'zDetFace-Gaze Center X-65',
+ 'zDetFace-Gaze Center Y-66',
+ 'zDetFace-Face Gaze Type-67',
+ 'zDetFace-Eye Glasses Type-68',
+ 'zDetFace-Eye Makeup Type-69',
+ 'zDetFace-Cluster Squence Number Key-70',
+ 'zDetFace-Grouping ID-71',
+ 'zDetFace-Master ID-72',
+ 'zDetFace-Quality-73',
+ 'zDetFace-Quality Measure-74',
+ 'zDetFace-Source Height-75',
+ 'zDetFace-Source Width-76',
+ 'zDetFace-Asset Visible-77',
+ 'zDetFace-Hidden/Asset Hidden-78',
+ 'zDetFace-In Trash/Recently Deleted-79',
+ 'zDetFace-Cloud Local State-80',
+ 'zDetFace-Training Type-81',
+ 'zDetFace.Pose Yaw-82',
+ 'zDetFace-Body Center X-83',
+ 'zDetFace-Body Center Y-84',
+ 'zDetFace-Body Height-85',
+ 'zDetFace-Body Width-86',
+ 'zDetFace-Roll-87',
+ 'zDetFace-Size-88',
+ 'zDetFace-Cluster Sequence Number-89',
+ 'zDetFace-Blur Score-90',
+ 'zDetFacePrint-Face Print Version-91',
+ 'zDetFaceGroup-UUID-92',
+ 'zDetFaceGroup-Person Builder State-93',
+ 'zDetFaceGroup-UnNamed Face Count-94',
+ 'zPerson-Face Count-95',
+ 'zDetFace-Face Algorithm Version-96',
+ 'zDetFace-Adjustment Version-97',
+ 'zPerson-In Person Naming Model-98',
+ 'zPerson-Key Face Pick Source Key-99',
+ 'zPerson-Manual Order Key-100',
+ 'zPerson-Question Type-101',
+ 'zPerson-Suggested For Client Type-102',
+ 'zPerson-Merge Target Person-103',
+ 'zPerson-Cloud Local State-104',
+ 'zFaceCrop-Cloud Local State-105',
+ 'zFaceCrop-Cloud Type-106',
+ 'zPerson-Cloud Delete State-107',
+ 'zFaceCrop-Cloud Delete State-108',
+ 'zDetFace-zPK-109',
+ 'zDetFacePrint-Face Key-110',
+ 'zPerson-KeyFace=zDetFace-zPK-111',
+ 'zFaceCrop-Face Key-112',
+ 'zPerson-zPK=zDetFace-Person-113',
+ 'zDetFace-PersonForFace= zPerson-zPK-114',
+ 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-115',
+ 'zDetFace-PersonForTorso= zPerson-zPK-116',
+ 'zDetFace-Person Being Key Face-117',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-118',
+ 'zDetFace-Face Print-119',
+ 'zDetFacePrint-zPK-120',
+ 'zDetFace-Face Crop-121',
+ 'zFaceCrop-zPK-122',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-123',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-124',
+ 'zPerson-Assoc Face Group Key-125',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-126',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-127',
+ 'zDetFaceGroup-zPK-128',
+ 'zPerson-Share Participant= zSharePartic-zPK-129',
+ 'zDetFace-UUID-130',
+ 'zFaceCrop-UUID-131',
+ 'zFaceCrop-Invalid Merge Candidate Person UUID-132',
+ 'zPerson-Person UUID-133',
+ 'zPerson-Person URI-134',
+ 'zDetFaceGroup-UUID-135',
+ 'zDetFace-AssetForFace= zAsset-zPK-136',
+ 'zDetFace-AssetForTorso= zAsset-zPK-137',
+ 'zFaceCrop-Asset Key-138',
+ 'zAsset-zPK-139',
+ 'zAddAssetAttr-zPK-140',
+ 'zAsset-UUID = store.cloudphotodb-141',
+ 'zAddAssetAttr-Master Fingerprint-142')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -5600,7 +5431,7 @@ def get_ph16assetpeopledetfacesyndpl(files_found, report_folder, seeker, wrap_te
WHEN 0 THEN '0-Obs in iOS 18 still testing-0'
WHEN 1 THEN '1-Obs in iOS 18 still testing-1'
ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZHASPEOPLESCENEMIDORGREATERCONFIDENCE || ''
- END AS 'zAddAssetAttr-Has_People_Scene Mid_Or_Greater_Confidence-iOS18',
+ END AS 'zAddAssetAttr-Has_People_Scene Mid_Or_Greater_Confidence',
zAddAssetAttr.ZFACEANALYSISVERSION AS 'zAddAssetAttr-Face Analysis Version',
zDetFace.ZASSETFORTEMPORALDETECTEDFACES AS 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK',
CASE
@@ -5613,7 +5444,7 @@ def get_ph16assetpeopledetfacesyndpl(files_found, report_folder, seeker, wrap_te
WHEN 1 THEN '1-Has_Contact Matching_Dictionary'
ELSE 'Unknown-New-Value!: ' || zPerson.ZVERIFIEDTYPE || ''
END AS 'zPerson-Verified Type',
- zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence-iOS18',
+ zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence',
zPerson.ZDISPLAYNAME AS 'zPerson-Display Name',
zPerson.ZFULLNAME AS 'zPerson-Full Name',
CASE zPerson.ZCLOUDVERIFIEDTYPE
@@ -5960,8 +5791,8 @@ def get_ph16assetpeopledetfacesyndpl(files_found, report_folder, seeker, wrap_te
zAsset.Z_PK AS 'zAsset-zPK',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18'
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash'
FROM ZASSET zAsset
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES
@@ -5978,260 +5809,205 @@ def get_ph16assetpeopledetfacesyndpl(files_found, report_folder, seeker, wrap_te
LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP
WHERE zDetFace.Z_PK > 0
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- personcontactmatchingdictionary = ''
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- facecropresourcedata_blob = ''
-
- # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
- if row[28] is not None:
- pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[135] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[28])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- personcontactmatchingdictionary = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[135])
- else:
- logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[135])
-
- # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
- if row[36] is not None:
- pathto = os.path.join(report_folder, 'FaceCropFor_' + row[133] + '.jpg')
- with open(pathto, 'wb') as file:
- file.write(row[36])
- facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
-
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- personcontactmatchingdictionary,
- row[29], row[30], row[31], row[32], row[33], row[34], row[35],
- facecropresourcedata_blob,
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142], row[143], row[144], row[145]))
-
- counter += 1
-
- description = 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite for' \
- ' basic asset, people and detected faces data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 18.'
- report = ArtifactHtmlReport('Ph16.2-People & Faces Asset Data-SyndPL')
- report.start_artifact_report(report_folder, 'Ph16.2-People & Faces Asset Data-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-Time Zone Offset-5',
- 'zAddAssetAttr-EXIF-String-6',
- 'zAsset-Directory-Path-7',
- 'zAsset-Filename-8',
- 'zAddAssetAttr- Original Filename-9',
- 'zCldMast- Original Filename-10',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
- 'zAsset- Conversation= zGenAlbum_zPK-12',
- 'zAsset-Trashed Date-13',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-15',
- 'zAddAssetAttr-Imported by Bundle ID-16',
- 'zAddAssetAttr-Imported By Display Name-17',
- 'zCldMast-Imported by Bundle ID-18',
- 'zCldMast-Imported by Display Name-19',
- 'zAsset-Visibility State-20',
- 'zFaceCrop-Face Area Points-21',
- 'zAddAssetAttr-Has_People_Scene Mid_Or_Greater_Confidence-iOS18-22',
- 'zAsset-Face Adjustment Version-23',
- 'zAddAssetAttr-Face_Regions-SeeRawDBData-24',
- 'zAddAssetAttr-Face Analysis Version-25',
- 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-26',
- 'zDetFacePrint-Data-SeeRawDBData-27',
- 'zPerson-Contact Matching Dictionary-28',
- 'zPerson-Verified Type-29',
- 'zPerson-Is_Me_Confidence-iOS18-30',
- 'zPerson-Display Name-31',
- 'zPerson-Full Name-32',
- 'zPerson-Cloud Verified Type-33',
- 'zFaceCrop-State-34',
- 'zFaceCrop-Type-35',
- 'zFaceCrop-Resource Data-36',
- 'zDetFace-Confirmed Face Crop Generation State-37',
- 'zDetFace-Manual-38',
- 'zDetFace-Detection Type-39',
- 'zPerson-Detection Type-40',
- 'zDetFace-VIP Model Type-41',
- 'zDetFace-Name Source-42',
- 'zDetFace-Cloud Name Source-43',
- 'zPerson-Merge Candidate Confidence-44',
- 'zPerson-Type-45',
- 'zPerson-Gender Type-46',
- 'zDetFace-Gender Type-47',
- 'zDetFace-Center X-48',
- 'zDetFace-Center Y-49',
- 'zPerson-Age Type Estimate-50',
- 'zDetFace-Age Type Estimate-51',
- 'zDetFace-Ethnicity Type-52',
- 'zDetFace-Skin Tone Type-53',
- 'zDetFace-Hair Type-54',
- 'zDetFace-Hair Color Type-55',
- 'zDetFace-Head Gear Type-56',
- 'zDetFace-Facial Hair Type-57',
- 'zDetFace-Has Face Mask-58',
- 'zDetFace-Pose Type-59',
- 'zDetFace-Face Expression Type-60',
- 'zDetFace-Has Smile-61',
- 'zDetFace-Smile Type-62',
- 'zDetFace-Lip Makeup Type-63',
- 'zDetFace-Eyes State-64',
- 'zDetFace-Is Left Eye Closed-65',
- 'zDetFace-Is Right Eye Closed-66',
- 'zDetFace-Gaze Center X-67',
- 'zDetFace-Gaze Center Y-68',
- 'zDetFace-Face Gaze Type-69',
- 'zDetFace-Eye Glasses Type-70',
- 'zDetFace-Eye Makeup Type-71',
- 'zDetFace-Cluster Squence Number Key-72',
- 'zDetFace-Grouping ID-73',
- 'zDetFace-Master ID-74',
- 'zDetFace-Quality-75',
- 'zDetFace-Quality Measure-76',
- 'zDetFace-Source Height-77',
- 'zDetFace-Source Width-78',
- 'zDetFace-Asset Visible-79',
- 'zDetFace-Hidden/Asset Hidden-80',
- 'zDetFace-In Trash/Recently Deleted-81',
- 'zDetFace-Cloud Local State-82',
- 'zDetFace-Training Type-83',
- 'zDetFace.Pose Yaw-84',
- 'zDetFace-Body Center X-85',
- 'zDetFace-Body Center Y-86',
- 'zDetFace-Body Height-87',
- 'zDetFace-Body Width-88',
- 'zDetFace-Roll-89',
- 'zDetFace-Size-90',
- 'zDetFace-Cluster Sequence Number-91',
- 'zDetFace-Blur Score-92',
- 'zDetFacePrint-Face Print Version-93',
- 'zDetFaceGroup-UUID-94',
- 'zDetFaceGroup-Person Builder State-95',
- 'zDetFaceGroup-UnNamed Face Count-96',
- 'zPerson-Face Count-97',
- 'zDetFace-Face Algorithm Version-98',
- 'zDetFace-Adjustment Version-99',
- 'zPerson-In Person Naming Model-100',
- 'zPerson-Key Face Pick Source Key-101',
- 'zPerson-Manual Order Key-102',
- 'zPerson-Question Type-103',
- 'zPerson-Suggested For Client Type-104',
- 'zPerson-Merge Target Person-105',
- 'zPerson-Cloud Local State-106',
- 'zFaceCrop-Cloud Local State-107',
- 'zFaceCrop-Cloud Type-108',
- 'zPerson-Cloud Delete State-109',
- 'zFaceCrop-Cloud Delete State-110',
- 'zDetFace-zPK-111',
- 'zDetFacePrint-Face Key-112',
- 'zPerson-KeyFace=zDetFace-zPK-113',
- 'zFaceCrop-Face Key-114',
- 'zPerson-zPK=zDetFace-Person-115',
- 'zDetFace-PersonForFace= zPerson-zPK-116',
- 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-117',
- 'zDetFace-PersonForTorso= zPerson-zPK-118',
- 'zDetFace-Person Being Key Face-119',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-120',
- 'zDetFace-Face Print-121',
- 'zDetFacePrint-zPK-122',
- 'zDetFace-Face Crop-123',
- 'zFaceCrop-zPK-124',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-125',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-126',
- 'zPerson-Assoc Face Group Key-127',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-128',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-129',
- 'zDetFaceGroup-zPK-130',
- 'zPerson-Share Participant= zSharePartic-zPK-131',
- 'zDetFace-UUID-132',
- 'zFaceCrop-UUID-133',
- 'zFaceCrop-Invalid Merge Candidate Person UUID-134',
- 'zPerson-Person UUID-135',
- 'zPerson-Person URI-136',
- 'zDetFaceGroup-UUID-137',
- 'zDetFace-AssetForFace= zAsset-zPK-138',
- 'zDetFace-AssetForTorso= zAsset-zPK-139',
- 'zFaceCrop-Asset Key-140',
- 'zAsset-zPK-141',
- 'zAddAssetAttr-zPK-142',
- 'zAsset-UUID = store.cloudphotodb-143',
- 'zAddAssetAttr-Original Stable Hash-iOS18-144',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-145')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph16.2-People & Faces Asset Data-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph16.2-People & Faces Asset Data-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite people faces and basic asset data data')
-
- db.close()
- return
-
-
-__artifacts_v2__ = {
- 'Ph16-1-People & Faces Asset Data-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite 16.1 Asset Basic People and Faces Data',
- 'description': 'Parses basic asset record data from PhotoData-Photos.sqlite for basic asset'
- ' people and faces data. The results may contain multiple records per ZASSET table Z_PK value'
- ' and supports iOS 14-18.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-12',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-G-People_Faces_Data',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph16assetpeopledetfacephdapsql'
- },
- 'Ph16-2-People & Faces Asset Data-SyndPL': {
- 'name': 'SyndPL Photos.sqlite 16.2 Asset Basic People and Faces Data',
- 'description': 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite'
- ' for basic asset people and faces data. The results may contain multiple records'
- ' per ZASSET table Z_PK value and supports iOS 14-18.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-12',
- 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite',
- 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts',
- 'notes': '',
- 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',
- 'function': 'get_ph16assetpeopledetfacesyndpl'
- }
-}
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ personcontactmatchingdictionary = ''
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ facecropresourcedata_blob = ''
+
+ # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST
+ if row[28] is not None:
+ pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[135] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[28])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ personcontactmatchingdictionary = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[135])
+ else:
+ logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[135])
+
+ # zFaceCrop.ZRESOURCEDATA-BLOB_JPG
+ if row[36] is not None:
+ pathto = os.path.join(report_folder, 'FaceCropFor_' + row[133] + '.jpg')
+ with open(pathto, 'wb') as file:
+ file.write(row[36])
+ facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder)
+
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ personcontactmatchingdictionary,
+ row[29], row[30], row[31], row[32], row[33], row[34], row[35],
+ facecropresourcedata_blob,
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-Time Zone Offset-5',
+ 'zAddAssetAttr-EXIF-String-6',
+ 'zAsset-Directory-Path-7',
+ 'zAsset-Filename-8',
+ 'zAddAssetAttr- Original Filename-9',
+ 'zCldMast- Original Filename-10',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
+ 'zAsset- Conversation= zGenAlbum_zPK-12',
+ ('zAsset-Trashed Date-13', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14',
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-15',
+ 'zAddAssetAttr-Imported by Bundle ID-16',
+ 'zAddAssetAttr-Imported By Display Name-17',
+ 'zCldMast-Imported by Bundle ID-18',
+ 'zCldMast-Imported by Display Name-19',
+ 'zAsset-Visibility State-20',
+ 'zFaceCrop-Face Area Points-21',
+ 'zAddAssetAttr-Has_People_Scene Mid_Or_Greater_Confidence-22',
+ 'zAsset-Face Adjustment Version-23',
+ 'zAddAssetAttr-Face_Regions-SeeRawDBData-24',
+ 'zAddAssetAttr-Face Analysis Version-25',
+ 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-26',
+ 'zDetFacePrint-Data-SeeRawDBData-27',
+ 'zPerson-Contact Matching Dictionary-28',
+ 'zPerson-Verified Type-29',
+ 'zPerson-Is_Me_Confidence-30',
+ 'zPerson-Display Name-31',
+ 'zPerson-Full Name-32',
+ 'zPerson-Cloud Verified Type-33',
+ 'zFaceCrop-State-34',
+ 'zFaceCrop-Type-35',
+ 'zFaceCrop-Resource Data-36',
+ 'zDetFace-Confirmed Face Crop Generation State-37',
+ 'zDetFace-Manual-38',
+ 'zDetFace-Detection Type-39',
+ 'zPerson-Detection Type-40',
+ 'zDetFace-VIP Model Type-41',
+ 'zDetFace-Name Source-42',
+ 'zDetFace-Cloud Name Source-43',
+ 'zPerson-Merge Candidate Confidence-44',
+ 'zPerson-Type-45',
+ 'zPerson-Gender Type-46',
+ 'zDetFace-Gender Type-47',
+ 'zDetFace-Center X-48',
+ 'zDetFace-Center Y-49',
+ 'zPerson-Age Type Estimate-50',
+ 'zDetFace-Age Type Estimate-51',
+ 'zDetFace-Ethnicity Type-52',
+ 'zDetFace-Skin Tone Type-53',
+ 'zDetFace-Hair Type-54',
+ 'zDetFace-Hair Color Type-55',
+ 'zDetFace-Head Gear Type-56',
+ 'zDetFace-Facial Hair Type-57',
+ 'zDetFace-Has Face Mask-58',
+ 'zDetFace-Pose Type-59',
+ 'zDetFace-Face Expression Type-60',
+ 'zDetFace-Has Smile-61',
+ 'zDetFace-Smile Type-62',
+ 'zDetFace-Lip Makeup Type-63',
+ 'zDetFace-Eyes State-64',
+ 'zDetFace-Is Left Eye Closed-65',
+ 'zDetFace-Is Right Eye Closed-66',
+ 'zDetFace-Gaze Center X-67',
+ 'zDetFace-Gaze Center Y-68',
+ 'zDetFace-Face Gaze Type-69',
+ 'zDetFace-Eye Glasses Type-70',
+ 'zDetFace-Eye Makeup Type-71',
+ 'zDetFace-Cluster Squence Number Key-72',
+ 'zDetFace-Grouping ID-73',
+ 'zDetFace-Master ID-74',
+ 'zDetFace-Quality-75',
+ 'zDetFace-Quality Measure-76',
+ 'zDetFace-Source Height-77',
+ 'zDetFace-Source Width-78',
+ 'zDetFace-Asset Visible-79',
+ 'zDetFace-Hidden/Asset Hidden-80',
+ 'zDetFace-In Trash/Recently Deleted-81',
+ 'zDetFace-Cloud Local State-82',
+ 'zDetFace-Training Type-83',
+ 'zDetFace.Pose Yaw-84',
+ 'zDetFace-Body Center X-85',
+ 'zDetFace-Body Center Y-86',
+ 'zDetFace-Body Height-87',
+ 'zDetFace-Body Width-88',
+ 'zDetFace-Roll-89',
+ 'zDetFace-Size-90',
+ 'zDetFace-Cluster Sequence Number-91',
+ 'zDetFace-Blur Score-92',
+ 'zDetFacePrint-Face Print Version-93',
+ 'zDetFaceGroup-UUID-94',
+ 'zDetFaceGroup-Person Builder State-95',
+ 'zDetFaceGroup-UnNamed Face Count-96',
+ 'zPerson-Face Count-97',
+ 'zDetFace-Face Algorithm Version-98',
+ 'zDetFace-Adjustment Version-99',
+ 'zPerson-In Person Naming Model-100',
+ 'zPerson-Key Face Pick Source Key-101',
+ 'zPerson-Manual Order Key-102',
+ 'zPerson-Question Type-103',
+ 'zPerson-Suggested For Client Type-104',
+ 'zPerson-Merge Target Person-105',
+ 'zPerson-Cloud Local State-106',
+ 'zFaceCrop-Cloud Local State-107',
+ 'zFaceCrop-Cloud Type-108',
+ 'zPerson-Cloud Delete State-109',
+ 'zFaceCrop-Cloud Delete State-110',
+ 'zDetFace-zPK-111',
+ 'zDetFacePrint-Face Key-112',
+ 'zPerson-KeyFace=zDetFace-zPK-113',
+ 'zFaceCrop-Face Key-114',
+ 'zPerson-zPK=zDetFace-Person-115',
+ 'zDetFace-PersonForFace= zPerson-zPK-116',
+ 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-117',
+ 'zDetFace-PersonForTorso= zPerson-zPK-118',
+ 'zDetFace-Person Being Key Face-119',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-120',
+ 'zDetFace-Face Print-121',
+ 'zDetFacePrint-zPK-122',
+ 'zDetFace-Face Crop-123',
+ 'zFaceCrop-zPK-124',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-125',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-126',
+ 'zPerson-Assoc Face Group Key-127',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-128',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-129',
+ 'zDetFaceGroup-zPK-130',
+ 'zPerson-Share Participant= zSharePartic-zPK-131',
+ 'zDetFace-UUID-132',
+ 'zFaceCrop-UUID-133',
+ 'zFaceCrop-Invalid Merge Candidate Person UUID-134',
+ 'zPerson-Person UUID-135',
+ 'zPerson-Person URI-136',
+ 'zDetFaceGroup-UUID-137',
+ 'zDetFace-AssetForFace= zAsset-zPK-138',
+ 'zDetFace-AssetForTorso= zAsset-zPK-139',
+ 'zFaceCrop-Asset Key-140',
+ 'zAsset-zPK-141',
+ 'zAddAssetAttr-zPK-142',
+ 'zAsset-UUID = store.cloudphotodb-143',
+ 'zAddAssetAttr-Original Stable Hash-144',
+ 'zAddAssetAttr.Adjusted Stable Hash-145')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph1BasicAssetData.py b/scripts/artifacts/Ph1BasicAssetData.py
index c84551f3..b764e95b 100644
--- a/scripts/artifacts/Ph1BasicAssetData.py
+++ b/scripts/artifacts/Ph1BasicAssetData.py
@@ -1,41 +1,60 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 2.0
-#
-# Description:
-# Parses basic asset record data from Photos.sqlite. The results will contain one record per ZASSET table Z_PK value
-# and supports iOS 11-18. This parser is based on research and SQLite Queries written by Scott Koenig
-# This is very large query and script, I recommend opening the TSV generated report with Zimmerman's Tools
-# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results.
-# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347
-#
+__artifacts_v2__ = {
+ 'Ph1_1AssetBasicDataPhDaPsql': {
+ 'name': 'Ph1.1-Asset Basic Data-PhDaPsql',
+ 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite.'
+ ' The results will contain one row per ZASSET table Z_PK value and supports iOS 11-18.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-04',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-A-Asset_Basic_Data',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ },
+ 'Ph1_2AssetBasicDataSyndPL': {
+ 'name': 'Ph1.2-Asset Basic Data-SyndPL',
+ 'description': 'Parses basic asset row data from Syndication.photoslibrary-database-Photos.sqlite.'
+ ' The results will contain one row per ZASSET table Z_PK value and supports iOS 11-18.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-04',
+ 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite',
+ 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts',
+ 'notes': '',
+ 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
-
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
-def get_ph1assetbasicdataphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+@artifact_processor
+def Ph1_1AssetBasicDataPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("10.3.4"):
- logfunc("Unsupported version for PhotoData-Photos.sqlite basic asset data one record per zAsset-zPK from iOS " + iosversion)
+ logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("14")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -77,66 +96,47 @@ def get_ph1assetbasicdataphdapsql(files_found, report_folder, seeker, wrap_text,
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite.' \
- ' The results will contain one record per ZASSET table Z_PK value and supports iOS 11-13.'
- report = ArtifactHtmlReport('Ph1.1-Asset Basic Data-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph1.1-Asset Basic Data-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-EXIF-String-5',
- 'zAsset-Modification Date-6',
- 'zAsset-Last Shared Date-7',
- 'zAsset-Trashed Date-8',
- 'zAsset-Directory-Path-9',
- 'zAsset-Filename-10',
- 'zAddAssetAttr- Original Filename-11',
- 'zCldMast- Original Filename-12',
- 'zAddAssetAttr- Creator Bundle ID-13',
- 'zAsset-Saved Asset Type-14',
- 'zAsset-Visibility State-15',
- 'zAsset-zPK-16',
- 'zAddAssetAttr-zPK-17',
- 'zAsset-UUID = store.cloudphotodb-18',
- 'zAddAssetAttr-Master Fingerprint-19')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph1.1-Asset Basic Data-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph1.1-Asset Basic Data-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Photos.sqlite basic asset data one record per zAsset-zPK')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19]))
+
+ data_headers = (
+ ('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-EXIF-String-5',
+ ('zAsset-Modification Date-6', 'datetime'),
+ ('zAsset-Last Shared Date-7', 'datetime'),
+ ('zAsset-Trashed Date-8', 'datetime'),
+ 'zAsset-Directory-Path-9',
+ 'zAsset-Filename-10',
+ 'zAddAssetAttr- Original Filename-11',
+ 'zCldMast- Original Filename-12',
+ 'zAddAssetAttr- Creator Bundle ID-13',
+ 'zAsset-Saved Asset Type-14',
+ 'zAsset-Visibility State-15',
+ 'zAsset-zPK-16',
+ 'zAddAssetAttr-zPK-17',
+ 'zAsset-UUID = store.cloudphotodb-18',
+ 'zAddAssetAttr-Master Fingerprint-19')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -184,68 +184,50 @@ def get_ph1assetbasicdataphdapsql(files_found, report_folder, seeker, wrap_text,
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite.' \
- ' The results will contain one record per ZASSET table Z_PK value and supports iOS 14.'
- report = ArtifactHtmlReport('Ph1.1-Asset Basic Data-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph1.1-Asset Basic Data-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-EXIF-String-5',
- 'zAsset-Modification Date-6',
- 'zAsset-Last Shared Date-7',
- 'zAsset-Trashed Date-8',
- 'zAsset-Directory-Path-9',
- 'zAsset-Filename-10',
- 'zAddAssetAttr- Original Filename-11',
- 'zCldMast- Original Filename-12',
- 'zAddAssetAttr- Creator Bundle ID-13',
- 'zAddAssetAttr- Imported By Display Name-14',
- 'zAsset-Saved Asset Type-15',
- 'zAddAssetAttr-Share Type-16',
- 'zAsset-Visibility State-17',
- 'zAsset-zPK-18',
- 'zAddAssetAttr-zPK-19',
- 'zAsset-UUID = store.cloudphotodb-20',
- 'zAddAssetAttr-Master Fingerprint-21')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph1.1-Asset Basic Data-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph1.1-Asset Basic Data-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Photos.sqlite basic asset data one record per zAsset-zPK')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21]))
+
+ data_headers = (
+ ('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-EXIF-String-5',
+ ('zAsset-Modification Date-6', 'datetime'),
+ ('zAsset-Last Shared Date-7', 'datetime'),
+ ('zAsset-Trashed Date-8', 'datetime'),
+ 'zAsset-Directory-Path-9',
+ 'zAsset-Filename-10',
+ 'zAddAssetAttr- Original Filename-11',
+ 'zCldMast- Original Filename-12',
+ 'zAddAssetAttr- Creator Bundle ID-13',
+ 'zAddAssetAttr- Imported By Display Name-14',
+ 'zAsset-Saved Asset Type-15',
+ 'zAddAssetAttr-Share Type-16',
+ 'zAsset-Visibility State-17',
+ 'zAsset-zPK-18',
+ 'zAddAssetAttr-zPK-19',
+ 'zAsset-UUID = store.cloudphotodb-20',
+ 'zAddAssetAttr-Master Fingerprint-21')
+
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -311,71 +293,51 @@ def get_ph1assetbasicdataphdapsql(files_found, report_folder, seeker, wrap_text,
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ '''
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
row[19], row[20], row[21], row[22], row[23], row[24]))
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite.' \
- ' The results will contain one record per ZASSET table Z_PK value and supports iOS 15.'
- report = ArtifactHtmlReport('Ph1.1-Asset Basic Data-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph1.1-Asset Basic Data-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-EXIF-String-5',
- 'zAsset-Modification Date-6',
- 'zAsset-Last Shared Date-7',
- 'zAsset-Trashed Date-8',
- 'zAsset-Directory-Path-9',
- 'zAsset-Filename-10',
- 'zAddAssetAttr- Original Filename-11',
- 'zCldMast- Original Filename-12',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-13',
- 'zAddAssetAttr- Imported by Bundle Identifier-14',
- 'zAddAssetAttr- Imported By Display Name-15',
- 'zAsset-Saved Asset Type-16',
- 'zAsset-Syndication State-17',
- 'zAsset-Bundle Scope-18',
- 'zAddAssetAttr-Share Type-19',
- 'zAsset-Visibility State-20',
- 'zAsset-zPK-21',
- 'zAddAssetAttr-zPK-22',
- 'zAsset-UUID = store.cloudphotodb-23',
- 'zAddAssetAttr-Master Fingerprint-24')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph1.1-Asset Basic Data-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph1.1-Asset Basic Data-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Photos.sqlite basic asset data one record per zAsset-zPK')
-
- db.close()
- return
+ data_headers = (
+ ('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-EXIF-String-5',
+ ('zAsset-Modification Date-6', 'datetime'),
+ ('zAsset-Last Shared Date-7', 'datetime'),
+ ('zAsset-Trashed Date-8', 'datetime'),
+ 'zAsset-Directory-Path-9',
+ 'zAsset-Filename-10',
+ 'zAddAssetAttr- Original Filename-11',
+ 'zCldMast- Original Filename-12',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-13',
+ 'zAddAssetAttr- Imported by Bundle Identifier-14',
+ 'zAddAssetAttr- Imported By Display Name-15',
+ 'zAsset-Saved Asset Type-16',
+ 'zAsset-Syndication State-17',
+ 'zAsset-Bundle Scope-18',
+ 'zAddAssetAttr-Share Type-19',
+ 'zAsset-Visibility State-20',
+ 'zAsset-zPK-21',
+ 'zAddAssetAttr-zPK-22',
+ 'zAsset-UUID = store.cloudphotodb-23',
+ 'zAddAssetAttr-Master Fingerprint-24')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -447,73 +409,53 @@ def get_ph1assetbasicdataphdapsql(files_found, report_folder, seeker, wrap_text,
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ '''
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26]))
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite.' \
- ' The results will contain one record per ZASSET table Z_PK value and supports iOS 16-17.'
- report = ArtifactHtmlReport('Ph1.1-Asset Basic Data-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph1.1-Asset Basic Data-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-EXIF-String-5',
- 'zAsset-Modification Date-6',
- 'zAsset-Last Shared Date-7',
- 'zAsset-Trashed Date-8',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-9',
- 'zAsset-Directory-Path-10',
- 'zAsset-Filename-11',
- 'zAddAssetAttr- Original Filename-12',
- 'zCldMast- Original Filename-13',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-14',
- 'zAddAssetAttr- Imported by Bundle Identifier-15',
- 'zAddAssetAttr- Imported By Display Name-16',
- 'zAsset-Saved Asset Type-17',
- 'zAsset-Syndication State-18',
- 'zAsset-Bundle Scope-19',
- 'zAddAssetAttr-Share Type-20',
- 'zAsset-Active Library Scope Participation State-21',
- 'zAsset-Visibility State-22',
- 'zAsset-zPK-23',
- 'zAddAssetAttr-zPK-24',
- 'zAsset-UUID = store.cloudphotodb-25',
- 'zAddAssetAttr-Master Fingerprint-26')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph1.1-Asset Basic Data-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph1.1-Asset Basic Data-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Photos.sqlite basic asset data one record per zAsset-zPK')
-
- db.close()
- return
+ data_headers = (
+ ('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-EXIF-String-5',
+ ('zAsset-Modification Date-6', 'datetime'),
+ ('zAsset-Last Shared Date-7', 'datetime'),
+ ('zAsset-Trashed Date-8', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-9',
+ 'zAsset-Directory-Path-10',
+ 'zAsset-Filename-11',
+ 'zAddAssetAttr- Original Filename-12',
+ 'zCldMast- Original Filename-13',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-14',
+ 'zAddAssetAttr- Imported by Bundle Identifier-15',
+ 'zAddAssetAttr- Imported By Display Name-16',
+ 'zAsset-Saved Asset Type-17',
+ 'zAsset-Syndication State-18',
+ 'zAsset-Bundle Scope-19',
+ 'zAddAssetAttr-Share Type-20',
+ 'zAsset-Active Library Scope Participation State-21',
+ 'zAsset-Visibility State-22',
+ 'zAsset-zPK-23',
+ 'zAddAssetAttr-zPK-24',
+ 'zAsset-UUID = store.cloudphotodb-25',
+ 'zAddAssetAttr-Master Fingerprint-26')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -533,10 +475,10 @@ def get_ph1assetbasicdataphdapsql(files_found, report_folder, seeker, wrap_text,
zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr- Imported by Bundle Identifier',
zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr- Imported By Display Name',
CASE zAsset.ZISRECENTLYSAVED
- WHEN 0 THEN '0-Not_Recently_Saved iOS18_Still_Testing-0'
- WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1'
+ WHEN 0 THEN '0-Not_Recently_Saved_Still_Testing-0'
+ WHEN 1 THEN '1-Recently_Saved_Still_Testing-1'
ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || ''
- END AS 'zAsset-Is_Recently_Saved-iOS18',
+ END AS 'zAsset-Is_Recently_Saved',
CASE zAsset.ZSAVEDASSETTYPE
WHEN 0 THEN '0-Saved-via-other-source-0'
WHEN 1 THEN '1-StillTesting-1'
@@ -585,96 +527,78 @@ def get_ph1assetbasicdataphdapsql(files_found, report_folder, seeker, wrap_text,
zAsset.Z_PK AS 'zAsset-zPK',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18'
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash'
FROM ZASSET zAsset
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
ORDER BY zAsset.ZDATECREATED
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
row[28]))
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite.' \
- ' The results will contain one record per ZASSET table Z_PK value and supports iOS 18.'
- report = ArtifactHtmlReport('Ph1.1-Asset Basic Data-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph1.1-Asset Basic Data-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-EXIF-String-5',
- 'zAsset-Modification Date-6',
- 'zAsset-Last Shared Date-7',
- 'zAsset-Trashed Date-8',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-9',
- 'zAsset-Directory-Path-10',
- 'zAsset-Filename-11',
- 'zAddAssetAttr- Original Filename-12',
- 'zCldMast- Original Filename-13',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-14',
- 'zAddAssetAttr- Imported by Bundle Identifier-15',
- 'zAddAssetAttr- Imported By Display Name-16',
- 'zAsset-Is_Recently_Saved-iOS18-17',
- 'zAsset-Saved Asset Type-18',
- 'zAsset-Syndication State-19',
- 'zAsset-Bundle Scope-20',
- 'zAddAssetAttr-Share Type-21',
- 'zAsset-Active Library Scope Participation State-22',
- 'zAsset-Visibility State-23',
- 'zAsset-zPK-24',
- 'zAddAssetAttr-zPK-25',
- 'zAsset-UUID = store.cloudphotodb-26',
- 'zAddAssetAttr-Original Stable Hash-iOS18-27',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-28')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph1.1-Asset Basic Data-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph1.1-Asset Basic Data-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Photos.sqlite basic asset data one record per zAsset-zPK')
-
- db.close()
- return
-
-
-def get_ph1assetbasicdatasyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset):
-
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
+ data_headers = (
+ ('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-EXIF-String-5',
+ ('zAsset-Modification Date-6', 'datetime'),
+ ('zAsset-Last Shared Date-7', 'datetime'),
+ ('zAsset-Trashed Date-8', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-9',
+ 'zAsset-Directory-Path-10',
+ 'zAsset-Filename-11',
+ 'zAddAssetAttr- Original Filename-12',
+ 'zCldMast- Original Filename-13',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-14',
+ 'zAddAssetAttr- Imported by Bundle Identifier-15',
+ 'zAddAssetAttr- Imported By Display Name-16',
+ 'zAsset-Is_Recently_Saved-17',
+ 'zAsset-Saved Asset Type-18',
+ 'zAsset-Syndication State-19',
+ 'zAsset-Bundle Scope-20',
+ 'zAddAssetAttr-Share Type-21',
+ 'zAsset-Active Library Scope Participation State-22',
+ 'zAsset-Visibility State-23',
+ 'zAsset-zPK-24',
+ 'zAddAssetAttr-zPK-25',
+ 'zAsset-UUID = store.cloudphotodb-26',
+ 'zAddAssetAttr-Original Stable Hash-27',
+ 'zAddAssetAttr.Adjusted Stable Hash-28')
+
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
+@artifact_processor
+def Ph1_2AssetBasicDataSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
+
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("10.3.4"):
- logfunc("Unsupported version for Syndication.photoslibrary/database/Photos.sqlite basic asset data one record per zAsset-zPK iOS " + iosversion)
+ logfunc("Unsupported version for Syndication.photoslibrary iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("14")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -716,66 +640,47 @@ def get_ph1assetbasicdatasyndpl(files_found, report_folder, seeker, wrap_text, t
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
ORDER BY zAsset.ZDATECREATED
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
row[19]))
- counter += 1
-
- description = 'Parses basic asset record data from Syndication.photoslibrary/database/Photos.sqlite.' \
- ' The results will contain one record per ZASSET table Z_PK value and supports iOS 11-13.'
- report = ArtifactHtmlReport('Ph1.2-Asset Basic Data-SyndPL')
- report.start_artifact_report(report_folder, 'Ph1.2-Asset Basic Data-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-EXIF-String-5',
- 'zAsset-Modification Date-6',
- 'zAsset-Last Shared Date-7',
- 'zAsset-Trashed Date-8',
- 'zAsset-Directory-Path-9',
- 'zAsset-Filename-10',
- 'zAddAssetAttr- Original Filename-11',
- 'zCldMast- Original Filename-12',
- 'zAddAssetAttr- Creator Bundle ID-13',
- 'zAsset-Saved Asset Type-14',
- 'zAsset-Visibility State-15',
- 'zAsset-zPK-16',
- 'zAddAssetAttr-zPK-17',
- 'zAsset-UUID = store.cloudphotodb-18',
- 'zAddAssetAttr-Master Fingerprint-19')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph1.2-Asset Basic Data-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph1.2-Asset Basic Data-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Photos.sqlite basic asset data one record per zAsset-zPK')
-
- db.close()
- return
+ data_headers = (
+ ('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-EXIF-String-5',
+ ('zAsset-Modification Date-6', 'datetime'),
+ ('zAsset-Last Shared Date-7', 'datetime'),
+ ('zAsset-Trashed Date-8', 'datetime'),
+ 'zAsset-Directory-Path-9',
+ 'zAsset-Filename-10',
+ 'zAddAssetAttr- Original Filename-11',
+ 'zCldMast- Original Filename-12',
+ 'zAddAssetAttr- Creator Bundle ID-13',
+ 'zAsset-Saved Asset Type-14',
+ 'zAsset-Visibility State-15',
+ 'zAsset-zPK-16',
+ 'zAddAssetAttr-zPK-17',
+ 'zAsset-UUID = store.cloudphotodb-18',
+ 'zAddAssetAttr-Master Fingerprint-19')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -823,68 +728,49 @@ def get_ph1assetbasicdatasyndpl(files_found, report_folder, seeker, wrap_text, t
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
ORDER BY zAsset.ZDATECREATED
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
row[19], row[20], row[21]))
- counter += 1
-
- description = 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite.' \
- ' The results will contain one record per ZASSET table Z_PK value and supports iOS 14.'
- report = ArtifactHtmlReport('Ph1.2-Asset Basic Data-SyndPL')
- report.start_artifact_report(report_folder, 'Ph1.2-Asset Basic Data-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-EXIF-String-5',
- 'zAsset-Modification Date-6',
- 'zAsset-Last Shared Date-7',
- 'zAsset-Trashed Date-8',
- 'zAsset-Directory-Path-9',
- 'zAsset-Filename-10',
- 'zAddAssetAttr- Original Filename-11',
- 'zCldMast- Original Filename-12',
- 'zAddAssetAttr- Creator Bundle ID-13',
- 'zAddAssetAttr- Imported By Display Name-14',
- 'zAsset-Saved Asset Type-15',
- 'zAddAssetAttr-Share Type-16',
- 'zAsset-Visibility State-17',
- 'zAsset-zPK-18',
- 'zAddAssetAttr-zPK-19',
- 'zAsset-UUID = store.cloudphotodb-20',
- 'zAddAssetAttr-Master Fingerprint-21')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph1.2-Asset Basic Data-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph1.2-Asset Basic Data-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Photos.sqlite basic asset data one record per zAsset-zPK')
-
- db.close()
- return
+ data_headers = (
+ ('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-EXIF-String-5',
+ ('zAsset-Modification Date-6', 'datetime'),
+ ('zAsset-Last Shared Date-7', 'datetime'),
+ ('zAsset-Trashed Date-8', 'datetime'),
+ 'zAsset-Directory-Path-9',
+ 'zAsset-Filename-10',
+ 'zAddAssetAttr- Original Filename-11',
+ 'zCldMast- Original Filename-12',
+ 'zAddAssetAttr- Creator Bundle ID-13',
+ 'zAddAssetAttr- Imported By Display Name-14',
+ 'zAsset-Saved Asset Type-15',
+ 'zAddAssetAttr-Share Type-16',
+ 'zAsset-Visibility State-17',
+ 'zAsset-zPK-18',
+ 'zAddAssetAttr-zPK-19',
+ 'zAsset-UUID = store.cloudphotodb-20',
+ 'zAddAssetAttr-Master Fingerprint-21')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -950,71 +836,52 @@ def get_ph1assetbasicdatasyndpl(files_found, report_folder, seeker, wrap_text, t
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
ORDER BY zAsset.ZDATECREATED
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
row[19], row[20], row[21], row[22], row[23], row[24]))
- counter += 1
-
- description = 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite.' \
- ' The results will contain one record per ZASSET table Z_PK value and supports iOS 15.'
- report = ArtifactHtmlReport('Ph1.2-Asset Basic Data-SyndPL')
- report.start_artifact_report(report_folder, 'Ph1.2-Asset Basic Data-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-EXIF-String-5',
- 'zAsset-Modification Date-6',
- 'zAsset-Last Shared Date-7',
- 'zAsset-Trashed Date-8',
- 'zAsset-Directory-Path-9',
- 'zAsset-Filename-10',
- 'zAddAssetAttr- Original Filename-11',
- 'zCldMast- Original Filename-12',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-13',
- 'zAddAssetAttr- Imported by Bundle Identifier-14',
- 'zAddAssetAttr- Imported By Display Name-15',
- 'zAsset-Saved Asset Type-16',
- 'zAsset-Syndication State-17',
- 'zAsset-Bundle Scope-18',
- 'zAddAssetAttr-Share Type-19',
- 'zAsset-Visibility State-20',
- 'zAsset-zPK-21',
- 'zAddAssetAttr-zPK-22',
- 'zAsset-UUID = store.cloudphotodb-23',
- 'zAddAssetAttr-Master Fingerprint-24')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph1.2-Asset Basic Data-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph1.2-Asset Basic Data-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Photos.sqlite basic asset data one record per zAsset-zPK')
-
- db.close()
- return
+ data_headers = (
+ ('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-EXIF-String-5',
+ ('zAsset-Modification Date-6', 'datetime'),
+ ('zAsset-Last Shared Date-7', 'datetime'),
+ ('zAsset-Trashed Date-8', 'datetime'),
+ 'zAsset-Directory-Path-9',
+ 'zAsset-Filename-10',
+ 'zAddAssetAttr- Original Filename-11',
+ 'zCldMast- Original Filename-12',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-13',
+ 'zAddAssetAttr- Imported by Bundle Identifier-14',
+ 'zAddAssetAttr- Imported By Display Name-15',
+ 'zAsset-Saved Asset Type-16',
+ 'zAsset-Syndication State-17',
+ 'zAsset-Bundle Scope-18',
+ 'zAddAssetAttr-Share Type-19',
+ 'zAsset-Visibility State-20',
+ 'zAsset-zPK-21',
+ 'zAddAssetAttr-zPK-22',
+ 'zAsset-UUID = store.cloudphotodb-23',
+ 'zAddAssetAttr-Master Fingerprint-24')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -1086,73 +953,54 @@ def get_ph1assetbasicdatasyndpl(files_found, report_folder, seeker, wrap_text, t
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
ORDER BY zAsset.ZDATECREATED
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26]))
- counter += 1
-
- description = 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite.' \
- ' The results will contain one record per ZASSET table Z_PK value and supports iOS 16-17.'
- report = ArtifactHtmlReport('Ph1.2-Asset Basic Data-SyndPL')
- report.start_artifact_report(report_folder, 'Ph1.2-Asset Basic Data-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-EXIF-String-5',
- 'zAsset-Modification Date-6',
- 'zAsset-Last Shared Date-7',
- 'zAsset-Trashed Date-8',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-9',
- 'zAsset-Directory-Path-10',
- 'zAsset-Filename-11',
- 'zAddAssetAttr- Original Filename-12',
- 'zCldMast- Original Filename-13',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-14',
- 'zAddAssetAttr- Imported by Bundle Identifier-15',
- 'zAddAssetAttr- Imported By Display Name-16',
- 'zAsset-Saved Asset Type-17',
- 'zAsset-Syndication State-18',
- 'zAsset-Bundle Scope-19',
- 'zAddAssetAttr-Share Type-20',
- 'zAsset-Active Library Scope Participation State-21',
- 'zAsset-Visibility State-22',
- 'zAsset-zPK-23',
- 'zAddAssetAttr-zPK-24',
- 'zAsset-UUID = store.cloudphotodb-25',
- 'zAddAssetAttr-Master Fingerprint-26')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph1.2-Asset Basic Data-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph1.2-Asset Basic Data-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Photos.sqlite basic asset data one record per zAsset-zPK')
-
- db.close()
- return
+ data_headers = (
+ ('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-EXIF-String-5',
+ ('zAsset-Modification Date-6', 'datetime'),
+ ('zAsset-Last Shared Date-7', 'datetime'),
+ ('zAsset-Trashed Date-8', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-9',
+ 'zAsset-Directory-Path-10',
+ 'zAsset-Filename-11',
+ 'zAddAssetAttr- Original Filename-12',
+ 'zCldMast- Original Filename-13',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-14',
+ 'zAddAssetAttr- Imported by Bundle Identifier-15',
+ 'zAddAssetAttr- Imported By Display Name-16',
+ 'zAsset-Saved Asset Type-17',
+ 'zAsset-Syndication State-18',
+ 'zAsset-Bundle Scope-19',
+ 'zAddAssetAttr-Share Type-20',
+ 'zAsset-Active Library Scope Participation State-21',
+ 'zAsset-Visibility State-22',
+ 'zAsset-zPK-23',
+ 'zAddAssetAttr-zPK-24',
+ 'zAsset-UUID = store.cloudphotodb-25',
+ 'zAddAssetAttr-Master Fingerprint-26')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -1172,10 +1020,10 @@ def get_ph1assetbasicdatasyndpl(files_found, report_folder, seeker, wrap_text, t
zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr- Imported by Bundle Identifier',
zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr- Imported By Display Name',
CASE zAsset.ZISRECENTLYSAVED
- WHEN 0 THEN '0-Not_Recenlty_Saved iOS18_Still_Testing-0'
- WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1'
+ WHEN 0 THEN '0-Not_Recenlty_Saved_Still_Testing-0'
+ WHEN 1 THEN '1-Recently_Saved_Still_Testing-1'
ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || ''
- END AS 'zAsset-Is_Recently_Saved-iOS18',
+ END AS 'zAsset-Is_Recently_Saved',
CASE zAsset.ZSAVEDASSETTYPE
WHEN 0 THEN '0-Saved-via-other-source-0'
WHEN 1 THEN '1-StillTesting-1'
@@ -1224,102 +1072,51 @@ def get_ph1assetbasicdatasyndpl(files_found, report_folder, seeker, wrap_text, t
zAsset.Z_PK AS 'zAsset-zPK',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18'
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash'
FROM ZASSET zAsset
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
ORDER BY zAsset.ZDATECREATED
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
row[28]))
- counter += 1
-
- description = 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite.' \
- ' The results will contain one record per ZASSET table Z_PK value and supports iOS 18.'
- report = ArtifactHtmlReport('Ph1.2-Asset Basic Data-SyndPL')
- report.start_artifact_report(report_folder, 'Ph1.2-Asset Basic Data-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-EXIF-String-5',
- 'zAsset-Modification Date-6',
- 'zAsset-Last Shared Date-7',
- 'zAsset-Trashed Date-8',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-9',
- 'zAsset-Directory-Path-10',
- 'zAsset-Filename-11',
- 'zAddAssetAttr- Original Filename-12',
- 'zCldMast- Original Filename-13',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-14',
- 'zAddAssetAttr- Imported by Bundle Identifier-15',
- 'zAddAssetAttr- Imported By Display Name-16',
- 'zAsset-Is_Recently_Saved-iOS18-17',
- 'zAsset-Saved Asset Type-18',
- 'zAsset-Syndication State-19',
- 'zAsset-Bundle Scope-20',
- 'zAddAssetAttr-Share Type-21',
- 'zAsset-Active Library Scope Participation State-22',
- 'zAsset-Visibility State-23',
- 'zAsset-zPK-24',
- 'zAddAssetAttr-zPK-25',
- 'zAsset-UUID = store.cloudphotodb-26',
- 'zAddAssetAttr-Original Stable Hash-iOS18-27',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-28')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph1.2-Asset Basic Data-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph1.2-Asset Basic Data-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Photos.sqlite basic asset data one record per zAsset-zPK')
-
- db.close()
- return
-
-
-__artifacts_v2__ = {
- 'Ph1-1-Asset Basic Data-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite Ph1.1 Asset Basic Data',
- 'description': 'Parses basic asset record data from PhotoData-Photos.sqlite.'
- ' The results will contain one record per ZASSET table Z_PK value and supports iOS 11-18.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-12',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-A-Asset_Basic_Data',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph1assetbasicdataphdapsql'
- },
- 'Ph1-2-Asset Basic Data-SyndPL': {
- 'name': 'SyndPL Photos.sqlite Ph1.2 Asset Basic Data',
- 'description': 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite.'
- ' The results will contain one record per ZASSET table Z_PK value and supports iOS 11-18.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-12',
- 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite',
- 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts',
- 'notes': '',
- 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',
- 'function': 'get_ph1assetbasicdatasyndpl'
- }
-}
+ data_headers = (
+ ('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-EXIF-String-5',
+ ('zAsset-Modification Date-6', 'datetime'),
+ ('zAsset-Last Shared Date-7', 'datetime'),
+ ('zAsset-Trashed Date-8', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-9',
+ 'zAsset-Directory-Path-10',
+ 'zAsset-Filename-11',
+ 'zAddAssetAttr- Original Filename-12',
+ 'zCldMast- Original Filename-13',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-14',
+ 'zAddAssetAttr- Imported by Bundle Identifier-15',
+ 'zAddAssetAttr- Imported By Display Name-16',
+ 'zAsset-Is_Recently_Saved-17',
+ 'zAsset-Saved Asset Type-18',
+ 'zAsset-Syndication State-19',
+ 'zAsset-Bundle Scope-20',
+ 'zAddAssetAttr-Share Type-21',
+ 'zAsset-Active Library Scope Participation State-22',
+ 'zAsset-Visibility State-23',
+ 'zAsset-zPK-24',
+ 'zAddAssetAttr-zPK-25',
+ 'zAsset-UUID = store.cloudphotodb-26',
+ 'zAddAssetAttr-Original Stable Hash-27',
+ 'zAddAssetAttr.Adjusted Stable Hash-28')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph20AlbumsNAD.py b/scripts/artifacts/Ph20AlbumsNAD.py
index e43749ae..49e8348c 100644
--- a/scripts/artifacts/Ph20AlbumsNAD.py
+++ b/scripts/artifacts/Ph20AlbumsNAD.py
@@ -1,44 +1,68 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 2.0
-#
-# Description:
-# Parses Basic Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table and supports iOS 11-18.
-# Parses Album records only no asset data being parsed.
-# Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.
-# Use 1505-Shared-Album-1505 in the search to view Shared Albums.
-# Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You Conversation Identifiers.
-# Please see the album type specific scripts to view more data for each album type.
-# This parser is based on research and SQLite Queries written by Scott Koenig
-# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347
-#
+__artifacts_v2__ = {
+ 'Ph20_1AlbumRecordswithNADPhDaPsql': {
+ 'name': 'Ph20.1-Album Records NAD-PhDaPsql',
+ 'description': 'Parses Basic Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table'
+ ' and supports iOS 11-18. Parses Album records only no asset data being parsed.'
+ ' Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.'
+ ' Use 1505-Shared-Album-1505 in the search to view Shared Albums.'
+ ' Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You Conversation Identifiers.'
+ ' Please see the album type specific scripts to view more data for each album type.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-D-Generic_Album_Records-NAD',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ },
+ 'Ph20_2AlbumRecordswithNADSyndPL': {
+ 'name': 'Ph20.2-Album Records NAD-SyndPL',
+ 'description': 'Parses Basic Album records found in the Syndication.photoslibrary-database-Photos.sqlite'
+ ' ZGENERICALBUM Table and supports iOS 11-18. Parses Album records only no asset data'
+ ' being parsed. Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.'
+ ' Use 1505-Shared-Album-1505 in the search to view Shared Albums.'
+ ' Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You Conversation Identifiers.'
+ ' Please see the album type specific scripts to view more data for each album type.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite',
+ 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts',
+ 'notes': '',
+ 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
+@artifact_processor
+def Ph20_1AlbumRecordswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
-def get_ph20albumrecordsnadphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('-') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("10.3.4"):
- logfunc("Unsupported version for PhotoData-Photos.sqlite album records with no asset data"
- " from on iOS " + iosversion)
+ logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("14")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date',
@@ -72,62 +96,37 @@ def get_ph20albumrecordsnadphdapsql(files_found, report_folder, seeker, wrap_tex
zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4TableStart'
FROM ZGENERICALBUM zGenAlbum
ORDER BY zGenAlbum.ZSTARTDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7],
- row[8], row[9], row[10], row[11]))
-
- counter += 1
-
- description = 'Parses Basic Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table' \
- ' and supports iOS 11-13. Parses Album records only no asset data being parsed.' \
- ' Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.' \
- ' Use 1505-Shared-Album-1505 in the search to view Shared Albums.' \
- ' Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You' \
- ' Conversation Identifiers. Please see the album type specific scripts to view more data' \
- ' for each album type.'
- report = ArtifactHtmlReport('Ph20.1-Album Records NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph20.1-Album Records NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zGenAlbum-Start Date',
- 'zGenAlbum-End Date',
- 'zGenAlbum-Album Kind',
- 'zGenAlbum-Title',
- 'zGenAlbum-Import Session ID',
- 'zGenAlbum-Cached Photos Count',
- 'zGenAlbum-Cached Videos Count',
- 'zGenAlbum-Cached Count',
- 'zGenAlbum-Trashed State',
- 'zGenAlbum-Trash Date',
- 'zGenAlbum-UUID',
- 'zGenAlbum-Cloud GUID')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph20.1-Album Records NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph20.1-Album Records NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Album Records with No Asset Data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7],
+ row[8], row[9], row[10], row[11]))
+
+ data_headers = (('zGenAlbum-Start Date', 'datetime'),
+ ('zGenAlbum-End Date', 'datetime'),
+ 'zGenAlbum-Album Kind',
+ 'zGenAlbum-Title',
+ 'zGenAlbum-Import Session ID',
+ 'zGenAlbum-Cached Photos Count',
+ 'zGenAlbum-Cached Videos Count',
+ 'zGenAlbum-Cached Count',
+ 'zGenAlbum-Trashed State',
+ ('zGenAlbum-Trash Date', 'datetime'),
+ 'zGenAlbum-UUID',
+ 'zGenAlbum-Cloud GUID')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date',
DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
@@ -163,64 +162,39 @@ def get_ph20albumrecordsnadphdapsql(files_found, report_folder, seeker, wrap_tex
zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4TableStart'
FROM ZGENERICALBUM zGenAlbum
ORDER BY zGenAlbum.ZCREATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7],
- row[8], row[9], row[10], row[11], row[12], row[13]))
-
- counter += 1
-
- description = 'Parses Basic Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table' \
- ' and supports iOS 14. Parses Album records only no asset data being parsed.' \
- ' Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.' \
- ' Use 1505-Shared-Album-1505 in the search to view Shared Albums.' \
- ' Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You' \
- ' Conversation Identifiers. Please see the album type specific scripts to view more data' \
- ' for each album type.'
- report = ArtifactHtmlReport('Ph20.1-Album Records NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph20.1-Album Records NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zGenAlbum-Creation Date',
- 'zGenAlbum-Start Date',
- 'zGenAlbum-End Date',
- 'zGenAlbum-Album Kind',
- 'zGenAlbum-Title',
- 'zGenAlbum-Import Session ID',
- 'zGenAlbum-Creator Bundle Identifier',
- 'zGenAlbum-Cached Photos Count',
- 'zGenAlbum-Cached Videos Count',
- 'zGenAlbum-Cached Count',
- 'zGenAlbum-Trashed State',
- 'zGenAlbum-Trash Date',
- 'zGenAlbum-UUID',
- 'zGenAlbum-Cloud GUID')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph20.1-Album Records NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph20.1-Album Records NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Album Records No Asset Data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7],
+ row[8], row[9], row[10], row[11], row[12], row[13]))
+
+ data_headers = (('zGenAlbum-Creation Date', 'datetime'),
+ ('zGenAlbum-Start Date', 'datetime'),
+ ('zGenAlbum-End Date', 'datetime'),
+ 'zGenAlbum-Album Kind',
+ 'zGenAlbum-Title',
+ 'zGenAlbum-Import Session ID',
+ 'zGenAlbum-Creator Bundle Identifier',
+ 'zGenAlbum-Cached Photos Count',
+ 'zGenAlbum-Cached Videos Count',
+ 'zGenAlbum-Cached Count',
+ 'zGenAlbum-Trashed State',
+ ('zGenAlbum-Trash Date', 'datetime'),
+ 'zGenAlbum-UUID',
+ 'zGenAlbum-Cloud GUID')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date',
DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
@@ -256,63 +230,39 @@ def get_ph20albumrecordsnadphdapsql(files_found, report_folder, seeker, wrap_tex
zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4TableStart'
FROM ZGENERICALBUM zGenAlbum
ORDER BY zGenAlbum.ZCREATIONDATE
- """)
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7],
- row[8], row[9], row[10], row[11], row[12], row[13]))
-
- counter += 1
-
- description = 'Parses Basic Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table' \
- ' and supports iOS 15-17. Parses Album records only no asset data being parsed.' \
- ' Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.' \
- ' Use 1505-Shared-Album-1505 in the search to view Shared Albums.' \
- ' Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You' \
- ' Conversation Identifiers. Please see the album type specific scripts to view more data' \
- ' for each album type.'
- report = ArtifactHtmlReport('Ph20.1-Album Records NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph20.1-Album Records NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zGenAlbum-Creation Date',
- 'zGenAlbum-Start Date',
- 'zGenAlbum-End Date',
- 'zGenAlbum-Album Kind',
- 'zGenAlbum-Title',
- 'zGenAlbum-Import Session ID',
- 'zGenAlbum-Imported by Bundle Identifier',
- 'zGenAlbum-Cached Photos Count',
- 'zGenAlbum-Cached Videos Count',
- 'zGenAlbum-Cached Count',
- 'zGenAlbum-Trashed State',
- 'zGenAlbum-Trash Date',
- 'zGenAlbum-UUID',
- 'zGenAlbum-Cloud GUID')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph20.1-Album Records NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph20.1-Album Records NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Album Records with No Asset Data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7],
+ row[8], row[9], row[10], row[11], row[12], row[13]))
+
+ data_headers = (('zGenAlbum-Creation Date', 'datetime'),
+ ('zGenAlbum-Start Date', 'datetime'),
+ ('zGenAlbum-End Date', 'datetime'),
+ 'zGenAlbum-Album Kind',
+ 'zGenAlbum-Title',
+ 'zGenAlbum-Import Session ID',
+ 'zGenAlbum-Imported by Bundle Identifier',
+ 'zGenAlbum-Cached Photos Count',
+ 'zGenAlbum-Cached Videos Count',
+ 'zGenAlbum-Cached Count',
+ 'zGenAlbum-Trashed State',
+ ('zGenAlbum-Trash Date', 'datetime'),
+ 'zGenAlbum-UUID',
+ 'zGenAlbum-Cloud GUID')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date',
DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
@@ -348,77 +298,53 @@ def get_ph20albumrecordsnadphdapsql(files_found, report_folder, seeker, wrap_tex
zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4TableStart'
FROM ZGENERICALBUM zGenAlbum
ORDER BY zGenAlbum.ZCREATIONDATE
- """)
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7],
- row[8], row[9], row[10], row[11], row[12], row[13]))
-
- counter += 1
-
- description = 'Parses Basic Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table' \
- ' and supports iOS 18. Parses Album records only no asset data being parsed.' \
- ' Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.' \
- ' Use 1505-Shared-Album-1505 in the search to view Shared Albums.' \
- ' Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You' \
- ' Conversation Identifiers. Please see the album type specific scripts to view more data' \
- ' for each album type.'
- report = ArtifactHtmlReport('Ph20.1-Album Records NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph20.1-Album Records NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zGenAlbum-Creation Date-0',
- 'zGenAlbum-Start Date-1',
- 'zGenAlbum-End Date-2',
- 'zGenAlbum-Album Kind-3',
- 'zGenAlbum-Title-4',
- 'zGenAlbum-Import Session ID-5',
- 'zGenAlbum-Imported by Bundle Identifier-6',
- 'zGenAlbum-Cached Photos Count-7',
- 'zGenAlbum-Cached Videos Count-8',
- 'zGenAlbum-Cached Count-9',
- 'zGenAlbum-Trashed State-10',
- 'zGenAlbum-Trash Date-11',
- 'zGenAlbum-UUID-12',
- 'zGenAlbum-Cloud GUID-13')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph20.1-Album Records NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph20.1-Album Records NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Album Records with No Asset Data')
-
- db.close()
- return
-
-
-def get_ph20albumrecrodsnadsyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7],
+ row[8], row[9], row[10], row[11], row[12], row[13]))
+
+ data_headers = (('zGenAlbum-Creation Date-0', 'datetime'),
+ ('zGenAlbum-Start Date-1', 'datetime'),
+ ('zGenAlbum-End Date-2', 'datetime'),
+ 'zGenAlbum-Album Kind-3',
+ 'zGenAlbum-Title-4',
+ 'zGenAlbum-Import Session ID-5',
+ 'zGenAlbum-Imported by Bundle Identifier-6',
+ 'zGenAlbum-Cached Photos Count-7',
+ 'zGenAlbum-Cached Videos Count-8',
+ 'zGenAlbum-Cached Count-9',
+ 'zGenAlbum-Trashed State-10',
+ ('zGenAlbum-Trash Date-11', 'datetime'),
+ 'zGenAlbum-UUID-12',
+ 'zGenAlbum-Cloud GUID-13')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
+@artifact_processor
+def Ph20_2AlbumRecordswithNADSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
+
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("10.3.4"):
- logfunc("Unsupported version for Syndication.photoslibrary-database-Photos.sqlite"
- " album records with no asset data on iOS " + iosversion)
+ logfunc("Unsupported version for Syndication.photoslibrary iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("14")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date',
@@ -452,64 +378,37 @@ def get_ph20albumrecrodsnadsyndpl(files_found, report_folder, seeker, wrap_text,
zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4TableStart'
FROM ZGENERICALBUM zGenAlbum
ORDER BY zGenAlbum.ZSTARTDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7],
- row[8], row[9], row[10], row[11]))
-
- counter += 1
-
- description = 'Parses Basic Album records found in the Syndication.photoslibrary-database-Photos.sqlite' \
- ' ZGENERICALBUM Table and supports iOS 11-13.' \
- ' Parses Album records only no asset data being parsed.' \
- ' Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.' \
- ' Use 1505-Shared-Album-1505 in the search to view Shared Albums.' \
- ' Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You' \
- ' Conversation Identifiers. Please see the album type specific scripts to view more data' \
- ' for each album type.'
- report = ArtifactHtmlReport('Ph20.2-Album Records NAD-SyndPL')
- report.start_artifact_report(report_folder, 'Ph20.2-Album Records NAD-SyndPL', description)
- report.add_script()
- data_headers = ('zGenAlbum-Start Date',
- 'zGenAlbum-End Date',
- 'zGenAlbum-Album Kind',
- 'zGenAlbum-Title',
- 'zGenAlbum-Import Session ID',
- 'zGenAlbum-Cached Photos Count',
- 'zGenAlbum-Cached Videos Count',
- 'zGenAlbum-Cached Count',
- 'zGenAlbum-Trashed State',
- 'zGenAlbum-Trash Date',
- 'zGenAlbum-UUID',
- 'zGenAlbum-Cloud GUID')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph20.2-Album Records NAD-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph20.2-Album Records NAD-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite'
- ' Album Records with No Asset Data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7],
+ row[8], row[9], row[10], row[11]))
+
+ data_headers = (('zGenAlbum-Start Date', 'datetime'),
+ ('zGenAlbum-End Date', 'datetime'),
+ 'zGenAlbum-Album Kind',
+ 'zGenAlbum-Title',
+ 'zGenAlbum-Import Session ID',
+ 'zGenAlbum-Cached Photos Count',
+ 'zGenAlbum-Cached Videos Count',
+ 'zGenAlbum-Cached Count',
+ 'zGenAlbum-Trashed State',
+ ('zGenAlbum-Trash Date', 'datetime'),
+ 'zGenAlbum-UUID',
+ 'zGenAlbum-Cloud GUID')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date',
DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
@@ -545,66 +444,39 @@ def get_ph20albumrecrodsnadsyndpl(files_found, report_folder, seeker, wrap_text,
zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4TableStart'
FROM ZGENERICALBUM zGenAlbum
ORDER BY zGenAlbum.ZCREATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7],
- row[8], row[9], row[10], row[11], row[12], row[13]))
-
- counter += 1
-
- description = 'Parses Basic Album records found in the Syndication.photoslibrary-database-Photos.sqlite' \
- ' ZGENERICALBUM Table and supports iOS 14.' \
- ' Parses Album records only no asset data being parsed.' \
- ' Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.' \
- ' Use 1505-Shared-Album-1505 in the search to view Shared Albums.' \
- ' Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You' \
- ' Conversation Identifiers. Please see the album type specific scripts to view more data' \
- ' for each album type.'
- report = ArtifactHtmlReport('Ph20.2-Album Records NAD-SyndPL')
- report.start_artifact_report(report_folder, 'Ph20.2-Album Records NAD-SyndPL', description)
- report.add_script()
- data_headers = ('zGenAlbum-Creation Date',
- 'zGenAlbum-Start Date',
- 'zGenAlbum-End Date',
- 'zGenAlbum-Album Kind',
- 'zGenAlbum-Title',
- 'zGenAlbum-Import Session ID',
- 'zGenAlbum-Creator Bundle Identifier',
- 'zGenAlbum-Cached Photos Count',
- 'zGenAlbum-Cached Videos Count',
- 'zGenAlbum-Cached Count',
- 'zGenAlbum-Trashed State',
- 'zGenAlbum-Trash Date',
- 'zGenAlbum-UUID',
- 'zGenAlbum-Cloud GUID')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph20.2-Album Records NAD-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph20.2-Album Records NAD-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite'
- ' Album Records No Asset Data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7],
+ row[8], row[9], row[10], row[11], row[12], row[13]))
+
+ data_headers = (('zGenAlbum-Creation Date', 'datetime'),
+ ('zGenAlbum-Start Date', 'datetime'),
+ ('zGenAlbum-End Date', 'datetime'),
+ 'zGenAlbum-Album Kind',
+ 'zGenAlbum-Title',
+ 'zGenAlbum-Import Session ID',
+ 'zGenAlbum-Creator Bundle Identifier',
+ 'zGenAlbum-Cached Photos Count',
+ 'zGenAlbum-Cached Videos Count',
+ 'zGenAlbum-Cached Count',
+ 'zGenAlbum-Trashed State',
+ ('zGenAlbum-Trash Date', 'datetime'),
+ 'zGenAlbum-UUID',
+ 'zGenAlbum-Cloud GUID')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date',
DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
@@ -640,65 +512,39 @@ def get_ph20albumrecrodsnadsyndpl(files_found, report_folder, seeker, wrap_text,
zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4TableStart'
FROM ZGENERICALBUM zGenAlbum
ORDER BY zGenAlbum.ZCREATIONDATE
- """)
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7],
- row[8], row[9], row[10], row[11], row[12], row[13]))
-
- counter += 1
-
- description = 'Parses Basic Album records found in the Syndication.photoslibrary-database-Photos.sqlite' \
- ' ZGENERICALBUM Table and supports iOS 15-17.' \
- ' Parses Album records only no asset data being parsed.' \
- ' Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.' \
- ' Use 1505-Shared-Album-1505 in the search to view Shared Albums.' \
- ' Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You' \
- ' Conversation Identifiers. Please see the album type specific scripts to view more data' \
- ' for each album type.'
- report = ArtifactHtmlReport('Ph20.2-Album Records NAD-SyndPL')
- report.start_artifact_report(report_folder, 'Ph20.2-Album Records NAD-SyndPL', description)
- report.add_script()
- data_headers = ('zGenAlbum-Creation Date',
- 'zGenAlbum-Start Date',
- 'zGenAlbum-End Date',
- 'zGenAlbum-Album Kind',
- 'zGenAlbum-Title',
- 'zGenAlbum-Import Session ID',
- 'zGenAlbum-Imported by Bundle Identifier',
- 'zGenAlbum-Cached Photos Count',
- 'zGenAlbum-Cached Videos Count',
- 'zGenAlbum-Cached Count',
- 'zGenAlbum-Trashed State',
- 'zGenAlbum-Trash Date',
- 'zGenAlbum-UUID',
- 'zGenAlbum-Cloud GUID')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph20.2-Album Records NAD-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph20.2-Album Records NAD-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite'
- ' Album Records with No Asset Data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7],
+ row[8], row[9], row[10], row[11], row[12], row[13]))
+
+ data_headers = (('zGenAlbum-Creation Date', 'datetime'),
+ ('zGenAlbum-Start Date', 'datetime'),
+ ('zGenAlbum-End Date', 'datetime'),
+ 'zGenAlbum-Album Kind',
+ 'zGenAlbum-Title',
+ 'zGenAlbum-Import Session ID',
+ 'zGenAlbum-Imported by Bundle Identifier',
+ 'zGenAlbum-Cached Photos Count',
+ 'zGenAlbum-Cached Videos Count',
+ 'zGenAlbum-Cached Count',
+ 'zGenAlbum-Trashed State',
+ ('zGenAlbum-Trash Date', 'datetime'),
+ 'zGenAlbum-UUID',
+ 'zGenAlbum-Cloud GUID')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date',
DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
@@ -734,93 +580,27 @@ def get_ph20albumrecrodsnadsyndpl(files_found, report_folder, seeker, wrap_text,
zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4TableStart'
FROM ZGENERICALBUM zGenAlbum
ORDER BY zGenAlbum.ZCREATIONDATE
- """)
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7],
- row[8], row[9], row[10], row[11], row[12], row[13]))
-
- counter += 1
-
- description = 'Parses Basic Album records found in the Syndication.photoslibrary-database-Photos.sqlite' \
- ' ZGENERICALBUM Table and supports iOS 18.' \
- ' Parses Album records only no asset data being parsed.' \
- ' Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.' \
- ' Use 1505-Shared-Album-1505 in the search to view Shared Albums.' \
- ' Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You' \
- ' Conversation Identifiers. Please see the album type specific scripts to view more data' \
- ' for each album type.'
- report = ArtifactHtmlReport('Ph20.2-Album Records NAD-SyndPL')
- report.start_artifact_report(report_folder, 'Ph20.2-Album Records NAD-SyndPL', description)
- report.add_script()
- data_headers = ('zGenAlbum-Creation Date-0',
- 'zGenAlbum-Start Date-1',
- 'zGenAlbum-End Date-2',
- 'zGenAlbum-Album Kind-3',
- 'zGenAlbum-Title-4',
- 'zGenAlbum-Import Session ID-5',
- 'zGenAlbum-Imported by Bundle Identifier-6',
- 'zGenAlbum-Cached Photos Count-7',
- 'zGenAlbum-Cached Videos Count-8',
- 'zGenAlbum-Cached Count-9',
- 'zGenAlbum-Trashed State-10',
- 'zGenAlbum-Trash Date-11',
- 'zGenAlbum-UUID-12',
- 'zGenAlbum-Cloud GUID-13')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph20.2-Album Records NAD-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph20.2-Album Records NAD-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite'
- ' Album Records with No Asset Data')
-
- db.close()
- return
-
-
-__artifacts_v2__ = {
- 'Ph20-1-Album Records with NAD-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite Ph20.1 Album Records with No Asset Data',
- 'description': 'Parses Basic Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table'
- ' and supports iOS 11-18. Parses Album records only no asset data being parsed.'
- ' Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.'
- ' Use 1505-Shared-Album-1505 in the search to view Shared Albums.'
- ' Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You Conversation Identifiers.'
- ' Please see the album type specific scripts to view more data for each album type.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-12',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-D-Generic_Album_Records-NAD',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph20albumrecordsnadphdapsql'
- },
- 'Ph20-2-Album Records with NAD-SyndPL': {
- 'name': 'SyndPL Photos.sqlite Ph20.2 Album Records with No Asset Data',
- 'description': 'Parses Basic Album records found in the Syndication.photoslibrary-database-Photos.sqlite'
- ' ZGENERICALBUM Table and supports iOS 11-18. Parses Album records only no asset data'
- ' being parsed. Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.'
- ' Use 1505-Shared-Album-1505 in the search to view Shared Albums.'
- ' Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You Conversation Identifiers.'
- ' Please see the album type specific scripts to view more data for each album type.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-12',
- 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite',
- 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts',
- 'notes': '',
- 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',
- 'function': 'get_ph20albumrecrodsnadsyndpl'
- }
-}
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7],
+ row[8], row[9], row[10], row[11], row[12], row[13]))
+
+ data_headers = (('zGenAlbum-Creation Date-0', 'datetime'),
+ ('zGenAlbum-Start Date-1', 'datetime'),
+ ('zGenAlbum-End Date-2', 'datetime'),
+ 'zGenAlbum-Album Kind-3',
+ 'zGenAlbum-Title-4',
+ 'zGenAlbum-Import Session ID-5',
+ 'zGenAlbum-Imported by Bundle Identifier-6',
+ 'zGenAlbum-Cached Photos Count-7',
+ 'zGenAlbum-Cached Videos Count-8',
+ 'zGenAlbum-Cached Count-9',
+ 'zGenAlbum-Trashed State-10',
+ ('zGenAlbum-Trash Date-11', 'datetime'),
+ 'zGenAlbum-UUID-12',
+ 'zGenAlbum-Cloud GUID-13')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph21AlbumsNonSharedNAD.py b/scripts/artifacts/Ph21AlbumsNonSharedNAD.py
index 53280a7c..6d4fc3e4 100644
--- a/scripts/artifacts/Ph21AlbumsNonSharedNAD.py
+++ b/scripts/artifacts/Ph21AlbumsNonSharedNAD.py
@@ -1,41 +1,48 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 2.0
-#
-# Description:
-# Parses Non-Shared Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table and supports iOS 11-18.
-# Parses Non-Shared Album records only no asset data being parsed. This parser will contain parent albums and
-# folders, and associated album data.
-# This parser is based on research and SQLite Queries written by Scott Koenig
-# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347
-#
+__artifacts_v2__ = {
+ 'Ph21NonSharedAlbumRecordswithNADPhDaPsql': {
+ 'name': 'Ph21-Non-Shared Album Records NAD-PhDaPsql',
+ 'description': 'Parses Non-Shared Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table'
+ ' and supports iOS 11-18. Parses Non-Shared Album records only, no asset data being parsed.'
+ ' This parser will contain parent albums and folders, and associated album data.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-D-Generic_Album_Records-NAD',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
+@artifact_processor
+def Ph21NonSharedAlbumRecordswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
-def get_ph21nonsharedalbumsphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("10.3.4"):
- logfunc("Unsupported version for PhotoData-Photos.sqlite Non-Shared Album records with"
- " no asset data from iOS " + iosversion)
+ logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("12")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date',
@@ -176,85 +183,63 @@ def get_ph21nonsharedalbumsphdapsql(files_found, report_folder, seeker, wrap_tex
= zCldShareAlbumInvRec.ZALBUM
WHERE zGenAlbum.ZKIND = 2
ORDER BY zGenAlbum.ZSTARTDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35]))
-
- counter += 1
-
- description = 'Parses Non-Shared Album records found in the PhotoData-Photos.sqlite from' \
- ' ZGENERICALBUM Table and supports iOS 11. Parses Non-Shared Album records only' \
- ' no asset data is being parsed in this parser. This parser will contain parent albums,' \
- ' folders, and associated album data. '
- report = ArtifactHtmlReport('Ph21-Non-Shared Album Records NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph21-Non-Shared Album Records NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zGenAlbum-Start Date',
- 'zGenAlbum-End Date',
- 'ParentzGenAlbum-UUID',
- 'ParentzGenAlbum-Cloud GUID',
- 'ParentzGenAlbum- Title',
- 'zGenAlbum- Title-User&System Applied',
- 'zGenAlbum-UUID',
- 'zGenAlbum-Cloud GUID',
- 'ParentzGenAlbum-Pending Items Count',
- 'ParentzGenAlbum-Pending Items Type',
- 'ParentzGenAlbum-Kind',
- 'ParentzGenAlbum-Cloud-Local-State',
- 'ParentzGenAlbum-Sync Event Order Key',
- 'ParentzGenAlbum-Pinned',
- 'ParentzGenAlbum-Custom Sort Key',
- 'ParentzGenAlbum-Custom Sort Ascending',
- 'ParentzGenAlbum-Custom Query Type',
- 'ParentzGenAlbum-Trashed State',
- 'ParentzGenAlbum-Trash Date',
- 'zGenAlbum-Pending Items Count',
- 'zGenAlbum-Pending Items Type',
- 'zGenAlbum- Cached Photos Count',
- 'zGenAlbum- Cached Videos Count',
- 'zGenAlbum- Cached Count',
- 'zGenAlbum-Has Unseen Content',
- 'zGenAlbum-Unseen Asset Count',
- 'zGenAlbum-zENT- Entity',
- 'zGenAlbum-Album Kind',
- 'zGenAlbum-Cloud_Local_State',
- 'zGenAlbum-Sync Event Order Key',
- 'zGenAlbum-Pinned',
- 'zGenAlbum-Custom Sort Key',
- 'zGenAlbum-Custom Sort Ascending',
- 'zGenAlbum-Custom Query Type',
- 'zGenAlbum-Trashed State',
- 'zGenAlbum-Trash Date')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph21-Non-Shared Album Records NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph21-Non-Shared Album Records NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Non-Shared Album Records with No Asset Data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35]))
+
+ data_headers = (('zGenAlbum-Start Date', 'datetime'),
+ ('zGenAlbum-End Date', 'datetime'),
+ 'ParentzGenAlbum-UUID',
+ 'ParentzGenAlbum-Cloud GUID',
+ 'ParentzGenAlbum- Title',
+ 'zGenAlbum- Title-User&System Applied',
+ 'zGenAlbum-UUID',
+ 'zGenAlbum-Cloud GUID',
+ 'ParentzGenAlbum-Pending Items Count',
+ 'ParentzGenAlbum-Pending Items Type',
+ 'ParentzGenAlbum-Kind',
+ 'ParentzGenAlbum-Cloud-Local-State',
+ 'ParentzGenAlbum-Sync Event Order Key',
+ 'ParentzGenAlbum-Pinned',
+ 'ParentzGenAlbum-Custom Sort Key',
+ 'ParentzGenAlbum-Custom Sort Ascending',
+ 'ParentzGenAlbum-Custom Query Type',
+ 'ParentzGenAlbum-Trashed State',
+ ('ParentzGenAlbum-Trash Date', 'datetime'),
+ 'zGenAlbum-Pending Items Count',
+ 'zGenAlbum-Pending Items Type',
+ 'zGenAlbum- Cached Photos Count',
+ 'zGenAlbum- Cached Videos Count',
+ 'zGenAlbum- Cached Count',
+ 'zGenAlbum-Has Unseen Content',
+ 'zGenAlbum-Unseen Asset Count',
+ 'zGenAlbum-zENT- Entity',
+ 'zGenAlbum-Album Kind',
+ 'zGenAlbum-Cloud_Local_State',
+ 'zGenAlbum-Sync Event Order Key',
+ 'zGenAlbum-Pinned',
+ 'zGenAlbum-Custom Sort Key',
+ 'zGenAlbum-Custom Sort Ascending',
+ 'zGenAlbum-Custom Query Type',
+ 'zGenAlbum-Trashed State',
+ ('zGenAlbum-Trash Date', 'datetime'))
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("12")) & (version.parse(iosversion) < version.parse("13")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date',
@@ -405,88 +390,66 @@ def get_ph21nonsharedalbumsphdapsql(files_found, report_folder, seeker, wrap_tex
= zCldShareAlbumInvRec.ZALBUM
WHERE zGenAlbum.ZKIND = 2
ORDER BY zGenAlbum.ZSTARTDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37]))
-
- counter += 1
-
- description = 'Parses Non-Shared Album records found in the PhotoData-Photos.sqlite from' \
- ' ZGENERICALBUM Table and supports iOS 12. Parses Non-Shared Album records only' \
- ' no asset data is being parsed in this parser. This parser will contain parent albums,' \
- ' folders, and associated album data. '
- report = ArtifactHtmlReport('Ph21-Non-Shared Album Records NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph21-Non-Shared Album Records NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zGenAlbum-Start Date',
- 'zGenAlbum-End Date',
- 'ParentzGenAlbum-UUID',
- 'ParentzGenAlbum-Cloud GUID',
- 'ParentzGenAlbum- Title',
- 'zGenAlbum- Title-User&System Applied',
- 'zGenAlbum-UUID',
- 'zGenAlbum-Cloud GUID',
- 'ParentzGenAlbum-Pending Items Count',
- 'ParentzGenAlbum-Pending Items Type',
- 'ParentzGenAlbum-Kind',
- 'ParentzGenAlbum-Cloud-Local-State',
- 'ParentzGenAlbum-Sync Event Order Key',
- 'ParentzGenAlbum-Pinned',
- 'ParentzGenAlbum-Custom Sort Key',
- 'ParentzGenAlbum-Custom Sort Ascending',
- 'ParentzGenAlbum-Custom Query Type',
- 'ParentzGenAlbum-Trashed State',
- 'ParentzGenAlbum-Trash Date',
- 'ParentzGenAlbum-Cloud Delete State',
- 'zGenAlbum-Pending Items Count',
- 'zGenAlbum-Pending Items Type',
- 'zGenAlbum- Cached Photos Count',
- 'zGenAlbum- Cached Videos Count',
- 'zGenAlbum- Cached Count',
- 'zGenAlbum-Has Unseen Content',
- 'zGenAlbum-Unseen Asset Count',
- 'zGenAlbum-zENT- Entity',
- 'zGenAlbum-Album Kind',
- 'zGenAlbum-Cloud_Local_State',
- 'zGenAlbum-Sync Event Order Key',
- 'zGenAlbum-Pinned',
- 'zGenAlbum-Custom Sort Key',
- 'zGenAlbum-Custom Sort Ascending',
- 'zGenAlbum-Custom Query Type',
- 'zGenAlbum-Trashed State',
- 'zGenAlbum-Trash Date',
- 'zGenAlbum-Cloud Delete State')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph21-Non-Shared Album Records NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph21-Non-Shared Album Records NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Non-Shared Album Records with No Asset Data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37]))
+
+ data_headers = (('zGenAlbum-Start Date', 'datetime'),
+ ('zGenAlbum-End Date', 'datetime'),
+ 'ParentzGenAlbum-UUID',
+ 'ParentzGenAlbum-Cloud GUID',
+ 'ParentzGenAlbum- Title',
+ 'zGenAlbum- Title-User&System Applied',
+ 'zGenAlbum-UUID',
+ 'zGenAlbum-Cloud GUID',
+ 'ParentzGenAlbum-Pending Items Count',
+ 'ParentzGenAlbum-Pending Items Type',
+ 'ParentzGenAlbum-Kind',
+ 'ParentzGenAlbum-Cloud-Local-State',
+ 'ParentzGenAlbum-Sync Event Order Key',
+ 'ParentzGenAlbum-Pinned',
+ 'ParentzGenAlbum-Custom Sort Key',
+ 'ParentzGenAlbum-Custom Sort Ascending',
+ 'ParentzGenAlbum-Custom Query Type',
+ 'ParentzGenAlbum-Trashed State',
+ ('ParentzGenAlbum-Trash Date', 'datetime'),
+ 'ParentzGenAlbum-Cloud Delete State',
+ 'zGenAlbum-Pending Items Count',
+ 'zGenAlbum-Pending Items Type',
+ 'zGenAlbum- Cached Photos Count',
+ 'zGenAlbum- Cached Videos Count',
+ 'zGenAlbum- Cached Count',
+ 'zGenAlbum-Has Unseen Content',
+ 'zGenAlbum-Unseen Asset Count',
+ 'zGenAlbum-zENT- Entity',
+ 'zGenAlbum-Album Kind',
+ 'zGenAlbum-Cloud_Local_State',
+ 'zGenAlbum-Sync Event Order Key',
+ 'zGenAlbum-Pinned',
+ 'zGenAlbum-Custom Sort Key',
+ 'zGenAlbum-Custom Sort Ascending',
+ 'zGenAlbum-Custom Query Type',
+ 'zGenAlbum-Trashed State',
+ ('zGenAlbum-Trash Date', 'datetime'),
+ 'zGenAlbum-Cloud Delete State')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("13")) & (version.parse(iosversion) < version.parse("14")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date',
DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
@@ -647,91 +610,69 @@ def get_ph21nonsharedalbumsphdapsql(files_found, report_folder, seeker, wrap_tex
= zCldShareAlbumInvRec.ZALBUM
WHERE zGenAlbum.ZKIND = 2
ORDER BY zGenAlbum.ZCREATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40]))
-
- counter += 1
-
- description = 'Parses Non-Shared Album records found in the PhotoData-Photos.sqlite from' \
- ' ZGENERICALBUM Table and supports iOS 13. Parses Non-Shared Album records only' \
- ' no asset data is being parsed in this parser. This parser will contain parent albums,' \
- ' folders, and associated album data. '
- report = ArtifactHtmlReport('Ph21-Non-Shared Album Records NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph21-Non-Shared Album Records NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zGenAlbum-Creation Date',
- 'zGenAlbum-Start Date',
- 'zGenAlbum-End Date',
- 'ParentzGenAlbum-UUID',
- 'ParentzGenAlbum-Cloud GUID',
- 'ParentzGenAlbum- Title',
- 'zGenAlbum- Title-User&System Applied',
- 'zGenAlbum-UUID',
- 'zGenAlbum-Cloud GUID',
- 'ParentzGenAlbum-Pending Items Count',
- 'ParentzGenAlbum-Pending Items Type',
- 'ParentzGenAlbum-Kind',
- 'ParentzGenAlbum-Cloud-Local-State',
- 'ParentzGenAlbum-Sync Event Order Key',
- 'ParentzGenAlbum-Pinned',
- 'ParentzGenAlbum-Custom Sort Key',
- 'ParentzGenAlbum-Custom Sort Ascending',
- 'ParentzGenAlbum-Project Document Type',
- 'ParentzGenAlbum-Custom Query Type',
- 'ParentzGenAlbum-Trashed State',
- 'ParentzGenAlbum-Trash Date',
- 'ParentzGenAlbum-Cloud Delete State',
- 'zGenAlbum-Pending Items Count',
- 'zGenAlbum-Pending Items Type',
- 'zGenAlbum- Cached Photos Count',
- 'zGenAlbum- Cached Videos Count',
- 'zGenAlbum- Cached Count',
- 'zGenAlbum-Has Unseen Content',
- 'zGenAlbum-Unseen Asset Count',
- 'zGenAlbum-zENT- Entity',
- 'zGenAlbum-Album Kind',
- 'zGenAlbum-Cloud_Local_State',
- 'zGenAlbum-Sync Event Order Key',
- 'zGenAlbum-Pinned',
- 'zGenAlbum-Custom Sort Key',
- 'zGenAlbum-Custom Sort Ascending',
- 'zGenAlbum-Project Document Type',
- 'zGenAlbum-Custom Query Type',
- 'zGenAlbum-Trashed State',
- 'zGenAlbum-Trash Date',
- 'zGenAlbum-Cloud Delete State')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph21-Non-Shared Album Records NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph21-Non-Shared Album Records NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Non-Shared Album Records with No Asset Data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40]))
+
+ data_headers = (('zGenAlbum-Creation Date', 'datetime'),
+ ('zGenAlbum-Start Date', 'datetime'),
+ ('zGenAlbum-End Date', 'datetime'),
+ 'ParentzGenAlbum-UUID',
+ 'ParentzGenAlbum-Cloud GUID',
+ 'ParentzGenAlbum- Title',
+ 'zGenAlbum- Title-User&System Applied',
+ 'zGenAlbum-UUID',
+ 'zGenAlbum-Cloud GUID',
+ 'ParentzGenAlbum-Pending Items Count',
+ 'ParentzGenAlbum-Pending Items Type',
+ 'ParentzGenAlbum-Kind',
+ 'ParentzGenAlbum-Cloud-Local-State',
+ 'ParentzGenAlbum-Sync Event Order Key',
+ 'ParentzGenAlbum-Pinned',
+ 'ParentzGenAlbum-Custom Sort Key',
+ 'ParentzGenAlbum-Custom Sort Ascending',
+ 'ParentzGenAlbum-Project Document Type',
+ 'ParentzGenAlbum-Custom Query Type',
+ 'ParentzGenAlbum-Trashed State',
+ ('ParentzGenAlbum-Trash Date', 'datetime'),
+ 'ParentzGenAlbum-Cloud Delete State',
+ 'zGenAlbum-Pending Items Count',
+ 'zGenAlbum-Pending Items Type',
+ 'zGenAlbum- Cached Photos Count',
+ 'zGenAlbum- Cached Videos Count',
+ 'zGenAlbum- Cached Count',
+ 'zGenAlbum-Has Unseen Content',
+ 'zGenAlbum-Unseen Asset Count',
+ 'zGenAlbum-zENT- Entity',
+ 'zGenAlbum-Album Kind',
+ 'zGenAlbum-Cloud_Local_State',
+ 'zGenAlbum-Sync Event Order Key',
+ 'zGenAlbum-Pinned',
+ 'zGenAlbum-Custom Sort Key',
+ 'zGenAlbum-Custom Sort Ascending',
+ 'zGenAlbum-Project Document Type',
+ 'zGenAlbum-Custom Query Type',
+ 'zGenAlbum-Trashed State',
+ ('zGenAlbum-Trash Date', 'datetime'),
+ 'zGenAlbum-Cloud Delete State')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date',
DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
@@ -903,95 +844,73 @@ def get_ph21nonsharedalbumsphdapsql(files_found, report_folder, seeker, wrap_tex
= zCldShareAlbumInvRec.ZALBUM
WHERE zGenAlbum.ZKIND = 2
ORDER BY zGenAlbum.ZCREATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44]))
-
- counter += 1
-
- description = 'Parses Non-Shared Album records found in the PhotoData-Photos.sqlite from' \
- ' ZGENERICALBUM Table and supports iOS 14. Parses Non-Shared Album records only' \
- ' no asset data is being parsed in this parser. This parser will contain parent albums,' \
- ' folders, and associated album data. '
- report = ArtifactHtmlReport('Ph21-Non-Shared Album Records NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph21-Non-Shared Album Records NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zGenAlbum-Creation Date',
- 'zGenAlbum-Start Date',
- 'zGenAlbum-End Date',
- 'ParentzGenAlbum-UUID',
- 'ParentzGenAlbum-Cloud GUID',
- 'ParentzGenAlbum- Title',
- 'zGenAlbum- Title-User&System Applied',
- 'zGenAlbum-UUID',
- 'zGenAlbum-Cloud GUID',
- 'zGenAlbum-Creator Bundle Id',
- 'ParentzGenAlbum-Creation Date',
- 'ParentzGenAlbum-Pending Items Count',
- 'ParentzGenAlbum-Pending Items Type',
- 'ParentzGenAlbum-Kind',
- 'ParentzGenAlbum-Cloud-Local-State',
- 'ParentzGenAlbum-Sync Event Order Key',
- 'ParentzGenAlbum-Pinned',
- 'ParentzGenAlbum-Custom Sort Key',
- 'ParentzGenAlbum-Custom Sort Ascending',
- 'ParentzGenAlbum-Is Prototype',
- 'ParentzGenAlbum-Project Document Type',
- 'ParentzGenAlbum-Custom Query Type',
- 'ParentzGenAlbum-Trashed State',
- 'ParentzGenAlbum-Trash Date',
- 'ParentzGenAlbum-Cloud Delete State',
- 'zGenAlbum-Pending Items Count',
- 'zGenAlbum-Pending Items Type',
- 'zGenAlbum- Cached Photos Count',
- 'zGenAlbum- Cached Videos Count',
- 'zGenAlbum- Cached Count',
- 'zGenAlbum-Has Unseen Content',
- 'zGenAlbum-Unseen Asset Count',
- 'zGenAlbum-zENT- Entity',
- 'zGenAlbum-Album Kind',
- 'zGenAlbum-Cloud_Local_State',
- 'zGenAlbum-Sync Event Order Key',
- 'zGenAlbum-Pinned',
- 'zGenAlbum-Custom Sort Key',
- 'zGenAlbum-Custom Sort Ascending',
- 'zGenAlbum-Is Prototype',
- 'zGenAlbum-Project Document Type',
- 'zGenAlbum-Custom Query Type',
- 'zGenAlbum-Trashed State',
- 'zGenAlbum-Trash Date',
- 'zGenAlbum-Cloud Delete State')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph21-Non-Shared Album Records NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph21-Non-Shared Album Records NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Non-Shared Album Records with No Asset Data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44]))
+
+ data_headers = (('zGenAlbum-Creation Date', 'datetime'),
+ ('zGenAlbum-Start Date', 'datetime'),
+ ('zGenAlbum-End Date', 'datetime'),
+ 'ParentzGenAlbum-UUID',
+ 'ParentzGenAlbum-Cloud GUID',
+ 'ParentzGenAlbum- Title',
+ 'zGenAlbum- Title-User&System Applied',
+ 'zGenAlbum-UUID',
+ 'zGenAlbum-Cloud GUID',
+ 'zGenAlbum-Creator Bundle Id',
+ 'ParentzGenAlbum-Creation Date',
+ 'ParentzGenAlbum-Pending Items Count',
+ 'ParentzGenAlbum-Pending Items Type',
+ 'ParentzGenAlbum-Kind',
+ 'ParentzGenAlbum-Cloud-Local-State',
+ 'ParentzGenAlbum-Sync Event Order Key',
+ 'ParentzGenAlbum-Pinned',
+ 'ParentzGenAlbum-Custom Sort Key',
+ 'ParentzGenAlbum-Custom Sort Ascending',
+ 'ParentzGenAlbum-Is Prototype',
+ 'ParentzGenAlbum-Project Document Type',
+ 'ParentzGenAlbum-Custom Query Type',
+ 'ParentzGenAlbum-Trashed State',
+ ('ParentzGenAlbum-Trash Date', 'datetime'),
+ 'ParentzGenAlbum-Cloud Delete State',
+ 'zGenAlbum-Pending Items Count',
+ 'zGenAlbum-Pending Items Type',
+ 'zGenAlbum- Cached Photos Count',
+ 'zGenAlbum- Cached Videos Count',
+ 'zGenAlbum- Cached Count',
+ 'zGenAlbum-Has Unseen Content',
+ 'zGenAlbum-Unseen Asset Count',
+ 'zGenAlbum-zENT- Entity',
+ 'zGenAlbum-Album Kind',
+ 'zGenAlbum-Cloud_Local_State',
+ 'zGenAlbum-Sync Event Order Key',
+ 'zGenAlbum-Pinned',
+ 'zGenAlbum-Custom Sort Key',
+ 'zGenAlbum-Custom Sort Ascending',
+ 'zGenAlbum-Is Prototype',
+ 'zGenAlbum-Project Document Type',
+ 'zGenAlbum-Custom Query Type',
+ 'zGenAlbum-Trashed State',
+ ('zGenAlbum-Trash Date', 'datetime'),
+ 'zGenAlbum-Cloud Delete State')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date',
DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
@@ -1163,95 +1082,73 @@ def get_ph21nonsharedalbumsphdapsql(files_found, report_folder, seeker, wrap_tex
= zCldShareAlbumInvRec.ZALBUM
WHERE zGenAlbum.ZKIND = 2
ORDER BY zGenAlbum.ZCREATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44]))
+
+ data_headers = (('zGenAlbum-Creation Date', 'datetime'),
+ ('zGenAlbum-Start Date', 'datetime'),
+ ('zGenAlbum-End Date', 'datetime'),
+ 'ParentzGenAlbum-UUID',
+ 'ParentzGenAlbum-Cloud GUID',
+ 'ParentzGenAlbum- Title',
+ 'zGenAlbum- Title-User&System Applied',
+ 'zGenAlbum-UUID',
+ 'zGenAlbum-Cloud GUID',
+ 'zGenAlbum-Imported by Bundle Identifier',
+ ('ParentzGenAlbum-Creation Date', 'datetime'),
+ 'ParentzGenAlbum-Pending Items Count',
+ 'ParentzGenAlbum-Pending Items Type',
+ 'ParentzGenAlbum-Kind',
+ 'ParentzGenAlbum-Cloud-Local-State',
+ 'ParentzGenAlbum-Sync Event Order Key',
+ 'ParentzGenAlbum-Pinned',
+ 'ParentzGenAlbum-Custom Sort Key',
+ 'ParentzGenAlbum-Custom Sort Ascending',
+ 'ParentzGenAlbum-Is Prototype',
+ 'ParentzGenAlbum-Project Document Type',
+ 'ParentzGenAlbum-Custom Query Type',
+ 'ParentzGenAlbum-Trashed State',
+ ('ParentzGenAlbum-Trash Date', 'datetime'),
+ 'ParentzGenAlbum-Cloud Delete State',
+ 'zGenAlbum-Pending Items Count',
+ 'zGenAlbum-Pending Items Type',
+ 'zGenAlbum- Cached Photos Count',
+ 'zGenAlbum- Cached Videos Count',
+ 'zGenAlbum- Cached Count',
+ 'zGenAlbum-Has Unseen Content',
+ 'zGenAlbum-Unseen Asset Count',
+ 'zGenAlbum-zENT- Entity',
+ 'zGenAlbum-Album Kind',
+ 'zGenAlbum-Cloud_Local_State',
+ 'zGenAlbum-Sync Event Order Key',
+ 'zGenAlbum-Pinned',
+ 'zGenAlbum-Custom Sort Key',
+ 'zGenAlbum-Custom Sort Ascending',
+ 'zGenAlbum-Is Prototype',
+ 'zGenAlbum-Project Document Type',
+ 'zGenAlbum-Custom Query Type',
+ 'zGenAlbum-Trashed State',
+ ('zGenAlbum-Trash Date', 'datetime'),
+ 'zGenAlbum-Cloud Delete State')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
+ elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17.6")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44]))
-
- counter += 1
-
- description = 'Parses Non-Shared Album records found in the PhotoData-Photos.sqlite from' \
- ' ZGENERICALBUM Table and supports iOS 15. Parses Non-Shared Album records only' \
- ' no asset data is being parsed in this parser. This parser will contain parent albums,' \
- ' folders, and associated album data. '
- report = ArtifactHtmlReport('Ph21-Non-Shared Album Records NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph21-Non-Shared Album Records NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zGenAlbum-Creation Date',
- 'zGenAlbum-Start Date',
- 'zGenAlbum-End Date',
- 'ParentzGenAlbum-UUID',
- 'ParentzGenAlbum-Cloud GUID',
- 'ParentzGenAlbum- Title',
- 'zGenAlbum- Title-User&System Applied',
- 'zGenAlbum-UUID',
- 'zGenAlbum-Cloud GUID',
- 'zGenAlbum-Imported by Bundle Identifier',
- 'ParentzGenAlbum-Creation Date',
- 'ParentzGenAlbum-Pending Items Count',
- 'ParentzGenAlbum-Pending Items Type',
- 'ParentzGenAlbum-Kind',
- 'ParentzGenAlbum-Cloud-Local-State',
- 'ParentzGenAlbum-Sync Event Order Key',
- 'ParentzGenAlbum-Pinned',
- 'ParentzGenAlbum-Custom Sort Key',
- 'ParentzGenAlbum-Custom Sort Ascending',
- 'ParentzGenAlbum-Is Prototype',
- 'ParentzGenAlbum-Project Document Type',
- 'ParentzGenAlbum-Custom Query Type',
- 'ParentzGenAlbum-Trashed State',
- 'ParentzGenAlbum-Trash Date',
- 'ParentzGenAlbum-Cloud Delete State',
- 'zGenAlbum-Pending Items Count',
- 'zGenAlbum-Pending Items Type',
- 'zGenAlbum- Cached Photos Count',
- 'zGenAlbum- Cached Videos Count',
- 'zGenAlbum- Cached Count',
- 'zGenAlbum-Has Unseen Content',
- 'zGenAlbum-Unseen Asset Count',
- 'zGenAlbum-zENT- Entity',
- 'zGenAlbum-Album Kind',
- 'zGenAlbum-Cloud_Local_State',
- 'zGenAlbum-Sync Event Order Key',
- 'zGenAlbum-Pinned',
- 'zGenAlbum-Custom Sort Key',
- 'zGenAlbum-Custom Sort Ascending',
- 'zGenAlbum-Is Prototype',
- 'zGenAlbum-Project Document Type',
- 'zGenAlbum-Custom Query Type',
- 'zGenAlbum-Trashed State',
- 'zGenAlbum-Trash Date',
- 'zGenAlbum-Cloud Delete State')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph21-Non-Shared Album Records NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph21-Non-Shared Album Records NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Non-Shared Album Records with No Asset Data')
-
- db.close()
- return
-
- elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
-
- cursor.execute("""
+ query = '''
SELECT
DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date',
DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
@@ -1441,99 +1338,77 @@ def get_ph21nonsharedalbumsphdapsql(files_found, report_folder, seeker, wrap_tex
= zCldShareAlbumInvRec.ZALBUM
WHERE zGenAlbum.ZKIND = 2
ORDER BY zGenAlbum.ZCREATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47]))
+
+ data_headers = (('zGenAlbum-Creation Date-0', 'datetime'),
+ ('zGenAlbum-Start Date-1', 'datetime'),
+ ('zGenAlbum-End Date-2', 'datetime'),
+ 'ParentzGenAlbum-UUID-3',
+ 'ParentzGenAlbum-Cloud GUID-4',
+ 'ParentzGenAlbum- Title-5',
+ 'zGenAlbum- Title-User&System Applied-6',
+ 'zGenAlbum-UUID-7',
+ 'zGenAlbum-Cloud GUID-8',
+ 'zGenAlbum-Imported by Bundle Identifier-9',
+ ('ParentzGenAlbum-Creation Date-10', 'datetime'),
+ 'ParentzGenAlbum-Pending Items Count-11',
+ 'ParentzGenAlbum-Pending Items Type-12',
+ 'ParentzGenAlbum-Kind-13',
+ 'ParentzGenAlbum-Cloud-Local-State-14',
+ 'ParentzGenAlbum-Sync Event Order Key-15',
+ 'ParentzGenAlbum-Pinned-16',
+ 'ParentzGenAlbum-Custom Sort Key-17',
+ 'ParentzGenAlbum-Custom Sort Ascending-18',
+ 'ParentzGenAlbum-Is Prototype-19',
+ 'ParentzGenAlbum-Project Document Type-20',
+ 'ParentzGenAlbum-Custom Query Type-21',
+ 'ParentzGenAlbum-Trashed State-22',
+ ('ParentzGenAlbum-Trash Date-23', 'datetime'),
+ 'ParentzGenAlbum-Cloud Delete State-24',
+ 'zGenAlbum-Pending Items Count-25',
+ 'zGenAlbum-Pending Items Type-26',
+ 'zGenAlbum- Cached Photos Count-27',
+ 'zGenAlbum- Cached Videos Count-28',
+ 'zGenAlbum- Cached Count-29',
+ 'zGenAlbum-Has Unseen Content-30',
+ 'zGenAlbum-Unseen Asset Count-31',
+ 'zGenAlbum-zENT- Entity-32',
+ 'zGenAlbum-Album Kind-33',
+ 'zGenAlbum-Cloud_Local_State-34',
+ 'zGenAlbum-Sync Event Order Key-35',
+ 'zGenAlbum-Pinned-36',
+ 'zGenAlbum-Custom Sort Key-37',
+ 'zGenAlbum-Custom Sort Ascending-38',
+ 'zGenAlbum-Is Prototype-39',
+ 'zGenAlbum-Project Document Type-40',
+ 'zGenAlbum-Custom Query Type-41',
+ 'zGenAlbum-Trashed State-42',
+ ('zGenAlbum-Trash Date-43', 'datetime'),
+ 'zGenAlbum-Cloud Delete State-44',
+ 'zGenAlbum-Search Index Rebuild State-45',
+ 'zGenAlbum-Duplicate Type-46',
+ 'zGenAlbum-Privacy State-47')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
+ elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47]))
-
- counter += 1
-
- description = 'Parses Non-Shared Album records found in the PhotoData-Photos.sqlite from' \
- ' ZGENERICALBUM Table and supports iOS 16-17. Parses Non-Shared Album records only' \
- ' no asset data is being parsed in this parser. This parser will contain parent albums,' \
- ' folders, and associated album data. '
- report = ArtifactHtmlReport('Ph21-Non-Shared Album Records NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph21-Non-Shared Album Records NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zGenAlbum-Creation Date-0',
- 'zGenAlbum-Start Date-1',
- 'zGenAlbum-End Date-2',
- 'ParentzGenAlbum-UUID-3',
- 'ParentzGenAlbum-Cloud GUID-4',
- 'ParentzGenAlbum- Title-5',
- 'zGenAlbum- Title-User&System Applied-6',
- 'zGenAlbum-UUID-7',
- 'zGenAlbum-Cloud GUID-8',
- 'zGenAlbum-Imported by Bundle Identifier-9',
- 'ParentzGenAlbum-Creation Date-10',
- 'ParentzGenAlbum-Pending Items Count-11',
- 'ParentzGenAlbum-Pending Items Type-12',
- 'ParentzGenAlbum-Kind-13',
- 'ParentzGenAlbum-Cloud-Local-State-14',
- 'ParentzGenAlbum-Sync Event Order Key-15',
- 'ParentzGenAlbum-Pinned-16',
- 'ParentzGenAlbum-Custom Sort Key-17',
- 'ParentzGenAlbum-Custom Sort Ascending-18',
- 'ParentzGenAlbum-Is Prototype-19',
- 'ParentzGenAlbum-Project Document Type-20',
- 'ParentzGenAlbum-Custom Query Type-21',
- 'ParentzGenAlbum-Trashed State-22',
- 'ParentzGenAlbum-Trash Date-23',
- 'ParentzGenAlbum-Cloud Delete State-24',
- 'zGenAlbum-Pending Items Count-25',
- 'zGenAlbum-Pending Items Type-26',
- 'zGenAlbum- Cached Photos Count-27',
- 'zGenAlbum- Cached Videos Count-28',
- 'zGenAlbum- Cached Count-29',
- 'zGenAlbum-Has Unseen Content-30',
- 'zGenAlbum-Unseen Asset Count-31',
- 'zGenAlbum-zENT- Entity-32',
- 'zGenAlbum-Album Kind-33',
- 'zGenAlbum-Cloud_Local_State-34',
- 'zGenAlbum-Sync Event Order Key-35',
- 'zGenAlbum-Pinned-36',
- 'zGenAlbum-Custom Sort Key-37',
- 'zGenAlbum-Custom Sort Ascending-38',
- 'zGenAlbum-Is Prototype-39',
- 'zGenAlbum-Project Document Type-40',
- 'zGenAlbum-Custom Query Type-41',
- 'zGenAlbum-Trashed State-42',
- 'zGenAlbum-Trash Date-43',
- 'zGenAlbum-Cloud Delete State-44',
- 'zGenAlbum-Search Index Rebuild State-45',
- 'zGenAlbum-Duplicate Type-46',
- 'zGenAlbum-Privacy State-47')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph21-Non-Shared Album Records NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph21-Non-Shared Album Records NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Non-Shared Album Records with No Asset Data')
-
- db.close()
- return
-
- elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
- cursor.execute("""
+ query = '''
SELECT
DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date',
DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
@@ -1717,113 +1592,331 @@ def get_ph21nonsharedalbumsphdapsql(files_found, report_folder, seeker, wrap_tex
END AS 'zGenAlbum-Privacy State'
FROM ZGENERICALBUM zGenAlbum
LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER
- LEFT JOIN Z_30ALBUMLISTS z30AlbumLists ON z30AlbumLists.Z_30ALBUMS = zGenAlbum.Z_PK
- LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z30AlbumLists.Z_2ALBUMLISTS
+ LEFT JOIN Z_28ALBUMLISTS z28AlbumLists ON z28AlbumLists.Z_28ALBUMS = zGenAlbum.Z_PK
+ LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z28AlbumLists.Z_2ALBUMLISTS
LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON zGenAlbum.Z_PK
= zCldShareAlbumInvRec.ZALBUM
WHERE zGenAlbum.ZKIND = 2
ORDER BY zGenAlbum.ZCREATIONDATE
- """)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47]))
+
+ data_headers = (('zGenAlbum-Creation Date-0', 'datetime'),
+ ('zGenAlbum-Start Date-1', 'datetime'),
+ ('zGenAlbum-End Date-2', 'datetime'),
+ 'ParentzGenAlbum-UUID-3',
+ 'ParentzGenAlbum-Cloud GUID-4',
+ 'ParentzGenAlbum- Title-5',
+ 'zGenAlbum- Title-User&System Applied-6',
+ 'zGenAlbum-UUID-7',
+ 'zGenAlbum-Cloud GUID-8',
+ 'zGenAlbum-Imported by Bundle Identifier-9',
+ ('ParentzGenAlbum-Creation Date-10', 'datetime'),
+ 'ParentzGenAlbum-Pending Items Count-11',
+ 'ParentzGenAlbum-Pending Items Type-12',
+ 'ParentzGenAlbum-Kind-13',
+ 'ParentzGenAlbum-Cloud-Local-State-14',
+ 'ParentzGenAlbum-Sync Event Order Key-15',
+ 'ParentzGenAlbum-Pinned-16',
+ 'ParentzGenAlbum-Custom Sort Key-17',
+ 'ParentzGenAlbum-Custom Sort Ascending-18',
+ 'ParentzGenAlbum-Is Prototype-19',
+ 'ParentzGenAlbum-Project Document Type-20',
+ 'ParentzGenAlbum-Custom Query Type-21',
+ 'ParentzGenAlbum-Trashed State-22',
+ ('ParentzGenAlbum-Trash Date-23', 'datetime'),
+ 'ParentzGenAlbum-Cloud Delete State-24',
+ 'zGenAlbum-Pending Items Count-25',
+ 'zGenAlbum-Pending Items Type-26',
+ 'zGenAlbum- Cached Photos Count-27',
+ 'zGenAlbum- Cached Videos Count-28',
+ 'zGenAlbum- Cached Count-29',
+ 'zGenAlbum-Has Unseen Content-30',
+ 'zGenAlbum-Unseen Asset Count-31',
+ 'zGenAlbum-zENT- Entity-32',
+ 'zGenAlbum-Album Kind-33',
+ 'zGenAlbum-Cloud_Local_State-34',
+ 'zGenAlbum-Sync Event Order Key-35',
+ 'zGenAlbum-Pinned-36',
+ 'zGenAlbum-Custom Sort Key-37',
+ 'zGenAlbum-Custom Sort Ascending-38',
+ 'zGenAlbum-Is Prototype-39',
+ 'zGenAlbum-Project Document Type-40',
+ 'zGenAlbum-Custom Query Type-41',
+ 'zGenAlbum-Trashed State-42',
+ ('zGenAlbum-Trash Date-43', 'datetime'),
+ 'zGenAlbum-Cloud Delete State-44',
+ 'zGenAlbum-Search Index Rebuild State-45',
+ 'zGenAlbum-Duplicate Type-46',
+ 'zGenAlbum-Privacy State-47')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
+ elif version.parse(iosversion) >= version.parse("18"):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47]))
-
- counter += 1
-
- description = 'Parses Non-Shared Album records found in the PhotoData-Photos.sqlite from' \
- ' ZGENERICALBUM Table and supports iOS 18. Parses Non-Shared Album records only' \
- ' no asset data is being parsed in this parser. This parser will contain parent albums,' \
- ' folders, and associated album data. '
- report = ArtifactHtmlReport('Ph21-Non-Shared Album Records NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph21-Non-Shared Album Records NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zGenAlbum-Creation Date-0',
- 'zGenAlbum-Start Date-1',
- 'zGenAlbum-End Date-2',
- 'ParentzGenAlbum-UUID-3',
- 'ParentzGenAlbum-Cloud GUID-4',
- 'ParentzGenAlbum- Title-5',
- 'zGenAlbum- Title-User&System Applied-6',
- 'zGenAlbum-UUID-7',
- 'zGenAlbum-Cloud GUID-8',
- 'zGenAlbum-Imported by Bundle Identifier-9',
- 'ParentzGenAlbum-Creation Date-10',
- 'ParentzGenAlbum-Pending Items Count-11',
- 'ParentzGenAlbum-Pending Items Type-12',
- 'ParentzGenAlbum-Kind-13',
- 'ParentzGenAlbum-Cloud-Local-State-14',
- 'ParentzGenAlbum-Sync Event Order Key-15',
- 'ParentzGenAlbum-Pinned-16',
- 'ParentzGenAlbum-Custom Sort Key-17',
- 'ParentzGenAlbum-Custom Sort Ascending-18',
- 'ParentzGenAlbum-Is Prototype-19',
- 'ParentzGenAlbum-Project Document Type-20',
- 'ParentzGenAlbum-Custom Query Type-21',
- 'ParentzGenAlbum-Trashed State-22',
- 'ParentzGenAlbum-Trash Date-23',
- 'ParentzGenAlbum-Cloud Delete State-24',
- 'zGenAlbum-Pending Items Count-25',
- 'zGenAlbum-Pending Items Type-26',
- 'zGenAlbum- Cached Photos Count-27',
- 'zGenAlbum- Cached Videos Count-28',
- 'zGenAlbum- Cached Count-29',
- 'zGenAlbum-Has Unseen Content-30',
- 'zGenAlbum-Unseen Asset Count-31',
- 'zGenAlbum-zENT- Entity-32',
- 'zGenAlbum-Album Kind-33',
- 'zGenAlbum-Cloud_Local_State-34',
- 'zGenAlbum-Sync Event Order Key-35',
- 'zGenAlbum-Pinned-36',
- 'zGenAlbum-Custom Sort Key-37',
- 'zGenAlbum-Custom Sort Ascending-38',
- 'zGenAlbum-Is Prototype-39',
- 'zGenAlbum-Project Document Type-40',
- 'zGenAlbum-Custom Query Type-41',
- 'zGenAlbum-Trashed State-42',
- 'zGenAlbum-Trash Date-43',
- 'zGenAlbum-Cloud Delete State-44',
- 'zGenAlbum-Search Index Rebuild State-45',
- 'zGenAlbum-Duplicate Type-46',
- 'zGenAlbum-Privacy State-47')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph21-Non-Shared Album Records NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph21-Non-Shared Album Records NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Non-Shared Album Records with No Asset Data')
-
- db.close()
- return
-
-__artifacts_v2__ = {
- 'Ph21-Non-Shared Album Records with NAD-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite Ph21 Non-Shared Album Records with No Asset Data',
- 'description': 'Parses Non-Shared Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table'
- ' and supports iOS 11-18. Parses Non-Shared Album records only, no asset data being parsed.'
- ' This parser will contain parent albums and folders, and associated album data.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-12',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-D-Generic_Album_Records-NAD',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph21nonsharedalbumsphdapsql'
- }
-}
+ query = '''
+ SELECT
+ DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date',
+ DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
+ DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date',
+ ParentzGenAlbum.ZUUID AS 'ParentzGenAlbum-UUID',
+ ParentzGenAlbum.ZCLOUDGUID AS 'ParentzGenAlbum-Cloud GUID',
+ ParentzGenAlbum.ZTITLE AS 'ParentzGenAlbum- Title',
+ zGenAlbum.ZTITLE AS 'zGenAlbum- Title-User&System Applied',
+ zGenAlbum.ZUUID AS 'zGenAlbum-UUID',
+ zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID',
+ zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier',
+ DateTime(ParentzGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum-Creation Date',
+ ParentzGenAlbum.ZPENDINGITEMSCOUNT AS 'ParentzGenAlbum-Pending Items Count',
+ CASE ParentzGenAlbum.ZPENDINGITEMSTYPE
+ WHEN 1 THEN 'No-1'
+ WHEN 24 THEN '24-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZPENDINGITEMSTYPE || ''
+ END AS 'ParentzGenAlbum-Pending Items Type',
+ CASE ParentzGenAlbum.ZKIND
+ WHEN 2 THEN '2-Non-Shared-Album-2'
+ WHEN 1505 THEN '1505-Shared-Album-1505'
+ WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT'
+ WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT'
+ WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509'
+ WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510'
+ WHEN 3571 THEN '3571-Progress-Sync-3571'
+ WHEN 3572 THEN '3572-Progress-OTA-Restore-3572'
+ WHEN 3573 THEN '3573-Progress-FS-Import-3573'
+ WHEN 3998 THEN '3998-Project Root Folder-3998'
+ WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999'
+ WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZKIND || ''
+ END AS 'ParentzGenAlbum-Kind',
+ CASE ParentzGenAlbum.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0'
+ WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDLOCALSTATE || ''
+ END AS 'ParentzGenAlbum-Cloud-Local-State',
+ ParentzGenAlbum.ZSYNCEVENTORDERKEY AS 'ParentzGenAlbum-Sync Event Order Key',
+ CASE ParentzGenAlbum.ZISPINNED
+ WHEN 0 THEN '0-ParentzGenAlbum Not Pinned-0'
+ WHEN 1 THEN '1-ParentzGenAlbum Pinned-1'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZISPINNED || ''
+ END AS 'ParentzGenAlbum-Pinned',
+ CASE ParentzGenAlbum.ZCUSTOMSORTKEY
+ WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT'
+ WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT'
+ WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMSORTKEY || ''
+ END AS 'ParentzGenAlbum-Custom Sort Key',
+ CASE ParentzGenAlbum.ZCUSTOMSORTASCENDING
+ WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0'
+ WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMSORTASCENDING || ''
+ END AS 'ParentzGenAlbum-Custom Sort Ascending',
+ CASE ParentzGenAlbum.ZISPROTOTYPE
+ WHEN 0 THEN '0-ParentzGenAlbum Not Prototype-0'
+ WHEN 1 THEN '1-ParentzGenAlbum Prototype-1'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZISPROTOTYPE || ''
+ END AS 'ParentzGenAlbum-Is Prototype',
+ CASE ParentzGenAlbum.ZPROJECTDOCUMENTTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZPROJECTDOCUMENTTYPE || ''
+ END AS 'ParentzGenAlbum-Project Document Type',
+ CASE ParentzGenAlbum.ZCUSTOMQUERYTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMQUERYTYPE || ''
+ END AS 'ParentzGenAlbum-Custom Query Type',
+ CASE ParentzGenAlbum.ZTRASHEDSTATE
+ WHEN 0 THEN '0-ParentzGenAlbum Not In Trash-0'
+ WHEN 1 THEN '1-ParentzGenAlbum Album In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZTRASHEDSTATE || ''
+ END AS 'ParentzGenAlbum-Trashed State',
+ DateTime(ParentzGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum-Trash Date',
+ CASE ParentzGenAlbum.ZCLOUDDELETESTATE
+ WHEN 0 THEN '0-ParentzGenAlbum Cloud Not Deleted-0'
+ WHEN 1 THEN '1-ParentzGenAlbum Cloud Album Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDDELETESTATE || ''
+ END AS 'ParentzGenAlbum-Cloud Delete State',
+ zGenAlbum.ZPENDINGITEMSCOUNT AS 'zGenAlbum-Pending Items Count',
+ CASE zGenAlbum.ZPENDINGITEMSTYPE
+ WHEN 1 THEN 'No-1'
+ WHEN 24 THEN '24-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPENDINGITEMSTYPE || ''
+ END AS 'zGenAlbum-Pending Items Type',
+ zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum- Cached Photos Count',
+ zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum- Cached Videos Count',
+ zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum- Cached Count',
+ CASE zGenAlbum.ZHASUNSEENCONTENT
+ WHEN 0 THEN 'No Unseen Content-StillTesting-0'
+ WHEN 1 THEN 'Unseen Content-StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZHASUNSEENCONTENT || ''
+ END AS 'zGenAlbum-Has Unseen Content',
+ zGenAlbum.ZUNSEENASSETSCOUNT AS 'zGenAlbum-Unseen Asset Count',
+ CASE zGenAlbum.Z_ENT
+ WHEN 27 THEN '27-LPL-SPL-CPL_Album-DecodingVariableBasedOniOS-27'
+ WHEN 28 THEN '28-LPL-SPL-CPL-Shared_Album-DecodingVariableBasedOniOS-28'
+ WHEN 29 THEN '29-Shared_Album-DecodingVariableBasedOniOS-29'
+ WHEN 30 THEN '30-Duplicate_Album-Pending_Merge-30'
+ WHEN 35 THEN '35-SearchIndexRebuild-1600KIND-35'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.Z_ENT || ''
+ END AS 'zGenAlbum-zENT- Entity',
+ CASE zGenAlbum.ZKIND
+ WHEN 2 THEN '2-Non-Shared-Album-2'
+ WHEN 1505 THEN '1505-Shared-Album-1505'
+ WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT'
+ WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT'
+ WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509'
+ WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510'
+ WHEN 3571 THEN '3571-Progress-Sync-3571'
+ WHEN 3572 THEN '3572-Progress-OTA-Restore-3572'
+ WHEN 3573 THEN '3573-Progress-FS-Import-3573'
+ WHEN 3998 THEN '3998-Project Root Folder-3998'
+ WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999'
+ WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || ''
+ END AS 'zGenAlbum-Album Kind',
+ CASE zGenAlbum.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0'
+ WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDLOCALSTATE || ''
+ END AS 'zGenAlbum-Cloud_Local_State',
+ zGenAlbum.ZSYNCEVENTORDERKEY AS 'zGenAlbum-Sync Event Order Key',
+ CASE zGenAlbum.ZISPINNED
+ WHEN 0 THEN 'zGenAlbum-Local Not Pinned-0'
+ WHEN 1 THEN 'zGenAlbum-Local Pinned-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPINNED || ''
+ END AS 'zGenAlbum-Pinned',
+ CASE zGenAlbum.ZCUSTOMSORTKEY
+ WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT'
+ WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT'
+ WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTKEY || ''
+ END AS 'zGenAlbum-Custom Sort Key',
+ CASE zGenAlbum.ZCUSTOMSORTASCENDING
+ WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0'
+ WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTASCENDING || ''
+ END AS 'zGenAlbum-Custom Sort Ascending',
+ CASE zGenAlbum.ZISPROTOTYPE
+ WHEN 0 THEN 'zGenAlbum-Not Prototype-0'
+ WHEN 1 THEN 'zGenAlbum-Prototype-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPROTOTYPE || ''
+ END AS 'zGenAlbum-Is Prototype',
+ CASE zGenAlbum.ZPROJECTDOCUMENTTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPROJECTDOCUMENTTYPE || ''
+ END AS 'zGenAlbum-Project Document Type',
+ CASE zGenAlbum.ZCUSTOMQUERYTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMQUERYTYPE || ''
+ END AS 'zGenAlbum-Custom Query Type',
+ CASE zGenAlbum.ZTRASHEDSTATE
+ WHEN 0 THEN 'zGenAlbum Not In Trash-0'
+ WHEN 1 THEN 'zGenAlbum Album In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZTRASHEDSTATE || ''
+ END AS 'zGenAlbum-Trashed State',
+ DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date',
+ CASE zGenAlbum.ZCLOUDDELETESTATE
+ WHEN 0 THEN 'zGenAlbum Cloud Not Deleted-0'
+ WHEN 1 THEN 'zGenAlbum Cloud Album Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDDELETESTATE || ''
+ END AS 'zGenAlbum-Cloud Delete State',
+ CASE zGenAlbum.ZSEARCHINDEXREBUILDSTATE
+ WHEN 0 THEN '0-StillTesting GenAlbm-Search Index State-0'
+ WHEN 1 THEN '1-StillTesting GenAlbm-Search Index State-1'
+ WHEN 2 THEN '2-StillTesting GenAlbm-Search Index State-2'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZSEARCHINDEXREBUILDSTATE || ''
+ END AS 'zGenAlbum-Search Index Rebuild State',
+ CASE zGenAlbum.ZDUPLICATETYPE
+ WHEN 0 THEN '0-StillTesting GenAlbumDuplicateType-0'
+ WHEN 1 THEN 'Duplicate Asset_Pending-Merge-1'
+ WHEN 2 THEN '2-StillTesting GenAlbumDuplicateType-2'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZDUPLICATETYPE || ''
+ END AS 'zGenAlbum-Duplicate Type',
+ CASE zGenAlbum.ZPRIVACYSTATE
+ WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0'
+ WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1'
+ WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPRIVACYSTATE || ''
+ END AS 'zGenAlbum-Privacy State'
+ FROM ZGENERICALBUM zGenAlbum
+ LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER
+ LEFT JOIN Z_29ALBUMLISTS z29AlbumLists ON z29AlbumLists.Z_29ALBUMS = zGenAlbum.Z_PK
+ LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z29AlbumLists.Z_2ALBUMLISTS
+ LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON zGenAlbum.Z_PK
+ = zCldShareAlbumInvRec.ZALBUM
+ WHERE zGenAlbum.ZKIND = 2
+ ORDER BY zGenAlbum.ZCREATIONDATE
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47]))
+
+ data_headers = (('zGenAlbum-Creation Date-0', 'datetime'),
+ ('zGenAlbum-Start Date-1', 'datetime'),
+ ('zGenAlbum-End Date-2', 'datetime'),
+ 'ParentzGenAlbum-UUID-3',
+ 'ParentzGenAlbum-Cloud GUID-4',
+ 'ParentzGenAlbum- Title-5',
+ 'zGenAlbum- Title-User&System Applied-6',
+ 'zGenAlbum-UUID-7',
+ 'zGenAlbum-Cloud GUID-8',
+ 'zGenAlbum-Imported by Bundle Identifier-9',
+ ('ParentzGenAlbum-Creation Date-10', 'datetime'),
+ 'ParentzGenAlbum-Pending Items Count-11',
+ 'ParentzGenAlbum-Pending Items Type-12',
+ 'ParentzGenAlbum-Kind-13',
+ 'ParentzGenAlbum-Cloud-Local-State-14',
+ 'ParentzGenAlbum-Sync Event Order Key-15',
+ 'ParentzGenAlbum-Pinned-16',
+ 'ParentzGenAlbum-Custom Sort Key-17',
+ 'ParentzGenAlbum-Custom Sort Ascending-18',
+ 'ParentzGenAlbum-Is Prototype-19',
+ 'ParentzGenAlbum-Project Document Type-20',
+ 'ParentzGenAlbum-Custom Query Type-21',
+ 'ParentzGenAlbum-Trashed State-22',
+ ('ParentzGenAlbum-Trash Date-23', 'datetime'),
+ 'ParentzGenAlbum-Cloud Delete State-24',
+ 'zGenAlbum-Pending Items Count-25',
+ 'zGenAlbum-Pending Items Type-26',
+ 'zGenAlbum- Cached Photos Count-27',
+ 'zGenAlbum- Cached Videos Count-28',
+ 'zGenAlbum- Cached Count-29',
+ 'zGenAlbum-Has Unseen Content-30',
+ 'zGenAlbum-Unseen Asset Count-31',
+ 'zGenAlbum-zENT- Entity-32',
+ 'zGenAlbum-Album Kind-33',
+ 'zGenAlbum-Cloud_Local_State-34',
+ 'zGenAlbum-Sync Event Order Key-35',
+ 'zGenAlbum-Pinned-36',
+ 'zGenAlbum-Custom Sort Key-37',
+ 'zGenAlbum-Custom Sort Ascending-38',
+ 'zGenAlbum-Is Prototype-39',
+ 'zGenAlbum-Project Document Type-40',
+ 'zGenAlbum-Custom Query Type-41',
+ 'zGenAlbum-Trashed State-42',
+ ('zGenAlbum-Trash Date-43', 'datetime'),
+ 'zGenAlbum-Cloud Delete State-44',
+ 'zGenAlbum-Search Index Rebuild State-45',
+ 'zGenAlbum-Duplicate Type-46',
+ 'zGenAlbum-Privacy State-47')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph22AssetsInNonSharedAlbums.py b/scripts/artifacts/Ph22AssetsInNonSharedAlbums.py
index f414af1c..c33e9de4 100644
--- a/scripts/artifacts/Ph22AssetsInNonSharedAlbums.py
+++ b/scripts/artifacts/Ph22AssetsInNonSharedAlbums.py
@@ -1,41 +1,47 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 2.0
-#
-# Description:
-# Parses Assets associated with Non-Shared Albums found in the PhotoData-Photos.sqlite and supports iOS 11-18.
-# Parses limited assets data with full non-shared album data.
-# This parser is based on research and SQLite Queries written by Scott Koenig
-# This is very large query and script, I recommend opening the TSV generated report with Zimmerman's Tools
-# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results.
-# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347
-#
+__artifacts_v2__ = {
+ 'Ph22AssetsinNonSharedAlbumsPhDaPsql': {
+ 'name': 'Ph22-Assets in Non-Shared Albums-PhDaPsql',
+ 'description': 'Parses Assets associated with Non-Shared Albums found in PhotoData-Photos.sqlite and'
+ ' supports iOS 11-18. Parses limited assets data with full non-shared album data.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-E-Asset_In_Albums',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
+@artifact_processor
+def Ph22AssetsinNonSharedAlbumsPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
-def get_ph22assetsinnonsharedalbumsphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("10.3.4"):
- logfunc("Unsupported version for PhotoData-Photos.sqlite assets in Non-Shared Albums from iOS " + iosversion)
+ logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("12")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
zAsset.Z_PK AS 'zAsset-zPK',
@@ -214,106 +220,86 @@ def get_ph22assetsinnonsharedalbumsphdapsql(files_found, report_folder, seeker,
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE zGenAlbum.ZKIND = 2
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55]))
-
- counter += 1
-
- description = 'Parses Assets associated with Non-Shared Albums found in the PhotoData-Photos.sqlite' \
- ' from iOS 11. Parses limited asset data with full non-shared album data.'
- report = ArtifactHtmlReport('Ph22-Assets in Non-Shared Albums-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph22-Assets in Non-Shared Albums-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-zPK-1',
- 'zAsset-Directory-Path-2',
- 'zAsset-Filename-3',
- 'zAddAssetAttr- Original Filename-4',
- 'zCldMast- Original Filename-5',
- 'zAddAssetAttr- Creator Bundle ID-6',
- 'zAsset-Visibility State-7',
- 'zAsset-Saved Asset Type-8',
- 'zAsset- SortToken -CameraRoll-9',
- 'zAsset-Added Date-10',
- 'zCldMast-Creation Date-11',
- 'zAddAssetAttr-Time Zone Name-12',
- 'zAddAssetAttr-EXIF-String-13',
- 'zAsset-Modification Date-14',
- 'zAsset-Last Shared Date-15',
- 'zAsset-Trashed Date-16',
- 'zAddAssetAttr-zPK-17',
- 'zAsset-UUID = store.cloudphotodb-18',
- 'zAddAssetAttr-Master Fingerprint-19',
- 'zGenAlbum-Start Date-20',
- 'zGenAlbum-End Date-21',
- 'ParentzGenAlbum-UUID-22',
- 'ParentzGenAlbum-Cloud GUID-23',
- 'ParentzGenAlbum- Title-24',
- 'zGenAlbum- Title-User&System Applied-25',
- 'zGenAlbum-UUID-26',
- 'zGenAlbum-Cloud GUID-27',
- 'ParentzGenAlbum-Pending Items Count-28',
- 'ParentzGenAlbum-Pending Items Type-29',
- 'ParentzGenAlbum-Kind-30',
- 'ParentzGenAlbum-Cloud-Local-State-31',
- 'ParentzGenAlbum-Sync Event Order Key-32',
- 'ParentzGenAlbum-Pinned-33',
- 'ParentzGenAlbum-Custom Sort Key-34',
- 'ParentzGenAlbum-Custom Sort Ascending-35',
- 'ParentzGenAlbum-Custom Query Type-36',
- 'ParentzGenAlbum-Trashed State-37',
- 'ParentzGenAlbum-Trash Date-38',
- 'zGenAlbum-Pending Items Count-39',
- 'zGenAlbum-Pending Items Type-40',
- 'zGenAlbum- Cached Photos Count-41',
- 'zGenAlbum- Cached Videos Count-42',
- 'zGenAlbum- Cached Count-43',
- 'zGenAlbum-Has Unseen Content-44',
- 'zGenAlbum-Unseen Asset Count-45',
- 'zGenAlbum-zENT- Entity-46',
- 'zGenAlbum-Album Kind-47',
- 'zGenAlbum-Cloud_Local_State-48',
- 'zGenAlbum-Sync Event Order Key-49',
- 'zGenAlbum-Pinned-50',
- 'zGenAlbum-Custom Sort Key-51',
- 'zGenAlbum-Custom Sort Ascending-52',
- 'zGenAlbum-Custom Query Type-53',
- 'zGenAlbum-Trashed State-54',
- 'zGenAlbum-Trash Date-55')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph22-Assets in Non-Shared Albums-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph22-Assets in Non-Shared Albums-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available from PhotoData-Photos.sqlite for Assets in Non-Shared Albums')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-zPK-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zAddAssetAttr- Creator Bundle ID-6',
+ 'zAsset-Visibility State-7',
+ 'zAsset-Saved Asset Type-8',
+ ('zAsset- SortToken -CameraRoll-9', 'datetime'),
+ ('zAsset-Added Date-10', 'datetime'),
+ ('zCldMast-Creation Date-11', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-12',
+ 'zAddAssetAttr-EXIF-String-13',
+ ('zAsset-Modification Date-14', 'datetime'),
+ ('zAsset-Last Shared Date-15', 'datetime'),
+ ('zAsset-Trashed Date-16', 'datetime'),
+ 'zAddAssetAttr-zPK-17',
+ 'zAsset-UUID = store.cloudphotodb-18',
+ 'zAddAssetAttr-Master Fingerprint-19',
+ ('zGenAlbum-Start Date-20', 'datetime'),
+ ('zGenAlbum-End Date-21', 'datetime'),
+ 'ParentzGenAlbum-UUID-22',
+ 'ParentzGenAlbum-Cloud GUID-23',
+ 'ParentzGenAlbum- Title-24',
+ 'zGenAlbum- Title-User&System Applied-25',
+ 'zGenAlbum-UUID-26',
+ 'zGenAlbum-Cloud GUID-27',
+ 'ParentzGenAlbum-Pending Items Count-28',
+ 'ParentzGenAlbum-Pending Items Type-29',
+ 'ParentzGenAlbum-Kind-30',
+ 'ParentzGenAlbum-Cloud-Local-State-31',
+ 'ParentzGenAlbum-Sync Event Order Key-32',
+ 'ParentzGenAlbum-Pinned-33',
+ 'ParentzGenAlbum-Custom Sort Key-34',
+ 'ParentzGenAlbum-Custom Sort Ascending-35',
+ 'ParentzGenAlbum-Custom Query Type-36',
+ 'ParentzGenAlbum-Trashed State-37',
+ ('ParentzGenAlbum-Trash Date-38', 'datetime'),
+ 'zGenAlbum-Pending Items Count-39',
+ 'zGenAlbum-Pending Items Type-40',
+ 'zGenAlbum- Cached Photos Count-41',
+ 'zGenAlbum- Cached Videos Count-42',
+ 'zGenAlbum- Cached Count-43',
+ 'zGenAlbum-Has Unseen Content-44',
+ 'zGenAlbum-Unseen Asset Count-45',
+ 'zGenAlbum-zENT- Entity-46',
+ 'zGenAlbum-Album Kind-47',
+ 'zGenAlbum-Cloud_Local_State-48',
+ 'zGenAlbum-Sync Event Order Key-49',
+ 'zGenAlbum-Pinned-50',
+ 'zGenAlbum-Custom Sort Key-51',
+ 'zGenAlbum-Custom Sort Ascending-52',
+ 'zGenAlbum-Custom Query Type-53',
+ 'zGenAlbum-Trashed State-54',
+ ('zGenAlbum-Trash Date-55', 'datetime'))
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("12")) & (version.parse(iosversion) < version.parse("13")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
zAsset.Z_PK AS 'zAsset-zPK',
@@ -502,108 +488,88 @@ def get_ph22assetsinnonsharedalbumsphdapsql(files_found, report_folder, seeker,
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE zGenAlbum.ZKIND = 2
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57]))
-
- counter += 1
-
- description = 'Parses Assets associated with Non-Shared Albums found in the PhotoData-Photos.sqlite' \
- ' from iOS 12. Parses limited asset data with full non-shared album data.'
- report = ArtifactHtmlReport('Ph22-Assets in Non-Shared Albums-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph22-Assets in Non-Shared Albums-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-zPK-1',
- 'zAsset-Directory-Path-2',
- 'zAsset-Filename-3',
- 'zAddAssetAttr- Original Filename-4',
- 'zCldMast- Original Filename-5',
- 'zAddAssetAttr- Creator Bundle ID-6',
- 'zAsset-Visibility State-7',
- 'zAsset-Saved Asset Type-8',
- 'zAsset- SortToken -CameraRoll-9',
- 'zAsset-Added Date-10',
- 'zCldMast-Creation Date-11',
- 'zAddAssetAttr-Time Zone Name-12',
- 'zAddAssetAttr-EXIF-String-13',
- 'zAsset-Modification Date-14',
- 'zAsset-Last Shared Date-15',
- 'zAsset-Trashed Date-16',
- 'zAddAssetAttr-zPK-17',
- 'zAsset-UUID = store.cloudphotodb-18',
- 'zAddAssetAttr-Master Fingerprint-19',
- 'zGenAlbum-Start Date-20',
- 'zGenAlbum-End Date-21',
- 'ParentzGenAlbum-UUID-22',
- 'ParentzGenAlbum-Cloud GUID-23',
- 'ParentzGenAlbum- Title-24',
- 'zGenAlbum- Title-User&System Applied-25',
- 'zGenAlbum-UUID-26',
- 'zGenAlbum-Cloud GUID-27',
- 'ParentzGenAlbum-Pending Items Count-28',
- 'ParentzGenAlbum-Pending Items Type-29',
- 'ParentzGenAlbum-Kind-30',
- 'ParentzGenAlbum-Cloud-Local-State-31',
- 'ParentzGenAlbum-Sync Event Order Key-32',
- 'ParentzGenAlbum-Pinned-33',
- 'ParentzGenAlbum-Custom Sort Key-34',
- 'ParentzGenAlbum-Custom Sort Ascending-35',
- 'ParentzGenAlbum-Custom Query Type-36',
- 'ParentzGenAlbum-Trashed State-37',
- 'ParentzGenAlbum-Trash Date-38',
- 'ParentzGenAlbum-Cloud Delete State-39',
- 'zGenAlbum-Pending Items Count-40',
- 'zGenAlbum-Pending Items Type-41',
- 'zGenAlbum- Cached Photos Count-42',
- 'zGenAlbum- Cached Videos Count-43',
- 'zGenAlbum- Cached Count-44',
- 'zGenAlbum-Has Unseen Content-45',
- 'zGenAlbum-Unseen Asset Count-46',
- 'zGenAlbum-zENT- Entity-47',
- 'zGenAlbum-Album Kind-48',
- 'zGenAlbum-Cloud_Local_State-49',
- 'zGenAlbum-Sync Event Order Key-50',
- 'zGenAlbum-Pinned-51',
- 'zGenAlbum-Custom Sort Key-52',
- 'zGenAlbum-Custom Sort Ascending-53',
- 'zGenAlbum-Custom Query Type-54',
- 'zGenAlbum-Trashed State-55',
- 'zGenAlbum-Trash Date-56',
- 'zGenAlbum-Cloud Delete State-57')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph22-Assets in Non-Shared Albums-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph22-Assets in Non-Shared Albums-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available from PhotoData-Photos.sqlite for Assets in Non-Shared Albums')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-zPK-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zAddAssetAttr- Creator Bundle ID-6',
+ 'zAsset-Visibility State-7',
+ 'zAsset-Saved Asset Type-8',
+ ('zAsset- SortToken -CameraRoll-9', 'datetime'),
+ ( 'zAsset-Added Date-10', 'datetime'),
+ ('zCldMast-Creation Date-11', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-12',
+ 'zAddAssetAttr-EXIF-String-13',
+ ('zAsset-Modification Date-14', 'datetime'),
+ ('zAsset-Last Shared Date-15', 'datetime'),
+ ('zAsset-Trashed Date-16', 'datetime'),
+ 'zAddAssetAttr-zPK-17',
+ 'zAsset-UUID = store.cloudphotodb-18',
+ 'zAddAssetAttr-Master Fingerprint-19',
+ ('zGenAlbum-Start Date-20', 'datetime'),
+ ('zGenAlbum-End Date-21', 'datetime'),
+ 'ParentzGenAlbum-UUID-22',
+ 'ParentzGenAlbum-Cloud GUID-23',
+ 'ParentzGenAlbum- Title-24',
+ 'zGenAlbum- Title-User&System Applied-25',
+ 'zGenAlbum-UUID-26',
+ 'zGenAlbum-Cloud GUID-27',
+ 'ParentzGenAlbum-Pending Items Count-28',
+ 'ParentzGenAlbum-Pending Items Type-29',
+ 'ParentzGenAlbum-Kind-30',
+ 'ParentzGenAlbum-Cloud-Local-State-31',
+ 'ParentzGenAlbum-Sync Event Order Key-32',
+ 'ParentzGenAlbum-Pinned-33',
+ 'ParentzGenAlbum-Custom Sort Key-34',
+ 'ParentzGenAlbum-Custom Sort Ascending-35',
+ 'ParentzGenAlbum-Custom Query Type-36',
+ 'ParentzGenAlbum-Trashed State-37',
+ ('ParentzGenAlbum-Trash Date-38', 'datetime'),
+ 'ParentzGenAlbum-Cloud Delete State-39',
+ 'zGenAlbum-Pending Items Count-40',
+ 'zGenAlbum-Pending Items Type-41',
+ 'zGenAlbum- Cached Photos Count-42',
+ 'zGenAlbum- Cached Videos Count-43',
+ 'zGenAlbum- Cached Count-44',
+ 'zGenAlbum-Has Unseen Content-45',
+ 'zGenAlbum-Unseen Asset Count-46',
+ 'zGenAlbum-zENT- Entity-47',
+ 'zGenAlbum-Album Kind-48',
+ 'zGenAlbum-Cloud_Local_State-49',
+ 'zGenAlbum-Sync Event Order Key-50',
+ 'zGenAlbum-Pinned-51',
+ 'zGenAlbum-Custom Sort Key-52',
+ 'zGenAlbum-Custom Sort Ascending-53',
+ 'zGenAlbum-Custom Query Type-54',
+ 'zGenAlbum-Trashed State-55',
+ ('zGenAlbum-Trash Date-56', 'datetime'),
+ 'zGenAlbum-Cloud Delete State-57')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("13")) & (version.parse(iosversion) < version.parse("14")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
zAsset.Z_PK AS 'zAsset-zPK',
@@ -802,111 +768,91 @@ def get_ph22assetsinnonsharedalbumsphdapsql(files_found, report_folder, seeker,
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE zGenAlbum.ZKIND = 2
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60]))
-
- counter += 1
-
- description = 'Parses Assets associated with Non-Shared Albums found in the PhotoData-Photos.sqlite' \
- ' from iOS 13. Parses limited asset data with full non-shared album data.'
- report = ArtifactHtmlReport('Ph22-Assets in Non-Shared Albums-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph22-Assets in Non-Shared Albums-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-zPK-1',
- 'zAsset-Directory-Path-2',
- 'zAsset-Filename-3',
- 'zAddAssetAttr- Original Filename-4',
- 'zCldMast- Original Filename-5',
- 'zAddAssetAttr- Creator Bundle ID-6',
- 'zAsset-Visibility State-7',
- 'zAsset-Saved Asset Type-8',
- 'zAsset- SortToken -CameraRoll-9',
- 'zAsset-Added Date-10',
- 'zCldMast-Creation Date-11',
- 'zAddAssetAttr-Time Zone Name-12',
- 'zAddAssetAttr-EXIF-String-13',
- 'zAsset-Modification Date-14',
- 'zAsset-Last Shared Date-15',
- 'zAsset-Trashed Date-16',
- 'zAddAssetAttr-zPK-17',
- 'zAsset-UUID = store.cloudphotodb-18',
- 'zAddAssetAttr-Master Fingerprint-19',
- 'zGenAlbum-Creation Date-20',
- 'zGenAlbum-Start Date-21',
- 'zGenAlbum-End Date-22',
- 'ParentzGenAlbum-UUID-23',
- 'ParentzGenAlbum-Cloud GUID-24',
- 'ParentzGenAlbum- Title-25',
- 'zGenAlbum- Title-User&System Applied-26',
- 'zGenAlbum-UUID-27',
- 'zGenAlbum-Cloud GUID-28',
- 'ParentzGenAlbum-Pending Items Count-29',
- 'ParentzGenAlbum-Pending Items Type-30',
- 'ParentzGenAlbum-Kind-31',
- 'ParentzGenAlbum-Cloud-Local-State-32',
- 'ParentzGenAlbum-Sync Event Order Key-33',
- 'ParentzGenAlbum-Pinned-34',
- 'ParentzGenAlbum-Custom Sort Key-35',
- 'ParentzGenAlbum-Custom Sort Ascending-36',
- 'ParentzGenAlbum-Project Document Type-37',
- 'ParentzGenAlbum-Custom Query Type-38',
- 'ParentzGenAlbum-Trashed State-39',
- 'ParentzGenAlbum-Trash Date-40',
- 'ParentzGenAlbum-Cloud Delete State-41',
- 'zGenAlbum-Pending Items Count-42',
- 'zGenAlbum-Pending Items Type-43',
- 'zGenAlbum- Cached Photos Count-44',
- 'zGenAlbum- Cached Videos Count-45',
- 'zGenAlbum- Cached Count-46',
- 'zGenAlbum-Has Unseen Content-47',
- 'zGenAlbum-Unseen Asset Count-48',
- 'zGenAlbum-zENT- Entity-49',
- 'zGenAlbum-Album Kind-50',
- 'zGenAlbum-Cloud_Local_State-51',
- 'zGenAlbum-Sync Event Order Key-52',
- 'zGenAlbum-Pinned-53',
- 'zGenAlbum-Custom Sort Key-54',
- 'zGenAlbum-Custom Sort Ascending-55',
- 'zGenAlbum-Project Document Type-56',
- 'zGenAlbum-Custom Query Type-57',
- 'zGenAlbum-Trashed State-58',
- 'zGenAlbum-Trash Date-59',
- 'zGenAlbum-Cloud Delete State-60')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph22-Assets in Non-Shared Albums-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph22-Assets in Non-Shared Albums-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available from PhotoData-Photos.sqlite for Assets in Non-Shared Albums')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-zPK-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zAddAssetAttr- Creator Bundle ID-6',
+ 'zAsset-Visibility State-7',
+ 'zAsset-Saved Asset Type-8',
+ ('zAsset- SortToken -CameraRoll-9', 'datetime'),
+ ('zAsset-Added Date-10', 'datetime'),
+ ('zCldMast-Creation Date-11', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-12',
+ 'zAddAssetAttr-EXIF-String-13',
+ ('zAsset-Modification Date-14', 'datetime'),
+ ('zAsset-Last Shared Date-15', 'datetime'),
+ ('zAsset-Trashed Date-16', 'datetime'),
+ 'zAddAssetAttr-zPK-17',
+ 'zAsset-UUID = store.cloudphotodb-18',
+ 'zAddAssetAttr-Master Fingerprint-19',
+ ('zGenAlbum-Creation Date-20', 'datetime'),
+ ('zGenAlbum-Start Date-21', 'datetime'),
+ ('zGenAlbum-End Date-22', 'datetime'),
+ 'ParentzGenAlbum-UUID-23',
+ 'ParentzGenAlbum-Cloud GUID-24',
+ 'ParentzGenAlbum- Title-25',
+ 'zGenAlbum- Title-User&System Applied-26',
+ 'zGenAlbum-UUID-27',
+ 'zGenAlbum-Cloud GUID-28',
+ 'ParentzGenAlbum-Pending Items Count-29',
+ 'ParentzGenAlbum-Pending Items Type-30',
+ 'ParentzGenAlbum-Kind-31',
+ 'ParentzGenAlbum-Cloud-Local-State-32',
+ 'ParentzGenAlbum-Sync Event Order Key-33',
+ 'ParentzGenAlbum-Pinned-34',
+ 'ParentzGenAlbum-Custom Sort Key-35',
+ 'ParentzGenAlbum-Custom Sort Ascending-36',
+ 'ParentzGenAlbum-Project Document Type-37',
+ 'ParentzGenAlbum-Custom Query Type-38',
+ 'ParentzGenAlbum-Trashed State-39',
+ ('ParentzGenAlbum-Trash Date-40', 'datetime'),
+ 'ParentzGenAlbum-Cloud Delete State-41',
+ 'zGenAlbum-Pending Items Count-42',
+ 'zGenAlbum-Pending Items Type-43',
+ 'zGenAlbum- Cached Photos Count-44',
+ 'zGenAlbum- Cached Videos Count-45',
+ 'zGenAlbum- Cached Count-46',
+ 'zGenAlbum-Has Unseen Content-47',
+ 'zGenAlbum-Unseen Asset Count-48',
+ 'zGenAlbum-zENT- Entity-49',
+ 'zGenAlbum-Album Kind-50',
+ 'zGenAlbum-Cloud_Local_State-51',
+ 'zGenAlbum-Sync Event Order Key-52',
+ 'zGenAlbum-Pinned-53',
+ 'zGenAlbum-Custom Sort Key-54',
+ 'zGenAlbum-Custom Sort Ascending-55',
+ 'zGenAlbum-Project Document Type-56',
+ 'zGenAlbum-Custom Query Type-57',
+ 'zGenAlbum-Trashed State-58',
+ ('zGenAlbum-Trash Date-59', 'datetime'),
+ 'zGenAlbum-Cloud Delete State-60')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
zAsset.Z_PK AS 'zAsset-zPK',
@@ -1122,118 +1068,98 @@ def get_ph22assetsinnonsharedalbumsphdapsql(files_found, report_folder, seeker,
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE zGenAlbum.ZKIND = 2
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66]))
-
- counter += 1
-
- description = 'Parses Assets associated with Non-Shared Albums found in the PhotoData-Photos.sqlite' \
- ' from iOS 14. Parses limited asset data with full non-shared album data.'
- report = ArtifactHtmlReport('Ph22-Assets in Non-Shared Albums-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph22-Assets in Non-Shared Albums-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-zPK-1',
- 'zAsset-Directory-Path-2',
- 'zAsset-Filename-3',
- 'zAddAssetAttr- Original Filename-4',
- 'zCldMast- Original Filename-5',
- 'zAddAssetAttr- Creator Bundle ID-6',
- 'zAddAssetAttr-Imported By Display Name-7',
- 'zAsset-Visibility State-8',
- 'zAsset-Saved Asset Type-9',
- 'zAddAssetAttr-Share Type-10',
- 'zAsset- SortToken -CameraRoll-11',
- 'zAsset-Added Date-12',
- 'zCldMast-Creation Date-13',
- 'zAddAssetAttr-Time Zone Name-14',
- 'zAddAssetAttr-EXIF-String-15',
- 'zAsset-Modification Date-16',
- 'zAsset-Last Shared Date-17',
- 'zAsset-Trashed Date-18',
- 'zAddAssetAttr-zPK-19',
- 'zAsset-UUID = store.cloudphotodb-20',
- 'zAddAssetAttr-Master Fingerprint-21',
- 'zGenAlbum-Creation Date-22',
- 'zGenAlbum-Start Date-23',
- 'zGenAlbum-End Date-24',
- 'ParentzGenAlbum-UUID-25',
- 'ParentzGenAlbum-Cloud GUID-26',
- 'ParentzGenAlbum- Title-27',
- 'zGenAlbum- Title-User&System Applied-28',
- 'zGenAlbum-UUID-29',
- 'zGenAlbum-Cloud GUID-30',
- 'zGenAlbum-Creator Bundle Id-31',
- 'ParentzGenAlbum-Creation Date-32',
- 'ParentzGenAlbum-Pending Items Count-33',
- 'ParentzGenAlbum-Pending Items Type-34',
- 'ParentzGenAlbum-Kind-35',
- 'ParentzGenAlbum-Cloud-Local-State-36',
- 'ParentzGenAlbum-Sync Event Order Key-37',
- 'ParentzGenAlbum-Pinned-38',
- 'ParentzGenAlbum-Custom Sort Key-39',
- 'ParentzGenAlbum-Custom Sort Ascending-40',
- 'ParentzGenAlbum-Is Prototype-41',
- 'ParentzGenAlbum-Project Document Type-42',
- 'ParentzGenAlbum-Custom Query Type-43',
- 'ParentzGenAlbum-Trashed State-44',
- 'ParentzGenAlbum-Trash Date-45',
- 'ParentzGenAlbum-Cloud Delete State-46',
- 'zGenAlbum-Pending Items Count-47',
- 'zGenAlbum-Pending Items Type-48',
- 'zGenAlbum- Cached Photos Count-49',
- 'zGenAlbum- Cached Videos Count-50',
- 'zGenAlbum- Cached Count-51',
- 'zGenAlbum-Has Unseen Content-52',
- 'zGenAlbum-Unseen Asset Count-53',
- 'zGenAlbum-zENT- Entity-54',
- 'zGenAlbum-Album Kind-55',
- 'zGenAlbum-Cloud_Local_State-56',
- 'zGenAlbum-Sync Event Order Key-57',
- 'zGenAlbum-Pinned-58',
- 'zGenAlbum-Custom Sort Key-59',
- 'zGenAlbum-Custom Sort Ascending-60',
- 'zGenAlbum-Is Prototype-61',
- 'zGenAlbum-Project Document Type-62',
- 'zGenAlbum-Custom Query Type-63',
- 'zGenAlbum-Trashed State-64',
- 'zGenAlbum-Trash Date-65',
- 'zGenAlbum-Cloud Delete State-66')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph22-Assets in Non-Shared Albums-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph22-Assets in Non-Shared Albums-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available from PhotoData-Photos.sqlite for Assets in Non-Shared Albums')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-zPK-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zAddAssetAttr- Creator Bundle ID-6',
+ 'zAddAssetAttr-Imported By Display Name-7',
+ 'zAsset-Visibility State-8',
+ 'zAsset-Saved Asset Type-9',
+ 'zAddAssetAttr-Share Type-10',
+ ('zAsset- SortToken -CameraRoll-11', 'datetime'),
+ ('zAsset-Added Date-12', 'datetime'),
+ ('zCldMast-Creation Date-13', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-14',
+ 'zAddAssetAttr-EXIF-String-15',
+ ('zAsset-Modification Date-16', 'datetime'),
+ ('zAsset-Last Shared Date-17', 'datetime'),
+ ('zAsset-Trashed Date-18', 'datetime'),
+ 'zAddAssetAttr-zPK-19',
+ 'zAsset-UUID = store.cloudphotodb-20',
+ 'zAddAssetAttr-Master Fingerprint-21',
+ ('zGenAlbum-Creation Date-22', 'datetime'),
+ ('zGenAlbum-Start Date-23', 'datetime'),
+ ('zGenAlbum-End Date-24', 'datetime'),
+ 'ParentzGenAlbum-UUID-25',
+ 'ParentzGenAlbum-Cloud GUID-26',
+ 'ParentzGenAlbum- Title-27',
+ 'zGenAlbum- Title-User&System Applied-28',
+ 'zGenAlbum-UUID-29',
+ 'zGenAlbum-Cloud GUID-30',
+ 'zGenAlbum-Creator Bundle Id-31',
+ ('ParentzGenAlbum-Creation Date-32', 'datetime'),
+ 'ParentzGenAlbum-Pending Items Count-33',
+ 'ParentzGenAlbum-Pending Items Type-34',
+ 'ParentzGenAlbum-Kind-35',
+ 'ParentzGenAlbum-Cloud-Local-State-36',
+ 'ParentzGenAlbum-Sync Event Order Key-37',
+ 'ParentzGenAlbum-Pinned-38',
+ 'ParentzGenAlbum-Custom Sort Key-39',
+ 'ParentzGenAlbum-Custom Sort Ascending-40',
+ 'ParentzGenAlbum-Is Prototype-41',
+ 'ParentzGenAlbum-Project Document Type-42',
+ 'ParentzGenAlbum-Custom Query Type-43',
+ 'ParentzGenAlbum-Trashed State-44',
+ ('ParentzGenAlbum-Trash Date-45', 'datetime'),
+ 'ParentzGenAlbum-Cloud Delete State-46',
+ 'zGenAlbum-Pending Items Count-47',
+ 'zGenAlbum-Pending Items Type-48',
+ 'zGenAlbum- Cached Photos Count-49',
+ 'zGenAlbum- Cached Videos Count-50',
+ 'zGenAlbum- Cached Count-51',
+ 'zGenAlbum-Has Unseen Content-52',
+ 'zGenAlbum-Unseen Asset Count-53',
+ 'zGenAlbum-zENT- Entity-54',
+ 'zGenAlbum-Album Kind-55',
+ 'zGenAlbum-Cloud_Local_State-56',
+ 'zGenAlbum-Sync Event Order Key-57',
+ 'zGenAlbum-Pinned-58',
+ 'zGenAlbum-Custom Sort Key-59',
+ 'zGenAlbum-Custom Sort Ascending-60',
+ 'zGenAlbum-Is Prototype-61',
+ 'zGenAlbum-Project Document Type-62',
+ 'zGenAlbum-Custom Query Type-63',
+ 'zGenAlbum-Trashed State-64',
+ ('zGenAlbum-Trash Date-65', 'datetime'),
+ 'zGenAlbum-Cloud Delete State-66')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
zAsset.Z_PK AS 'zAsset-zPK',
@@ -1468,121 +1394,101 @@ def get_ph22assetsinnonsharedalbumsphdapsql(files_found, report_folder, seeker,
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE zGenAlbum.ZKIND = 2
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-zPK-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-6',
+ 'zAsset-Syndication State-7',
+ 'zAsset-Bundle Scope-8',
+ 'zAddAssetAttr- Imported by Bundle Identifier-9',
+ 'zAddAssetAttr-Imported By Display Name-10',
+ 'zAsset-Visibility State-11',
+ 'zAsset-Saved Asset Type-12',
+ 'zAddAssetAttr-Share Type-13',
+ ('zAsset- SortToken -CameraRoll-14', 'datetime'),
+ ('zAsset-Added Date-15', 'datetime'),
+ ('zCldMast-Creation Date-16', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-17',
+ 'zAddAssetAttr-EXIF-String-18',
+ ('zAsset-Modification Date-19', 'datetime'),
+ ('zAsset-Last Shared Date-20', 'datetime'),
+ ('zAsset-Trashed Date-21', 'datetime'),
+ 'zAddAssetAttr-zPK-22',
+ 'zAsset-UUID = store.cloudphotodb-23',
+ 'zAddAssetAttr-Master Fingerprint-24',
+ ('zGenAlbum-Creation Date-25', 'datetime'),
+ ('zGenAlbum-Start Date-26', 'datetime'),
+ ('zGenAlbum-End Date-27', 'datetime'),
+ 'ParentzGenAlbum-UUID-28',
+ 'ParentzGenAlbum-Cloud GUID-29',
+ 'ParentzGenAlbum- Title-30',
+ 'zGenAlbum- Title-User&System Applied-31',
+ 'zGenAlbum-UUID-32',
+ 'zGenAlbum-Cloud GUID-33',
+ 'zGenAlbum-Imported by Bundle Identifier-34',
+ ('ParentzGenAlbum-Creation Date-35', 'datetime'),
+ 'ParentzGenAlbum-Pending Items Count-36',
+ 'ParentzGenAlbum-Pending Items Type-37',
+ 'ParentzGenAlbum-Kind-38',
+ 'ParentzGenAlbum-Cloud-Local-State-39',
+ 'ParentzGenAlbum-Sync Event Order Key-40',
+ 'ParentzGenAlbum-Pinned-41',
+ 'ParentzGenAlbum-Custom Sort Key-42',
+ 'ParentzGenAlbum-Custom Sort Ascending-43',
+ 'ParentzGenAlbum-Is Prototype-44',
+ 'ParentzGenAlbum-Project Document Type-45',
+ 'ParentzGenAlbum-Custom Query Type-46',
+ 'ParentzGenAlbum-Trashed State-47',
+ ('ParentzGenAlbum-Trash Date-48', 'datetime'),
+ 'ParentzGenAlbum-Cloud Delete State-49',
+ 'zGenAlbum-Pending Items Count-50',
+ 'zGenAlbum-Pending Items Type-51',
+ 'zGenAlbum- Cached Photos Count-52',
+ 'zGenAlbum- Cached Videos Count-53',
+ 'zGenAlbum- Cached Count-54',
+ 'zGenAlbum-Has Unseen Content-55',
+ 'zGenAlbum-Unseen Asset Count-56',
+ 'zGenAlbum-zENT- Entity-57',
+ 'zGenAlbum-Album Kind-58',
+ 'zGenAlbum-Cloud_Local_State-59',
+ 'zGenAlbum-Sync Event Order Key-60',
+ 'zGenAlbum-Pinned-61',
+ 'zGenAlbum-Custom Sort Key-62',
+ 'zGenAlbum-Custom Sort Ascending-63',
+ 'zGenAlbum-Is Prototype-64',
+ 'zGenAlbum-Project Document Type-65',
+ 'zGenAlbum-Custom Query Type-66',
+ 'zGenAlbum-Trashed State-67',
+ ('zGenAlbum-Trash Date-68', 'datetime'),
+ 'zGenAlbum-Cloud Delete State-69')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
+ elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17.6")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69]))
-
- counter += 1
-
- description = 'Parses Assets associated with Non-Shared Albums found in the PhotoData-Photos.sqlite' \
- ' from iOS 15. Parses limited asset data with full non-shared album data.'
- report = ArtifactHtmlReport('Ph22-Assets in Non-Shared Albums-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph22-Assets in Non-Shared Albums-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-zPK-1',
- 'zAsset-Directory-Path-2',
- 'zAsset-Filename-3',
- 'zAddAssetAttr- Original Filename-4',
- 'zCldMast- Original Filename-5',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-6',
- 'zAsset-Syndication State-7',
- 'zAsset-Bundle Scope-8',
- 'zAddAssetAttr- Imported by Bundle Identifier-9',
- 'zAddAssetAttr-Imported By Display Name-10',
- 'zAsset-Visibility State-11',
- 'zAsset-Saved Asset Type-12',
- 'zAddAssetAttr-Share Type-13',
- 'zAsset- SortToken -CameraRoll-14',
- 'zAsset-Added Date-15',
- 'zCldMast-Creation Date-16',
- 'zAddAssetAttr-Time Zone Name-17',
- 'zAddAssetAttr-EXIF-String-18',
- 'zAsset-Modification Date-19',
- 'zAsset-Last Shared Date-20',
- 'zAsset-Trashed Date-21',
- 'zAddAssetAttr-zPK-22',
- 'zAsset-UUID = store.cloudphotodb-23',
- 'zAddAssetAttr-Master Fingerprint-24',
- 'zGenAlbum-Creation Date-25',
- 'zGenAlbum-Start Date-26',
- 'zGenAlbum-End Date-27',
- 'ParentzGenAlbum-UUID-28',
- 'ParentzGenAlbum-Cloud GUID-29',
- 'ParentzGenAlbum- Title-30',
- 'zGenAlbum- Title-User&System Applied-31',
- 'zGenAlbum-UUID-32',
- 'zGenAlbum-Cloud GUID-33',
- 'zGenAlbum-Imported by Bundle Identifier-34',
- 'ParentzGenAlbum-Creation Date-35',
- 'ParentzGenAlbum-Pending Items Count-36',
- 'ParentzGenAlbum-Pending Items Type-37',
- 'ParentzGenAlbum-Kind-38',
- 'ParentzGenAlbum-Cloud-Local-State-39',
- 'ParentzGenAlbum-Sync Event Order Key-40',
- 'ParentzGenAlbum-Pinned-41',
- 'ParentzGenAlbum-Custom Sort Key-42',
- 'ParentzGenAlbum-Custom Sort Ascending-43',
- 'ParentzGenAlbum-Is Prototype-44',
- 'ParentzGenAlbum-Project Document Type-45',
- 'ParentzGenAlbum-Custom Query Type-46',
- 'ParentzGenAlbum-Trashed State-47',
- 'ParentzGenAlbum-Trash Date-48',
- 'ParentzGenAlbum-Cloud Delete State-49',
- 'zGenAlbum-Pending Items Count-50',
- 'zGenAlbum-Pending Items Type-51',
- 'zGenAlbum- Cached Photos Count-52',
- 'zGenAlbum- Cached Videos Count-53',
- 'zGenAlbum- Cached Count-54',
- 'zGenAlbum-Has Unseen Content-55',
- 'zGenAlbum-Unseen Asset Count-56',
- 'zGenAlbum-zENT- Entity-57',
- 'zGenAlbum-Album Kind-58',
- 'zGenAlbum-Cloud_Local_State-59',
- 'zGenAlbum-Sync Event Order Key-60',
- 'zGenAlbum-Pinned-61',
- 'zGenAlbum-Custom Sort Key-62',
- 'zGenAlbum-Custom Sort Ascending-63',
- 'zGenAlbum-Is Prototype-64',
- 'zGenAlbum-Project Document Type-65',
- 'zGenAlbum-Custom Query Type-66',
- 'zGenAlbum-Trashed State-67',
- 'zGenAlbum-Trash Date-68',
- 'zGenAlbum-Cloud Delete State-69')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
- tsvname = 'Ph22-Assets in Non-Shared Albums-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph22-Assets in Non-Shared Albums-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available from PhotoData-Photos.sqlite for Assets in Non-Shared Albums')
-
- db.close()
- return
-
- elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
-
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
zAsset.Z_PK AS 'zAsset-zPK',
@@ -1840,127 +1746,465 @@ def get_ph22assetsinnonsharedalbumsphdapsql(files_found, report_folder, seeker,
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE zGenAlbum.ZKIND = 2
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-zPK-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-6',
+ 'zAsset-Syndication State-7',
+ 'zAsset-Bundle Scope-8',
+ 'zAddAssetAttr.Imported by Bundle Identifier-9',
+ 'zAddAssetAttr-Imported By Display Name-10',
+ 'zAsset-Visibility State-11',
+ 'zAsset-Saved Asset Type-12',
+ 'zAddAssetAttr-Share Type-13',
+ 'zAsset-Active Library Scope Participation State-14',
+ ('zAsset- SortToken -CameraRoll-15', 'datetime'),
+ ('zAsset-Added Date-16', 'datetime'),
+ ('zCldMast-Creation Date-17', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-18',
+ 'zAddAssetAttr-EXIF-String-19',
+ ('zAsset-Modification Date-20', 'datetime'),
+ ('zAsset-Last Shared Date-21', 'datetime'),
+ ('zAsset-Trashed Date-22', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-23',
+ 'zAddAssetAttr-zPK-24',
+ 'zAsset-UUID = store.cloudphotodb-25',
+ 'zAddAssetAttr-Master Fingerprint-26',
+ ('zGenAlbum-Creation Date-27', 'datetime'),
+ ('zGenAlbum-Start Date-28', 'datetime'),
+ ('zGenAlbum-End Date-29', 'datetime'),
+ 'ParentzGenAlbum-UUID-30',
+ 'ParentzGenAlbum-Cloud GUID-31',
+ 'ParentzGenAlbum- Title-32',
+ 'zGenAlbum- Title-User&System Applied-33',
+ 'zGenAlbum-UUID-34',
+ 'zGenAlbum-Cloud GUID-35',
+ 'zGenAlbum-Imported by Bundle Identifier-36',
+ ('ParentzGenAlbum-Creation Date-37', 'datetime'),
+ 'ParentzGenAlbum-Pending Items Count-38',
+ 'ParentzGenAlbum-Pending Items Type-39',
+ 'ParentzGenAlbum-Kind-40',
+ 'ParentzGenAlbum-Cloud-Local-State-41',
+ 'ParentzGenAlbum-Sync Event Order Key-42',
+ 'ParentzGenAlbum-Pinned-43',
+ 'ParentzGenAlbum-Custom Sort Key-44',
+ 'ParentzGenAlbum-Custom Sort Ascending-45',
+ 'ParentzGenAlbum-Is Prototype-46',
+ 'ParentzGenAlbum-Project Document Type-47',
+ 'ParentzGenAlbum-Custom Query Type-48',
+ 'ParentzGenAlbum-Trashed State-49',
+ ('ParentzGenAlbum-Trash Date-50', 'datetime'),
+ 'ParentzGenAlbum-Cloud Delete State-51',
+ 'zGenAlbum-Pending Items Count-52',
+ 'zGenAlbum-Pending Items Type-53',
+ 'zGenAlbum- Cached Photos Count-54',
+ 'zGenAlbum- Cached Videos Count-55',
+ 'zGenAlbum- Cached Count-56',
+ 'zGenAlbum-Has Unseen Content-57',
+ 'zGenAlbum-Unseen Asset Count-58',
+ 'zGenAlbum-zENT- Entity-59',
+ 'zGenAlbum-Album Kind-60',
+ 'zGenAlbum-Cloud_Local_State-61',
+ 'zGenAlbum-Sync Event Order Key-62',
+ 'zGenAlbum-Pinned-63',
+ 'zGenAlbum-Custom Sort Key-64',
+ 'zGenAlbum-Custom Sort Ascending-65',
+ 'zGenAlbum-Is Prototype-66',
+ 'zGenAlbum-Project Document Type-67',
+ 'zGenAlbum-Custom Query Type-68',
+ 'zGenAlbum-Trashed State-69',
+ ('zGenAlbum-Trash Date-70', 'datetime'),
+ 'zGenAlbum-Cloud Delete State-71',
+ 'zGenAlbum-Search Index Rebuild State-72',
+ 'zGenAlbum-Duplicate Type-73',
+ 'zGenAlbum-Privacy State-74')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
+ elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74]))
-
- counter += 1
-
- description = 'Parses Assets associated with Non-Shared Albums found in the PhotoData-Photos.sqlite' \
- ' from iOS 16-17. Parses limited asset data with full non-shared album data.'
- report = ArtifactHtmlReport('Ph22-Assets in Non-Shared Albums-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph22-Assets in Non-Shared Albums-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-zPK-1',
- 'zAsset-Directory-Path-2',
- 'zAsset-Filename-3',
- 'zAddAssetAttr- Original Filename-4',
- 'zCldMast- Original Filename-5',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-6',
- 'zAsset-Syndication State-7',
- 'zAsset-Bundle Scope-8',
- 'zAddAssetAttr.Imported by Bundle Identifier-9',
- 'zAddAssetAttr-Imported By Display Name-10',
- 'zAsset-Visibility State-11',
- 'zAsset-Saved Asset Type-12',
- 'zAddAssetAttr-Share Type-13',
- 'zAsset-Active Library Scope Participation State-14',
- 'zAsset- SortToken -CameraRoll-15',
- 'zAsset-Added Date-16',
- 'zCldMast-Creation Date-17',
- 'zAddAssetAttr-Time Zone Name-18',
- 'zAddAssetAttr-EXIF-String-19',
- 'zAsset-Modification Date-20',
- 'zAsset-Last Shared Date-21',
- 'zAsset-Trashed Date-22',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-23',
- 'zAddAssetAttr-zPK-24',
- 'zAsset-UUID = store.cloudphotodb-25',
- 'zAddAssetAttr-Master Fingerprint-26',
- 'zGenAlbum-Creation Date-27',
- 'zGenAlbum-Start Date-28',
- 'zGenAlbum-End Date-29',
- 'ParentzGenAlbum-UUID-30',
- 'ParentzGenAlbum-Cloud GUID-31',
- 'ParentzGenAlbum- Title-32',
- 'zGenAlbum- Title-User&System Applied-33',
- 'zGenAlbum-UUID-34',
- 'zGenAlbum-Cloud GUID-35',
- 'zGenAlbum-Imported by Bundle Identifier-36',
- 'ParentzGenAlbum-Creation Date-37',
- 'ParentzGenAlbum-Pending Items Count-38',
- 'ParentzGenAlbum-Pending Items Type-39',
- 'ParentzGenAlbum-Kind-40',
- 'ParentzGenAlbum-Cloud-Local-State-41',
- 'ParentzGenAlbum-Sync Event Order Key-42',
- 'ParentzGenAlbum-Pinned-43',
- 'ParentzGenAlbum-Custom Sort Key-44',
- 'ParentzGenAlbum-Custom Sort Ascending-45',
- 'ParentzGenAlbum-Is Prototype-46',
- 'ParentzGenAlbum-Project Document Type-47',
- 'ParentzGenAlbum-Custom Query Type-48',
- 'ParentzGenAlbum-Trashed State-49',
- 'ParentzGenAlbum-Trash Date-50',
- 'ParentzGenAlbum-Cloud Delete State-51',
- 'zGenAlbum-Pending Items Count-52',
- 'zGenAlbum-Pending Items Type-53',
- 'zGenAlbum- Cached Photos Count-54',
- 'zGenAlbum- Cached Videos Count-55',
- 'zGenAlbum- Cached Count-56',
- 'zGenAlbum-Has Unseen Content-57',
- 'zGenAlbum-Unseen Asset Count-58',
- 'zGenAlbum-zENT- Entity-59',
- 'zGenAlbum-Album Kind-60',
- 'zGenAlbum-Cloud_Local_State-61',
- 'zGenAlbum-Sync Event Order Key-62',
- 'zGenAlbum-Pinned-63',
- 'zGenAlbum-Custom Sort Key-64',
- 'zGenAlbum-Custom Sort Ascending-65',
- 'zGenAlbum-Is Prototype-66',
- 'zGenAlbum-Project Document Type-67',
- 'zGenAlbum-Custom Query Type-68',
- 'zGenAlbum-Trashed State-69',
- 'zGenAlbum-Trash Date-70',
- 'zGenAlbum-Cloud Delete State-71',
- 'zGenAlbum-Search Index Rebuild State-72',
- 'zGenAlbum-Duplicate Type-73',
- 'zGenAlbum-Privacy State-74')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph22-Assets in Non-Shared Albums-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
- tlactivity = 'Ph22-Assets in Non-Shared Albums-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available from PhotoData-Photos.sqlite for Assets in Non-Shared Albums')
-
- db.close()
- return
+ query = '''
+ SELECT
+ DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
+ zAsset.Z_PK AS 'zAsset-zPK',
+ zAsset.ZDIRECTORY AS 'zAsset-Directory-Path',
+ zAsset.ZFILENAME AS 'zAsset-Filename',
+ zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename',
+ zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename',
+ zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files',
+ CASE zAsset.ZSYNDICATIONSTATE
+ WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0'
+ WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1'
+ WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2'
+ WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3'
+ WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8'
+ WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9'
+ WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || ''
+ END AS 'zAsset-Syndication State',
+ CASE zAsset.ZBUNDLESCOPE
+ WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0'
+ WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1'
+ WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2'
+ WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || ''
+ END AS 'zAsset-Bundle Scope',
+ zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr- Imported by Bundle Identifier',
+ zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr- Imported By Display Name',
+ CASE zAsset.ZVISIBILITYSTATE
+ WHEN 0 THEN '0-Visible-PL-CameraRoll-0'
+ WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || ''
+ END AS 'zAsset-Visibility State',
+ CASE zAsset.ZSAVEDASSETTYPE
+ WHEN 0 THEN '0-Saved-via-other-source-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ WHEN 2 THEN '2-StillTesting-2'
+ WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3'
+ WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4'
+ WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5'
+ WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6'
+ WHEN 7 THEN '7-StillTesting-7'
+ WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8'
+ WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || ''
+ END AS 'zAsset-Saved Asset Type',
+ CASE zAddAssetAttr.ZSHARETYPE
+ WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0'
+ WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || ''
+ END AS 'zAddAssetAttr-Share Type',
+ CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE
+ WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0'
+ WHEN 1 THEN '1-Asset-In-Active-SPL-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || ''
+ END AS 'zAsset-Active Library Scope Participation State',
+ DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
+ DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date',
+ DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date',
+ zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name',
+ zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String',
+ DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
+ DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date',
+ DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
+ zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK',
+ zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
+ zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
+ zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint',
+ DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date',
+ DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
+ DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date',
+ ParentzGenAlbum.ZUUID AS 'ParentzGenAlbum-UUID',
+ ParentzGenAlbum.ZCLOUDGUID AS 'ParentzGenAlbum-Cloud GUID',
+ ParentzGenAlbum.ZTITLE AS 'ParentzGenAlbum- Title',
+ zGenAlbum.ZTITLE AS 'zGenAlbum- Title-User&System Applied',
+ zGenAlbum.ZUUID AS 'zGenAlbum-UUID',
+ zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID',
+ zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier',
+ DateTime(ParentzGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum-Creation Date',
+ ParentzGenAlbum.ZPENDINGITEMSCOUNT AS 'ParentzGenAlbum-Pending Items Count',
+ CASE ParentzGenAlbum.ZPENDINGITEMSTYPE
+ WHEN 1 THEN 'No-1'
+ WHEN 24 THEN '24-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZPENDINGITEMSTYPE || ''
+ END AS 'ParentzGenAlbum-Pending Items Type',
+ CASE ParentzGenAlbum.ZKIND
+ WHEN 2 THEN '2-Non-Shared-Album-2'
+ WHEN 1505 THEN '1505-Shared-Album-1505'
+ WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT'
+ WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT'
+ WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509'
+ WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510'
+ WHEN 3571 THEN '3571-Progress-Sync-3571'
+ WHEN 3572 THEN '3572-Progress-OTA-Restore-3572'
+ WHEN 3573 THEN '3573-Progress-FS-Import-3573'
+ WHEN 3998 THEN '3998-Project Root Folder-3998'
+ WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999'
+ WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZKIND || ''
+ END AS 'ParentzGenAlbum-Kind',
+ CASE ParentzGenAlbum.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0'
+ WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDLOCALSTATE || ''
+ END AS 'ParentzGenAlbum-Cloud-Local-State',
+ ParentzGenAlbum.ZSYNCEVENTORDERKEY AS 'ParentzGenAlbum-Sync Event Order Key',
+ CASE ParentzGenAlbum.ZISPINNED
+ WHEN 0 THEN '0-ParentzGenAlbum Not Pinned-0'
+ WHEN 1 THEN '1-ParentzGenAlbum Pinned-1'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZISPINNED || ''
+ END AS 'ParentzGenAlbum-Pinned',
+ CASE ParentzGenAlbum.ZCUSTOMSORTKEY
+ WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT'
+ WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT'
+ WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMSORTKEY || ''
+ END AS 'ParentzGenAlbum-Custom Sort Key',
+ CASE ParentzGenAlbum.ZCUSTOMSORTASCENDING
+ WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0'
+ WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMSORTASCENDING || ''
+ END AS 'ParentzGenAlbum-Custom Sort Ascending',
+ CASE ParentzGenAlbum.ZISPROTOTYPE
+ WHEN 0 THEN '0-ParentzGenAlbum Not Prototype-0'
+ WHEN 1 THEN '1-ParentzGenAlbum Prototype-1'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZISPROTOTYPE || ''
+ END AS 'ParentzGenAlbum-Is Prototype',
+ CASE ParentzGenAlbum.ZPROJECTDOCUMENTTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZPROJECTDOCUMENTTYPE || ''
+ END AS 'ParentzGenAlbum-Project Document Type',
+ CASE ParentzGenAlbum.ZCUSTOMQUERYTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMQUERYTYPE || ''
+ END AS 'ParentzGenAlbum-Custom Query Type',
+ CASE ParentzGenAlbum.ZTRASHEDSTATE
+ WHEN 0 THEN '0-ParentzGenAlbum Not In Trash-0'
+ WHEN 1 THEN '1-ParentzGenAlbum Album In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZTRASHEDSTATE || ''
+ END AS 'ParentzGenAlbum-Trashed State',
+ DateTime(ParentzGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum-Trash Date',
+ CASE ParentzGenAlbum.ZCLOUDDELETESTATE
+ WHEN 0 THEN '0-ParentzGenAlbum Cloud Not Deleted-0'
+ WHEN 1 THEN '1-ParentzGenAlbum Cloud Album Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDDELETESTATE || ''
+ END AS 'ParentzGenAlbum-Cloud Delete State',
+ zGenAlbum.ZPENDINGITEMSCOUNT AS 'zGenAlbum-Pending Items Count',
+ CASE zGenAlbum.ZPENDINGITEMSTYPE
+ WHEN 1 THEN 'No-1'
+ WHEN 24 THEN '24-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPENDINGITEMSTYPE || ''
+ END AS 'zGenAlbum-Pending Items Type',
+ zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum- Cached Photos Count',
+ zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum- Cached Videos Count',
+ zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum- Cached Count',
+ CASE zGenAlbum.ZHASUNSEENCONTENT
+ WHEN 0 THEN 'No Unseen Content-StillTesting-0'
+ WHEN 1 THEN 'Unseen Content-StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZHASUNSEENCONTENT || ''
+ END AS 'zGenAlbum-Has Unseen Content',
+ zGenAlbum.ZUNSEENASSETSCOUNT AS 'zGenAlbum-Unseen Asset Count',
+ CASE zGenAlbum.Z_ENT
+ WHEN 27 THEN '27-LPL-SPL-CPL_Album-DecodingVariableBasedOniOS-27'
+ WHEN 28 THEN '28-LPL-SPL-CPL-Shared_Album-DecodingVariableBasedOniOS-28'
+ WHEN 29 THEN '29-Shared_Album-DecodingVariableBasedOniOS-29'
+ WHEN 30 THEN '30-Duplicate_Album-Pending_Merge-30'
+ WHEN 35 THEN '35-SearchIndexRebuild-1600KIND-35'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.Z_ENT || ''
+ END AS 'zGenAlbum-zENT- Entity',
+ CASE zGenAlbum.ZKIND
+ WHEN 2 THEN '2-Non-Shared-Album-2'
+ WHEN 1505 THEN '1505-Shared-Album-1505'
+ WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT'
+ WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT'
+ WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509'
+ WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510'
+ WHEN 3571 THEN '3571-Progress-Sync-3571'
+ WHEN 3572 THEN '3572-Progress-OTA-Restore-3572'
+ WHEN 3573 THEN '3573-Progress-FS-Import-3573'
+ WHEN 3998 THEN '3998-Project Root Folder-3998'
+ WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999'
+ WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || ''
+ END AS 'zGenAlbum-Album Kind',
+ CASE zGenAlbum.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0'
+ WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDLOCALSTATE || ''
+ END AS 'zGenAlbum-Cloud_Local_State',
+ zGenAlbum.ZSYNCEVENTORDERKEY AS 'zGenAlbum-Sync Event Order Key',
+ CASE zGenAlbum.ZISPINNED
+ WHEN 0 THEN 'zGenAlbum-Local Not Pinned-0'
+ WHEN 1 THEN 'zGenAlbum-Local Pinned-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPINNED || ''
+ END AS 'zGenAlbum-Pinned',
+ CASE zGenAlbum.ZCUSTOMSORTKEY
+ WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT'
+ WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT'
+ WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTKEY || ''
+ END AS 'zGenAlbum-Custom Sort Key',
+ CASE zGenAlbum.ZCUSTOMSORTASCENDING
+ WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0'
+ WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTASCENDING || ''
+ END AS 'zGenAlbum-Custom Sort Ascending',
+ CASE zGenAlbum.ZISPROTOTYPE
+ WHEN 0 THEN 'zGenAlbum-Not Prototype-0'
+ WHEN 1 THEN 'zGenAlbum-Prototype-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPROTOTYPE || ''
+ END AS 'zGenAlbum-Is Prototype',
+ CASE zGenAlbum.ZPROJECTDOCUMENTTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPROJECTDOCUMENTTYPE || ''
+ END AS 'zGenAlbum-Project Document Type',
+ CASE zGenAlbum.ZCUSTOMQUERYTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMQUERYTYPE || ''
+ END AS 'zGenAlbum-Custom Query Type',
+ CASE zGenAlbum.ZTRASHEDSTATE
+ WHEN 0 THEN 'zGenAlbum Not In Trash-0'
+ WHEN 1 THEN 'zGenAlbum Album In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZTRASHEDSTATE || ''
+ END AS 'zGenAlbum-Trashed State',
+ DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date',
+ CASE zGenAlbum.ZCLOUDDELETESTATE
+ WHEN 0 THEN 'zGenAlbum Cloud Not Deleted-0'
+ WHEN 1 THEN 'zGenAlbum Cloud Album Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDDELETESTATE || ''
+ END AS 'zGenAlbum-Cloud Delete State',
+ CASE zGenAlbum.ZSEARCHINDEXREBUILDSTATE
+ WHEN 0 THEN '0-StillTesting GenAlbm-Search Index State-0'
+ WHEN 1 THEN '1-StillTesting GenAlbm-Search Index State-1'
+ WHEN 2 THEN '2-StillTesting GenAlbm-Search Index State-2'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZSEARCHINDEXREBUILDSTATE || ''
+ END AS 'zGenAlbum-Search Index Rebuild State',
+ CASE zGenAlbum.ZDUPLICATETYPE
+ WHEN 0 THEN '0-StillTesting GenAlbumDuplicateType-0'
+ WHEN 1 THEN 'Duplicate Asset_Pending-Merge-1'
+ WHEN 2 THEN '2-StillTesting GenAlbumDuplicateType-2'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZDUPLICATETYPE || ''
+ END AS 'zGenAlbum-Duplicate Type',
+ CASE zGenAlbum.ZPRIVACYSTATE
+ WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0'
+ WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1'
+ WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPRIVACYSTATE || ''
+ END AS 'zGenAlbum-Privacy State'
+ FROM ZASSET zAsset
+ LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
+ LEFT JOIN Z_29ASSETS z29Assets ON z29Assets.Z_3ASSETS = zAsset.Z_PK
+ LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z29Assets.Z_29ALBUMS
+ LEFT JOIN Z_28ALBUMLISTS z28AlbumLists ON z28AlbumLists.Z_28ALBUMS = zGenAlbum.Z_PK
+ LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z28AlbumLists.Z_2ALBUMLISTS
+ LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER
+ LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
+ WHERE zGenAlbum.ZKIND = 2
+ ORDER BY zAsset.ZDATECREATED
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-zPK-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-6',
+ 'zAsset-Syndication State-7',
+ 'zAsset-Bundle Scope-8',
+ 'zAddAssetAttr.Imported by Bundle Identifier-9',
+ 'zAddAssetAttr-Imported By Display Name-10',
+ 'zAsset-Visibility State-11',
+ 'zAsset-Saved Asset Type-12',
+ 'zAddAssetAttr-Share Type-13',
+ 'zAsset-Active Library Scope Participation State-14',
+ ('zAsset- SortToken -CameraRoll-15', 'datetime'),
+ ('zAsset-Added Date-16', 'datetime'),
+ ('zCldMast-Creation Date-17', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-18',
+ 'zAddAssetAttr-EXIF-String-19',
+ ('zAsset-Modification Date-20', 'datetime'),
+ ('zAsset-Last Shared Date-21', 'datetime'),
+ ('zAsset-Trashed Date-22', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-23',
+ 'zAddAssetAttr-zPK-24',
+ 'zAsset-UUID = store.cloudphotodb-25',
+ 'zAddAssetAttr-Master Fingerprint-26',
+ ('zGenAlbum-Creation Date-27', 'datetime'),
+ ('zGenAlbum-Start Date-28', 'datetime'),
+ ('zGenAlbum-End Date-29', 'datetime'),
+ 'ParentzGenAlbum-UUID-30',
+ 'ParentzGenAlbum-Cloud GUID-31',
+ 'ParentzGenAlbum- Title-32',
+ 'zGenAlbum- Title-User&System Applied-33',
+ 'zGenAlbum-UUID-34',
+ 'zGenAlbum-Cloud GUID-35',
+ 'zGenAlbum-Imported by Bundle Identifier-36',
+ ('ParentzGenAlbum-Creation Date-37', 'datetime'),
+ 'ParentzGenAlbum-Pending Items Count-38',
+ 'ParentzGenAlbum-Pending Items Type-39',
+ 'ParentzGenAlbum-Kind-40',
+ 'ParentzGenAlbum-Cloud-Local-State-41',
+ 'ParentzGenAlbum-Sync Event Order Key-42',
+ 'ParentzGenAlbum-Pinned-43',
+ 'ParentzGenAlbum-Custom Sort Key-44',
+ 'ParentzGenAlbum-Custom Sort Ascending-45',
+ 'ParentzGenAlbum-Is Prototype-46',
+ 'ParentzGenAlbum-Project Document Type-47',
+ 'ParentzGenAlbum-Custom Query Type-48',
+ 'ParentzGenAlbum-Trashed State-49',
+ ('ParentzGenAlbum-Trash Date-50', 'datetime'),
+ 'ParentzGenAlbum-Cloud Delete State-51',
+ 'zGenAlbum-Pending Items Count-52',
+ 'zGenAlbum-Pending Items Type-53',
+ 'zGenAlbum- Cached Photos Count-54',
+ 'zGenAlbum- Cached Videos Count-55',
+ 'zGenAlbum- Cached Count-56',
+ 'zGenAlbum-Has Unseen Content-57',
+ 'zGenAlbum-Unseen Asset Count-58',
+ 'zGenAlbum-zENT- Entity-59',
+ 'zGenAlbum-Album Kind-60',
+ 'zGenAlbum-Cloud_Local_State-61',
+ 'zGenAlbum-Sync Event Order Key-62',
+ 'zGenAlbum-Pinned-63',
+ 'zGenAlbum-Custom Sort Key-64',
+ 'zGenAlbum-Custom Sort Ascending-65',
+ 'zGenAlbum-Is Prototype-66',
+ 'zGenAlbum-Project Document Type-67',
+ 'zGenAlbum-Custom Query Type-68',
+ 'zGenAlbum-Trashed State-69',
+ ('zGenAlbum-Trash Date-70', 'datetime'),
+ 'zGenAlbum-Cloud Delete State-71',
+ 'zGenAlbum-Search Index Rebuild State-72',
+ 'zGenAlbum-Duplicate Type-73',
+ 'zGenAlbum-Privacy State-74')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
zAsset.Z_PK AS 'zAsset-zPK',
@@ -1994,10 +2238,10 @@ def get_ph22assetsinnonsharedalbumsphdapsql(files_found, report_folder, seeker,
ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || ''
END AS 'zAsset-Visibility State',
CASE zAsset.ZISRECENTLYSAVED
- WHEN 0 THEN '0-Not_Recently_Saved iOS18_Still_Testing-0'
- WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1'
+ WHEN 0 THEN '0-Not_Recently_Saved-0'
+ WHEN 1 THEN '1-Recently_Saved-1'
ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || ''
- END AS 'zAsset-Is_Recently_Saved-iOS18',
+ END AS 'zAsset-Is_Recently_Saved',
CASE zAsset.ZSAVEDASSETTYPE
WHEN 0 THEN '0-Saved-via-other-source-0'
WHEN 1 THEN '1-StillTesting-1'
@@ -2032,8 +2276,8 @@ def get_ph22assetsinnonsharedalbumsphdapsql(files_found, report_folder, seeker,
zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18',
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash',
DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date',
DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date',
@@ -2216,144 +2460,105 @@ def get_ph22assetsinnonsharedalbumsphdapsql(files_found, report_folder, seeker,
END AS 'zGenAlbum-Privacy State'
FROM ZASSET zAsset
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
- LEFT JOIN Z_31ASSETS z31Assets ON z31Assets.Z_3ASSETS = zAsset.Z_PK
- LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z31Assets.Z_31ALBUMS
- LEFT JOIN Z_30ALBUMLISTS z30AlbumLists ON z30AlbumLists.Z_30ALBUMS = zGenAlbum.Z_PK
- LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z30AlbumLists.Z_2ALBUMLISTS
+ LEFT JOIN Z_30ASSETS z30Assets ON z30Assets.Z_3ASSETS = zAsset.Z_PK
+ LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z30Assets.Z_30ALBUMS
+ LEFT JOIN Z_29ALBUMLISTS z29AlbumLists ON z29AlbumLists.Z_29ALBUMS = zGenAlbum.Z_PK
+ LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z29AlbumLists.Z_2ALBUMLISTS
LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE zGenAlbum.ZKIND = 2
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76]))
-
- counter += 1
-
- description = 'Parses Assets associated with Non-Shared Albums found in the PhotoData-Photos.sqlite' \
- ' from iOS 16-17. Parses limited asset data with full non-shared album data.'
- report = ArtifactHtmlReport('Ph22-Assets in Non-Shared Albums-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph22-Assets in Non-Shared Albums-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-zPK-1',
- 'zAsset-Directory-Path-2',
- 'zAsset-Filename-3',
- 'zAddAssetAttr- Original Filename-4',
- 'zCldMast- Original Filename-5',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-6',
- 'zAsset-Syndication State-7',
- 'zAsset-Bundle Scope-8',
- 'zAddAssetAttr- Imported by Bundle Identifier-9',
- 'zAddAssetAttr- Imported By Display Name-10',
- 'zAsset-Visibility State-11',
- 'zAsset-Is_Recently_Saved-iOS18-12',
- 'zAsset-Saved Asset Type-13',
- 'zAddAssetAttr-Share Type-14',
- 'zAsset-Active Library Scope Participation State-15',
- 'zAsset- SortToken -CameraRoll-16',
- 'zAsset-Added Date-17',
- 'zCldMast-Creation Date-18',
- 'zAddAssetAttr-Time Zone Name-19',
- 'zAddAssetAttr-EXIF-String-20',
- 'zAsset-Modification Date-21',
- 'zAsset-Last Shared Date-22',
- 'zAsset-Trashed Date-23',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-24',
- 'zAddAssetAttr-zPK-25',
- 'zAsset-UUID = store.cloudphotodb-26',
- 'zAddAssetAttr-Original Stable Hash-iOS18-27',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-28',
- 'zGenAlbum-Creation Date-29',
- 'zGenAlbum-Start Date-30',
- 'zGenAlbum-End Date-31',
- 'ParentzGenAlbum-UUID-32',
- 'ParentzGenAlbum-Cloud GUID-33',
- 'ParentzGenAlbum- Title-34',
- 'zGenAlbum- Title-User&System Applied-35',
- 'zGenAlbum-UUID-36',
- 'zGenAlbum-Cloud GUID-37',
- 'zGenAlbum-Imported by Bundle Identifier-38',
- 'ParentzGenAlbum-Creation Date-39',
- 'ParentzGenAlbum-Pending Items Count-40',
- 'ParentzGenAlbum-Pending Items Type-41',
- 'ParentzGenAlbum-Kind-42',
- 'ParentzGenAlbum-Cloud-Local-State-43',
- 'ParentzGenAlbum-Sync Event Order Key-44',
- 'ParentzGenAlbum-Pinned-45',
- 'ParentzGenAlbum-Custom Sort Key-46',
- 'ParentzGenAlbum-Custom Sort Ascending-47',
- 'ParentzGenAlbum-Is Prototype-48',
- 'ParentzGenAlbum-Project Document Type-49',
- 'ParentzGenAlbum-Custom Query Type-50',
- 'ParentzGenAlbum-Trashed State-51',
- 'ParentzGenAlbum-Trash Date-52',
- 'ParentzGenAlbum-Cloud Delete State-53',
- 'zGenAlbum-Pending Items Count-54',
- 'zGenAlbum-Pending Items Type-55',
- 'zGenAlbum- Cached Photos Count-56',
- 'zGenAlbum- Cached Videos Count-57',
- 'zGenAlbum- Cached Count-58',
- 'zGenAlbum-Has Unseen Content-59',
- 'zGenAlbum-Unseen Asset Count-60',
- 'zGenAlbum-zENT- Entity-61',
- 'zGenAlbum-Album Kind-62',
- 'zGenAlbum-Cloud_Local_State-63',
- 'zGenAlbum-Sync Event Order Key-64',
- 'zGenAlbum-Pinned-65',
- 'zGenAlbum-Custom Sort Key-66',
- 'zGenAlbum-Custom Sort Ascending-67',
- 'zGenAlbum-Is Prototype-68',
- 'zGenAlbum-Project Document Type-69',
- 'zGenAlbum-Custom Query Type-70',
- 'zGenAlbum-Trashed State-71',
- 'zGenAlbum-Trash Date-72',
- 'zGenAlbum-Cloud Delete State-73',
- 'zGenAlbum-Search Index Rebuild State-74',
- 'zGenAlbum-Duplicate Type-75',
- 'zGenAlbum-Privacy State-76')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph22-Assets in Non-Shared Albums-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph22-Assets in Non-Shared Albums-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available from PhotoData-Photos.sqlite for Assets in Non-Shared Albums')
-
- db.close()
- return
-
-
-__artifacts_v2__ = {
- 'Ph22-Assets in Non-Shared Albums-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite Ph22 Assets in Non-Shared Albums',
- 'description': 'Parses Assets associated with Non-Shared Albums found in PhotoData-Photos.sqlite and'
- ' supports iOS 11-18. Parses limited assets data with full non-shared album data.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-12',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-E-Asset_In_Albums',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph22assetsinnonsharedalbumsphdapsql'
- }
-}
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-zPK-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-6',
+ 'zAsset-Syndication State-7',
+ 'zAsset-Bundle Scope-8',
+ 'zAddAssetAttr- Imported by Bundle Identifier-9',
+ 'zAddAssetAttr- Imported By Display Name-10',
+ 'zAsset-Visibility State-11',
+ 'zAsset-Is_Recently_Saved-12',
+ 'zAsset-Saved Asset Type-13',
+ 'zAddAssetAttr-Share Type-14',
+ 'zAsset-Active Library Scope Participation State-15',
+ ('zAsset- SortToken -CameraRoll-16', 'datetime'),
+ ('zAsset-Added Date-17', 'datetime'),
+ ('zCldMast-Creation Date-18', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-19',
+ 'zAddAssetAttr-EXIF-String-20',
+ ('zAsset-Modification Date-21', 'datetime'),
+ ('zAsset-Last Shared Date-22', 'datetime'),
+ ('zAsset-Trashed Date-23', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-24',
+ 'zAddAssetAttr-zPK-25',
+ 'zAsset-UUID = store.cloudphotodb-26',
+ 'zAddAssetAttr-Original Stable Hash-27',
+ 'zAddAssetAttr.Adjusted Stable Hash-28',
+ ('zGenAlbum-Creation Date-29', 'datetime'),
+ ('zGenAlbum-Start Date-30', 'datetime'),
+ ('zGenAlbum-End Date-31', 'datetime'),
+ 'ParentzGenAlbum-UUID-32',
+ 'ParentzGenAlbum-Cloud GUID-33',
+ 'ParentzGenAlbum- Title-34',
+ 'zGenAlbum- Title-User&System Applied-35',
+ 'zGenAlbum-UUID-36',
+ 'zGenAlbum-Cloud GUID-37',
+ 'zGenAlbum-Imported by Bundle Identifier-38',
+ ('ParentzGenAlbum-Creation Date-39', 'datetime'),
+ 'ParentzGenAlbum-Pending Items Count-40',
+ 'ParentzGenAlbum-Pending Items Type-41',
+ 'ParentzGenAlbum-Kind-42',
+ 'ParentzGenAlbum-Cloud-Local-State-43',
+ 'ParentzGenAlbum-Sync Event Order Key-44',
+ 'ParentzGenAlbum-Pinned-45',
+ 'ParentzGenAlbum-Custom Sort Key-46',
+ 'ParentzGenAlbum-Custom Sort Ascending-47',
+ 'ParentzGenAlbum-Is Prototype-48',
+ 'ParentzGenAlbum-Project Document Type-49',
+ 'ParentzGenAlbum-Custom Query Type-50',
+ 'ParentzGenAlbum-Trashed State-51',
+ ('ParentzGenAlbum-Trash Date-52', 'datetime'),
+ 'ParentzGenAlbum-Cloud Delete State-53',
+ 'zGenAlbum-Pending Items Count-54',
+ 'zGenAlbum-Pending Items Type-55',
+ 'zGenAlbum- Cached Photos Count-56',
+ 'zGenAlbum- Cached Videos Count-57',
+ 'zGenAlbum- Cached Count-58',
+ 'zGenAlbum-Has Unseen Content-59',
+ 'zGenAlbum-Unseen Asset Count-60',
+ 'zGenAlbum-zENT- Entity-61',
+ 'zGenAlbum-Album Kind-62',
+ 'zGenAlbum-Cloud_Local_State-63',
+ 'zGenAlbum-Sync Event Order Key-64',
+ 'zGenAlbum-Pinned-65',
+ 'zGenAlbum-Custom Sort Key-66',
+ 'zGenAlbum-Custom Sort Ascending-67',
+ 'zGenAlbum-Is Prototype-68',
+ 'zGenAlbum-Project Document Type-69',
+ 'zGenAlbum-Custom Query Type-70',
+ 'zGenAlbum-Trashed State-71',
+ ('zGenAlbum-Trash Date-72', 'datetime'),
+ 'zGenAlbum-Cloud Delete State-73',
+ 'zGenAlbum-Search Index Rebuild State-74',
+ 'zGenAlbum-Duplicate Type-75',
+ 'zGenAlbum-Privacy State-76')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph23AlbumsSharedNAD.py b/scripts/artifacts/Ph23AlbumsSharedNAD.py
index bfcb98f7..fc63b00c 100644
--- a/scripts/artifacts/Ph23AlbumsSharedNAD.py
+++ b/scripts/artifacts/Ph23AlbumsSharedNAD.py
@@ -1,40 +1,48 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 2.0
-#
-# Description:
-# Parses Shared Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table and supports iOS 11-18.
-# Parses Shared Album records only no asset data being parsed. This parser will contain albums and
-# shared album invites and invite status data.
-# This parser is based on research and SQLite Queries written by Scott Koenig
-# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347
-#
+__artifacts_v2__ = {
+ 'Ph23SharedAlbumRecordsInviteswithNADPhDaPsql': {
+ 'name': 'Ph23-Shared Album Records & Invites NAD-PhDaPsql',
+ 'description': 'Parses Shared Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table'
+ ' and supports iOS 11-18. Parses Shared Album records only, no asset data being parsed.'
+ ' This parser will contain shared albums, share album invites, and invite status data.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-D-Generic_Album_Records-NAD',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
+@artifact_processor
+def Ph23SharedAlbumRecordsInviteswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
-def get_ph23sharedalbumsphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("10.3.4"):
- logfunc("Unsupported version for PhotoData-Photos.sqlite Shared Album records with no asset data from iOS " + iosversion)
+ logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("12")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Creation Date',
DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
@@ -215,110 +223,88 @@ def get_ph23sharedalbumsphdapsql(files_found, report_folder, seeker, wrap_text,
= zCldShareAlbumInvRec.ZALBUM
WHERE zGenAlbum.ZKIND = 1505
ORDER BY zGenAlbum.ZSTARTDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57]))
-
- counter += 1
-
- description = 'Parses Shared Album records found in the PhotoData-Photos.sqlite from' \
- ' ZGENERICALBUM Table and supports iOS 11. Parses Shared Album records only' \
- ' no asset data is being parsed in this parser. This parser will contain shared albums,' \
- ' shared album invites and the invite status data.'
- report = ArtifactHtmlReport('Ph23-Shared Album Records NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph23-Shared Album Records NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zGenAlbum-Cloud Creation Date-0',
- 'zGenAlbum-Start Date-1',
- 'zGenAlbum-End Date-2',
- 'zGenAlbum-Cloud Subscription Date-3',
- 'zGenAlbum- Title-User&System Applied-4',
- 'zGenAlbum-UUID-5',
- 'zGenAlbum-Cloud GUID-6',
- 'zGenAlbum-Cloud Metadata-HEX NSKeyed Plist-7',
- 'zGenAlbum-Pending Items Count-8',
- 'zGenAlbum-Pending Items Type-9',
- 'zGenAlbum- Cached Photos Count-10',
- 'zGenAlbum- Cached Videos Count-11',
- 'zGenAlbum- Cached Count-12',
- 'zGenAlbum-Has Unseen Content-13',
- 'zGenAlbum-Unseen Asset Count-14',
- 'zGenAlbum-zENT- Entity-15',
- 'zGenAlbum-Album Kind-16',
- 'zGenAlbum-Cloud_Local_State-17',
- 'zGenAlbum-Sync Event Order Key-18',
- 'zGenAlbum-is Owned-19',
- 'zGenAlbum-Cloud Relationship State-20',
- 'zGenAlbum-Cloud Relationship State Local-21',
- 'zGenAlbum-Cloud Owner Mail Key-22',
- 'zGenAlbum-Cloud Owner Frist Name-23',
- 'zGenAlbum-Cloud Owner Last Name-24',
- 'zGenAlbum-Cloud Owner Full Name-25',
- 'zGenAlbum-Cloud Person ID-26',
- 'zGenAlbum-Cloud Owner Hashed Person ID-27',
- 'zGenAlbum-Local Cloud Multi-Contributors Enabled-28',
- 'zGenAlbum-Cloud Multi-Contributors Enabled-29',
- 'zGenAlbum-Cloud Album Sub Type-30',
- 'zGenAlbum-Cloud Contribution Date-31',
- 'zGenAlbum-Cloud Last Interesting Change Date-32',
- 'zGenAlbum-Cloud Notification Enabled-33',
- 'zGenAlbum-Pinned-34',
- 'zGenAlbum-Custom Sort Key-35',
- 'zGenAlbum-Custom Sort Ascending-36',
- 'zGenAlbum-Custom Query Type-37',
- 'zGenAlbum-Trashed State-38',
- 'zGenAlbum-Trash Date-39',
- 'zGenAlbum-Cloud Owner Whitelisted-40',
- 'zGenAlbum-Cloud Local Public URL Enabled-41',
- 'zGenAlbum-Cloud Public URL Enabled-42',
- 'zGenAlbum-Public URL-43',
- 'zGenAlbum-Key Asset Face Thumb Index-44',
- 'zGenAlbum-Custom Query Parameters-45',
- 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-46',
- 'zCldShareAlbumInvRec-Invitation State Local-47',
- 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-48',
- 'zCldShareAlbumInvRec-Subscription Date-49',
- 'zCldShareAlbumInvRec-Invitee First Name-50',
- 'zCldShareAlbumInvRec-Invitee Last Name-51',
- 'zCldShareAlbumInvRec-Invitee Full Name-52',
- 'zCldShareAlbumInvRec-Invitee Hashed Person ID-53',
- 'zCldShareAlbumInvRec-Invitee Email Key-54',
- 'zCldShareAlbumInvRec-Album GUID-55',
- 'zCldShareAlbumInvRec-Cloud GUID-56',
- 'zAlbumList-Needs Reordering Number-57')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph23-Shared Album Records NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph23-Shared Album Records NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Shared Album Records with No Asset Data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57]))
+
+ data_headers = (('zGenAlbum-Cloud Creation Date-0', 'datetime'),
+ ('zGenAlbum-Start Date-1', 'datetime'),
+ ('zGenAlbum-End Date-2', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-3', 'datetime'),
+ 'zGenAlbum- Title-User&System Applied-4',
+ 'zGenAlbum-UUID-5',
+ 'zGenAlbum-Cloud GUID-6',
+ 'zGenAlbum-Cloud Metadata-HEX NSKeyed Plist-7',
+ 'zGenAlbum-Pending Items Count-8',
+ 'zGenAlbum-Pending Items Type-9',
+ 'zGenAlbum- Cached Photos Count-10',
+ 'zGenAlbum- Cached Videos Count-11',
+ 'zGenAlbum- Cached Count-12',
+ 'zGenAlbum-Has Unseen Content-13',
+ 'zGenAlbum-Unseen Asset Count-14',
+ 'zGenAlbum-zENT- Entity-15',
+ 'zGenAlbum-Album Kind-16',
+ 'zGenAlbum-Cloud_Local_State-17',
+ 'zGenAlbum-Sync Event Order Key-18',
+ 'zGenAlbum-is Owned-19',
+ 'zGenAlbum-Cloud Relationship State-20',
+ 'zGenAlbum-Cloud Relationship State Local-21',
+ 'zGenAlbum-Cloud Owner Mail Key-22',
+ 'zGenAlbum-Cloud Owner Frist Name-23',
+ 'zGenAlbum-Cloud Owner Last Name-24',
+ 'zGenAlbum-Cloud Owner Full Name-25',
+ 'zGenAlbum-Cloud Person ID-26',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-27',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-28',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-29',
+ 'zGenAlbum-Cloud Album Sub Type-30',
+ ('zGenAlbum-Cloud Contribution Date-31', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-32', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-33',
+ 'zGenAlbum-Pinned-34',
+ 'zGenAlbum-Custom Sort Key-35',
+ 'zGenAlbum-Custom Sort Ascending-36',
+ 'zGenAlbum-Custom Query Type-37',
+ 'zGenAlbum-Trashed State-38',
+ ('zGenAlbum-Trash Date-39', 'datetime'),
+ 'zGenAlbum-Cloud Owner Whitelisted-40',
+ 'zGenAlbum-Cloud Local Public URL Enabled-41',
+ 'zGenAlbum-Cloud Public URL Enabled-42',
+ 'zGenAlbum-Public URL-43',
+ 'zGenAlbum-Key Asset Face Thumb Index-44',
+ 'zGenAlbum-Custom Query Parameters-45',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-46',
+ 'zCldShareAlbumInvRec-Invitation State Local-47',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-48',
+ ('zCldShareAlbumInvRec-Subscription Date-49', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-50',
+ 'zCldShareAlbumInvRec-Invitee Last Name-51',
+ 'zCldShareAlbumInvRec-Invitee Full Name-52',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-53',
+ 'zCldShareAlbumInvRec-Invitee Email Key-54',
+ 'zCldShareAlbumInvRec-Album GUID-55',
+ 'zCldShareAlbumInvRec-Cloud GUID-56',
+ 'zAlbumList-Needs Reordering Number-57')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("12")) & (version.parse(iosversion) < version.parse("13")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Creation Date',
DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
@@ -503,110 +489,88 @@ def get_ph23sharedalbumsphdapsql(files_found, report_folder, seeker, wrap_text,
= zCldShareAlbumInvRec.ZALBUM
WHERE zGenAlbum.ZKIND = 1505
ORDER BY zGenAlbum.ZSTARTDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57]))
-
- counter += 1
-
- description = 'Parses Shared Album records found in the PhotoData-Photos.sqlite from' \
- ' ZGENERICALBUM Table and supports iOS 12. Parses Shared Album records only' \
- ' no asset data is being parsed in this parser. This parser will contain shared albums,' \
- ' shared album invites and invite status data.'
- report = ArtifactHtmlReport('Ph23-Shared Album Records NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph23-Shared Album Records NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zGenAlbum-Cloud Creation Date-0',
- 'zGenAlbum-Start Date-1',
- 'zGenAlbum-End Date-2',
- 'zGenAlbum-Cloud Subscription Date-3',
- 'zGenAlbum- Title-User&System Applied-4',
- 'zGenAlbum-UUID-5',
- 'zGenAlbum-Cloud GUID-6',
- 'zGenAlbum-Pending Items Count-7',
- 'zGenAlbum-Pending Items Type-8',
- 'zGenAlbum- Cached Photos Count-9',
- 'zGenAlbum- Cached Videos Count-10',
- 'zGenAlbum- Cached Count-11',
- 'zGenAlbum-Has Unseen Content-12',
- 'zGenAlbum-Unseen Asset Count-13',
- 'zGenAlbum-zENT- Entity-14',
- 'zGenAlbum-Album Kind-15',
- 'zGenAlbum-Cloud_Local_State-16',
- 'zGenAlbum-Sync Event Order Key-17',
- 'zGenAlbum-is Owned-18',
- 'zGenAlbum-Cloud Relationship State-19',
- 'zGenAlbum-Cloud Relationship State Local-20',
- 'zGenAlbum-Cloud Owner Mail Key-21',
- 'zGenAlbum-Cloud Owner First Name-22',
- 'zGenAlbum-Cloud Owner Last Name-23',
- 'zGenAlbum-Cloud Owner Full Name-24',
- 'zGenAlbum-Cloud Person ID-25',
- 'zGenAlbum-Cloud Owner Hashed Person ID-26',
- 'zGenAlbum-Local Cloud Multi-Contributors Enabled-27',
- 'zGenAlbum-Cloud Multi-Contributors Enabled-28',
- 'zGenAlbum-Cloud Album Sub Type-29',
- 'zGenAlbum-Cloud Contribution Date-30',
- 'zGenAlbum-Cloud Last Interesting Change Date-31',
- 'zGenAlbum-Cloud Notification Enabled-32',
- 'zGenAlbum-Pinned-33',
- 'zGenAlbum-Custom Sort Key-34',
- 'zGenAlbum-Custom Sort Ascending-35',
- 'zGenAlbum-Custom Query Type-36',
- 'zGenAlbum-Trashed State-37',
- 'zGenAlbum-Trash Date-38',
- 'zGenAlbum-Cloud Delete State-39',
- 'zGenAlbum-Cloud Owner Whitelisted-40',
- 'zGenAlbum-Cloud Local Public URL Enabled-41',
- 'zGenAlbum-Cloud Public URL Enabled-42',
- 'zGenAlbum-Public URL-43',
- 'zGenAlbum-Key Asset Face Thumb Index-44',
- 'zGenAlbum-Custom Query Parameters-45',
- 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-46',
- 'zCldShareAlbumInvRec-Invitation State Local-47',
- 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-48',
- 'zCldShareAlbumInvRec-Subscription Date-49',
- 'zCldShareAlbumInvRec-Invitee First Name-50',
- 'zCldShareAlbumInvRec-Invitee Last Name-51',
- 'zCldShareAlbumInvRec-Invitee Full Name-52',
- 'zCldShareAlbumInvRec-Invitee Hashed Person ID-53',
- 'zCldShareAlbumInvRec-Invitee Email Key-54',
- 'zCldShareAlbumInvRec-Album GUID-55',
- 'zCldShareAlbumInvRec-Cloud GUID-56',
- 'zAlbumList-Needs Reordering Number-57')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph23-Shared Album Records NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph23-Shared Album Records NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Shared Album Records with No Asset Data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57]))
+
+ data_headers = (('zGenAlbum-Cloud Creation Date-0', 'datetime'),
+ ('zGenAlbum-Start Date-1', 'datetime'),
+ ('zGenAlbum-End Date-2', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-3', 'datetime'),
+ 'zGenAlbum- Title-User&System Applied-4',
+ 'zGenAlbum-UUID-5',
+ 'zGenAlbum-Cloud GUID-6',
+ 'zGenAlbum-Pending Items Count-7',
+ 'zGenAlbum-Pending Items Type-8',
+ 'zGenAlbum- Cached Photos Count-9',
+ 'zGenAlbum- Cached Videos Count-10',
+ 'zGenAlbum- Cached Count-11',
+ 'zGenAlbum-Has Unseen Content-12',
+ 'zGenAlbum-Unseen Asset Count-13',
+ 'zGenAlbum-zENT- Entity-14',
+ 'zGenAlbum-Album Kind-15',
+ 'zGenAlbum-Cloud_Local_State-16',
+ 'zGenAlbum-Sync Event Order Key-17',
+ 'zGenAlbum-is Owned-18',
+ 'zGenAlbum-Cloud Relationship State-19',
+ 'zGenAlbum-Cloud Relationship State Local-20',
+ 'zGenAlbum-Cloud Owner Mail Key-21',
+ 'zGenAlbum-Cloud Owner First Name-22',
+ 'zGenAlbum-Cloud Owner Last Name-23',
+ 'zGenAlbum-Cloud Owner Full Name-24',
+ 'zGenAlbum-Cloud Person ID-25',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-26',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-27',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-28',
+ 'zGenAlbum-Cloud Album Sub Type-29',
+ ('zGenAlbum-Cloud Contribution Date-30', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-31', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-32',
+ 'zGenAlbum-Pinned-33',
+ 'zGenAlbum-Custom Sort Key-34',
+ 'zGenAlbum-Custom Sort Ascending-35',
+ 'zGenAlbum-Custom Query Type-36',
+ 'zGenAlbum-Trashed State-37',
+ ('zGenAlbum-Trash Date-38', 'datetime'),
+ 'zGenAlbum-Cloud Delete State-39',
+ 'zGenAlbum-Cloud Owner Whitelisted-40',
+ 'zGenAlbum-Cloud Local Public URL Enabled-41',
+ 'zGenAlbum-Cloud Public URL Enabled-42',
+ 'zGenAlbum-Public URL-43',
+ 'zGenAlbum-Key Asset Face Thumb Index-44',
+ 'zGenAlbum-Custom Query Parameters-45',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-46',
+ 'zCldShareAlbumInvRec-Invitation State Local-47',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-48',
+ ('zCldShareAlbumInvRec-Subscription Date-49', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-50',
+ 'zCldShareAlbumInvRec-Invitee Last Name-51',
+ 'zCldShareAlbumInvRec-Invitee Full Name-52',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-53',
+ 'zCldShareAlbumInvRec-Invitee Email Key-54',
+ 'zCldShareAlbumInvRec-Album GUID-55',
+ 'zCldShareAlbumInvRec-Cloud GUID-56',
+ 'zAlbumList-Needs Reordering Number-57')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("13")) & (version.parse(iosversion) < version.parse("14")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Creation Date',
DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date',
@@ -800,116 +764,94 @@ def get_ph23sharedalbumsphdapsql(files_found, report_folder, seeker, wrap_text,
= zCldShareAlbumInvRec.ZALBUM
WHERE zGenAlbum.ZKIND = 1505
ORDER BY zGenAlbum.ZCREATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63]))
-
- counter += 1
-
- description = 'Parses Shared Album records found in the PhotoData-Photos.sqlite from' \
- ' ZGENERICALBUM Table and supports iOS 13. Parses Shared Album records only' \
- ' no asset data is being parsed in this parser. This parser will contain shared albums,' \
- ' shared album invites and the invite status data.'
- report = ArtifactHtmlReport('Ph23-Shared Album Records NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph23-Shared Album Records NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zGenAlbum-Cloud Creation Date-0',
- 'zGenAlbum-Creation Date-1',
- 'zGenAlbum-Start Date-2',
- 'zGenAlbum-End Date-3',
- 'zGenAlbum-Cloud Subscription Date-4',
- 'zGenAlbum- Title-User&System Applied-5',
- 'zGenAlbum-UUID-6',
- 'zGenAlbum-Cloud GUID-7',
- 'zGenAlbum-Pending Items Count-8',
- 'zGenAlbum-Pending Items Type-9',
- 'zGenAlbum- Cached Photos Count-10',
- 'zGenAlbum- Cached Videos Count-11',
- 'zGenAlbum- Cached Count-12',
- 'zGenAlbum-Has Unseen Content-13',
- 'zGenAlbum-Unseen Asset Count-14',
- 'zGenAlbum-zENT- Entity-15',
- 'zGenAlbum-Album Kind-16',
- 'zGenAlbum-Cloud_Local_State-17',
- 'zGenAlbum-Sync Event Order Key-18',
- 'zGenAlbum-is Owned-19',
- 'zGenAlbum-Cloud Relationship State-20',
- 'zGenAlbum-Cloud Relationship State Local-21',
- 'zGenAlbum-Cloud Owner Mail Key-22',
- 'zGenAlbum-Cloud Owner Frist Name-23',
- 'zGenAlbum-Cloud Owner Last Name-24',
- 'zGenAlbum-Cloud Owner Full Name-25',
- 'zGenAlbum-Cloud Person ID-26',
- 'zGenAlbum-Cloud Owner Hashed Person ID-27',
- 'zGenAlbum-Local Cloud Multi-Contributors Enabled-28',
- 'zGenAlbum-Cloud Multi-Contributors Enabled-29',
- 'zGenAlbum-Cloud Album Sub Type-30',
- 'zGenAlbum-Cloud Contribution Date-31',
- 'zGenAlbum-Cloud Last Interesting Change Date-32',
- 'zGenAlbum-Cloud Notification Enabled-33',
- 'zGenAlbum-Pinned-34',
- 'zGenAlbum-Custom Sort Key-35',
- 'zGenAlbum-Custom Sort Ascending-36',
- 'zGenAlbum-Project Document Type-37',
- 'zGenAlbum-Custom Query Type-38',
- 'zGenAlbum-Trashed State-39',
- 'zGenAlbum-Trash Date-40',
- 'zGenAlbum-Cloud Delete State-41',
- 'zGenAlbum-Cloud Owner Whitelisted-42',
- 'zGenAlbum-Cloud Local Public URL Enabled-43',
- 'zGenAlbum-Cloud Public URL Enabled-44',
- 'zGenAlbum-Public URL-45',
- 'zGenAlbum-Key Asset Face Thumb Index-46',
- 'zGenAlbum-Project Text Extension ID-47',
- 'zGenAlbum-User Query Data-48',
- 'zGenAlbum-Custom Query Parameters-49',
- 'zGenAlbum-Project Data-50',
- 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-51',
- 'zCldShareAlbumInvRec-Invitation State Local-52',
- 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-53',
- 'zCldShareAlbumInvRec-Subscription Date-54',
- 'zCldShareAlbumInvRec-Invitee First Name-55',
- 'zCldShareAlbumInvRec-Invitee Last Name-56',
- 'zCldShareAlbumInvRec-Invitee Full Name-57',
- 'zCldShareAlbumInvRec-Invitee Hashed Person ID-58',
- 'zCldShareAlbumInvRec-Invitee Email Key-59',
- 'zCldShareAlbumInvRec-Album GUID-60',
- 'zCldShareAlbumInvRec-Cloud GUID-61',
- 'zGenAlbum-Project Render UUID-62',
- 'zAlbumList-Needs Reordering Number-63')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph23-Shared Album Records NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph23-Shared Album Records NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Shared Album Records with No Asset Data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63]))
+
+ data_headers = (('zGenAlbum-Cloud Creation Date-0', 'datetime'),
+ ('zGenAlbum-Creation Date-1', 'datetime'),
+ ('zGenAlbum-Start Date-2', 'datetime'),
+ ('zGenAlbum-End Date-3', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-4', 'datetime'),
+ 'zGenAlbum- Title-User&System Applied-5',
+ 'zGenAlbum-UUID-6',
+ 'zGenAlbum-Cloud GUID-7',
+ 'zGenAlbum-Pending Items Count-8',
+ 'zGenAlbum-Pending Items Type-9',
+ 'zGenAlbum- Cached Photos Count-10',
+ 'zGenAlbum- Cached Videos Count-11',
+ 'zGenAlbum- Cached Count-12',
+ 'zGenAlbum-Has Unseen Content-13',
+ 'zGenAlbum-Unseen Asset Count-14',
+ 'zGenAlbum-zENT- Entity-15',
+ 'zGenAlbum-Album Kind-16',
+ 'zGenAlbum-Cloud_Local_State-17',
+ 'zGenAlbum-Sync Event Order Key-18',
+ 'zGenAlbum-is Owned-19',
+ 'zGenAlbum-Cloud Relationship State-20',
+ 'zGenAlbum-Cloud Relationship State Local-21',
+ 'zGenAlbum-Cloud Owner Mail Key-22',
+ 'zGenAlbum-Cloud Owner Frist Name-23',
+ 'zGenAlbum-Cloud Owner Last Name-24',
+ 'zGenAlbum-Cloud Owner Full Name-25',
+ 'zGenAlbum-Cloud Person ID-26',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-27',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-28',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-29',
+ 'zGenAlbum-Cloud Album Sub Type-30',
+ ('zGenAlbum-Cloud Contribution Date-31', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-32', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-33',
+ 'zGenAlbum-Pinned-34',
+ 'zGenAlbum-Custom Sort Key-35',
+ 'zGenAlbum-Custom Sort Ascending-36',
+ 'zGenAlbum-Project Document Type-37',
+ 'zGenAlbum-Custom Query Type-38',
+ 'zGenAlbum-Trashed State-39',
+ ('zGenAlbum-Trash Date-40', 'datetime'),
+ 'zGenAlbum-Cloud Delete State-41',
+ 'zGenAlbum-Cloud Owner Whitelisted-42',
+ 'zGenAlbum-Cloud Local Public URL Enabled-43',
+ 'zGenAlbum-Cloud Public URL Enabled-44',
+ 'zGenAlbum-Public URL-45',
+ 'zGenAlbum-Key Asset Face Thumb Index-46',
+ 'zGenAlbum-Project Text Extension ID-47',
+ 'zGenAlbum-User Query Data-48',
+ 'zGenAlbum-Custom Query Parameters-49',
+ 'zGenAlbum-Project Data-50',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-51',
+ 'zCldShareAlbumInvRec-Invitation State Local-52',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-53',
+ ('zCldShareAlbumInvRec-Subscription Date-54', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-55',
+ 'zCldShareAlbumInvRec-Invitee Last Name-56',
+ 'zCldShareAlbumInvRec-Invitee Full Name-57',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-58',
+ 'zCldShareAlbumInvRec-Invitee Email Key-59',
+ 'zCldShareAlbumInvRec-Album GUID-60',
+ 'zCldShareAlbumInvRec-Cloud GUID-61',
+ 'zGenAlbum-Project Render UUID-62',
+ 'zAlbumList-Needs Reordering Number-63')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Creation Date',
DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date',
@@ -1109,119 +1051,97 @@ def get_ph23sharedalbumsphdapsql(files_found, report_folder, seeker, wrap_text,
= zCldShareAlbumInvRec.ZALBUM
WHERE zGenAlbum.ZKIND = 1505
ORDER BY zGenAlbum.ZCREATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65]))
-
- counter += 1
-
- description = 'Parses Shared Album records found in the PhotoData-Photos.sqlite from' \
- ' ZGENERICALBUM Table and supports iOS 14. Parses Shared Album records only' \
- ' no asset data is being parsed in this parser. This parser will contain shared albums,' \
- ' shared album invites and the invite status data.'
- report = ArtifactHtmlReport('Ph23-Shared Album Records NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph23-Shared Album Records NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zGenAlbum-Cloud Creation Date-0',
- 'zGenAlbum-Creation Date-1',
- 'zGenAlbum-Start Date-2',
- 'zGenAlbum-End Date-3',
- 'zGenAlbum-Cloud Subscription Date-4',
- 'zGenAlbum- Title-User&System Applied-5',
- 'zGenAlbum-UUID-6',
- 'zGenAlbum-Cloud GUID-7',
- 'zGenAlbum-Creator Bundle ID-8',
- 'zGenAlbum-Pending Items Count-9',
- 'zGenAlbum-Pending Items Type-10',
- 'zGenAlbum- Cached Photos Count-11',
- 'zGenAlbum- Cached Videos Count-12',
- 'zGenAlbum- Cached Count-13',
- 'zGenAlbum-Has Unseen Content-14',
- 'zGenAlbum-Unseen Asset Count-15',
- 'zGenAlbum-zENT- Entity-16',
- 'zGenAlbum-Album Kind-17',
- 'zGenAlbum-Cloud_Local_State-18',
- 'zGenAlbum-Sync Event Order Key-19',
- 'zGenAlbum-is Owned-20',
- 'zGenAlbum-Cloud Relationship State-21',
- 'zGenAlbum-Cloud Relationship State Local-22',
- 'zGenAlbum-Cloud Owner Mail Key-23',
- 'zGenAlbum-Cloud Owner Frist Name-24',
- 'zGenAlbum-Cloud Owner Last Name-25',
- 'zGenAlbum-Cloud Owner Full Name-26',
- 'zGenAlbum-Cloud Person ID-27',
- 'zGenAlbum-Cloud Owner Hashed Person ID-28',
- 'zGenAlbum-Local Cloud Multi-Contributors Enabled-29',
- 'zGenAlbum-Cloud Multi-Contributors Enabled-30',
- 'zGenAlbum-Cloud Album Sub Type-31',
- 'zGenAlbum-Cloud Contribution Date-32',
- 'zGenAlbum-Cloud Last Interesting Change Date-33',
- 'zGenAlbum-Cloud Notification Enabled-34',
- 'zGenAlbum-Pinned-35',
- 'zGenAlbum-Custom Sort Key-36',
- 'zGenAlbum-Custom Sort Ascending-37',
- 'zGenAlbum-Is Prototype-38',
- 'zGenAlbum-Project Document Type-39',
- 'zGenAlbum-Custom Query Type-40',
- 'zGenAlbum-Trashed State-41',
- 'zGenAlbum-Trash Date-42',
- 'zGenAlbum-Cloud Delete State-43',
- 'zGenAlbum-Cloud Owner Whitelisted-44',
- 'zGenAlbum-Cloud Local Public URL Enabled-45',
- 'zGenAlbum-Cloud Public URL Enabled-46',
- 'zGenAlbum-Public URL-47',
- 'zGenAlbum-Key Asset Face Thumb Index-48',
- 'zGenAlbum-Project Text Extension ID-49',
- 'zGenAlbum-User Query Data-50',
- 'zGenAlbum-Custom Query Parameters-51',
- 'zGenAlbum-Project Data-52',
- 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-53',
- 'zCldShareAlbumInvRec-Invitation State Local-54',
- 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-55',
- 'zCldShareAlbumInvRec-Subscription Date-56',
- 'zCldShareAlbumInvRec-Invitee First Name-57',
- 'zCldShareAlbumInvRec-Invitee Last Name-58',
- 'zCldShareAlbumInvRec-Invitee Full Name-59',
- 'zCldShareAlbumInvRec-Invitee Hashed Person ID-60',
- 'zCldShareAlbumInvRec-Invitee Email Key-61',
- 'zCldShareAlbumInvRec-Album GUID-62',
- 'zCldShareAlbumInvRec-Cloud GUID-63',
- 'zGenAlbum-Project Render UUID-64',
- 'zAlbumList-Needs Reordering Number-65')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph23-Shared Album Records NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph23-Shared Album Records NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Shared Album Records with No Asset Data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65]))
+
+ data_headers = (('zGenAlbum-Cloud Creation Date-0', 'datetime'),
+ ('zGenAlbum-Creation Date-1', 'datetime'),
+ ('zGenAlbum-Start Date-2', 'datetime'),
+ ('zGenAlbum-End Date-3', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-4', 'datetime'),
+ 'zGenAlbum- Title-User&System Applied-5',
+ 'zGenAlbum-UUID-6',
+ 'zGenAlbum-Cloud GUID-7',
+ 'zGenAlbum-Creator Bundle ID-8',
+ 'zGenAlbum-Pending Items Count-9',
+ 'zGenAlbum-Pending Items Type-10',
+ 'zGenAlbum- Cached Photos Count-11',
+ 'zGenAlbum- Cached Videos Count-12',
+ 'zGenAlbum- Cached Count-13',
+ 'zGenAlbum-Has Unseen Content-14',
+ 'zGenAlbum-Unseen Asset Count-15',
+ 'zGenAlbum-zENT- Entity-16',
+ 'zGenAlbum-Album Kind-17',
+ 'zGenAlbum-Cloud_Local_State-18',
+ 'zGenAlbum-Sync Event Order Key-19',
+ 'zGenAlbum-is Owned-20',
+ 'zGenAlbum-Cloud Relationship State-21',
+ 'zGenAlbum-Cloud Relationship State Local-22',
+ 'zGenAlbum-Cloud Owner Mail Key-23',
+ 'zGenAlbum-Cloud Owner Frist Name-24',
+ 'zGenAlbum-Cloud Owner Last Name-25',
+ 'zGenAlbum-Cloud Owner Full Name-26',
+ 'zGenAlbum-Cloud Person ID-27',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-28',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-29',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-30',
+ 'zGenAlbum-Cloud Album Sub Type-31',
+ ('zGenAlbum-Cloud Contribution Date-32', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-33', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-34',
+ 'zGenAlbum-Pinned-35',
+ 'zGenAlbum-Custom Sort Key-36',
+ 'zGenAlbum-Custom Sort Ascending-37',
+ 'zGenAlbum-Is Prototype-38',
+ 'zGenAlbum-Project Document Type-39',
+ 'zGenAlbum-Custom Query Type-40',
+ 'zGenAlbum-Trashed State-41',
+ ('zGenAlbum-Trash Date-42', 'datetime'),
+ 'zGenAlbum-Cloud Delete State-43',
+ 'zGenAlbum-Cloud Owner Whitelisted-44',
+ 'zGenAlbum-Cloud Local Public URL Enabled-45',
+ 'zGenAlbum-Cloud Public URL Enabled-46',
+ 'zGenAlbum-Public URL-47',
+ 'zGenAlbum-Key Asset Face Thumb Index-48',
+ 'zGenAlbum-Project Text Extension ID-49',
+ 'zGenAlbum-User Query Data-50',
+ 'zGenAlbum-Custom Query Parameters-51',
+ 'zGenAlbum-Project Data-52',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-53',
+ 'zCldShareAlbumInvRec-Invitation State Local-54',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-55',
+ ('zCldShareAlbumInvRec-Subscription Date-56', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-57',
+ 'zCldShareAlbumInvRec-Invitee Last Name-58',
+ 'zCldShareAlbumInvRec-Invitee Full Name-59',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-60',
+ 'zCldShareAlbumInvRec-Invitee Email Key-61',
+ 'zCldShareAlbumInvRec-Album GUID-62',
+ 'zCldShareAlbumInvRec-Cloud GUID-63',
+ 'zGenAlbum-Project Render UUID-64',
+ 'zAlbumList-Needs Reordering Number-65')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Creation Date',
DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date',
@@ -1421,119 +1341,97 @@ def get_ph23sharedalbumsphdapsql(files_found, report_folder, seeker, wrap_text,
= zCldShareAlbumInvRec.ZALBUM
WHERE zGenAlbum.ZKIND = 1505
ORDER BY zGenAlbum.ZCREATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65]))
+
+ data_headers = (('zGenAlbum-Cloud Creation Date-0', 'datetime'),
+ ('zGenAlbum-Creation Date-1', 'datetime'),
+ ('zGenAlbum-Start Date-2', 'datetime'),
+ ('zGenAlbum-End Date-3', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-4', 'datetime'),
+ 'zGenAlbum- Title-User&System Applied-5',
+ 'zGenAlbum-UUID-6',
+ 'zGenAlbum-Cloud GUID-7',
+ 'zGenAlbum-Imported by Bundle Identifier-8',
+ 'zGenAlbum-Pending Items Count-9',
+ 'zGenAlbum-Pending Items Type-10',
+ 'zGenAlbum- Cached Photos Count-11',
+ 'zGenAlbum- Cached Videos Count-12',
+ 'zGenAlbum- Cached Count-13',
+ 'zGenAlbum-Has Unseen Content-14',
+ 'zGenAlbum-Unseen Asset Count-15',
+ 'zGenAlbum-zENT- Entity-16',
+ 'zGenAlbum-Album Kind-17',
+ 'zGenAlbum-Cloud_Local_State-18',
+ 'zGenAlbum-Sync Event Order Key-19',
+ 'zGenAlbum-is Owned-20',
+ 'zGenAlbum-Cloud Relationship State-21',
+ 'zGenAlbum-Cloud Relationship State Local-22',
+ 'zGenAlbum-Cloud Owner Mail Key-23',
+ 'zGenAlbum-Cloud Owner Frist Name-24',
+ 'zGenAlbum-Cloud Owner Last Name-25',
+ 'zGenAlbum-Cloud Owner Full Name-26',
+ 'zGenAlbum-Cloud Person ID-27',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-28',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-29',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-30',
+ 'zGenAlbum-Cloud Album Sub Type-31',
+ ('zGenAlbum-Cloud Contribution Date-32', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-33', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-34',
+ 'zGenAlbum-Pinned-35',
+ 'zGenAlbum-Custom Sort Key-36',
+ 'zGenAlbum-Custom Sort Ascending-37',
+ 'zGenAlbum-Is Prototype-38',
+ 'zGenAlbum-Project Document Type-39',
+ 'zGenAlbum-Custom Query Type-40',
+ 'zGenAlbum-Trashed State-41',
+ ('zGenAlbum-Trash Date-42', 'datetime'),
+ 'zGenAlbum-Cloud Delete State-43',
+ 'zGenAlbum-Cloud Owner Whitelisted-44',
+ 'zGenAlbum-Cloud Local Public URL Enabled-45',
+ 'zGenAlbum-Cloud Public URL Enabled-46',
+ 'zGenAlbum-Public URL-47',
+ 'zGenAlbum-Key Asset Face Thumb Index-48',
+ 'zGenAlbum-Project Text Extension ID-49',
+ 'zGenAlbum-User Query Data-50',
+ 'zGenAlbum-Custom Query Parameters-51',
+ 'zGenAlbum-Project Data-52',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-53',
+ 'zCldShareAlbumInvRec-Invitation State Local-54',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-55',
+ ('zCldShareAlbumInvRec-Subscription Date-56', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-57',
+ 'zCldShareAlbumInvRec-Invitee Last Name-58',
+ 'zCldShareAlbumInvRec-Invitee Full Name-59',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-60',
+ 'zCldShareAlbumInvRec-Invitee Email Key-61',
+ 'zCldShareAlbumInvRec-Album GUID-62',
+ 'zCldShareAlbumInvRec-Cloud GUID-63',
+ 'zGenAlbum-Project Render UUID-64',
+ 'zAlbumList-Needs Reordering Number-65')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
+ elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17.6")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65]))
-
- counter += 1
-
- description = 'Parses Shared Album records found in the PhotoData-Photos.sqlite from' \
- ' ZGENERICALBUM Table and supports iOS 15. Parses Shared Album records only' \
- ' no asset data is being parsed in this parser. This parser will contain shared albums,' \
- ' shared album invites and the invite status data.'
- report = ArtifactHtmlReport('Ph23-Shared Album Records NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph23-Shared Album Records NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zGenAlbum-Cloud Creation Date-0',
- 'zGenAlbum-Creation Date-1',
- 'zGenAlbum-Start Date-2',
- 'zGenAlbum-End Date-3',
- 'zGenAlbum-Cloud Subscription Date-4',
- 'zGenAlbum- Title-User&System Applied-5',
- 'zGenAlbum-UUID-6',
- 'zGenAlbum-Cloud GUID-7',
- 'zGenAlbum-Imported by Bundle Identifier-8',
- 'zGenAlbum-Pending Items Count-9',
- 'zGenAlbum-Pending Items Type-10',
- 'zGenAlbum- Cached Photos Count-11',
- 'zGenAlbum- Cached Videos Count-12',
- 'zGenAlbum- Cached Count-13',
- 'zGenAlbum-Has Unseen Content-14',
- 'zGenAlbum-Unseen Asset Count-15',
- 'zGenAlbum-zENT- Entity-16',
- 'zGenAlbum-Album Kind-17',
- 'zGenAlbum-Cloud_Local_State-18',
- 'zGenAlbum-Sync Event Order Key-19',
- 'zGenAlbum-is Owned-20',
- 'zGenAlbum-Cloud Relationship State-21',
- 'zGenAlbum-Cloud Relationship State Local-22',
- 'zGenAlbum-Cloud Owner Mail Key-23',
- 'zGenAlbum-Cloud Owner Frist Name-24',
- 'zGenAlbum-Cloud Owner Last Name-25',
- 'zGenAlbum-Cloud Owner Full Name-26',
- 'zGenAlbum-Cloud Person ID-27',
- 'zGenAlbum-Cloud Owner Hashed Person ID-28',
- 'zGenAlbum-Local Cloud Multi-Contributors Enabled-29',
- 'zGenAlbum-Cloud Multi-Contributors Enabled-30',
- 'zGenAlbum-Cloud Album Sub Type-31',
- 'zGenAlbum-Cloud Contribution Date-32',
- 'zGenAlbum-Cloud Last Interesting Change Date-33',
- 'zGenAlbum-Cloud Notification Enabled-34',
- 'zGenAlbum-Pinned-35',
- 'zGenAlbum-Custom Sort Key-36',
- 'zGenAlbum-Custom Sort Ascending-37',
- 'zGenAlbum-Is Prototype-38',
- 'zGenAlbum-Project Document Type-39',
- 'zGenAlbum-Custom Query Type-40',
- 'zGenAlbum-Trashed State-41',
- 'zGenAlbum-Trash Date-42',
- 'zGenAlbum-Cloud Delete State-43',
- 'zGenAlbum-Cloud Owner Whitelisted-44',
- 'zGenAlbum-Cloud Local Public URL Enabled-45',
- 'zGenAlbum-Cloud Public URL Enabled-46',
- 'zGenAlbum-Public URL-47',
- 'zGenAlbum-Key Asset Face Thumb Index-48',
- 'zGenAlbum-Project Text Extension ID-49',
- 'zGenAlbum-User Query Data-50',
- 'zGenAlbum-Custom Query Parameters-51',
- 'zGenAlbum-Project Data-52',
- 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-53',
- 'zCldShareAlbumInvRec-Invitation State Local-54',
- 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-55',
- 'zCldShareAlbumInvRec-Subscription Date-56',
- 'zCldShareAlbumInvRec-Invitee First Name-57',
- 'zCldShareAlbumInvRec-Invitee Last Name-58',
- 'zCldShareAlbumInvRec-Invitee Full Name-59',
- 'zCldShareAlbumInvRec-Invitee Hashed Person ID-60',
- 'zCldShareAlbumInvRec-Invitee Email Key-61',
- 'zCldShareAlbumInvRec-Album GUID-62',
- 'zCldShareAlbumInvRec-Cloud GUID-63',
- 'zGenAlbum-Project Render UUID-64',
- 'zAlbumList-Needs Reordering Number-65')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph23-Shared Album Records NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph23-Shared Album Records NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Shared Album Records with No Asset Data')
- db.close()
- return
-
- elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
-
- cursor.execute("""
+ query = '''
SELECT
DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Creation Date',
DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date',
@@ -1752,123 +1650,101 @@ def get_ph23sharedalbumsphdapsql(files_found, report_folder, seeker, wrap_text,
= zCldShareAlbumInvRec.ZALBUM
WHERE zGenAlbum.ZKIND = 1505
ORDER BY zGenAlbum.ZCREATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69]))
+
+ data_headers = (('zGenAlbum-Cloud Creation Date-0', 'datetime'),
+ ('zGenAlbum-Creation Date-1', 'datetime'),
+ ('zGenAlbum-Start Date-2', 'datetime'),
+ ('zGenAlbum-End Date-3', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-4', 'datetime'),
+ 'zGenAlbum- Title-User&System Applied-5',
+ 'zGenAlbum-UUID-6',
+ 'zGenAlbum-Cloud GUID-7',
+ 'zGenAlbum-Imported by Bundle Identifier-8',
+ 'zGenAlbum-Pending Items Count-9',
+ 'zGenAlbum-Pending Items Type-10',
+ 'zGenAlbum- Cached Photos Count-11',
+ 'zGenAlbum- Cached Videos Count-12',
+ 'zGenAlbum- Cached Count-13',
+ 'zGenAlbum-Has Unseen Content-14',
+ 'zGenAlbum-Unseen Asset Count-15',
+ 'zGenAlbum-zENT- Entity-16',
+ 'zGenAlbum-Album Kind-17',
+ 'zGenAlbum-Cloud_Local_State-18',
+ 'zGenAlbum-Sync Event Order Key-19',
+ 'zGenAlbum-is Owned-20',
+ 'zGenAlbum-Cloud Relationship State-21',
+ 'zGenAlbum-Cloud Relationship State Local-22',
+ 'zGenAlbum-Cloud Owner Mail Key-23',
+ 'zGenAlbum-Cloud Owner First Name-24',
+ 'zGenAlbum-Cloud Owner Last Name-25',
+ 'zGenAlbum-Cloud Owner Full Name-26',
+ 'zGenAlbum-Cloud Person ID-27',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-28',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-29',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-30',
+ 'zGenAlbum-Cloud Album Sub Type-31',
+ ('zGenAlbum-Cloud Contribution Date-32', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-33', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-34',
+ 'zGenAlbum-Pinned-35',
+ 'zGenAlbum-Custom Sort Key-36',
+ 'zGenAlbum-Custom Sort Ascending-37',
+ 'zGenAlbum-Is Prototype-38',
+ 'zGenAlbum-Project Document Type-39',
+ 'zGenAlbum-Custom Query Type-40',
+ 'zGenAlbum-Trashed State-41',
+ ('zGenAlbum-Trash Date-42', 'datetime'),
+ 'zGenAlbum-Cloud Delete State-43',
+ 'zGenAlbum-Cloud Owner Whitelisted-44',
+ 'zGenAlbum-Cloud Local Public URL Enabled-45',
+ 'zGenAlbum-Cloud Public URL Enabled-46',
+ 'zGenAlbum-Public URL-47',
+ 'zGenAlbum-Key Asset Face Thumb Index-48',
+ 'zGenAlbum-Project Text Extension ID-49',
+ 'zGenAlbum-User Query Data-50',
+ 'zGenAlbum-Custom Query Parameters-51',
+ 'zGenAlbum-Project Data-52',
+ 'zGenAlbum-Search Index Rebuild State-53',
+ 'zGenAlbum-Duplicate Type-54',
+ 'zGenAlbum-Privacy State-55',
+ 'zCldShareAlbumInvRec-zUUID-56',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-57',
+ 'zCldShareAlbumInvRec-Invitation State Local-58',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-59',
+ ('zCldShareAlbumInvRec-Subscription Date-60', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-61',
+ 'zCldShareAlbumInvRec-Invitee Last Name-62',
+ 'zCldShareAlbumInvRec-Invitee Full Name-63',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-64',
+ 'zCldShareAlbumInvRec-Invitee Email Key-65',
+ 'zCldShareAlbumInvRec-Album GUID-66',
+ 'zCldShareAlbumInvRec-Cloud GUID-67',
+ 'zGenAlbum-Project Render UUID-68',
+ 'zAlbumList-Needs Reordering Number-69')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
+ elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69]))
-
- counter += 1
-
- description = 'Parses Shared Album records found in the PhotoData-Photos.sqlite from' \
- ' ZGENERICALBUM Table and supports iOS 16-17. Parses Shared Album records only' \
- ' no asset data is being parsed in this parser. This parser will contain shared albums,' \
- ' shared album invites and the invite status data.'
- report = ArtifactHtmlReport('Ph23-Shared Album Records NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph23-Shared Album Records NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zGenAlbum-Cloud Creation Date-0',
- 'zGenAlbum-Creation Date-1',
- 'zGenAlbum-Start Date-2',
- 'zGenAlbum-End Date-3',
- 'zGenAlbum-Cloud Subscription Date-4',
- 'zGenAlbum- Title-User&System Applied-5',
- 'zGenAlbum-UUID-6',
- 'zGenAlbum-Cloud GUID-7',
- 'zGenAlbum-Imported by Bundle Identifier-8',
- 'zGenAlbum-Pending Items Count-9',
- 'zGenAlbum-Pending Items Type-10',
- 'zGenAlbum- Cached Photos Count-11',
- 'zGenAlbum- Cached Videos Count-12',
- 'zGenAlbum- Cached Count-13',
- 'zGenAlbum-Has Unseen Content-14',
- 'zGenAlbum-Unseen Asset Count-15',
- 'zGenAlbum-zENT- Entity-16',
- 'zGenAlbum-Album Kind-17',
- 'zGenAlbum-Cloud_Local_State-18',
- 'zGenAlbum-Sync Event Order Key-19',
- 'zGenAlbum-is Owned-20',
- 'zGenAlbum-Cloud Relationship State-21',
- 'zGenAlbum-Cloud Relationship State Local-22',
- 'zGenAlbum-Cloud Owner Mail Key-23',
- 'zGenAlbum-Cloud Owner First Name-24',
- 'zGenAlbum-Cloud Owner Last Name-25',
- 'zGenAlbum-Cloud Owner Full Name-26',
- 'zGenAlbum-Cloud Person ID-27',
- 'zGenAlbum-Cloud Owner Hashed Person ID-28',
- 'zGenAlbum-Local Cloud Multi-Contributors Enabled-29',
- 'zGenAlbum-Cloud Multi-Contributors Enabled-30',
- 'zGenAlbum-Cloud Album Sub Type-31',
- 'zGenAlbum-Cloud Contribution Date-32',
- 'zGenAlbum-Cloud Last Interesting Change Date-33',
- 'zGenAlbum-Cloud Notification Enabled-34',
- 'zGenAlbum-Pinned-35',
- 'zGenAlbum-Custom Sort Key-36',
- 'zGenAlbum-Custom Sort Ascending-37',
- 'zGenAlbum-Is Prototype-38',
- 'zGenAlbum-Project Document Type-39',
- 'zGenAlbum-Custom Query Type-40',
- 'zGenAlbum-Trashed State-41',
- 'zGenAlbum-Trash Date-42',
- 'zGenAlbum-Cloud Delete State-43',
- 'zGenAlbum-Cloud Owner Whitelisted-44',
- 'zGenAlbum-Cloud Local Public URL Enabled-45',
- 'zGenAlbum-Cloud Public URL Enabled-46',
- 'zGenAlbum-Public URL-47',
- 'zGenAlbum-Key Asset Face Thumb Index-48',
- 'zGenAlbum-Project Text Extension ID-49',
- 'zGenAlbum-User Query Data-50',
- 'zGenAlbum-Custom Query Parameters-51',
- 'zGenAlbum-Project Data-52',
- 'zGenAlbum-Search Index Rebuild State-53',
- 'zGenAlbum-Duplicate Type-54',
- 'zGenAlbum-Privacy State-55',
- 'zCldShareAlbumInvRec-zUUID-56',
- 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-57',
- 'zCldShareAlbumInvRec-Invitation State Local-58',
- 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-59',
- 'zCldShareAlbumInvRec-Subscription Date-60',
- 'zCldShareAlbumInvRec-Invitee First Name-61',
- 'zCldShareAlbumInvRec-Invitee Last Name-62',
- 'zCldShareAlbumInvRec-Invitee Full Name-63',
- 'zCldShareAlbumInvRec-Invitee Hashed Person ID-64',
- 'zCldShareAlbumInvRec-Invitee Email Key-65',
- 'zCldShareAlbumInvRec-Album GUID-66',
- 'zCldShareAlbumInvRec-Cloud GUID-67',
- 'zGenAlbum-Project Render UUID-68',
- 'zAlbumList-Needs Reordering Number-69')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph23-Shared Album Records NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph23-Shared Album Records NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Shared Album Records with No Asset Data')
-
- db.close()
- return
- elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
-
- cursor.execute("""
+ query = '''
SELECT
DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Creation Date',
DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date',
@@ -2081,137 +1957,408 @@ def get_ph23sharedalbumsphdapsql(files_found, report_folder, seeker, wrap_text,
END AS 'zAlbumList-Needs Reordering Number'
FROM ZGENERICALBUM zGenAlbum
LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER
- LEFT JOIN Z_30ALBUMLISTS z30AlbumLists ON z30AlbumLists.Z_30ALBUMS = zGenAlbum.Z_PK
- LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z30AlbumLists.Z_2ALBUMLISTS
+ LEFT JOIN Z_28ALBUMLISTS z28AlbumLists ON z28AlbumLists.Z_28ALBUMS = zGenAlbum.Z_PK
+ LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z28AlbumLists.Z_2ALBUMLISTS
LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON zGenAlbum.Z_PK
= zCldShareAlbumInvRec.ZALBUM
WHERE zGenAlbum.ZKIND = 1505
ORDER BY zGenAlbum.ZCREATIONDATE
- """)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69]))
+
+ data_headers = (('zGenAlbum-Cloud Creation Date-0', 'datetime'),
+ ('zGenAlbum-Creation Date-1', 'datetime'),
+ ('zGenAlbum-Start Date-2', 'datetime'),
+ ('zGenAlbum-End Date-3', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-4', 'datetime'),
+ 'zGenAlbum- Title-User&System Applied-5',
+ 'zGenAlbum-UUID-6',
+ 'zGenAlbum-Cloud GUID-7',
+ 'zGenAlbum-Imported by Bundle Identifier-8',
+ 'zGenAlbum-Pending Items Count-9',
+ 'zGenAlbum-Pending Items Type-10',
+ 'zGenAlbum- Cached Photos Count-11',
+ 'zGenAlbum- Cached Videos Count-12',
+ 'zGenAlbum- Cached Count-13',
+ 'zGenAlbum-Has Unseen Content-14',
+ 'zGenAlbum-Unseen Asset Count-15',
+ 'zGenAlbum-zENT- Entity-16',
+ 'zGenAlbum-Album Kind-17',
+ 'zGenAlbum-Cloud_Local_State-18',
+ 'zGenAlbum-Sync Event Order Key-19',
+ 'zGenAlbum-is Owned-20',
+ 'zGenAlbum-Cloud Relationship State-21',
+ 'zGenAlbum-Cloud Relationship State Local-22',
+ 'zGenAlbum-Cloud Owner Mail Key-23',
+ 'zGenAlbum-Cloud Owner First Name-24',
+ 'zGenAlbum-Cloud Owner Last Name-25',
+ 'zGenAlbum-Cloud Owner Full Name-26',
+ 'zGenAlbum-Cloud Person ID-27',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-28',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-29',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-30',
+ 'zGenAlbum-Cloud Album Sub Type-31',
+ ('zGenAlbum-Cloud Contribution Date-32', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-33', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-34',
+ 'zGenAlbum-Pinned-35',
+ 'zGenAlbum-Custom Sort Key-36',
+ 'zGenAlbum-Custom Sort Ascending-37',
+ 'zGenAlbum-Is Prototype-38',
+ 'zGenAlbum-Project Document Type-39',
+ 'zGenAlbum-Custom Query Type-40',
+ 'zGenAlbum-Trashed State-41',
+ ('zGenAlbum-Trash Date-42', 'datetime'),
+ 'zGenAlbum-Cloud Delete State-43',
+ 'zGenAlbum-Cloud Owner Whitelisted-44',
+ 'zGenAlbum-Cloud Local Public URL Enabled-45',
+ 'zGenAlbum-Cloud Public URL Enabled-46',
+ 'zGenAlbum-Public URL-47',
+ 'zGenAlbum-Key Asset Face Thumb Index-48',
+ 'zGenAlbum-Project Text Extension ID-49',
+ 'zGenAlbum-User Query Data-50',
+ 'zGenAlbum-Custom Query Parameters-51',
+ 'zGenAlbum-Project Data-52',
+ 'zGenAlbum-Search Index Rebuild State-53',
+ 'zGenAlbum-Duplicate Type-54',
+ 'zGenAlbum-Privacy State-55',
+ 'zCldShareAlbumInvRec-zUUID-56',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-57',
+ 'zCldShareAlbumInvRec-Invitation State Local-58',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-59',
+ ('zCldShareAlbumInvRec-Subscription Date-60', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-61',
+ 'zCldShareAlbumInvRec-Invitee Last Name-62',
+ 'zCldShareAlbumInvRec-Invitee Full Name-63',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-64',
+ 'zCldShareAlbumInvRec-Invitee Email Key-65',
+ 'zCldShareAlbumInvRec-Album GUID-66',
+ 'zCldShareAlbumInvRec-Cloud GUID-67',
+ 'zGenAlbum-Project Render UUID-68',
+ 'zAlbumList-Needs Reordering Number-69')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
+ elif version.parse(iosversion) >= version.parse("18"):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69]))
-
- counter += 1
-
- description = 'Parses Shared Album records found in the PhotoData-Photos.sqlite from' \
- ' ZGENERICALBUM Table and supports iOS 18. Parses Shared Album records only' \
- ' no asset data is being parsed in this parser. This parser will contain shared albums,' \
- ' shared album invites and the invite status data.'
- report = ArtifactHtmlReport('Ph23-Shared Album Records NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph23-Shared Album Records NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zGenAlbum-Cloud Creation Date-0',
- 'zGenAlbum-Creation Date-1',
- 'zGenAlbum-Start Date-2',
- 'zGenAlbum-End Date-3',
- 'zGenAlbum-Cloud Subscription Date-4',
- 'zGenAlbum- Title-User&System Applied-5',
- 'zGenAlbum-UUID-6',
- 'zGenAlbum-Cloud GUID-7',
- 'zGenAlbum-Imported by Bundle Identifier-8',
- 'zGenAlbum-Pending Items Count-9',
- 'zGenAlbum-Pending Items Type-10',
- 'zGenAlbum- Cached Photos Count-11',
- 'zGenAlbum- Cached Videos Count-12',
- 'zGenAlbum- Cached Count-13',
- 'zGenAlbum-Has Unseen Content-14',
- 'zGenAlbum-Unseen Asset Count-15',
- 'zGenAlbum-zENT- Entity-16',
- 'zGenAlbum-Album Kind-17',
- 'zGenAlbum-Cloud_Local_State-18',
- 'zGenAlbum-Sync Event Order Key-19',
- 'zGenAlbum-is Owned-20',
- 'zGenAlbum-Cloud Relationship State-21',
- 'zGenAlbum-Cloud Relationship State Local-22',
- 'zGenAlbum-Cloud Owner Mail Key-23',
- 'zGenAlbum-Cloud Owner First Name-24',
- 'zGenAlbum-Cloud Owner Last Name-25',
- 'zGenAlbum-Cloud Owner Full Name-26',
- 'zGenAlbum-Cloud Person ID-27',
- 'zGenAlbum-Cloud Owner Hashed Person ID-28',
- 'zGenAlbum-Local Cloud Multi-Contributors Enabled-29',
- 'zGenAlbum-Cloud Multi-Contributors Enabled-30',
- 'zGenAlbum-Cloud Album Sub Type-31',
- 'zGenAlbum-Cloud Contribution Date-32',
- 'zGenAlbum-Cloud Last Interesting Change Date-33',
- 'zGenAlbum-Cloud Notification Enabled-34',
- 'zGenAlbum-Pinned-35',
- 'zGenAlbum-Custom Sort Key-36',
- 'zGenAlbum-Custom Sort Ascending-37',
- 'zGenAlbum-Is Prototype-38',
- 'zGenAlbum-Project Document Type-39',
- 'zGenAlbum-Custom Query Type-40',
- 'zGenAlbum-Trashed State-41',
- 'zGenAlbum-Trash Date-42',
- 'zGenAlbum-Cloud Delete State-43',
- 'zGenAlbum-Cloud Owner Whitelisted-44',
- 'zGenAlbum-Cloud Local Public URL Enabled-45',
- 'zGenAlbum-Cloud Public URL Enabled-46',
- 'zGenAlbum-Public URL-47',
- 'zGenAlbum-Key Asset Face Thumb Index-48',
- 'zGenAlbum-Project Text Extension ID-49',
- 'zGenAlbum-User Query Data-50',
- 'zGenAlbum-Custom Query Parameters-51',
- 'zGenAlbum-Project Data-52',
- 'zGenAlbum-Search Index Rebuild State-53',
- 'zGenAlbum-Duplicate Type-54',
- 'zGenAlbum-Privacy State-55',
- 'zCldShareAlbumInvRec-zUUID-56',
- 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-57',
- 'zCldShareAlbumInvRec-Invitation State Local-58',
- 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-59',
- 'zCldShareAlbumInvRec-Subscription Date-60',
- 'zCldShareAlbumInvRec-Invitee First Name-61',
- 'zCldShareAlbumInvRec-Invitee Last Name-62',
- 'zCldShareAlbumInvRec-Invitee Full Name-63',
- 'zCldShareAlbumInvRec-Invitee Hashed Person ID-64',
- 'zCldShareAlbumInvRec-Invitee Email Key-65',
- 'zCldShareAlbumInvRec-Album GUID-66',
- 'zCldShareAlbumInvRec-Cloud GUID-67',
- 'zGenAlbum-Project Render UUID-68',
- 'zAlbumList-Needs Reordering Number-69')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph23-Shared Album Records NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph23-Shared Album Records NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Shared Album Records with No Asset Data')
- db.close()
- return
-
-
-__artifacts_v2__ = {
- 'Ph23-Shared Album Records & Invites with NAD-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite 23 Shared Album Records with No Asset Data',
- 'description': 'Parses Shared Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table'
- ' and supports iOS 11-18. Parses Shared Album records only, no asset data being parsed.'
- ' This parser will contain shared albums, share album invites, and invite status data.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-13',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-D-Generic_Album_Records-NAD',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph23sharedalbumsphdapsql'
- }
-}
+ query = '''
+ SELECT
+ DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Creation Date',
+ DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date',
+ DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
+ DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date',
+ DateTime(zGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Subscription Date',
+ zGenAlbum.ZTITLE AS 'zGenAlbum- Title-User&System Applied',
+ zGenAlbum.ZUUID AS 'zGenAlbum-UUID',
+ zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID',
+ zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier',
+ zGenAlbum.ZPENDINGITEMSCOUNT AS 'zGenAlbum-Pending Items Count',
+ CASE zGenAlbum.ZPENDINGITEMSTYPE
+ WHEN 1 THEN 'No-1'
+ WHEN 24 THEN '24-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPENDINGITEMSTYPE || ''
+ END AS 'zGenAlbum-Pending Items Type',
+ zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum- Cached Photos Count',
+ zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum- Cached Videos Count',
+ zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum- Cached Count',
+ CASE zGenAlbum.ZHASUNSEENCONTENT
+ WHEN 0 THEN 'No Unseen Content-StillTesting-0'
+ WHEN 1 THEN 'Unseen Content-StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZHASUNSEENCONTENT || ''
+ END AS 'zGenAlbum-Has Unseen Content',
+ zGenAlbum.ZUNSEENASSETSCOUNT AS 'zGenAlbum-Unseen Asset Count',
+ CASE zGenAlbum.Z_ENT
+ WHEN 27 THEN '27-LPL-SPL-CPL_Album-DecodingVariableBasedOniOS-27'
+ WHEN 28 THEN '28-LPL-SPL-CPL-Shared_Album-DecodingVariableBasedOniOS-28'
+ WHEN 29 THEN '29-Shared_Album-DecodingVariableBasedOniOS-29'
+ WHEN 30 THEN '30-Duplicate_Album-Pending_Merge-30'
+ WHEN 35 THEN '35-SearchIndexRebuild-1600KIND-35'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.Z_ENT || ''
+ END AS 'zGenAlbum-zENT- Entity',
+ CASE zGenAlbum.ZKIND
+ WHEN 2 THEN '2-Non-Shared-Album-2'
+ WHEN 1505 THEN '1505-Shared-Album-1505'
+ WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT'
+ WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT'
+ WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509'
+ WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510'
+ WHEN 3571 THEN '3571-Progress-Sync-3571'
+ WHEN 3572 THEN '3572-Progress-OTA-Restore-3572'
+ WHEN 3573 THEN '3573-Progress-FS-Import-3573'
+ WHEN 3998 THEN '3998-Project Root Folder-3998'
+ WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999'
+ WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || ''
+ END AS 'zGenAlbum-Album Kind',
+ CASE zGenAlbum.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0'
+ WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDLOCALSTATE || ''
+ END AS 'zGenAlbum-Cloud_Local_State',
+ zGenAlbum.ZSYNCEVENTORDERKEY AS 'zGenAlbum-Sync Event Order Key',
+ CASE zGenAlbum.ZISOWNED
+ WHEN 0 THEN 'zGenAlbum-Not Owned by Device Apple Acnt-0'
+ WHEN 1 THEN 'zGenAlbum-Owned by Device Apple Acnt-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISOWNED || ''
+ END AS 'zGenAlbum-is Owned',
+ CASE zGenAlbum.ZCLOUDRELATIONSHIPSTATE
+ WHEN 0 THEN 'zGenAlbum-Cloud Album Owned by Device Apple Acnt-0'
+ WHEN 2 THEN 'zGenAlbum-Cloud Album Not Owned by Device Apple Acnt-2'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDRELATIONSHIPSTATE || ''
+ END AS 'zGenAlbum-Cloud Relationship State',
+ CASE zGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL
+ WHEN 0 THEN 'zGenAlbum-Shared Album Accessible Local Device-0'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL || ''
+ END AS 'zGenAlbum-Cloud Relationship State Local',
+ zGenAlbum.ZCLOUDOWNEREMAILKEY AS 'zGenAlbum-Cloud Owner Mail Key',
+ zGenAlbum.ZCLOUDOWNERFIRSTNAME AS 'zGenAlbum-Cloud Owner Frist Name',
+ zGenAlbum.ZCLOUDOWNERLASTNAME AS 'zGenAlbum-Cloud Owner Last Name',
+ zGenAlbum.ZCLOUDOWNERFULLNAME AS 'zGenAlbum-Cloud Owner Full Name',
+ zGenAlbum.ZCLOUDPERSONID AS 'zGenAlbum-Cloud Person ID',
+ zGenAlbum.ZCLOUDOWNERHASHEDPERSONID AS 'zGenAlbum-Cloud Owner Hashed Person ID',
+ CASE zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL
+ WHEN 0 THEN 'zGenAlbum-Local Cloud Single Contributor Enabled-0'
+ WHEN 1 THEN 'zGenAlbum-Local Cloud Multi-Contributors Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL || ''
+ END AS 'zGenAlbum-Local Cloud Multi-Contributors Enabled',
+ CASE zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED
+ WHEN 0 THEN 'zGenAlbum-Cloud Single Contributor Enabled-0'
+ WHEN 1 THEN 'zGenAlbum-Cloud Multi-Contributors Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED || ''
+ END AS 'zGenAlbum-Cloud Multi-Contributors Enabled',
+ CASE zGenAlbum.ZCLOUDALBUMSUBTYPE
+ WHEN 0 THEN 'zGenAlbum Multi-Contributor-0'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDALBUMSUBTYPE || ''
+ END AS 'zGenAlbum-Cloud Album Sub Type',
+ DateTime(zGenAlbum.ZCLOUDLASTCONTRIBUTIONDATE + 978307200, 'UNIXEPOCH') AS
+ 'zGenAlbum-Cloud Contribution Date',
+ DateTime(zGenAlbum.ZCLOUDLASTINTERESTINGCHANGEDATE + 978307200, 'UNIXEPOCH') AS
+ 'zGenAlbum-Cloud Last Interesting Change Date',
+ CASE zGenAlbum.ZCLOUDNOTIFICATIONSENABLED
+ WHEN 0 THEN 'zGenAlbum-Cloud Notifications Disabled-0'
+ WHEN 1 THEN 'zGenAlbum-Cloud Notifications Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDNOTIFICATIONSENABLED || ''
+ END AS 'zGenAlbum-Cloud Notification Enabled',
+ CASE zGenAlbum.ZISPINNED
+ WHEN 0 THEN 'zGenAlbum-Local Not Pinned-0'
+ WHEN 1 THEN 'zGenAlbum-Local Pinned-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPINNED || ''
+ END AS 'zGenAlbum-Pinned',
+ CASE zGenAlbum.ZCUSTOMSORTKEY
+ WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT'
+ WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT'
+ WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTKEY || ''
+ END AS 'zGenAlbum-Custom Sort Key',
+ CASE zGenAlbum.ZCUSTOMSORTASCENDING
+ WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0'
+ WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTASCENDING || ''
+ END AS 'zGenAlbum-Custom Sort Ascending',
+ CASE zGenAlbum.ZISPROTOTYPE
+ WHEN 0 THEN 'zGenAlbum-Not Prototype-0'
+ WHEN 1 THEN 'zGenAlbum-Prototype-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPROTOTYPE || ''
+ END AS 'zGenAlbum-Is Prototype',
+ CASE zGenAlbum.ZPROJECTDOCUMENTTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPROJECTDOCUMENTTYPE || ''
+ END AS 'zGenAlbum-Project Document Type',
+ CASE zGenAlbum.ZCUSTOMQUERYTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMQUERYTYPE || ''
+ END AS 'zGenAlbum-Custom Query Type',
+ CASE zGenAlbum.ZTRASHEDSTATE
+ WHEN 0 THEN 'zGenAlbum Not In Trash-0'
+ WHEN 1 THEN 'zGenAlbum Album In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZTRASHEDSTATE || ''
+ END AS 'zGenAlbum-Trashed State',
+ DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date',
+ CASE zGenAlbum.ZCLOUDDELETESTATE
+ WHEN 0 THEN 'zGenAlbum Cloud Not Deleted-0'
+ WHEN 1 THEN 'zGenAlbum Cloud Album Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDDELETESTATE || ''
+ END AS 'zGenAlbum-Cloud Delete State',
+ CASE zGenAlbum.ZCLOUDOWNERISWHITELISTED
+ WHEN 0 THEN 'zGenAlbum Cloud Owner Not Whitelisted-0'
+ WHEN 1 THEN 'zGenAlbum Cloud Owner Whitelisted-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDOWNERISWHITELISTED || ''
+ END AS 'zGenAlbum-Cloud Owner Whitelisted',
+ CASE zGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL
+ WHEN 0 THEN 'zGenAlbum Cloud Local Public URL Disabled-0'
+ WHEN 1 THEN 'zGenAlbum Cloud Local has Public URL Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL || ''
+ END AS 'zGenAlbum-Cloud Local Public URL Enabled',
+ CASE zGenAlbum.ZCLOUDPUBLICURLENABLED
+ WHEN 0 THEN 'zGenAlbum Cloud Public URL Disabled-0'
+ WHEN 1 THEN 'zGenAlbum Cloud Public URL Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDPUBLICURLENABLED || ''
+ END AS 'zGenAlbum-Cloud Public URL Enabled',
+ zGenAlbum.ZPUBLICURL AS 'zGenAlbum-Public URL',
+ zGenAlbum.ZKEYASSETFACETHUMBNAILINDEX AS 'zGenAlbum-Key Asset Face Thumb Index',
+ zGenAlbum.ZPROJECTEXTENSIONIDENTIFIER AS 'zGenAlbum-Project Text Extension ID',
+ zGenAlbum.ZUSERQUERYDATA AS 'zGenAlbum-User Query Data',
+ zGenAlbum.ZCUSTOMQUERYPARAMETERS AS 'zGenAlbum-Custom Query Parameters',
+ zGenAlbum.ZPROJECTDATA AS 'zGenAlbum-Project Data',
+ CASE zGenAlbum.ZSEARCHINDEXREBUILDSTATE
+ WHEN 0 THEN '0-StillTesting GenAlbm-Search Index State-0'
+ WHEN 1 THEN '1-StillTesting GenAlbm-Search Index State-1'
+ WHEN 2 THEN '2-StillTesting GenAlbm-Search Index State-2'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZSEARCHINDEXREBUILDSTATE || ''
+ END AS 'zGenAlbum-Search Index Rebuild State',
+ CASE zGenAlbum.ZDUPLICATETYPE
+ WHEN 0 THEN '0-StillTesting GenAlbumDuplicateType-0'
+ WHEN 1 THEN 'Duplicate Asset_Pending-Merge-1'
+ WHEN 2 THEN '2-StillTesting GenAlbumDuplicateType-2'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZDUPLICATETYPE || ''
+ END AS 'zGenAlbum-Duplicate Type',
+ CASE zGenAlbum.ZPRIVACYSTATE
+ WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0'
+ WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1'
+ WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPRIVACYSTATE || ''
+ END AS 'zGenAlbum-Privacy State',
+ zCldShareAlbumInvRec.ZUUID AS 'zCldShareAlbumInvRec-zUUID',
+ CASE zCldShareAlbumInvRec.ZISMINE
+ WHEN 0 THEN 'Not My Invitation-0'
+ WHEN 1 THEN 'My Invitation-1'
+ ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZISMINE || ''
+ END AS 'zCldShareAlbumInvRec-Is My Invitation to Shared Album',
+ CASE zCldShareAlbumInvRec.ZINVITATIONSTATELOCAL
+ WHEN 0 THEN '0-StillTesting-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZINVITATIONSTATELOCAL || ''
+ END AS 'zCldShareAlbumInvRec-Invitation State Local',
+ CASE zCldShareAlbumInvRec.ZINVITATIONSTATE
+ WHEN 1 THEN 'Shared Album Invitation Pending-1'
+ WHEN 2 THEN 'Shared Album Invitation Accepted-2'
+ WHEN 3 THEN 'Shared Album Invitation Declined-3'
+ WHEN 4 THEN '4-StillTesting'
+ WHEN 5 THEN '5-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZINVITATIONSTATE || ''
+ END AS 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status',
+ DateTime(zCldShareAlbumInvRec.ZINVITEESUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS
+ 'zCldShareAlbumInvRec-Subscription Date',
+ zCldShareAlbumInvRec.ZINVITEEFIRSTNAME AS 'zCldShareAlbumInvRec-Invitee First Name',
+ zCldShareAlbumInvRec.ZINVITEELASTNAME AS 'zCldShareAlbumInvRec-Invitee Last Name',
+ zCldShareAlbumInvRec.ZINVITEEFULLNAME AS 'zCldShareAlbumInvRec-Invitee Full Name',
+ zCldShareAlbumInvRec.ZINVITEEHASHEDPERSONID AS 'zCldShareAlbumInvRec-Invitee Hashed Person ID',
+ zCldShareAlbumInvRec.ZINVITEEEMAILKEY AS 'zCldShareAlbumInvRec-Invitee Email Key',
+ zCldShareAlbumInvRec.ZALBUMGUID AS 'zCldShareAlbumInvRec-Album GUID',
+ zCldShareAlbumInvRec.ZCLOUDGUID AS 'zCldShareAlbumInvRec-Cloud GUID',
+ zGenAlbum.ZPROJECTRENDERUUID AS 'zGenAlbum-Project Render UUID',
+ CASE zAlbumList.ZNEEDSREORDERINGNUMBER
+ WHEN 1 THEN '1-Yes-1'
+ ELSE 'Unknown-New-Value!: ' || zAlbumList.ZNEEDSREORDERINGNUMBER || ''
+ END AS 'zAlbumList-Needs Reordering Number'
+ FROM ZGENERICALBUM zGenAlbum
+ LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER
+ LEFT JOIN Z_29ALBUMLISTS z29AlbumLists ON z29AlbumLists.Z_29ALBUMS = zGenAlbum.Z_PK
+ LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z29AlbumLists.Z_2ALBUMLISTS
+ LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON zGenAlbum.Z_PK
+ = zCldShareAlbumInvRec.ZALBUM
+ WHERE zGenAlbum.ZKIND = 1505
+ ORDER BY zGenAlbum.ZCREATIONDATE
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69]))
+
+ data_headers = (('zGenAlbum-Cloud Creation Date-0', 'datetime'),
+ ('zGenAlbum-Creation Date-1', 'datetime'),
+ ('zGenAlbum-Start Date-2', 'datetime'),
+ ('zGenAlbum-End Date-3', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-4', 'datetime'),
+ 'zGenAlbum- Title-User&System Applied-5',
+ 'zGenAlbum-UUID-6',
+ 'zGenAlbum-Cloud GUID-7',
+ 'zGenAlbum-Imported by Bundle Identifier-8',
+ 'zGenAlbum-Pending Items Count-9',
+ 'zGenAlbum-Pending Items Type-10',
+ 'zGenAlbum- Cached Photos Count-11',
+ 'zGenAlbum- Cached Videos Count-12',
+ 'zGenAlbum- Cached Count-13',
+ 'zGenAlbum-Has Unseen Content-14',
+ 'zGenAlbum-Unseen Asset Count-15',
+ 'zGenAlbum-zENT- Entity-16',
+ 'zGenAlbum-Album Kind-17',
+ 'zGenAlbum-Cloud_Local_State-18',
+ 'zGenAlbum-Sync Event Order Key-19',
+ 'zGenAlbum-is Owned-20',
+ 'zGenAlbum-Cloud Relationship State-21',
+ 'zGenAlbum-Cloud Relationship State Local-22',
+ 'zGenAlbum-Cloud Owner Mail Key-23',
+ 'zGenAlbum-Cloud Owner First Name-24',
+ 'zGenAlbum-Cloud Owner Last Name-25',
+ 'zGenAlbum-Cloud Owner Full Name-26',
+ 'zGenAlbum-Cloud Person ID-27',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-28',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-29',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-30',
+ 'zGenAlbum-Cloud Album Sub Type-31',
+ ('zGenAlbum-Cloud Contribution Date-32', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-33', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-34',
+ 'zGenAlbum-Pinned-35',
+ 'zGenAlbum-Custom Sort Key-36',
+ 'zGenAlbum-Custom Sort Ascending-37',
+ 'zGenAlbum-Is Prototype-38',
+ 'zGenAlbum-Project Document Type-39',
+ 'zGenAlbum-Custom Query Type-40',
+ 'zGenAlbum-Trashed State-41',
+ ('zGenAlbum-Trash Date-42', 'datetime'),
+ 'zGenAlbum-Cloud Delete State-43',
+ 'zGenAlbum-Cloud Owner Whitelisted-44',
+ 'zGenAlbum-Cloud Local Public URL Enabled-45',
+ 'zGenAlbum-Cloud Public URL Enabled-46',
+ 'zGenAlbum-Public URL-47',
+ 'zGenAlbum-Key Asset Face Thumb Index-48',
+ 'zGenAlbum-Project Text Extension ID-49',
+ 'zGenAlbum-User Query Data-50',
+ 'zGenAlbum-Custom Query Parameters-51',
+ 'zGenAlbum-Project Data-52',
+ 'zGenAlbum-Search Index Rebuild State-53',
+ 'zGenAlbum-Duplicate Type-54',
+ 'zGenAlbum-Privacy State-55',
+ 'zCldShareAlbumInvRec-zUUID-56',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-57',
+ 'zCldShareAlbumInvRec-Invitation State Local-58',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-59',
+ ('zCldShareAlbumInvRec-Subscription Date-60', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-61',
+ 'zCldShareAlbumInvRec-Invitee Last Name-62',
+ 'zCldShareAlbumInvRec-Invitee Full Name-63',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-64',
+ 'zCldShareAlbumInvRec-Invitee Email Key-65',
+ 'zCldShareAlbumInvRec-Album GUID-66',
+ 'zCldShareAlbumInvRec-Cloud GUID-67',
+ 'zGenAlbum-Project Render UUID-68',
+ 'zAlbumList-Needs Reordering Number-69')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph24AssetsInSharedAlbums.py b/scripts/artifacts/Ph24AssetsInSharedAlbums.py
index 385cf8d1..ed5bd96a 100644
--- a/scripts/artifacts/Ph24AssetsInSharedAlbums.py
+++ b/scripts/artifacts/Ph24AssetsInSharedAlbums.py
@@ -1,41 +1,47 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 2.0
-#
-# Description:
-# Parses Assets in Shared Albums found in PhotoData-Photos.sqlite and supports iOS 11-18.
-# Parses limited asset data with full non-shared album data.
-# This parser is based on research and SQLite Queries written by Scott Koenig
-# This is very large query and script, I recommend opening the TSV generated report with Zimmerman's Tools
-# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results.
-# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347
-#
+__artifacts_v2__ = {
+ 'Ph24AssetinSharedAlbumsInvitesPhDaPsql': {
+ 'name': 'Ph24-Assets in Shared Albums & Invites-PhDaPsql',
+ 'description': 'Parses Assets in Shared Albums found in PhotoData-Photos.sqlite and supports iOS 18.'
+ ' Parses limited asset data with full non-shared album data.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-E-Asset_In_Albums',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
+@artifact_processor
+def Ph24AssetinSharedAlbumsInvitesPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
-def get_ph24assetsinsharedalbumsphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("10.3.4"):
- logfunc("Unsupported version for PhotoData-Photos.sqlite Assets in Shared Albums from iOS " + iosversion)
+ logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("12")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
zAsset.Z_PK AS 'zAsset-zPK',
@@ -256,130 +262,110 @@ def get_ph24assetsinsharedalbumsphdapsql(files_found, report_folder, seeker, wra
zGenAlbum.Z_PK = zCldShareAlbumInvRec.ZALBUM
WHERE zGenAlbum.ZKIND = 1505
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77]))
-
- counter += 1
-
- description = 'Parses Assets in Shared Albums found in PhotoData-Photos.sqlite and supports iOS 11.' \
- ' Parses limited asset data with full non-shared album data.'
- report = ArtifactHtmlReport('Ph24-Assets in Shared Albums-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph24-Assets in Shared Albums-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-zPK-1',
- 'zAsset-Directory-Path-2',
- 'zAsset-Filename-3',
- 'zAddAssetAttr- Original Filename-4',
- 'zCldMast- Original Filename-5',
- 'zAddAssetAttr- Creator Bundle ID-6',
- 'zAsset-Visibility State-7',
- 'zAsset-Saved Asset Type-8',
- 'zAsset- SortToken -CameraRoll-9',
- 'zAsset-Added Date-10',
- 'zCldMast-Creation Date-11',
- 'zAddAssetAttr-Time Zone Name-12',
- 'zAddAssetAttr-EXIF-String-13',
- 'zAsset-Modification Date-14',
- 'zAsset-Last Shared Date-15',
- 'zAsset-Trashed Date-16',
- 'zAddAssetAttr-zPK-17',
- 'zAsset-UUID = store.cloudphotodb-18',
- 'zAddAssetAttr-Master Fingerprint-19',
- 'zGenAlbum-Cloud Creation Date-20',
- 'zGenAlbum-Start Date-21',
- 'zGenAlbum-End Date-22',
- 'zGenAlbum-Cloud Subscription Date-23',
- 'zGenAlbum- Title-User&System Applied-24',
- 'zGenAlbum-UUID-25',
- 'zGenAlbum-Cloud GUID-26',
- 'zGenAlbum-Cloud Metadata-HEX NSKeyed Plist-27',
- 'zGenAlbum-Pending Items Count-28',
- 'zGenAlbum-Pending Items Type-29',
- 'zGenAlbum- Cached Photos Count-30',
- 'zGenAlbum- Cached Videos Count-31',
- 'zGenAlbum- Cached Count-32',
- 'zGenAlbum-Has Unseen Content-33',
- 'zGenAlbum-Unseen Asset Count-34',
- 'zGenAlbum-zENT- Entity-35',
- 'zGenAlbum-Album Kind-36',
- 'zGenAlbum-Cloud_Local_State-37',
- 'zGenAlbum-Sync Event Order Key-38',
- 'zGenAlbum-is Owned-39',
- 'zGenAlbum-Cloud Relationship State-40',
- 'zGenAlbum-Cloud Relationship State Local-41',
- 'zGenAlbum-Cloud Owner Mail Key-42',
- 'zGenAlbum-Cloud Owner First Name-43',
- 'zGenAlbum-Cloud Owner Last Name-44',
- 'zGenAlbum-Cloud Owner Full Name-45',
- 'zGenAlbum-Cloud Person ID-46',
- 'zGenAlbum-Cloud Owner Hashed Person ID-47',
- 'zGenAlbum-Local Cloud Multi-Contributors Enabled-48',
- 'zGenAlbum-Cloud Multi-Contributors Enabled-49',
- 'zGenAlbum-Cloud Album Sub Type-50',
- 'zGenAlbum-Cloud Contribution Date-51',
- 'zGenAlbum-Cloud Last Interesting Change Date-52',
- 'zGenAlbum-Cloud Notification Enabled-53',
- 'zGenAlbum-Pinned-54',
- 'zGenAlbum-Custom Sort Key-55',
- 'zGenAlbum-Custom Sort Ascending-56',
- 'zGenAlbum-Custom Query Type-57',
- 'zGenAlbum-Trashed State-58',
- 'zGenAlbum-Trash Date-59',
- 'zGenAlbum-Cloud Owner Whitelisted-60',
- 'zGenAlbum-Cloud Local Public URL Enabled-61',
- 'zGenAlbum-Cloud Public URL Enabled-62',
- 'zGenAlbum-Public URL-63',
- 'zGenAlbum-Key Asset Face Thumb Index-64',
- 'zGenAlbum-Custom Query Parameters-65',
- 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-66',
- 'zCldShareAlbumInvRec-Invitation State Local-67',
- 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-68',
- 'zCldShareAlbumInvRec-Subscription Date-69',
- 'zCldShareAlbumInvRec-Invitee First Name-70',
- 'zCldShareAlbumInvRec-Invitee Last Name-71',
- 'zCldShareAlbumInvRec-Invitee Full Name-72',
- 'zCldShareAlbumInvRec-Invitee Hashed Person ID-73',
- 'zCldShareAlbumInvRec-Invitee Email Key-74',
- 'zCldShareAlbumInvRec-Album GUID-75',
- 'zCldShareAlbumInvRec-Cloud GUID-76',
- 'zAlbumList-Needs Reordering Number-77')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph24-Assets in Shared Albums-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph24-Assets in Shared Albums-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No Assets in Shared Albums found in PhotoData-Photos.sqlite')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-zPK-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zAddAssetAttr- Creator Bundle ID-6',
+ 'zAsset-Visibility State-7',
+ 'zAsset-Saved Asset Type-8',
+ ('zAsset- SortToken -CameraRoll-9', 'datetime'),
+ ('zAsset-Added Date-10', 'datetime'),
+ ('zCldMast-Creation Date-11', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-12',
+ 'zAddAssetAttr-EXIF-String-13',
+ ('zAsset-Modification Date-14', 'datetime'),
+ ('zAsset-Last Shared Date-15', 'datetime'),
+ ('zAsset-Trashed Date-16', 'datetime'),
+ 'zAddAssetAttr-zPK-17',
+ 'zAsset-UUID = store.cloudphotodb-18',
+ 'zAddAssetAttr-Master Fingerprint-19',
+ ('zGenAlbum-Cloud Creation Date-20', 'datetime'),
+ ( 'zGenAlbum-Start Date-21', 'datetime'),
+ ('zGenAlbum-End Date-22', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-23', 'datetime'),
+ 'zGenAlbum- Title-User&System Applied-24',
+ 'zGenAlbum-UUID-25',
+ 'zGenAlbum-Cloud GUID-26',
+ 'zGenAlbum-Cloud Metadata-HEX NSKeyed Plist-27',
+ 'zGenAlbum-Pending Items Count-28',
+ 'zGenAlbum-Pending Items Type-29',
+ 'zGenAlbum- Cached Photos Count-30',
+ 'zGenAlbum- Cached Videos Count-31',
+ 'zGenAlbum- Cached Count-32',
+ 'zGenAlbum-Has Unseen Content-33',
+ 'zGenAlbum-Unseen Asset Count-34',
+ 'zGenAlbum-zENT- Entity-35',
+ 'zGenAlbum-Album Kind-36',
+ 'zGenAlbum-Cloud_Local_State-37',
+ 'zGenAlbum-Sync Event Order Key-38',
+ 'zGenAlbum-is Owned-39',
+ 'zGenAlbum-Cloud Relationship State-40',
+ 'zGenAlbum-Cloud Relationship State Local-41',
+ 'zGenAlbum-Cloud Owner Mail Key-42',
+ 'zGenAlbum-Cloud Owner First Name-43',
+ 'zGenAlbum-Cloud Owner Last Name-44',
+ 'zGenAlbum-Cloud Owner Full Name-45',
+ 'zGenAlbum-Cloud Person ID-46',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-47',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-48',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-49',
+ 'zGenAlbum-Cloud Album Sub Type-50',
+ ('zGenAlbum-Cloud Contribution Date-51', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-52', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-53',
+ 'zGenAlbum-Pinned-54',
+ 'zGenAlbum-Custom Sort Key-55',
+ 'zGenAlbum-Custom Sort Ascending-56',
+ 'zGenAlbum-Custom Query Type-57',
+ 'zGenAlbum-Trashed State-58',
+ ('zGenAlbum-Trash Date-59', 'datetime'),
+ 'zGenAlbum-Cloud Owner Whitelisted-60',
+ 'zGenAlbum-Cloud Local Public URL Enabled-61',
+ 'zGenAlbum-Cloud Public URL Enabled-62',
+ 'zGenAlbum-Public URL-63',
+ 'zGenAlbum-Key Asset Face Thumb Index-64',
+ 'zGenAlbum-Custom Query Parameters-65',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-66',
+ 'zCldShareAlbumInvRec-Invitation State Local-67',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-68',
+ ('zCldShareAlbumInvRec-Subscription Date-69', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-70',
+ 'zCldShareAlbumInvRec-Invitee Last Name-71',
+ 'zCldShareAlbumInvRec-Invitee Full Name-72',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-73',
+ 'zCldShareAlbumInvRec-Invitee Email Key-74',
+ 'zCldShareAlbumInvRec-Album GUID-75',
+ 'zCldShareAlbumInvRec-Cloud GUID-76',
+ 'zAlbumList-Needs Reordering Number-77')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("12")) & (version.parse(iosversion) < version.parse("13")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
zAsset.Z_PK AS 'zAsset-zPK',
@@ -604,130 +590,110 @@ def get_ph24assetsinsharedalbumsphdapsql(files_found, report_folder, seeker, wra
zGenAlbum.Z_PK = zCldShareAlbumInvRec.ZALBUM
WHERE zGenAlbum.ZKIND = 1505
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77]))
-
- counter += 1
-
- description = 'Parses Assets in Shared Albums found in PhotoData-Photos.sqlite and supports iOS 12.' \
- ' Parses limited asset data with full non-shared album data.'
- report = ArtifactHtmlReport('Ph24-Assets in Shared Albums-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph24-Assets in Shared Albums-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-zPK-1',
- 'zAsset-Directory-Path-2',
- 'zAsset-Filename-3',
- 'zAddAssetAttr- Original Filename-4',
- 'zCldMast- Original Filename-5',
- 'zAddAssetAttr- Creator Bundle ID-6',
- 'zAsset-Visibility State-7',
- 'zAsset-Saved Asset Type-8',
- 'zAsset- SortToken -CameraRoll-9',
- 'zAsset-Added Date-10',
- 'zCldMast-Creation Date-11',
- 'zAddAssetAttr-Time Zone Name-12',
- 'zAddAssetAttr-EXIF-String-13',
- 'zAsset-Modification Date-14',
- 'zAsset-Last Shared Date-15',
- 'zAsset-Trashed Date-16',
- 'zAddAssetAttr-zPK-17',
- 'zAsset-UUID = store.cloudphotodb-18',
- 'zAddAssetAttr-Master Fingerprint-19',
- 'zGenAlbum-Cloud Creation Date-20',
- 'zGenAlbum-Start Date-21',
- 'zGenAlbum-End Date-22',
- 'zGenAlbum-Cloud Subscription Date-23',
- 'zGenAlbum- Title-User&System Applied-24',
- 'zGenAlbum-UUID-25',
- 'zGenAlbum-Cloud GUID-26',
- 'zGenAlbum-Pending Items Count-27',
- 'zGenAlbum-Pending Items Type-28',
- 'zGenAlbum- Cached Photos Count-29',
- 'zGenAlbum- Cached Videos Count-30',
- 'zGenAlbum- Cached Count-31',
- 'zGenAlbum-Has Unseen Content-32',
- 'zGenAlbum-Unseen Asset Count-33',
- 'zGenAlbum-zENT- Entity-34',
- 'zGenAlbum-Album Kind-35',
- 'zGenAlbum-Cloud_Local_State-36',
- 'zGenAlbum-Sync Event Order Key-37',
- 'zGenAlbum-is Owned-38',
- 'zGenAlbum-Cloud Relationship State-39',
- 'zGenAlbum-Cloud Relationship State Local-40',
- 'zGenAlbum-Cloud Owner Mail Key-41',
- 'zGenAlbum-Cloud Owner First Name-42',
- 'zGenAlbum-Cloud Owner Last Name-43',
- 'zGenAlbum-Cloud Owner Full Name-44',
- 'zGenAlbum-Cloud Person ID-45',
- 'zGenAlbum-Cloud Owner Hashed Person ID-46',
- 'zGenAlbum-Local Cloud Multi-Contributors Enabled-47',
- 'zGenAlbum-Cloud Multi-Contributors Enabled-48',
- 'zGenAlbum-Cloud Album Sub Type-49',
- 'zGenAlbum-Cloud Contribution Date-50',
- 'zGenAlbum-Cloud Last Interesting Change Date-51',
- 'zGenAlbum-Cloud Notification Enabled-52',
- 'zGenAlbum-Pinned-53',
- 'zGenAlbum-Custom Sort Key-54',
- 'zGenAlbum-Custom Sort Ascending-55',
- 'zGenAlbum-Custom Query Type-56',
- 'zGenAlbum-Trashed State-57',
- 'zGenAlbum-Trash Date-58',
- 'zGenAlbum-Cloud Delete State-59',
- 'zGenAlbum-Cloud Owner Whitelisted-60',
- 'zGenAlbum-Cloud Local Public URL Enabled-61',
- 'zGenAlbum-Cloud Public URL Enabled-62',
- 'zGenAlbum-Public URL-63',
- 'zGenAlbum-Key Asset Face Thumb Index-64',
- 'zGenAlbum-Custom Query Parameters-65',
- 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-66',
- 'zCldShareAlbumInvRec-Invitation State Local-67',
- 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-68',
- 'zCldShareAlbumInvRec-Subscription Date-69',
- 'zCldShareAlbumInvRec-Invitee First Name-70',
- 'zCldShareAlbumInvRec-Invitee Last Name-71',
- 'zCldShareAlbumInvRec-Invitee Full Name-72',
- 'zCldShareAlbumInvRec-Invitee Hashed Person ID-73',
- 'zCldShareAlbumInvRec-Invitee Email Key-74',
- 'zCldShareAlbumInvRec-Album GUID-75',
- 'zCldShareAlbumInvRec-Cloud GUID-76',
- 'zAlbumList-Needs Reordering Number-77')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph24-Assets in Shared Albums-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph24-Assets in Shared Albums-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No Assets in Shared Albums found in PhotoData-Photos.sqlite')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-zPK-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zAddAssetAttr- Creator Bundle ID-6',
+ 'zAsset-Visibility State-7',
+ 'zAsset-Saved Asset Type-8',
+ ('zAsset- SortToken -CameraRoll-9', 'datetime'),
+ ('zAsset-Added Date-10', 'datetime'),
+ ('zCldMast-Creation Date-11', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-12',
+ 'zAddAssetAttr-EXIF-String-13',
+ ('zAsset-Modification Date-14', 'datetime'),
+ ('zAsset-Last Shared Date-15', 'datetime'),
+ ('zAsset-Trashed Date-16', 'datetime'),
+ 'zAddAssetAttr-zPK-17',
+ 'zAsset-UUID = store.cloudphotodb-18',
+ 'zAddAssetAttr-Master Fingerprint-19',
+ ('zGenAlbum-Cloud Creation Date-20', 'datetime'),
+ ('zGenAlbum-Start Date-21', 'datetime'),
+ ('zGenAlbum-End Date-22', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-23', 'datetime'),
+ 'zGenAlbum- Title-User&System Applied-24',
+ 'zGenAlbum-UUID-25',
+ 'zGenAlbum-Cloud GUID-26',
+ 'zGenAlbum-Pending Items Count-27',
+ 'zGenAlbum-Pending Items Type-28',
+ 'zGenAlbum- Cached Photos Count-29',
+ 'zGenAlbum- Cached Videos Count-30',
+ 'zGenAlbum- Cached Count-31',
+ 'zGenAlbum-Has Unseen Content-32',
+ 'zGenAlbum-Unseen Asset Count-33',
+ 'zGenAlbum-zENT- Entity-34',
+ 'zGenAlbum-Album Kind-35',
+ 'zGenAlbum-Cloud_Local_State-36',
+ 'zGenAlbum-Sync Event Order Key-37',
+ 'zGenAlbum-is Owned-38',
+ 'zGenAlbum-Cloud Relationship State-39',
+ 'zGenAlbum-Cloud Relationship State Local-40',
+ 'zGenAlbum-Cloud Owner Mail Key-41',
+ 'zGenAlbum-Cloud Owner First Name-42',
+ 'zGenAlbum-Cloud Owner Last Name-43',
+ 'zGenAlbum-Cloud Owner Full Name-44',
+ 'zGenAlbum-Cloud Person ID-45',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-46',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-47',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-48',
+ 'zGenAlbum-Cloud Album Sub Type-49',
+ ('zGenAlbum-Cloud Contribution Date-50', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-51', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-52',
+ 'zGenAlbum-Pinned-53',
+ 'zGenAlbum-Custom Sort Key-54',
+ 'zGenAlbum-Custom Sort Ascending-55',
+ 'zGenAlbum-Custom Query Type-56',
+ 'zGenAlbum-Trashed State-57',
+ ('zGenAlbum-Trash Date-58', 'datetime'),
+ 'zGenAlbum-Cloud Delete State-59',
+ 'zGenAlbum-Cloud Owner Whitelisted-60',
+ 'zGenAlbum-Cloud Local Public URL Enabled-61',
+ 'zGenAlbum-Cloud Public URL Enabled-62',
+ 'zGenAlbum-Public URL-63',
+ 'zGenAlbum-Key Asset Face Thumb Index-64',
+ 'zGenAlbum-Custom Query Parameters-65',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-66',
+ 'zCldShareAlbumInvRec-Invitation State Local-67',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-68',
+ ('zCldShareAlbumInvRec-Subscription Date-69', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-70',
+ 'zCldShareAlbumInvRec-Invitee Last Name-71',
+ 'zCldShareAlbumInvRec-Invitee Full Name-72',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-73',
+ 'zCldShareAlbumInvRec-Invitee Email Key-74',
+ 'zCldShareAlbumInvRec-Album GUID-75',
+ 'zCldShareAlbumInvRec-Cloud GUID-76',
+ 'zAlbumList-Needs Reordering Number-77')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("13")) & (version.parse(iosversion) < version.parse("14")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
zAsset.Z_PK AS 'zAsset-zPK',
@@ -961,137 +927,117 @@ def get_ph24assetsinsharedalbumsphdapsql(files_found, report_folder, seeker, wra
zGenAlbum.Z_PK = zCldShareAlbumInvRec.ZALBUM
WHERE zGenAlbum.ZKIND = 1505
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83]))
-
- counter += 1
-
- description = 'Parses Assets in Shared Albums found in PhotoData-Photos.sqlite and supports iOS 13.' \
- ' Parses limited asset data with full non-shared album data.'
- report = ArtifactHtmlReport('Ph24-Assets in Shared Albums-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph24-Assets in Shared Albums-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-zPK-1',
- 'zAsset-Directory-Path-2',
- 'zAsset-Filename-3',
- 'zAddAssetAttr- Original Filename-4',
- 'zCldMast- Original Filename-5',
- 'zAddAssetAttr- Creator Bundle ID-6',
- 'zAsset-Visibility State-7',
- 'zAsset-Saved Asset Type-8',
- 'zAsset- SortToken -CameraRoll-9',
- 'zAsset-Added Date-10',
- 'zCldMast-Creation Date-11',
- 'zAddAssetAttr-Time Zone Name-12',
- 'zAddAssetAttr-EXIF-String-13',
- 'zAsset-Modification Date-14',
- 'zAsset-Last Shared Date-15',
- 'zAsset-Trashed Date-16',
- 'zAddAssetAttr-zPK-17',
- 'zAsset-UUID = store.cloudphotodb-18',
- 'zAddAssetAttr-Master Fingerprint-19',
- 'zGenAlbum-Cloud Creation Date-20',
- 'zGenAlbum-Creation Date-21',
- 'zGenAlbum-Start Date-22',
- 'zGenAlbum-End Date-23',
- 'zGenAlbum-Cloud Subscription Date-24',
- 'zGenAlbum- Title-User&System Applied-25',
- 'zGenAlbum-UUID-26',
- 'zGenAlbum-Cloud GUID-27',
- 'zGenAlbum-Pending Items Count-28',
- 'zGenAlbum-Pending Items Type-29',
- 'zGenAlbum- Cached Photos Count-30',
- 'zGenAlbum- Cached Videos Count-31',
- 'zGenAlbum- Cached Count-32',
- 'zGenAlbum-Has Unseen Content-33',
- 'zGenAlbum-Unseen Asset Count-34',
- 'zGenAlbum-zENT- Entity-35',
- 'zGenAlbum-Album Kind-36',
- 'zGenAlbum-Cloud_Local_State-37',
- 'zGenAlbum-Sync Event Order Key-38',
- 'zGenAlbum-is Owned-39',
- 'zGenAlbum-Cloud Relationship State-40',
- 'zGenAlbum-Cloud Relationship State Local-41',
- 'zGenAlbum-Cloud Owner Mail Key-42',
- 'zGenAlbum-Cloud Owner First Name-43',
- 'zGenAlbum-Cloud Owner Last Name-44',
- 'zGenAlbum-Cloud Owner Full Name-45',
- 'zGenAlbum-Cloud Person ID-46',
- 'zGenAlbum-Cloud Owner Hashed Person ID-47',
- 'zGenAlbum-Local Cloud Multi-Contributors Enabled-48',
- 'zGenAlbum-Cloud Multi-Contributors Enabled-49',
- 'zGenAlbum-Cloud Album Sub Type-50',
- 'zGenAlbum-Cloud Contribution Date-51',
- 'zGenAlbum-Cloud Last Interesting Change Date-52',
- 'zGenAlbum-Cloud Notification Enabled-53',
- 'zGenAlbum-Pinned-54',
- 'zGenAlbum-Custom Sort Key-55',
- 'zGenAlbum-Custom Sort Ascending-56',
- 'zGenAlbum-Project Document Type-57',
- 'zGenAlbum-Custom Query Type-58',
- 'zGenAlbum-Trashed State-59',
- 'zGenAlbum-Trash Date-60',
- 'zGenAlbum-Cloud Delete State-61',
- 'zGenAlbum-Cloud Owner Whitelisted-62',
- 'zGenAlbum-Cloud Local Public URL Enabled-63',
- 'zGenAlbum-Cloud Public URL Enabled-64',
- 'zGenAlbum-Public URL-65',
- 'zGenAlbum-Key Asset Face Thumb Index-66',
- 'zGenAlbum-Project Text Extension ID-67',
- 'zGenAlbum-User Query Data-68',
- 'zGenAlbum-Custom Query Parameters-69',
- 'zGenAlbum-Project Data-70',
- 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-71',
- 'zCldShareAlbumInvRec-Invitation State Local-72',
- 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-73',
- 'zCldShareAlbumInvRec-Subscription Date-74',
- 'zCldShareAlbumInvRec-Invitee First Name-75',
- 'zCldShareAlbumInvRec-Invitee Last Name-76',
- 'zCldShareAlbumInvRec-Invitee Full Name-77',
- 'zCldShareAlbumInvRec-Invitee Hashed Person ID-78',
- 'zCldShareAlbumInvRec-Invitee Email Key-79',
- 'zCldShareAlbumInvRec-Album GUID-80',
- 'zCldShareAlbumInvRec-Cloud GUID-81',
- 'zGenAlbum-Project Render UUID-82',
- 'zAlbumList-Needs Reordering Number-83')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph24-Assets in Shared Albums-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph24-Assets in Shared Albums-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No Assets in Shared Albums found in PhotoData-Photos.sqlite')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-zPK-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zAddAssetAttr- Creator Bundle ID-6',
+ 'zAsset-Visibility State-7',
+ 'zAsset-Saved Asset Type-8',
+ ('zAsset- SortToken -CameraRoll-9', 'datetime'),
+ ('zAsset-Added Date-10', 'datetime'),
+ ('zCldMast-Creation Date-11', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-12',
+ 'zAddAssetAttr-EXIF-String-13',
+ ('zAsset-Modification Date-14', 'datetime'),
+ ('zAsset-Last Shared Date-15', 'datetime'),
+ ('zAsset-Trashed Date-16', 'datetime'),
+ 'zAddAssetAttr-zPK-17',
+ 'zAsset-UUID = store.cloudphotodb-18',
+ 'zAddAssetAttr-Master Fingerprint-19',
+ ('zGenAlbum-Cloud Creation Date-20', 'datetime'),
+ ('zGenAlbum-Creation Date-21', 'datetime'),
+ ('zGenAlbum-Start Date-22', 'datetime'),
+ ('zGenAlbum-End Date-23', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-24', 'datetime'),
+ 'zGenAlbum- Title-User&System Applied-25',
+ 'zGenAlbum-UUID-26',
+ 'zGenAlbum-Cloud GUID-27',
+ 'zGenAlbum-Pending Items Count-28',
+ 'zGenAlbum-Pending Items Type-29',
+ 'zGenAlbum- Cached Photos Count-30',
+ 'zGenAlbum- Cached Videos Count-31',
+ 'zGenAlbum- Cached Count-32',
+ 'zGenAlbum-Has Unseen Content-33',
+ 'zGenAlbum-Unseen Asset Count-34',
+ 'zGenAlbum-zENT- Entity-35',
+ 'zGenAlbum-Album Kind-36',
+ 'zGenAlbum-Cloud_Local_State-37',
+ 'zGenAlbum-Sync Event Order Key-38',
+ 'zGenAlbum-is Owned-39',
+ 'zGenAlbum-Cloud Relationship State-40',
+ 'zGenAlbum-Cloud Relationship State Local-41',
+ 'zGenAlbum-Cloud Owner Mail Key-42',
+ 'zGenAlbum-Cloud Owner First Name-43',
+ 'zGenAlbum-Cloud Owner Last Name-44',
+ 'zGenAlbum-Cloud Owner Full Name-45',
+ 'zGenAlbum-Cloud Person ID-46',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-47',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-48',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-49',
+ 'zGenAlbum-Cloud Album Sub Type-50',
+ ('zGenAlbum-Cloud Contribution Date-51', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-52', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-53',
+ 'zGenAlbum-Pinned-54',
+ 'zGenAlbum-Custom Sort Key-55',
+ 'zGenAlbum-Custom Sort Ascending-56',
+ 'zGenAlbum-Project Document Type-57',
+ 'zGenAlbum-Custom Query Type-58',
+ 'zGenAlbum-Trashed State-59',
+ ('zGenAlbum-Trash Date-60', 'datetime'),
+ 'zGenAlbum-Cloud Delete State-61',
+ 'zGenAlbum-Cloud Owner Whitelisted-62',
+ 'zGenAlbum-Cloud Local Public URL Enabled-63',
+ 'zGenAlbum-Cloud Public URL Enabled-64',
+ 'zGenAlbum-Public URL-65',
+ 'zGenAlbum-Key Asset Face Thumb Index-66',
+ 'zGenAlbum-Project Text Extension ID-67',
+ 'zGenAlbum-User Query Data-68',
+ 'zGenAlbum-Custom Query Parameters-69',
+ 'zGenAlbum-Project Data-70',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-71',
+ 'zCldShareAlbumInvRec-Invitation State Local-72',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-73',
+ ('zCldShareAlbumInvRec-Subscription Date-74', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-75',
+ 'zCldShareAlbumInvRec-Invitee Last Name-76',
+ 'zCldShareAlbumInvRec-Invitee Full Name-77',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-78',
+ 'zCldShareAlbumInvRec-Invitee Email Key-79',
+ 'zCldShareAlbumInvRec-Album GUID-80',
+ 'zCldShareAlbumInvRec-Cloud GUID-81',
+ 'zGenAlbum-Project Render UUID-82',
+ 'zAlbumList-Needs Reordering Number-83')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
zAsset.Z_PK AS 'zAsset-zPK',
@@ -1337,141 +1283,121 @@ def get_ph24assetsinsharedalbumsphdapsql(files_found, report_folder, seeker, wra
zGenAlbum.Z_PK = zCldShareAlbumInvRec.ZALBUM
WHERE zGenAlbum.ZKIND = 1505
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87]))
-
- counter += 1
-
- description = 'Parses Assets in Shared Albums found in PhotoData-Photos.sqlite and supports iOS 14.' \
- ' Parses limited asset data with full non-shared album data.'
- report = ArtifactHtmlReport('Ph24-Assets in Shared Albums-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph24-Assets in Shared Albums-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-zPK-1',
- 'zAsset-Directory-Path-2',
- 'zAsset-Filename-3',
- 'zAddAssetAttr- Original Filename-4',
- 'zCldMast- Original Filename-5',
- 'zAddAssetAttr- Creator Bundle ID-6',
- 'zAddAssetAttr-Imported By Display Name-7',
- 'zAsset-Visibility State-8',
- 'zAsset-Saved Asset Type-9',
- 'zAddAssetAttr-Share Type-10',
- 'zAsset- SortToken -CameraRoll-11',
- 'zAsset-Added Date-12',
- 'zCldMast-Creation Date-13',
- 'zAddAssetAttr-Time Zone Name-14',
- 'zAddAssetAttr-EXIF-String-15',
- 'zAsset-Modification Date-16',
- 'zAsset-Last Shared Date-17',
- 'zAsset-Trashed Date-18',
- 'zAddAssetAttr-zPK-19',
- 'zAsset-UUID = store.cloudphotodb-20',
- 'zAddAssetAttr-Master Fingerprint-21',
- 'zGenAlbum-Cloud Creation Date-22',
- 'zGenAlbum-Creation Date-23',
- 'zGenAlbum-Start Date-24',
- 'zGenAlbum-End Date-25',
- 'zGenAlbum-Cloud Subscription Date-26',
- 'zGenAlbum- Title-User&System Applied-27',
- 'zGenAlbum-UUID-28',
- 'zGenAlbum-Cloud GUID-29',
- 'zGenAlbum-Creator Bundle ID-30',
- 'zGenAlbum-Pending Items Count-31',
- 'zGenAlbum-Pending Items Type-32',
- 'zGenAlbum- Cached Photos Count-33',
- 'zGenAlbum- Cached Videos Count-34',
- 'zGenAlbum- Cached Count-35',
- 'zGenAlbum-Has Unseen Content-36',
- 'zGenAlbum-Unseen Asset Count-37',
- 'zGenAlbum-zENT- Entity-38',
- 'zGenAlbum-Album Kind-39',
- 'zGenAlbum-Cloud_Local_State-40',
- 'zGenAlbum-Sync Event Order Key-41',
- 'zGenAlbum-is Owned-42',
- 'zGenAlbum-Cloud Relationship State-43',
- 'zGenAlbum-Cloud Relationship State Local-44',
- 'zGenAlbum-Cloud Owner Mail Key-45',
- 'zGenAlbum-Cloud Owner Frist Name-46',
- 'zGenAlbum-Cloud Owner Last Name-47',
- 'zGenAlbum-Cloud Owner Full Name-48',
- 'zGenAlbum-Cloud Person ID-49',
- 'zGenAlbum-Cloud Owner Hashed Person ID-50',
- 'zGenAlbum-Local Cloud Multi-Contributors Enabled-51',
- 'zGenAlbum-Cloud Multi-Contributors Enabled-52',
- 'zGenAlbum-Cloud Album Sub Type-53',
- 'zGenAlbum-Cloud Contribution Date-54',
- 'zGenAlbum-Cloud Last Interesting Change Date-55',
- 'zGenAlbum-Cloud Notification Enabled-56',
- 'zGenAlbum-Pinned-57',
- 'zGenAlbum-Custom Sort Key-58',
- 'zGenAlbum-Custom Sort Ascending-59',
- 'zGenAlbum-Is Prototype-60',
- 'zGenAlbum-Project Document Type-61',
- 'zGenAlbum-Custom Query Type-62',
- 'zGenAlbum-Trashed State-63',
- 'zGenAlbum-Trash Date-64',
- 'zGenAlbum-Cloud Delete State-65',
- 'zGenAlbum-Cloud Owner Whitelisted-66',
- 'zGenAlbum-Cloud Local Public URL Enabled-67',
- 'zGenAlbum-Cloud Public URL Enabled-68',
- 'zGenAlbum-Public URL-69',
- 'zGenAlbum-Key Asset Face Thumb Index-70',
- 'zGenAlbum-Project Text Extension ID-71',
- 'zGenAlbum-User Query Data-72',
- 'zGenAlbum-Custom Query Parameters-73',
- 'zGenAlbum-Project Data-74',
- 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-75',
- 'zCldShareAlbumInvRec-Invitation State Local-76',
- 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-77',
- 'zCldShareAlbumInvRec-Subscription Date-78',
- 'zCldShareAlbumInvRec-Invitee First Name-79',
- 'zCldShareAlbumInvRec-Invitee Last Name-80',
- 'zCldShareAlbumInvRec-Invitee Full Name-81',
- 'zCldShareAlbumInvRec-Invitee Hashed Person ID-82',
- 'zCldShareAlbumInvRec-Invitee Email Key-83',
- 'zCldShareAlbumInvRec-Album GUID-84',
- 'zCldShareAlbumInvRec-Cloud GUID-85',
- 'zGenAlbum-Project Render UUID-86',
- 'zAlbumList-Needs Reordering Number-87')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph24-Assets in Shared Albums-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph24-Assets in Shared Albums-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No Assets in Shared Albums found in PhotoData-Photos.sqlite')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-zPK-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zAddAssetAttr- Creator Bundle ID-6',
+ 'zAddAssetAttr-Imported By Display Name-7',
+ 'zAsset-Visibility State-8',
+ 'zAsset-Saved Asset Type-9',
+ 'zAddAssetAttr-Share Type-10',
+ ('zAsset- SortToken -CameraRoll-11', 'datetime'),
+ ('zAsset-Added Date-12', 'datetime'),
+ ('zCldMast-Creation Date-13', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-14',
+ 'zAddAssetAttr-EXIF-String-15',
+ ('zAsset-Modification Date-16', 'datetime'),
+ ('zAsset-Last Shared Date-17', 'datetime'),
+ ('zAsset-Trashed Date-18', 'datetime'),
+ 'zAddAssetAttr-zPK-19',
+ 'zAsset-UUID = store.cloudphotodb-20',
+ 'zAddAssetAttr-Master Fingerprint-21',
+ ('zGenAlbum-Cloud Creation Date-22', 'datetime'),
+ ('zGenAlbum-Creation Date-23', 'datetime'),
+ ('zGenAlbum-Start Date-24', 'datetime'),
+ ('zGenAlbum-End Date-25', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-26', 'datetime'),
+ 'zGenAlbum- Title-User&System Applied-27',
+ 'zGenAlbum-UUID-28',
+ 'zGenAlbum-Cloud GUID-29',
+ 'zGenAlbum-Creator Bundle ID-30',
+ 'zGenAlbum-Pending Items Count-31',
+ 'zGenAlbum-Pending Items Type-32',
+ 'zGenAlbum- Cached Photos Count-33',
+ 'zGenAlbum- Cached Videos Count-34',
+ 'zGenAlbum- Cached Count-35',
+ 'zGenAlbum-Has Unseen Content-36',
+ 'zGenAlbum-Unseen Asset Count-37',
+ 'zGenAlbum-zENT- Entity-38',
+ 'zGenAlbum-Album Kind-39',
+ 'zGenAlbum-Cloud_Local_State-40',
+ 'zGenAlbum-Sync Event Order Key-41',
+ 'zGenAlbum-is Owned-42',
+ 'zGenAlbum-Cloud Relationship State-43',
+ 'zGenAlbum-Cloud Relationship State Local-44',
+ 'zGenAlbum-Cloud Owner Mail Key-45',
+ 'zGenAlbum-Cloud Owner Frist Name-46',
+ 'zGenAlbum-Cloud Owner Last Name-47',
+ 'zGenAlbum-Cloud Owner Full Name-48',
+ 'zGenAlbum-Cloud Person ID-49',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-50',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-51',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-52',
+ 'zGenAlbum-Cloud Album Sub Type-53',
+ ('zGenAlbum-Cloud Contribution Date-54', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-55', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-56',
+ 'zGenAlbum-Pinned-57',
+ 'zGenAlbum-Custom Sort Key-58',
+ 'zGenAlbum-Custom Sort Ascending-59',
+ 'zGenAlbum-Is Prototype-60',
+ 'zGenAlbum-Project Document Type-61',
+ 'zGenAlbum-Custom Query Type-62',
+ 'zGenAlbum-Trashed State-63',
+ ('zGenAlbum-Trash Date-64', 'datetime'),
+ 'zGenAlbum-Cloud Delete State-65',
+ 'zGenAlbum-Cloud Owner Whitelisted-66',
+ 'zGenAlbum-Cloud Local Public URL Enabled-67',
+ 'zGenAlbum-Cloud Public URL Enabled-68',
+ 'zGenAlbum-Public URL-69',
+ 'zGenAlbum-Key Asset Face Thumb Index-70',
+ 'zGenAlbum-Project Text Extension ID-71',
+ 'zGenAlbum-User Query Data-72',
+ 'zGenAlbum-Custom Query Parameters-73',
+ 'zGenAlbum-Project Data-74',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-75',
+ 'zCldShareAlbumInvRec-Invitation State Local-76',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-77',
+ ('zCldShareAlbumInvRec-Subscription Date-78', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-79',
+ 'zCldShareAlbumInvRec-Invitee Last Name-80',
+ 'zCldShareAlbumInvRec-Invitee Full Name-81',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-82',
+ 'zCldShareAlbumInvRec-Invitee Email Key-83',
+ 'zCldShareAlbumInvRec-Album GUID-84',
+ 'zCldShareAlbumInvRec-Cloud GUID-85',
+ 'zGenAlbum-Project Render UUID-86',
+ 'zAlbumList-Needs Reordering Number-87')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
zAsset.Z_PK AS 'zAsset-zPK',
@@ -1735,144 +1661,124 @@ def get_ph24assetsinsharedalbumsphdapsql(files_found, report_folder, seeker, wra
zGenAlbum.Z_PK = zCldShareAlbumInvRec.ZALBUM
WHERE zGenAlbum.ZKIND = 1505
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-zPK-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-6',
+ 'zAsset-Syndication State-7',
+ 'zAsset-Bundle Scope-8',
+ 'zAddAssetAttr- Imported by Bundle Identifier-9',
+ 'zAddAssetAttr-Imported By Display Name-10',
+ 'zAsset-Visibility State-11',
+ 'zAsset-Saved Asset Type-12',
+ 'zAddAssetAttr-Share Type-13',
+ ('zAsset- SortToken -CameraRoll-14', 'datetime'),
+ ('zAsset-Added Date-15', 'datetime'),
+ ('zCldMast-Creation Date-16', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-17',
+ 'zAddAssetAttr-EXIF-String-18',
+ ('zAsset-Modification Date-19', 'datetime'),
+ ('zAsset-Last Shared Date-20', 'datetime'),
+ ('zAsset-Trashed Date-21', 'datetime'),
+ 'zAddAssetAttr-zPK-22',
+ 'zAsset-UUID = store.cloudphotodb-23',
+ 'zAddAssetAttr-Master Fingerprint-24',
+ ('zGenAlbum-Cloud Creation Date-25', 'datetime'),
+ ('zGenAlbum-Creation Date-26', 'datetime'),
+ ('zGenAlbum-Start Date-27', 'datetime'),
+ ('zGenAlbum-End Date-28', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-29', 'datetime'),
+ 'zGenAlbum- Title-User&System Applied-30',
+ 'zGenAlbum-UUID-31',
+ 'zGenAlbum-Cloud GUID-32',
+ 'zGenAlbum-Imported by Bundle Identifier-33',
+ 'zGenAlbum-Pending Items Count-34',
+ 'zGenAlbum-Pending Items Type-35',
+ 'zGenAlbum- Cached Photos Count-36',
+ 'zGenAlbum- Cached Videos Count-37',
+ 'zGenAlbum- Cached Count-38',
+ 'zGenAlbum-Has Unseen Content-39',
+ 'zGenAlbum-Unseen Asset Count-40',
+ 'zGenAlbum-zENT- Entity-41',
+ 'zGenAlbum-Album Kind-42',
+ 'zGenAlbum-Cloud_Local_State-43',
+ 'zGenAlbum-Sync Event Order Key-44',
+ 'zGenAlbum-is Owned-45',
+ 'zGenAlbum-Cloud Relationship State-46',
+ 'zGenAlbum-Cloud Relationship State Local-47',
+ 'zGenAlbum-Cloud Owner Mail Key-48',
+ 'zGenAlbum-Cloud Owner Frist Name-49',
+ 'zGenAlbum-Cloud Owner Last Name-50',
+ 'zGenAlbum-Cloud Owner Full Name-51',
+ 'zGenAlbum-Cloud Person ID-52',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-53',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-54',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-55',
+ 'zGenAlbum-Cloud Album Sub Type-56',
+ ('zGenAlbum-Cloud Contribution Date-57', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-58', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-59',
+ 'zGenAlbum-Pinned-60',
+ 'zGenAlbum-Custom Sort Key-61',
+ 'zGenAlbum-Custom Sort Ascending-62',
+ 'zGenAlbum-Is Prototype-63',
+ 'zGenAlbum-Project Document Type-64',
+ 'zGenAlbum-Custom Query Type-65',
+ 'zGenAlbum-Trashed State-66',
+ ('zGenAlbum-Trash Date-67', 'datetime'),
+ 'zGenAlbum-Cloud Delete State-68',
+ 'zGenAlbum-Cloud Owner Whitelisted-69',
+ 'zGenAlbum-Cloud Local Public URL Enabled-70',
+ 'zGenAlbum-Cloud Public URL Enabled-71',
+ 'zGenAlbum-Public URL-72',
+ 'zGenAlbum-Key Asset Face Thumb Index-73',
+ 'zGenAlbum-Project Text Extension ID-74',
+ 'zGenAlbum-User Query Data-75',
+ 'zGenAlbum-Custom Query Parameters-76',
+ 'zGenAlbum-Project Data-77',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-78',
+ 'zCldShareAlbumInvRec-Invitation State Local-79',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-80',
+ ('zCldShareAlbumInvRec-Subscription Date-81', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-82',
+ 'zCldShareAlbumInvRec-Invitee Last Name-83',
+ 'zCldShareAlbumInvRec-Invitee Full Name-84',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-85',
+ 'zCldShareAlbumInvRec-Invitee Email Key-86',
+ 'zCldShareAlbumInvRec-Album GUID-87',
+ 'zCldShareAlbumInvRec-Cloud GUID-88',
+ 'zGenAlbum-Project Render UUID-89',
+ 'zAlbumList-Needs Reordering Number-90')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
+ elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17.6")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90]))
-
- counter += 1
-
- description = 'Parses Assets in Shared Albums found in PhotoData-Photos.sqlite and supports iOS 15.' \
- ' Parses limited asset data with full non-shared album data.'
- report = ArtifactHtmlReport('Ph24-Assets in Shared Albums-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph24-Assets in Shared Albums-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-zPK-1',
- 'zAsset-Directory-Path-2',
- 'zAsset-Filename-3',
- 'zAddAssetAttr- Original Filename-4',
- 'zCldMast- Original Filename-5',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-6',
- 'zAsset-Syndication State-7',
- 'zAsset-Bundle Scope-8',
- 'zAddAssetAttr- Imported by Bundle Identifier-9',
- 'zAddAssetAttr-Imported By Display Name-10',
- 'zAsset-Visibility State-11',
- 'zAsset-Saved Asset Type-12',
- 'zAddAssetAttr-Share Type-13',
- 'zAsset- SortToken -CameraRoll-14',
- 'zAsset-Added Date-15',
- 'zCldMast-Creation Date-16',
- 'zAddAssetAttr-Time Zone Name-17',
- 'zAddAssetAttr-EXIF-String-18',
- 'zAsset-Modification Date-19',
- 'zAsset-Last Shared Date-20',
- 'zAsset-Trashed Date-21',
- 'zAddAssetAttr-zPK-22',
- 'zAsset-UUID = store.cloudphotodb-23',
- 'zAddAssetAttr-Master Fingerprint-24',
- 'zGenAlbum-Cloud Creation Date-25',
- 'zGenAlbum-Creation Date-26',
- 'zGenAlbum-Start Date-27',
- 'zGenAlbum-End Date-28',
- 'zGenAlbum-Cloud Subscription Date-29',
- 'zGenAlbum- Title-User&System Applied-30',
- 'zGenAlbum-UUID-31',
- 'zGenAlbum-Cloud GUID-32',
- 'zGenAlbum-Imported by Bundle Identifier-33',
- 'zGenAlbum-Pending Items Count-34',
- 'zGenAlbum-Pending Items Type-35',
- 'zGenAlbum- Cached Photos Count-36',
- 'zGenAlbum- Cached Videos Count-37',
- 'zGenAlbum- Cached Count-38',
- 'zGenAlbum-Has Unseen Content-39',
- 'zGenAlbum-Unseen Asset Count-40',
- 'zGenAlbum-zENT- Entity-41',
- 'zGenAlbum-Album Kind-42',
- 'zGenAlbum-Cloud_Local_State-43',
- 'zGenAlbum-Sync Event Order Key-44',
- 'zGenAlbum-is Owned-45',
- 'zGenAlbum-Cloud Relationship State-46',
- 'zGenAlbum-Cloud Relationship State Local-47',
- 'zGenAlbum-Cloud Owner Mail Key-48',
- 'zGenAlbum-Cloud Owner Frist Name-49',
- 'zGenAlbum-Cloud Owner Last Name-50',
- 'zGenAlbum-Cloud Owner Full Name-51',
- 'zGenAlbum-Cloud Person ID-52',
- 'zGenAlbum-Cloud Owner Hashed Person ID-53',
- 'zGenAlbum-Local Cloud Multi-Contributors Enabled-54',
- 'zGenAlbum-Cloud Multi-Contributors Enabled-55',
- 'zGenAlbum-Cloud Album Sub Type-56',
- 'zGenAlbum-Cloud Contribution Date-57',
- 'zGenAlbum-Cloud Last Interesting Change Date-58',
- 'zGenAlbum-Cloud Notification Enabled-59',
- 'zGenAlbum-Pinned-60',
- 'zGenAlbum-Custom Sort Key-61',
- 'zGenAlbum-Custom Sort Ascending-62',
- 'zGenAlbum-Is Prototype-63',
- 'zGenAlbum-Project Document Type-64',
- 'zGenAlbum-Custom Query Type-65',
- 'zGenAlbum-Trashed State-66',
- 'zGenAlbum-Trash Date-67',
- 'zGenAlbum-Cloud Delete State-68',
- 'zGenAlbum-Cloud Owner Whitelisted-69',
- 'zGenAlbum-Cloud Local Public URL Enabled-70',
- 'zGenAlbum-Cloud Public URL Enabled-71',
- 'zGenAlbum-Public URL-72',
- 'zGenAlbum-Key Asset Face Thumb Index-73',
- 'zGenAlbum-Project Text Extension ID-74',
- 'zGenAlbum-User Query Data-75',
- 'zGenAlbum-Custom Query Parameters-76',
- 'zGenAlbum-Project Data-77',
- 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-78',
- 'zCldShareAlbumInvRec-Invitation State Local-79',
- 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-80',
- 'zCldShareAlbumInvRec-Subscription Date-81',
- 'zCldShareAlbumInvRec-Invitee First Name-82',
- 'zCldShareAlbumInvRec-Invitee Last Name-83',
- 'zCldShareAlbumInvRec-Invitee Full Name-84',
- 'zCldShareAlbumInvRec-Invitee Hashed Person ID-85',
- 'zCldShareAlbumInvRec-Invitee Email Key-86',
- 'zCldShareAlbumInvRec-Album GUID-87',
- 'zCldShareAlbumInvRec-Cloud GUID-88',
- 'zGenAlbum-Project Render UUID-89',
- 'zAlbumList-Needs Reordering Number-90')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph24-Assets in Shared Albums-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph24-Assets in Shared Albums-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No Assets in Shared Albums found in PhotoData-Photos.sqlite')
-
- db.close()
- return
-
- elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
zAsset.Z_PK AS 'zAsset-zPK',
@@ -2161,151 +2067,131 @@ def get_ph24assetsinsharedalbumsphdapsql(files_found, report_folder, seeker, wra
zGenAlbum.Z_PK = zCldShareAlbumInvRec.ZALBUM
WHERE zGenAlbum.ZKIND = 1505
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-zPK-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-6',
+ 'zAsset-Syndication State-7',
+ 'zAsset-Bundle Scope-8',
+ 'zAddAssetAttr.Imported by Bundle Identifier-9',
+ 'zAddAssetAttr-Imported By Display Name-10',
+ 'zAsset-Visibility State-11',
+ 'zAsset-Saved Asset Type-12',
+ 'zAddAssetAttr-Share Type-13',
+ 'zAsset-Active Library Scope Participation State-14',
+ ('zAsset- SortToken -CameraRoll-15', 'datetime'),
+ ('zAsset-Added Date-16', 'datetime'),
+ ('zCldMast-Creation Date-17', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-18',
+ 'zAddAssetAttr-EXIF-String-19',
+ ('zAsset-Modification Date-20', 'datetime'),
+ ('zAsset-Last Shared Date-21', 'datetime'),
+ ('zAsset-Trashed Date-22', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-23',
+ 'zAddAssetAttr-zPK-24',
+ 'zAsset-UUID = store.cloudphotodb-25',
+ 'zAddAssetAttr-Master Fingerprint-26',
+ ('zGenAlbum-Cloud Creation Date-27', 'datetime'),
+ ('zGenAlbum-Creation Date-28', 'datetime'),
+ ('zGenAlbum-Start Date-29', 'datetime'),
+ ('zGenAlbum-End Date-30', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-31', 'datetime'),
+ 'zGenAlbum- Title-User&System Applied-32',
+ 'zGenAlbum-UUID-33',
+ 'zGenAlbum-Cloud GUID-34',
+ 'zGenAlbum-Imported by Bundle Identifier-35',
+ 'zGenAlbum-Pending Items Count-36',
+ 'zGenAlbum-Pending Items Type-37',
+ 'zGenAlbum- Cached Photos Count-38',
+ 'zGenAlbum- Cached Videos Count-39',
+ 'zGenAlbum- Cached Count-40',
+ 'zGenAlbum-Has Unseen Content-41',
+ 'zGenAlbum-Unseen Asset Count-42',
+ 'zGenAlbum-zENT- Entity-43',
+ 'zGenAlbum-Album Kind-44',
+ 'zGenAlbum-Cloud_Local_State-45',
+ 'zGenAlbum-Sync Event Order Key-46',
+ 'zGenAlbum-is Owned-47',
+ 'zGenAlbum-Cloud Relationship State-48',
+ 'zGenAlbum-Cloud Relationship State Local-49',
+ 'zGenAlbum-Cloud Owner Mail Key-50',
+ 'zGenAlbum-Cloud Owner First Name-51',
+ 'zGenAlbum-Cloud Owner Last Name-52',
+ 'zGenAlbum-Cloud Owner Full Name-53',
+ 'zGenAlbum-Cloud Person ID-54',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-55',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-56',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-57',
+ 'zGenAlbum-Cloud Album Sub Type-58',
+ ('zGenAlbum-Cloud Contribution Date-59', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-60', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-61',
+ 'zGenAlbum-Pinned-62',
+ 'zGenAlbum-Custom Sort Key-63',
+ 'zGenAlbum-Custom Sort Ascending-64',
+ 'zGenAlbum-Is Prototype-65',
+ 'zGenAlbum-Project Document Type-66',
+ 'zGenAlbum-Custom Query Type-67',
+ 'zGenAlbum-Trashed State-68',
+ ('zGenAlbum-Trash Date-69', 'datetime'),
+ 'zGenAlbum-Cloud Delete State-70',
+ 'zGenAlbum-Cloud Owner Whitelisted-71',
+ 'zGenAlbum-Cloud Local Public URL Enabled-72',
+ 'zGenAlbum-Cloud Public URL Enabled-73',
+ 'zGenAlbum-Public URL-74',
+ 'zGenAlbum-Key Asset Face Thumb Index-75',
+ 'zGenAlbum-Project Text Extension ID-76',
+ 'zGenAlbum-User Query Data-77',
+ 'zGenAlbum-Custom Query Parameters-78',
+ 'zGenAlbum-Project Data-79',
+ 'zGenAlbum-Search Index Rebuild State-80',
+ 'zGenAlbum-Duplicate Type-81',
+ 'zGenAlbum-Privacy State-82',
+ 'zCldShareAlbumInvRec-zUUID-83',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-84',
+ 'zCldShareAlbumInvRec-Invitation State Local-85',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-86',
+ ('zCldShareAlbumInvRec-Subscription Date-87', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-88',
+ 'zCldShareAlbumInvRec-Invitee Last Name-89',
+ 'zCldShareAlbumInvRec-Invitee Full Name-90',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-91',
+ 'zCldShareAlbumInvRec-Invitee Email Key-92',
+ 'zCldShareAlbumInvRec-Album GUID-93',
+ 'zCldShareAlbumInvRec-Cloud GUID-94',
+ 'zGenAlbum-Project Render UUID-95',
+ 'zAlbumList-Needs Reordering Number-96')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
+ elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96]))
-
- counter += 1
-
- description = 'Parses Assets in Shared Albums found in PhotoData-Photos.sqlite and supports iOS 16-17.' \
- ' Parses limited asset data with full non-shared album data.'
- report = ArtifactHtmlReport('Ph24-Assets in Shared Albums-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph24-Assets in Shared Albums-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-zPK-1',
- 'zAsset-Directory-Path-2',
- 'zAsset-Filename-3',
- 'zAddAssetAttr- Original Filename-4',
- 'zCldMast- Original Filename-5',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-6',
- 'zAsset-Syndication State-7',
- 'zAsset-Bundle Scope-8',
- 'zAddAssetAttr.Imported by Bundle Identifier-9',
- 'zAddAssetAttr-Imported By Display Name-10',
- 'zAsset-Visibility State-11',
- 'zAsset-Saved Asset Type-12',
- 'zAddAssetAttr-Share Type-13',
- 'zAsset-Active Library Scope Participation State-14',
- 'zAsset- SortToken -CameraRoll-15',
- 'zAsset-Added Date-16',
- 'zCldMast-Creation Date-17',
- 'zAddAssetAttr-Time Zone Name-18',
- 'zAddAssetAttr-EXIF-String-19',
- 'zAsset-Modification Date-20',
- 'zAsset-Last Shared Date-21',
- 'zAsset-Trashed Date-22',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-23',
- 'zAddAssetAttr-zPK-24',
- 'zAsset-UUID = store.cloudphotodb-25',
- 'zAddAssetAttr-Master Fingerprint-26',
- 'zGenAlbum-Cloud Creation Date-27',
- 'zGenAlbum-Creation Date-28',
- 'zGenAlbum-Start Date-29',
- 'zGenAlbum-End Date-30',
- 'zGenAlbum-Cloud Subscription Date-31',
- 'zGenAlbum- Title-User&System Applied-32',
- 'zGenAlbum-UUID-33',
- 'zGenAlbum-Cloud GUID-34',
- 'zGenAlbum-Imported by Bundle Identifier-35',
- 'zGenAlbum-Pending Items Count-36',
- 'zGenAlbum-Pending Items Type-37',
- 'zGenAlbum- Cached Photos Count-38',
- 'zGenAlbum- Cached Videos Count-39',
- 'zGenAlbum- Cached Count-40',
- 'zGenAlbum-Has Unseen Content-41',
- 'zGenAlbum-Unseen Asset Count-42',
- 'zGenAlbum-zENT- Entity-43',
- 'zGenAlbum-Album Kind-44',
- 'zGenAlbum-Cloud_Local_State-45',
- 'zGenAlbum-Sync Event Order Key-46',
- 'zGenAlbum-is Owned-47',
- 'zGenAlbum-Cloud Relationship State-48',
- 'zGenAlbum-Cloud Relationship State Local-49',
- 'zGenAlbum-Cloud Owner Mail Key-50',
- 'zGenAlbum-Cloud Owner First Name-51',
- 'zGenAlbum-Cloud Owner Last Name-52',
- 'zGenAlbum-Cloud Owner Full Name-53',
- 'zGenAlbum-Cloud Person ID-54',
- 'zGenAlbum-Cloud Owner Hashed Person ID-55',
- 'zGenAlbum-Local Cloud Multi-Contributors Enabled-56',
- 'zGenAlbum-Cloud Multi-Contributors Enabled-57',
- 'zGenAlbum-Cloud Album Sub Type-58',
- 'zGenAlbum-Cloud Contribution Date-59',
- 'zGenAlbum-Cloud Last Interesting Change Date-60',
- 'zGenAlbum-Cloud Notification Enabled-61',
- 'zGenAlbum-Pinned-62',
- 'zGenAlbum-Custom Sort Key-63',
- 'zGenAlbum-Custom Sort Ascending-64',
- 'zGenAlbum-Is Prototype-65',
- 'zGenAlbum-Project Document Type-66',
- 'zGenAlbum-Custom Query Type-67',
- 'zGenAlbum-Trashed State-68',
- 'zGenAlbum-Trash Date-69',
- 'zGenAlbum-Cloud Delete State-70',
- 'zGenAlbum-Cloud Owner Whitelisted-71',
- 'zGenAlbum-Cloud Local Public URL Enabled-72',
- 'zGenAlbum-Cloud Public URL Enabled-73',
- 'zGenAlbum-Public URL-74',
- 'zGenAlbum-Key Asset Face Thumb Index-75',
- 'zGenAlbum-Project Text Extension ID-76',
- 'zGenAlbum-User Query Data-77',
- 'zGenAlbum-Custom Query Parameters-78',
- 'zGenAlbum-Project Data-79',
- 'zGenAlbum-Search Index Rebuild State-80',
- 'zGenAlbum-Duplicate Type-81',
- 'zGenAlbum-Privacy State-82',
- 'zCldShareAlbumInvRec-zUUID-83',
- 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-84',
- 'zCldShareAlbumInvRec-Invitation State Local-85',
- 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-86',
- 'zCldShareAlbumInvRec-Subscription Date-87',
- 'zCldShareAlbumInvRec-Invitee First Name-88',
- 'zCldShareAlbumInvRec-Invitee Last Name-89',
- 'zCldShareAlbumInvRec-Invitee Full Name-90',
- 'zCldShareAlbumInvRec-Invitee Hashed Person ID-91',
- 'zCldShareAlbumInvRec-Invitee Email Key-92',
- 'zCldShareAlbumInvRec-Album GUID-93',
- 'zCldShareAlbumInvRec-Cloud GUID-94',
- 'zGenAlbum-Project Render UUID-95',
- 'zAlbumList-Needs Reordering Number-96')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph24-Assets in Shared Albums-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph24-Assets in Shared Albums-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
- else:
- logfunc('No Assets in Shared Albums found in PhotoData-Photos.sqlite')
-
- db.close()
- return
-
- elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
-
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
zAsset.Z_PK AS 'zAsset-zPK',
@@ -2372,8 +2258,7 @@ def get_ph24assetsinsharedalbumsphdapsql(files_found, report_folder, seeker, wra
zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18',
+ zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint',
DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Creation Date',
DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date',
DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
@@ -2585,169 +2470,544 @@ def get_ph24assetsinsharedalbumsphdapsql(files_found, report_folder, seeker, wra
END AS 'zAlbumList-Needs Reordering Number'
FROM ZASSET zAsset
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
- LEFT JOIN Z_31ASSETS z31Assets ON z31Assets.Z_3ASSETS = zAsset.Z_PK
- LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z31Assets.Z_31ALBUMS
- LEFT JOIN Z_30ALBUMLISTS z30AlbumLists ON z30AlbumLists.Z_30ALBUMS = zGenAlbum.Z_PK
- LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z30AlbumLists.Z_2ALBUMLISTS
+ LEFT JOIN Z_29ASSETS z29Assets ON z29Assets.Z_3ASSETS = zAsset.Z_PK
+ LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z29Assets.Z_29ALBUMS
+ LEFT JOIN Z_28ALBUMLISTS z28AlbumLists ON z28AlbumLists.Z_28ALBUMS = zGenAlbum.Z_PK
+ LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z28AlbumLists.Z_2ALBUMLISTS
LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON
zGenAlbum.Z_PK = zCldShareAlbumInvRec.ZALBUM
WHERE zGenAlbum.ZKIND = 1505
ORDER BY zAsset.ZDATECREATED
- """)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-zPK-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-6',
+ 'zAsset-Syndication State-7',
+ 'zAsset-Bundle Scope-8',
+ 'zAddAssetAttr.Imported by Bundle Identifier-9',
+ 'zAddAssetAttr-Imported By Display Name-10',
+ 'zAsset-Visibility State-11',
+ 'zAsset-Saved Asset Type-12',
+ 'zAddAssetAttr-Share Type-13',
+ 'zAsset-Active Library Scope Participation State-14',
+ ('zAsset- SortToken -CameraRoll-15', 'datetime'),
+ ('zAsset-Added Date-16', 'datetime'),
+ ('zCldMast-Creation Date-17', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-18',
+ 'zAddAssetAttr-EXIF-String-19',
+ ('zAsset-Modification Date-20', 'datetime'),
+ ('zAsset-Last Shared Date-21', 'datetime'),
+ ('zAsset-Trashed Date-22', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-23',
+ 'zAddAssetAttr-zPK-24',
+ 'zAsset-UUID = store.cloudphotodb-25',
+ 'zAddAssetAttr-Master Fingerprint-26',
+ ('zGenAlbum-Cloud Creation Date-27', 'datetime'),
+ ('zGenAlbum-Creation Date-28', 'datetime'),
+ ('zGenAlbum-Start Date-29', 'datetime'),
+ ('zGenAlbum-End Date-30', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-31', 'datetime'),
+ 'zGenAlbum- Title-User&System Applied-32',
+ 'zGenAlbum-UUID-33',
+ 'zGenAlbum-Cloud GUID-34',
+ 'zGenAlbum-Imported by Bundle Identifier-35',
+ 'zGenAlbum-Pending Items Count-36',
+ 'zGenAlbum-Pending Items Type-37',
+ 'zGenAlbum- Cached Photos Count-38',
+ 'zGenAlbum- Cached Videos Count-39',
+ 'zGenAlbum- Cached Count-40',
+ 'zGenAlbum-Has Unseen Content-41',
+ 'zGenAlbum-Unseen Asset Count-42',
+ 'zGenAlbum-zENT- Entity-43',
+ 'zGenAlbum-Album Kind-44',
+ 'zGenAlbum-Cloud_Local_State-45',
+ 'zGenAlbum-Sync Event Order Key-46',
+ 'zGenAlbum-is Owned-47',
+ 'zGenAlbum-Cloud Relationship State-48',
+ 'zGenAlbum-Cloud Relationship State Local-49',
+ 'zGenAlbum-Cloud Owner Mail Key-50',
+ 'zGenAlbum-Cloud Owner First Name-51',
+ 'zGenAlbum-Cloud Owner Last Name-52',
+ 'zGenAlbum-Cloud Owner Full Name-53',
+ 'zGenAlbum-Cloud Person ID-54',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-55',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-56',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-57',
+ 'zGenAlbum-Cloud Album Sub Type-58',
+ ('zGenAlbum-Cloud Contribution Date-59', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-60', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-61',
+ 'zGenAlbum-Pinned-62',
+ 'zGenAlbum-Custom Sort Key-63',
+ 'zGenAlbum-Custom Sort Ascending-64',
+ 'zGenAlbum-Is Prototype-65',
+ 'zGenAlbum-Project Document Type-66',
+ 'zGenAlbum-Custom Query Type-67',
+ 'zGenAlbum-Trashed State-68',
+ ('zGenAlbum-Trash Date-69', 'datetime'),
+ 'zGenAlbum-Cloud Delete State-70',
+ 'zGenAlbum-Cloud Owner Whitelisted-71',
+ 'zGenAlbum-Cloud Local Public URL Enabled-72',
+ 'zGenAlbum-Cloud Public URL Enabled-73',
+ 'zGenAlbum-Public URL-74',
+ 'zGenAlbum-Key Asset Face Thumb Index-75',
+ 'zGenAlbum-Project Text Extension ID-76',
+ 'zGenAlbum-User Query Data-77',
+ 'zGenAlbum-Custom Query Parameters-78',
+ 'zGenAlbum-Project Data-79',
+ 'zGenAlbum-Search Index Rebuild State-80',
+ 'zGenAlbum-Duplicate Type-81',
+ 'zGenAlbum-Privacy State-82',
+ 'zCldShareAlbumInvRec-zUUID-83',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-84',
+ 'zCldShareAlbumInvRec-Invitation State Local-85',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-86',
+ ('zCldShareAlbumInvRec-Subscription Date-87', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-88',
+ 'zCldShareAlbumInvRec-Invitee Last Name-89',
+ 'zCldShareAlbumInvRec-Invitee Full Name-90',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-91',
+ 'zCldShareAlbumInvRec-Invitee Email Key-92',
+ 'zCldShareAlbumInvRec-Album GUID-93',
+ 'zCldShareAlbumInvRec-Cloud GUID-94',
+ 'zGenAlbum-Project Render UUID-95',
+ 'zAlbumList-Needs Reordering Number-96')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
+ elif version.parse(iosversion) >= version.parse("18"):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97]))
-
- counter += 1
-
- description = 'Parses Assets in Shared Albums found in PhotoData-Photos.sqlite and supports iOS 18.' \
- ' Parses limited asset data with full non-shared album data.'
- report = ArtifactHtmlReport('Ph24-Assets in Shared Albums-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph24-Assets in Shared Albums-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-zPK-1',
- 'zAsset-Directory-Path-2',
- 'zAsset-Filename-3',
- 'zAddAssetAttr- Original Filename-4',
- 'zCldMast- Original Filename-5',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-6',
- 'zAsset-Syndication State-7',
- 'zAsset-Bundle Scope-8',
- 'zAddAssetAttr.Imported by Bundle Identifier-9',
- 'zAddAssetAttr-Imported By Display Name-10',
- 'zAsset-Visibility State-11',
- 'zAsset-Saved Asset Type-12',
- 'zAddAssetAttr-Share Type-13',
- 'zAsset-Active Library Scope Participation State-14',
- 'zAsset- SortToken -CameraRoll-15',
- 'zAsset-Added Date-16',
- 'zCldMast-Creation Date-17',
- 'zAddAssetAttr-Time Zone Name-18',
- 'zAddAssetAttr-EXIF-String-19',
- 'zAsset-Modification Date-20',
- 'zAsset-Last Shared Date-21',
- 'zAsset-Trashed Date-22',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-23',
- 'zAddAssetAttr-zPK-24',
- 'zAsset-UUID = store.cloudphotodb-25',
- 'zAddAssetAttr-Original Stable Hash-iOS18-26',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-27',
- 'zGenAlbum-Cloud Creation Date-28',
- 'zGenAlbum-Creation Date-29',
- 'zGenAlbum-Start Date-30',
- 'zGenAlbum-End Date-31',
- 'zGenAlbum-Cloud Subscription Date-32',
- 'zGenAlbum- Title-User&System Applied-33',
- 'zGenAlbum-UUID-34',
- 'zGenAlbum-Cloud GUID-35',
- 'zGenAlbum-Imported by Bundle Identifier-36',
- 'zGenAlbum-Pending Items Count-37',
- 'zGenAlbum-Pending Items Type-38',
- 'zGenAlbum- Cached Photos Count-39',
- 'zGenAlbum- Cached Videos Count-40',
- 'zGenAlbum- Cached Count-41',
- 'zGenAlbum-Has Unseen Content-42',
- 'zGenAlbum-Unseen Asset Count-43',
- 'zGenAlbum-zENT- Entity-44',
- 'zGenAlbum-Album Kind-45',
- 'zGenAlbum-Cloud_Local_State-46',
- 'zGenAlbum-Sync Event Order Key-47',
- 'zGenAlbum-is Owned-48',
- 'zGenAlbum-Cloud Relationship State-49',
- 'zGenAlbum-Cloud Relationship State Local-50',
- 'zGenAlbum-Cloud Owner Mail Key-51',
- 'zGenAlbum-Cloud Owner First Name-52',
- 'zGenAlbum-Cloud Owner Last Name-53',
- 'zGenAlbum-Cloud Owner Full Name-54',
- 'zGenAlbum-Cloud Person ID-55',
- 'zGenAlbum-Cloud Owner Hashed Person ID-56',
- 'zGenAlbum-Local Cloud Multi-Contributors Enabled-57',
- 'zGenAlbum-Cloud Multi-Contributors Enabled-58',
- 'zGenAlbum-Cloud Album Sub Type-59',
- 'zGenAlbum-Cloud Contribution Date-60',
- 'zGenAlbum-Cloud Last Interesting Change Date-61',
- 'zGenAlbum-Cloud Notification Enabled-62',
- 'zGenAlbum-Pinned-63',
- 'zGenAlbum-Custom Sort Key-64',
- 'zGenAlbum-Custom Sort Ascending-65',
- 'zGenAlbum-Is Prototype-66',
- 'zGenAlbum-Project Document Type-67',
- 'zGenAlbum-Custom Query Type-68',
- 'zGenAlbum-Trashed State-69',
- 'zGenAlbum-Trash Date-70',
- 'zGenAlbum-Cloud Delete State-71',
- 'zGenAlbum-Cloud Owner Whitelisted-72',
- 'zGenAlbum-Cloud Local Public URL Enabled-73',
- 'zGenAlbum-Cloud Public URL Enabled-74',
- 'zGenAlbum-Public URL-75',
- 'zGenAlbum-Key Asset Face Thumb Index-76',
- 'zGenAlbum-Project Text Extension ID-77',
- 'zGenAlbum-User Query Data-78',
- 'zGenAlbum-Custom Query Parameters-79',
- 'zGenAlbum-Project Data-80',
- 'zGenAlbum-Search Index Rebuild State-81',
- 'zGenAlbum-Duplicate Type-82',
- 'zGenAlbum-Privacy State-83',
- 'zCldShareAlbumInvRec-zUUID-84',
- 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-85',
- 'zCldShareAlbumInvRec-Invitation State Local-86',
- 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-87',
- 'zCldShareAlbumInvRec-Subscription Date-88',
- 'zCldShareAlbumInvRec-Invitee First Name-89',
- 'zCldShareAlbumInvRec-Invitee Last Name-90',
- 'zCldShareAlbumInvRec-Invitee Full Name-91',
- 'zCldShareAlbumInvRec-Invitee Hashed Person ID-92',
- 'zCldShareAlbumInvRec-Invitee Email Key-93',
- 'zCldShareAlbumInvRec-Album GUID-94',
- 'zCldShareAlbumInvRec-Cloud GUID-95',
- 'zGenAlbum-Project Render UUID-96',
- 'zAlbumList-Needs Reordering Number-97')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph24-Assets in Shared Albums-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph24-Assets in Shared Albums-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
- else:
- logfunc('No Assets in Shared Albums found in PhotoData-Photos.sqlite')
-
- db.close()
- return
-
-
-__artifacts_v2__ = {
- 'Ph24-Asset in Shared Albums & Invites-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite Ph24 Asset in Shared Albums with invites',
- 'description': 'Parses Assets in Shared Albums found in PhotoData-Photos.sqlite and supports iOS 18.'
- ' Parses limited asset data with full non-shared album data.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-13',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-E-Asset_In_Albums',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph24assetsinsharedalbumsphdapsql'
- }
-}
+ query = '''
+ SELECT
+ DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
+ zAsset.Z_PK AS 'zAsset-zPK',
+ zAsset.ZDIRECTORY AS 'zAsset-Directory-Path',
+ zAsset.ZFILENAME AS 'zAsset-Filename',
+ zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename',
+ zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename',
+ zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files',
+ CASE zAsset.ZSYNDICATIONSTATE
+ WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0'
+ WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1'
+ WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2'
+ WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3'
+ WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8'
+ WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9'
+ WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || ''
+ END AS 'zAsset-Syndication State',
+ CASE zAsset.ZBUNDLESCOPE
+ WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0'
+ WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1'
+ WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2'
+ WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || ''
+ END AS 'zAsset-Bundle Scope',
+ zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr- Imported by Bundle Identifier',
+ zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr- Imported By Display Name',
+ CASE zAsset.ZVISIBILITYSTATE
+ WHEN 0 THEN '0-Visible-PL-CameraRoll-0'
+ WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || ''
+ END AS 'zAsset-Visibility State',
+ CASE zAsset.ZSAVEDASSETTYPE
+ WHEN 0 THEN '0-Saved-via-other-source-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ WHEN 2 THEN '2-StillTesting-2'
+ WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3'
+ WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4'
+ WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5'
+ WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6'
+ WHEN 7 THEN '7-StillTesting-7'
+ WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8'
+ WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || ''
+ END AS 'zAsset-Saved Asset Type',
+ CASE zAddAssetAttr.ZSHARETYPE
+ WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0'
+ WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || ''
+ END AS 'zAddAssetAttr-Share Type',
+ CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE
+ WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0'
+ WHEN 1 THEN '1-Asset-In-Active-SPL-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || ''
+ END AS 'zAsset-Active Library Scope Participation State',
+ DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
+ DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date',
+ DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date',
+ zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name',
+ zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String',
+ DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
+ DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date',
+ DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
+ zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK',
+ zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
+ zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash',
+ DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Creation Date',
+ DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date',
+ DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
+ DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date',
+ DateTime(zGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Subscription Date',
+ zGenAlbum.ZTITLE AS 'zGenAlbum- Title-User&System Applied',
+ zGenAlbum.ZUUID AS 'zGenAlbum-UUID',
+ zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID',
+ zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier',
+ zGenAlbum.ZPENDINGITEMSCOUNT AS 'zGenAlbum-Pending Items Count',
+ CASE zGenAlbum.ZPENDINGITEMSTYPE
+ WHEN 1 THEN 'No-1'
+ WHEN 24 THEN '24-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPENDINGITEMSTYPE || ''
+ END AS 'zGenAlbum-Pending Items Type',
+ zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum- Cached Photos Count',
+ zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum- Cached Videos Count',
+ zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum- Cached Count',
+ CASE zGenAlbum.ZHASUNSEENCONTENT
+ WHEN 0 THEN 'No Unseen Content-StillTesting-0'
+ WHEN 1 THEN 'Unseen Content-StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZHASUNSEENCONTENT || ''
+ END AS 'zGenAlbum-Has Unseen Content',
+ zGenAlbum.ZUNSEENASSETSCOUNT AS 'zGenAlbum-Unseen Asset Count',
+ CASE zGenAlbum.Z_ENT
+ WHEN 27 THEN '27-LPL-SPL-CPL_Album-DecodingVariableBasedOniOS-27'
+ WHEN 28 THEN '28-LPL-SPL-CPL-Shared_Album-DecodingVariableBasedOniOS-28'
+ WHEN 29 THEN '29-Shared_Album-DecodingVariableBasedOniOS-29'
+ WHEN 30 THEN '30-Duplicate_Album-Pending_Merge-30'
+ WHEN 35 THEN '35-SearchIndexRebuild-1600KIND-35'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.Z_ENT || ''
+ END AS 'zGenAlbum-zENT- Entity',
+ CASE zGenAlbum.ZKIND
+ WHEN 2 THEN '2-Non-Shared-Album-2'
+ WHEN 1505 THEN '1505-Shared-Album-1505'
+ WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT'
+ WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT'
+ WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509'
+ WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510'
+ WHEN 3571 THEN '3571-Progress-Sync-3571'
+ WHEN 3572 THEN '3572-Progress-OTA-Restore-3572'
+ WHEN 3573 THEN '3573-Progress-FS-Import-3573'
+ WHEN 3998 THEN '3998-Project Root Folder-3998'
+ WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999'
+ WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || ''
+ END AS 'zGenAlbum-Album Kind',
+ CASE zGenAlbum.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0'
+ WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDLOCALSTATE || ''
+ END AS 'zGenAlbum-Cloud_Local_State',
+ zGenAlbum.ZSYNCEVENTORDERKEY AS 'zGenAlbum-Sync Event Order Key',
+ CASE zGenAlbum.ZISOWNED
+ WHEN 0 THEN 'zGenAlbum-Not Owned by Device Apple Acnt-0'
+ WHEN 1 THEN 'zGenAlbum-Owned by Device Apple Acnt-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISOWNED || ''
+ END AS 'zGenAlbum-is Owned',
+ CASE zGenAlbum.ZCLOUDRELATIONSHIPSTATE
+ WHEN 0 THEN 'zGenAlbum-Cloud Album Owned by Device Apple Acnt-0'
+ WHEN 2 THEN 'zGenAlbum-Cloud Album Not Owned by Device Apple Acnt-2'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDRELATIONSHIPSTATE || ''
+ END AS 'zGenAlbum-Cloud Relationship State',
+ CASE zGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL
+ WHEN 0 THEN 'zGenAlbum-Shared Album Accessible Local Device-0'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL || ''
+ END AS 'zGenAlbum-Cloud Relationship State Local',
+ zGenAlbum.ZCLOUDOWNEREMAILKEY AS 'zGenAlbum-Cloud Owner Mail Key',
+ zGenAlbum.ZCLOUDOWNERFIRSTNAME AS 'zGenAlbum-Cloud Owner Frist Name',
+ zGenAlbum.ZCLOUDOWNERLASTNAME AS 'zGenAlbum-Cloud Owner Last Name',
+ zGenAlbum.ZCLOUDOWNERFULLNAME AS 'zGenAlbum-Cloud Owner Full Name',
+ zGenAlbum.ZCLOUDPERSONID AS 'zGenAlbum-Cloud Person ID',
+ zGenAlbum.ZCLOUDOWNERHASHEDPERSONID AS 'zGenAlbum-Cloud Owner Hashed Person ID',
+ CASE zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL
+ WHEN 0 THEN 'zGenAlbum-Local Cloud Single Contributor Enabled-0'
+ WHEN 1 THEN 'zGenAlbum-Local Cloud Multi-Contributors Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL || ''
+ END AS 'zGenAlbum-Local Cloud Multi-Contributors Enabled',
+ CASE zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED
+ WHEN 0 THEN 'zGenAlbum-Cloud Single Contributor Enabled-0'
+ WHEN 1 THEN 'zGenAlbum-Cloud Multi-Contributors Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED || ''
+ END AS 'zGenAlbum-Cloud Multi-Contributors Enabled',
+ CASE zGenAlbum.ZCLOUDALBUMSUBTYPE
+ WHEN 0 THEN 'zGenAlbum Multi-Contributor-0'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDALBUMSUBTYPE || ''
+ END AS 'zGenAlbum-Cloud Album Sub Type',
+ DateTime(zGenAlbum.ZCLOUDLASTCONTRIBUTIONDATE + 978307200, 'UNIXEPOCH') AS
+ 'zGenAlbum-Cloud Contribution Date',
+ DateTime(zGenAlbum.ZCLOUDLASTINTERESTINGCHANGEDATE + 978307200, 'UNIXEPOCH') AS
+ 'zGenAlbum-Cloud Last Interesting Change Date',
+ CASE zGenAlbum.ZCLOUDNOTIFICATIONSENABLED
+ WHEN 0 THEN 'zGenAlbum-Cloud Notifications Disabled-0'
+ WHEN 1 THEN 'zGenAlbum-Cloud Notifications Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDNOTIFICATIONSENABLED || ''
+ END AS 'zGenAlbum-Cloud Notification Enabled',
+ CASE zGenAlbum.ZISPINNED
+ WHEN 0 THEN 'zGenAlbum-Local Not Pinned-0'
+ WHEN 1 THEN 'zGenAlbum-Local Pinned-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPINNED || ''
+ END AS 'zGenAlbum-Pinned',
+ CASE zGenAlbum.ZCUSTOMSORTKEY
+ WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT'
+ WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT'
+ WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTKEY || ''
+ END AS 'zGenAlbum-Custom Sort Key',
+ CASE zGenAlbum.ZCUSTOMSORTASCENDING
+ WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0'
+ WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTASCENDING || ''
+ END AS 'zGenAlbum-Custom Sort Ascending',
+ CASE zGenAlbum.ZISPROTOTYPE
+ WHEN 0 THEN 'zGenAlbum-Not Prototype-0'
+ WHEN 1 THEN 'zGenAlbum-Prototype-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPROTOTYPE || ''
+ END AS 'zGenAlbum-Is Prototype',
+ CASE zGenAlbum.ZPROJECTDOCUMENTTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPROJECTDOCUMENTTYPE || ''
+ END AS 'zGenAlbum-Project Document Type',
+ CASE zGenAlbum.ZCUSTOMQUERYTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMQUERYTYPE || ''
+ END AS 'zGenAlbum-Custom Query Type',
+ CASE zGenAlbum.ZTRASHEDSTATE
+ WHEN 0 THEN 'zGenAlbum Not In Trash-0'
+ WHEN 1 THEN 'zGenAlbum Album In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZTRASHEDSTATE || ''
+ END AS 'zGenAlbum-Trashed State',
+ DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date',
+ CASE zGenAlbum.ZCLOUDDELETESTATE
+ WHEN 0 THEN 'zGenAlbum Cloud Not Deleted-0'
+ WHEN 1 THEN 'zGenAlbum Cloud Album Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDDELETESTATE || ''
+ END AS 'zGenAlbum-Cloud Delete State',
+ CASE zGenAlbum.ZCLOUDOWNERISWHITELISTED
+ WHEN 0 THEN 'zGenAlbum Cloud Owner Not Whitelisted-0'
+ WHEN 1 THEN 'zGenAlbum Cloud Owner Whitelisted-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDOWNERISWHITELISTED || ''
+ END AS 'zGenAlbum-Cloud Owner Whitelisted',
+ CASE zGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL
+ WHEN 0 THEN 'zGenAlbum Cloud Local Public URL Disabled-0'
+ WHEN 1 THEN 'zGenAlbum Cloud Local has Public URL Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL || ''
+ END AS 'zGenAlbum-Cloud Local Public URL Enabled',
+ CASE zGenAlbum.ZCLOUDPUBLICURLENABLED
+ WHEN 0 THEN 'zGenAlbum Cloud Public URL Disabled-0'
+ WHEN 1 THEN 'zGenAlbum Cloud Public URL Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDPUBLICURLENABLED || ''
+ END AS 'zGenAlbum-Cloud Public URL Enabled',
+ zGenAlbum.ZPUBLICURL AS 'zGenAlbum-Public URL',
+ zGenAlbum.ZKEYASSETFACETHUMBNAILINDEX AS 'zGenAlbum-Key Asset Face Thumb Index',
+ zGenAlbum.ZPROJECTEXTENSIONIDENTIFIER AS 'zGenAlbum-Project Text Extension ID',
+ zGenAlbum.ZUSERQUERYDATA AS 'zGenAlbum-User Query Data',
+ zGenAlbum.ZCUSTOMQUERYPARAMETERS AS 'zGenAlbum-Custom Query Parameters',
+ zGenAlbum.ZPROJECTDATA AS 'zGenAlbum-Project Data',
+ CASE zGenAlbum.ZSEARCHINDEXREBUILDSTATE
+ WHEN 0 THEN '0-StillTesting GenAlbm-Search Index State-0'
+ WHEN 1 THEN '1-StillTesting GenAlbm-Search Index State-1'
+ WHEN 2 THEN '2-StillTesting GenAlbm-Search Index State-2'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZSEARCHINDEXREBUILDSTATE || ''
+ END AS 'zGenAlbum-Search Index Rebuild State',
+ CASE zGenAlbum.ZDUPLICATETYPE
+ WHEN 0 THEN '0-StillTesting GenAlbumDuplicateType-0'
+ WHEN 1 THEN 'Duplicate Asset_Pending-Merge-1'
+ WHEN 2 THEN '2-StillTesting GenAlbumDuplicateType-2'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZDUPLICATETYPE || ''
+ END AS 'zGenAlbum-Duplicate Type',
+ CASE zGenAlbum.ZPRIVACYSTATE
+ WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0'
+ WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1'
+ WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPRIVACYSTATE || ''
+ END AS 'zGenAlbum-Privacy State',
+ zCldShareAlbumInvRec.ZUUID AS 'zCldShareAlbumInvRec-zUUID',
+ CASE zCldShareAlbumInvRec.ZISMINE
+ WHEN 0 THEN 'Not My Invitation-0'
+ WHEN 1 THEN 'My Invitation-1'
+ ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZISMINE || ''
+ END AS 'zCldShareAlbumInvRec-Is My Invitation to Shared Album',
+ CASE zCldShareAlbumInvRec.ZINVITATIONSTATELOCAL
+ WHEN 0 THEN '0-StillTesting-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZINVITATIONSTATELOCAL || ''
+ END AS 'zCldShareAlbumInvRec-Invitation State Local',
+ CASE zCldShareAlbumInvRec.ZINVITATIONSTATE
+ WHEN 1 THEN 'Shared Album Invitation Pending-1'
+ WHEN 2 THEN 'Shared Album Invitation Accepted-2'
+ WHEN 3 THEN 'Shared Album Invitation Declined-3'
+ WHEN 4 THEN '4-StillTesting'
+ WHEN 5 THEN '5-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZINVITATIONSTATE || ''
+ END AS 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status',
+ DateTime(zCldShareAlbumInvRec.ZINVITEESUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS
+ 'zCldShareAlbumInvRec-Subscription Date',
+ zCldShareAlbumInvRec.ZINVITEEFIRSTNAME AS 'zCldShareAlbumInvRec-Invitee First Name',
+ zCldShareAlbumInvRec.ZINVITEELASTNAME AS 'zCldShareAlbumInvRec-Invitee Last Name',
+ zCldShareAlbumInvRec.ZINVITEEFULLNAME AS 'zCldShareAlbumInvRec-Invitee Full Name',
+ zCldShareAlbumInvRec.ZINVITEEHASHEDPERSONID AS 'zCldShareAlbumInvRec-Invitee Hashed Person ID',
+ zCldShareAlbumInvRec.ZINVITEEEMAILKEY AS 'zCldShareAlbumInvRec-Invitee Email Key',
+ zCldShareAlbumInvRec.ZALBUMGUID AS 'zCldShareAlbumInvRec-Album GUID',
+ zCldShareAlbumInvRec.ZCLOUDGUID AS 'zCldShareAlbumInvRec-Cloud GUID',
+ zGenAlbum.ZPROJECTRENDERUUID AS 'zGenAlbum-Project Render UUID',
+ CASE zAlbumList.ZNEEDSREORDERINGNUMBER
+ WHEN 1 THEN '1-Yes-1'
+ ELSE 'Unknown-New-Value!: ' || zAlbumList.ZNEEDSREORDERINGNUMBER || ''
+ END AS 'zAlbumList-Needs Reordering Number'
+ FROM ZASSET zAsset
+ LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
+ LEFT JOIN Z_30ASSETS z30Assets ON z30Assets.Z_3ASSETS = zAsset.Z_PK
+ LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z30Assets.Z_30ALBUMS
+ LEFT JOIN Z_29ALBUMLISTS z29AlbumLists ON z29AlbumLists.Z_29ALBUMS = zGenAlbum.Z_PK
+ LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z29AlbumLists.Z_2ALBUMLISTS
+ LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER
+ LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
+ LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON
+ zGenAlbum.Z_PK = zCldShareAlbumInvRec.ZALBUM
+ WHERE zGenAlbum.ZKIND = 1505
+ ORDER BY zAsset.ZDATECREATED
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-zPK-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-6',
+ 'zAsset-Syndication State-7',
+ 'zAsset-Bundle Scope-8',
+ 'zAddAssetAttr.Imported by Bundle Identifier-9',
+ 'zAddAssetAttr-Imported By Display Name-10',
+ 'zAsset-Visibility State-11',
+ 'zAsset-Saved Asset Type-12',
+ 'zAddAssetAttr-Share Type-13',
+ 'zAsset-Active Library Scope Participation State-14',
+ ('zAsset- SortToken -CameraRoll-15', 'datetime'),
+ ('zAsset-Added Date-16', 'datetime'),
+ ('zCldMast-Creation Date-17', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-18',
+ 'zAddAssetAttr-EXIF-String-19',
+ ('zAsset-Modification Date-20', 'datetime'),
+ ('zAsset-Last Shared Date-21', 'datetime'),
+ ('zAsset-Trashed Date-22', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-23',
+ 'zAddAssetAttr-zPK-24',
+ 'zAsset-UUID = store.cloudphotodb-25',
+ 'zAddAssetAttr-Original Stable Hash-26',
+ 'zAddAssetAttr.Adjusted Stable Hash-27',
+ ('zGenAlbum-Cloud Creation Date-28', 'datetime'),
+ ('zGenAlbum-Creation Date-29', 'datetime'),
+ ('zGenAlbum-Start Date-30', 'datetime'),
+ ('zGenAlbum-End Date-31', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-32', 'datetime'),
+ 'zGenAlbum- Title-User&System Applied-33',
+ 'zGenAlbum-UUID-34',
+ 'zGenAlbum-Cloud GUID-35',
+ 'zGenAlbum-Imported by Bundle Identifier-36',
+ 'zGenAlbum-Pending Items Count-37',
+ 'zGenAlbum-Pending Items Type-38',
+ 'zGenAlbum- Cached Photos Count-39',
+ 'zGenAlbum- Cached Videos Count-40',
+ 'zGenAlbum- Cached Count-41',
+ 'zGenAlbum-Has Unseen Content-42',
+ 'zGenAlbum-Unseen Asset Count-43',
+ 'zGenAlbum-zENT- Entity-44',
+ 'zGenAlbum-Album Kind-45',
+ 'zGenAlbum-Cloud_Local_State-46',
+ 'zGenAlbum-Sync Event Order Key-47',
+ 'zGenAlbum-is Owned-48',
+ 'zGenAlbum-Cloud Relationship State-49',
+ 'zGenAlbum-Cloud Relationship State Local-50',
+ 'zGenAlbum-Cloud Owner Mail Key-51',
+ 'zGenAlbum-Cloud Owner First Name-52',
+ 'zGenAlbum-Cloud Owner Last Name-53',
+ 'zGenAlbum-Cloud Owner Full Name-54',
+ 'zGenAlbum-Cloud Person ID-55',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-56',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-57',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-58',
+ 'zGenAlbum-Cloud Album Sub Type-59',
+ ('zGenAlbum-Cloud Contribution Date-60', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-61', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-62',
+ 'zGenAlbum-Pinned-63',
+ 'zGenAlbum-Custom Sort Key-64',
+ 'zGenAlbum-Custom Sort Ascending-65',
+ 'zGenAlbum-Is Prototype-66',
+ 'zGenAlbum-Project Document Type-67',
+ 'zGenAlbum-Custom Query Type-68',
+ 'zGenAlbum-Trashed State-69',
+ ('zGenAlbum-Trash Date-70', 'datetime'),
+ 'zGenAlbum-Cloud Delete State-71',
+ 'zGenAlbum-Cloud Owner Whitelisted-72',
+ 'zGenAlbum-Cloud Local Public URL Enabled-73',
+ 'zGenAlbum-Cloud Public URL Enabled-74',
+ 'zGenAlbum-Public URL-75',
+ 'zGenAlbum-Key Asset Face Thumb Index-76',
+ 'zGenAlbum-Project Text Extension ID-77',
+ 'zGenAlbum-User Query Data-78',
+ 'zGenAlbum-Custom Query Parameters-79',
+ 'zGenAlbum-Project Data-80',
+ 'zGenAlbum-Search Index Rebuild State-81',
+ 'zGenAlbum-Duplicate Type-82',
+ 'zGenAlbum-Privacy State-83',
+ 'zCldShareAlbumInvRec-zUUID-84',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-85',
+ 'zCldShareAlbumInvRec-Invitation State Local-86',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-87',
+ ('zCldShareAlbumInvRec-Subscription Date-88', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-89',
+ 'zCldShareAlbumInvRec-Invitee Last Name-90',
+ 'zCldShareAlbumInvRec-Invitee Full Name-91',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-92',
+ 'zCldShareAlbumInvRec-Invitee Email Key-93',
+ 'zCldShareAlbumInvRec-Album GUID-94',
+ 'zCldShareAlbumInvRec-Cloud GUID-95',
+ 'zGenAlbum-Project Render UUID-96',
+ 'zAlbumList-Needs Reordering Number-97')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph25SWYConvAlbumsNAD.py b/scripts/artifacts/Ph25SWYConvAlbumsNAD.py
index 760d7098..c03125bd 100644
--- a/scripts/artifacts/Ph25SWYConvAlbumsNAD.py
+++ b/scripts/artifacts/Ph25SWYConvAlbumsNAD.py
@@ -1,43 +1,63 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 2.0
-#
-# Description:
-# Parses Shared with You Conversation Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table
-# and supports iOS 15-18. Parses Conversation Album records only no asset data being parsed.
-# This parser is based on research and SQLite Queries written by Scott Koenig
-# This is very large query and script, I recommend opening the TSV generated report with Zimmerman's Tools
-# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results.
-# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347
-#
+__artifacts_v2__ = {
+ 'Ph25_1SWYConversationRecordswithNADPhDaPsql': {
+ 'name': 'Ph25.1-SWY Conversation Records NAD-PhDaPsql',
+ 'description': 'Parses Shared with You Conversation Album records found in the PhotoData-Photos.sqlite'
+ ' ZGENERICALBUM Table and supports iOS 15-18. Parses Share with You Conversation Album'
+ ' records only, no asset data being parsed.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-D-Generic_Album_Records-NAD',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ },
+ 'Ph25_2SWYConversationRecordswithNADSyndPL': {
+ 'name': 'Ph25.2-SWY Conversation Records NAD-SyndPL',
+ 'description': 'Parses SWY Conversation Album Records found in the'
+ ' Syndication.photoslibrary-database-Photos.sqlite ZGENERICALBUM Table and supports iOS 15-18.'
+ ' Parses Share with You Conversation Album records only, no asset data being parsed.',
+ 'author': 'Scott Koenig https://theforensicscooter.com/',
+ 'version': '4.0',
+ 'date': '2024-12-31',
+ 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite',
+ 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts',
+ 'notes': '',
+ 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import glob
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, kmlgen, timeline, is_platform_windows, media_to_html, open_sqlite_db_readonly
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
+@artifact_processor
+def Ph25_1SWYConversationRecordswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
-def get_ph25swyconvalbumnadphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("14.8.1"):
- logfunc("Unsupported version for PhotoData-Photos.sqlite Shared with You Conversation album records"
- " with no asset data from iOS " + iosversion)
+ logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date',
DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date',
@@ -121,66 +141,44 @@ def get_ph25swyconvalbumnadphdapsql(files_found, report_folder, seeker, wrap_tex
= zCldShareAlbumInvRec.ZALBUM
WHERE SWYConverszGenAlbum.ZKIND = 1509
ORDER BY SWYConverszGenAlbum.ZCREATIONDATE
- """)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18]))
+
+ data_headers = (('SWYConverszGenAlbum-Creation Date', 'datetime'),
+ ('SWYConverszGenAlbum-Start Date', 'datetime'),
+ ('SWYConverszGenAlbum-End Date', 'datetime'),
+ 'zAsset- Conversation= zGenAlbum_zPK',
+ 'SWYConverszGenAlbum- Import Session ID-SWY',
+ 'SWYzGenAlbum-Imported by Bundle Identifier',
+ 'SWYConverszGenAlbum-Album Kind',
+ 'SWYConverszGenAlbum-Cloud_Local_State',
+ 'SWYConverszGenAlbum- Syndicate',
+ 'SWYConverszGenAlbum-Sync Event Order Key',
+ 'SWYConverszGenAlbum-Pinned',
+ 'SWYConverszGenAlbum-Custom Sort Key',
+ 'SWYConverszGenAlbum-Custom Sort Ascending',
+ 'SWYConverszGenAlbum-Is Prototype',
+ 'SWYConverszGenAlbum-Project Document Type',
+ 'SWYConverszGenAlbum-Custom Query Type',
+ 'SWYConverszGenAlbum-Trashed State',
+ ('SWYConverszGenAlbum-Trash Date', 'datetime'),
+ 'SWYConverszGenAlbum-Cloud Delete State')
+ data_list = get_sqlite_db_records(source_path, query)
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
+ return data_headers, data_list, source_path
+
+ elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17.6")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18]))
-
- counter += 1
-
- description = 'Parses Shared with You Conversation Album records found in the PhotoData-Photos.sqlite' \
- ' ZGENERICALBUM Table and supports iOS 15. Parses Share with You Conversation Album' \
- ' records only, no asset data being parsed.'
- report = ArtifactHtmlReport('Ph25.1-SWY Conversation Records NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph25.1-SWY Conversation Records NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('SWYConverszGenAlbum-Creation Date',
- 'SWYConverszGenAlbum-Start Date',
- 'SWYConverszGenAlbum-End Date',
- 'zAsset- Conversation= zGenAlbum_zPK',
- 'SWYConverszGenAlbum- Import Session ID-SWY',
- 'SWYzGenAlbum-Imported by Bundle Identifier',
- 'SWYConverszGenAlbum-Album Kind',
- 'SWYConverszGenAlbum-Cloud_Local_State',
- 'SWYConverszGenAlbum- Syndicate',
- 'SWYConverszGenAlbum-Sync Event Order Key',
- 'SWYConverszGenAlbum-Pinned',
- 'SWYConverszGenAlbum-Custom Sort Key',
- 'SWYConverszGenAlbum-Custom Sort Ascending',
- 'SWYConverszGenAlbum-Is Prototype',
- 'SWYConverszGenAlbum-Project Document Type',
- 'SWYConverszGenAlbum-Custom Query Type',
- 'SWYConverszGenAlbum-Trashed State',
- 'SWYConverszGenAlbum-Trash Date',
- 'SWYConverszGenAlbum-Cloud Delete State')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph25.1-SWY Conversation Records NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph25.1-SWY Conversation Records NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Shared with You Conversation Album Records'
- ' with No Asset Data')
-
- db.close()
- return
-
- elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
-
- cursor.execute("""
+
+ query = '''
SELECT
DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date',
DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date',
@@ -270,68 +268,175 @@ def get_ph25swyconvalbumnadphdapsql(files_found, report_folder, seeker, wrap_tex
= zCldShareAlbumInvRec.ZALBUM
WHERE SWYConverszGenAlbum.ZKIND = 1509
ORDER BY SWYConverszGenAlbum.ZCREATIONDATE
- """)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19]))
+
+ data_headers = (('SWYConverszGenAlbum-Creation Date-0', 'datetime'),
+ ('SWYConverszGenAlbum-Start Date-1', 'datetime'),
+ ('SWYConverszGenAlbum-End Date-2', 'datetime'),
+ 'zAsset- Conversation= zGenAlbum_zPK-3',
+ 'SWYConverszGenAlbum- Import Session ID-SWY-4',
+ 'SWYzGenAlbum-Imported by Bundle Identifier-5',
+ 'SWYConverszGenAlbum-Album Kind-6',
+ 'SWYConverszGenAlbum-Cloud_Local_State-7',
+ 'SWYConverszGenAlbum- Syndicate-8',
+ 'SWYConverszGenAlbum-Sync Event Order Key-9',
+ 'SWYConverszGenAlbum-Pinned-10',
+ 'SWYConverszGenAlbum-Custom Sort Key-11',
+ 'SWYConverszGenAlbum-Custom Sort Ascending-12',
+ 'SWYConverszGenAlbum-Is Prototype-13',
+ 'SWYConverszGenAlbum-Project Document Type-14',
+ 'SWYConverszGenAlbum-Custom Query Type-15',
+ 'SWYConverszGenAlbum-Trashed State-16',
+ ('SWYConverszGenAlbum-Trash Date-17', 'datetime'),
+ 'SWYConverszGenAlbum-Cloud Delete State-18',
+ 'SWYConverszGenAlbum-Privacy State-19')
+ data_list = get_sqlite_db_records(source_path, query)
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
+ return data_headers, data_list, source_path
+
+ elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19]))
-
- counter += 1
-
- description = 'Parses Shared with You Conversation Album records found in the PhotoData-Photos.sqlite' \
- ' ZGENERICALBUM Table and supports iOS 16-17. Parses Share with You Conversation Album' \
- ' records only, no asset data being parsed.'
- report = ArtifactHtmlReport('Ph25.1-SWY Conversation Records NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph25.1-SWY Conversation Records NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('SWYConverszGenAlbum-Creation Date-0',
- 'SWYConverszGenAlbum-Start Date-1',
- 'SWYConverszGenAlbum-End Date-2',
- 'zAsset- Conversation= zGenAlbum_zPK-3',
- 'SWYConverszGenAlbum- Import Session ID-SWY-4',
- 'SWYzGenAlbum-Imported by Bundle Identifier-5',
- 'SWYConverszGenAlbum-Album Kind-6',
- 'SWYConverszGenAlbum-Cloud_Local_State-7',
- 'SWYConverszGenAlbum- Syndicate-8',
- 'SWYConverszGenAlbum-Sync Event Order Key-9',
- 'SWYConverszGenAlbum-Pinned-10',
- 'SWYConverszGenAlbum-Custom Sort Key-11',
- 'SWYConverszGenAlbum-Custom Sort Ascending-12',
- 'SWYConverszGenAlbum-Is Prototype-13',
- 'SWYConverszGenAlbum-Project Document Type-14',
- 'SWYConverszGenAlbum-Custom Query Type-15',
- 'SWYConverszGenAlbum-Trashed State-16',
- 'SWYConverszGenAlbum-Trash Date-17',
- 'SWYConverszGenAlbum-Cloud Delete State-18',
- 'SWYConverszGenAlbum-Privacy State-19')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph25.1-SWY Conversation Records NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph25.1-SWY Conversation Records NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Shared with You Conversation Album Records'
- ' with No Asset Data')
-
- db.close()
- return
+
+ query = '''
+ SELECT
+ DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date',
+ DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date',
+ DateTime(SWYConverszGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-End Date',
+ zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK',
+ SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID-SWY',
+ SWYConverszGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'SWYzGenAlbum-Imported by Bundle Identifier',
+ CASE SWYConverszGenAlbum.ZKIND
+ WHEN 2 THEN '2-Non-Shared-Album-2'
+ WHEN 1505 THEN '1505-Shared-Album-1505'
+ WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT'
+ WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT'
+ WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509'
+ WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510'
+ WHEN 3571 THEN '3571-Progress-Sync-3571'
+ WHEN 3572 THEN '3572-Progress-OTA-Restore-3572'
+ WHEN 3573 THEN '3573-Progress-FS-Import-3573'
+ WHEN 3998 THEN '3998-Project Root Folder-3998'
+ WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999'
+ WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZKIND || ''
+ END AS 'SWYConverszGenAlbum-Album Kind',
+ CASE SWYConverszGenAlbum.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0'
+ WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDLOCALSTATE || ''
+ END AS 'SWYConverszGenAlbum-Cloud_Local_State',
+ CASE SWYConverszGenAlbum.ZSYNDICATE
+ WHEN 1 THEN '1-SWYConverszGenAlbum-Syndicate - SWY-SyncedFile-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSYNDICATE || ''
+ END AS 'SWYConverszGenAlbum- Syndicate',
+ SWYConverszGenAlbum.ZSYNCEVENTORDERKEY AS 'SWYConverszGenAlbum-Sync Event Order Key',
+ CASE SWYConverszGenAlbum.ZISPINNED
+ WHEN 0 THEN 'SWYConverszGenAlbum-Local Not Pinned-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum-Local Pinned-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPINNED || ''
+ END AS 'SWYConverszGenAlbum-Pinned',
+ CASE SWYConverszGenAlbum.ZCUSTOMSORTKEY
+ WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Manually-0_RT'
+ WHEN 1 THEN '1-SWYConverszGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT'
+ WHEN 5 THEN '5-SWYConverszGenAlbum-Sorted_by_Title-5_RT'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTKEY || ''
+ END AS 'SWYConverszGenAlbum-Custom Sort Key',
+ CASE SWYConverszGenAlbum.ZCUSTOMSORTASCENDING
+ WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Newest_First-0'
+ WHEN 1 THEN '1-SWYConverszGenAlbum-Sorted_Oldest_First-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTASCENDING || ''
+ END AS 'SWYConverszGenAlbum-Custom Sort Ascending',
+ CASE SWYConverszGenAlbum.ZISPROTOTYPE
+ WHEN 0 THEN 'SWYConverszGenAlbum-Not Prototype-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum-Prototype-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPROTOTYPE || ''
+ END AS 'SWYConverszGenAlbum-Is Prototype',
+ CASE SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE || ''
+ END AS 'SWYConverszGenAlbum-Project Document Type',
+ CASE SWYConverszGenAlbum.ZCUSTOMQUERYTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMQUERYTYPE || ''
+ END AS 'SWYConverszGenAlbum-Custom Query Type',
+ CASE SWYConverszGenAlbum.ZTRASHEDSTATE
+ WHEN 0 THEN 'SWYConverszGenAlbum Not In Trash-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum Album In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZTRASHEDSTATE || ''
+ END AS 'SWYConverszGenAlbum-Trashed State',
+ DateTime(SWYConverszGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Trash Date',
+ CASE SWYConverszGenAlbum.ZCLOUDDELETESTATE
+ WHEN 0 THEN 'SWYConverszGenAlbum Cloud Not Deleted-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum Cloud Album Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDDELETESTATE || ''
+ END AS 'SWYConverszGenAlbum-Cloud Delete State',
+ CASE SWYConverszGenAlbum.ZPRIVACYSTATE
+ WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0'
+ WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1'
+ WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPRIVACYSTATE || ''
+ END AS 'SWYConverszGenAlbum-Privacy State'
+ FROM ZGENERICALBUM SWYConverszGenAlbum
+ LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = SWYConverszGenAlbum.ZPARENTFOLDER
+ LEFT JOIN ZASSET zAsset ON zAsset.ZCONVERSATION = SWYConverszGenAlbum.Z_PK
+ LEFT JOIN Z_29ASSETS z29Assets ON z29Assets.Z_3ASSETS = zAsset.Z_PK
+ LEFT JOIN Z_29ASSETS Albumsz29Assets ON Albumsz29Assets.Z_29ALBUMS = SWYConverszGenAlbum.Z_PK
+ LEFT JOIN Z_28ALBUMLISTS z28AlbumLists ON z28AlbumLists.Z_28ALBUMS = SWYConverszGenAlbum.Z_PK
+ LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z28AlbumLists.Z_2ALBUMLISTS
+ LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON SWYConverszGenAlbum.Z_PK
+ = zCldShareAlbumInvRec.ZALBUM
+ WHERE SWYConverszGenAlbum.ZKIND = 1509
+ ORDER BY SWYConverszGenAlbum.ZCREATIONDATE
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19]))
+
+ data_headers = (('SWYConverszGenAlbum-Creation Date-0', 'datetime'),
+ ('SWYConverszGenAlbum-Start Date-1', 'datetime'),
+ ('SWYConverszGenAlbum-End Date-2', 'datetime'),
+ 'zAsset- Conversation= zGenAlbum_zPK-3',
+ 'SWYConverszGenAlbum- Import Session ID-SWY-4',
+ 'SWYzGenAlbum-Imported by Bundle Identifier-5',
+ 'SWYConverszGenAlbum-Album Kind-6',
+ 'SWYConverszGenAlbum-Cloud_Local_State-7',
+ 'SWYConverszGenAlbum- Syndicate-8',
+ 'SWYConverszGenAlbum-Sync Event Order Key-9',
+ 'SWYConverszGenAlbum-Pinned-10',
+ 'SWYConverszGenAlbum-Custom Sort Key-11',
+ 'SWYConverszGenAlbum-Custom Sort Ascending-12',
+ 'SWYConverszGenAlbum-Is Prototype-13',
+ 'SWYConverszGenAlbum-Project Document Type-14',
+ 'SWYConverszGenAlbum-Custom Query Type-15',
+ 'SWYConverszGenAlbum-Trashed State-16',
+ ('SWYConverszGenAlbum-Trash Date-17', 'datetime'),
+ 'SWYConverszGenAlbum-Cloud Delete State-18',
+ 'SWYConverszGenAlbum-Privacy State-19')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date',
DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date',
@@ -413,90 +518,68 @@ def get_ph25swyconvalbumnadphdapsql(files_found, report_folder, seeker, wrap_tex
FROM ZGENERICALBUM SWYConverszGenAlbum
LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = SWYConverszGenAlbum.ZPARENTFOLDER
LEFT JOIN ZASSET zAsset ON zAsset.ZCONVERSATION = SWYConverszGenAlbum.Z_PK
- LEFT JOIN Z_31ASSETS z31Assets ON z31Assets.Z_3ASSETS = zAsset.Z_PK
- LEFT JOIN Z_31ASSETS Albumsz31Assets ON Albumsz31Assets.Z_31ALBUMS = SWYConverszGenAlbum.Z_PK
- LEFT JOIN Z_30ALBUMLISTS z30AlbumLists ON z30AlbumLists.Z_30ALBUMS = SWYConverszGenAlbum.Z_PK
- LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z30AlbumLists.Z_2ALBUMLISTS
+ LEFT JOIN Z_30ASSETS z30Assets ON z30Assets.Z_3ASSETS = zAsset.Z_PK
+ LEFT JOIN Z_30ASSETS Albumsz30Assets ON Albumsz30Assets.Z_30ALBUMS = SWYConverszGenAlbum.Z_PK
+ LEFT JOIN Z_29ALBUMLISTS z29AlbumLists ON z29AlbumLists.Z_29ALBUMS = SWYConverszGenAlbum.Z_PK
+ LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z29AlbumLists.Z_2ALBUMLISTS
LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON SWYConverszGenAlbum.Z_PK
= zCldShareAlbumInvRec.ZALBUM
WHERE SWYConverszGenAlbum.ZKIND = 1509
ORDER BY SWYConverszGenAlbum.ZCREATIONDATE
- """)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19]))
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19]))
-
- counter += 1
-
- description = 'Parses Shared with You Conversation Album records found in the PhotoData-Photos.sqlite' \
- ' ZGENERICALBUM Table and supports iOS 18. Parses Share with You Conversation Album' \
- ' records only, no asset data being parsed.'
- report = ArtifactHtmlReport('Ph25.1-SWY Conversation Records NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph25.1-SWY Conversation Records NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('SWYConverszGenAlbum-Creation Date-0',
- 'SWYConverszGenAlbum-Start Date-1',
- 'SWYConverszGenAlbum-End Date-2',
- 'zAsset- Conversation= zGenAlbum_zPK-3',
- 'SWYConverszGenAlbum- Import Session ID-SWY-4',
- 'SWYzGenAlbum-Imported by Bundle Identifier-5',
- 'SWYConverszGenAlbum-Album Kind-6',
- 'SWYConverszGenAlbum-Cloud_Local_State-7',
- 'SWYConverszGenAlbum- Syndicate-8',
- 'SWYConverszGenAlbum-Sync Event Order Key-9',
- 'SWYConverszGenAlbum-Pinned-10',
- 'SWYConverszGenAlbum-Custom Sort Key-11',
- 'SWYConverszGenAlbum-Custom Sort Ascending-12',
- 'SWYConverszGenAlbum-Is Prototype-13',
- 'SWYConverszGenAlbum-Project Document Type-14',
- 'SWYConverszGenAlbum-Custom Query Type-15',
- 'SWYConverszGenAlbum-Trashed State-16',
- 'SWYConverszGenAlbum-Trash Date-17',
- 'SWYConverszGenAlbum-Cloud Delete State-18',
- 'SWYConverszGenAlbum-Privacy State-19')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph25.1-SWY Conversation Records NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph25.1-SWY Conversation Records NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Shared with You Conversation Album Records'
- ' with No Asset Data')
-
- db.close()
- return
-
-
-def get_ph25swyconvalbumnadsyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
+ data_headers = (('SWYConverszGenAlbum-Creation Date-0', 'datetime'),
+ ('SWYConverszGenAlbum-Start Date-1', 'datetime'),
+ ('SWYConverszGenAlbum-End Date-2', 'datetime'),
+ 'zAsset- Conversation= zGenAlbum_zPK-3',
+ 'SWYConverszGenAlbum- Import Session ID-SWY-4',
+ 'SWYzGenAlbum-Imported by Bundle Identifier-5',
+ 'SWYConverszGenAlbum-Album Kind-6',
+ 'SWYConverszGenAlbum-Cloud_Local_State-7',
+ 'SWYConverszGenAlbum- Syndicate-8',
+ 'SWYConverszGenAlbum-Sync Event Order Key-9',
+ 'SWYConverszGenAlbum-Pinned-10',
+ 'SWYConverszGenAlbum-Custom Sort Key-11',
+ 'SWYConverszGenAlbum-Custom Sort Ascending-12',
+ 'SWYConverszGenAlbum-Is Prototype-13',
+ 'SWYConverszGenAlbum-Project Document Type-14',
+ 'SWYConverszGenAlbum-Custom Query Type-15',
+ 'SWYConverszGenAlbum-Trashed State-16',
+ ('SWYConverszGenAlbum-Trash Date-17', 'datetime'),
+ 'SWYConverszGenAlbum-Cloud Delete State-18',
+ 'SWYConverszGenAlbum-Privacy State-19')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
+@artifact_processor
+def Ph25_2SWYConversationRecordswithNADSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
+
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("14.8.1"):
- logfunc("Unsupported version for Syndication.photoslibrary-database-Photos.sqlite Shared with You Conversation"
- " album records with no asset data on iOS " + iosversion)
+ logfunc("Unsupported version for Syndication.photoslibrary iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date',
DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date',
@@ -580,67 +663,44 @@ def get_ph25swyconvalbumnadsyndpl(files_found, report_folder, seeker, wrap_text,
= zCldShareAlbumInvRec.ZALBUM
WHERE SWYConverszGenAlbum.ZKIND = 1509
ORDER BY SWYConverszGenAlbum.ZCREATIONDATE
- """)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18]))
+
+ data_headers = (('SWYConverszGenAlbum-Creation Date', 'datetime'),
+ ('SWYConverszGenAlbum-Start Date', 'datetime'),
+ ('SWYConverszGenAlbum-End Date', 'datetime'),
+ 'zAsset- Conversation= zGenAlbum_zPK',
+ 'SWYConverszGenAlbum- Import Session ID-SWY',
+ 'SWYzGenAlbum-Imported by Bundle Identifier',
+ 'SWYConverszGenAlbum-Album Kind',
+ 'SWYConverszGenAlbum-Cloud_Local_State',
+ 'SWYConverszGenAlbum- Syndicate',
+ 'SWYConverszGenAlbum-Sync Event Order Key',
+ 'SWYConverszGenAlbum-Pinned',
+ 'SWYConverszGenAlbum-Custom Sort Key',
+ 'SWYConverszGenAlbum-Custom Sort Ascending',
+ 'SWYConverszGenAlbum-Is Prototype',
+ 'SWYConverszGenAlbum-Project Document Type',
+ 'SWYConverszGenAlbum-Custom Query Type',
+ 'SWYConverszGenAlbum-Trashed State',
+ ('SWYConverszGenAlbum-Trash Date', 'datetime'),
+ 'SWYConverszGenAlbum-Cloud Delete State')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
+ elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17.6")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18]))
-
- counter += 1
-
- description = 'Parses Shared with You Conversation Album records found in the' \
- ' Syndication.photoslibrary-database-Photos.sqlite ZGENERICALBUM Table and' \
- ' supports iOS 15. Parses Share with You Conversation Album' \
- ' records only, no asset data being parsed.'
- report = ArtifactHtmlReport('Ph25.2-SWY Conversation Records NAD-SyndPL')
- report.start_artifact_report(report_folder, 'Ph25.2-SWY Conversation Records NAD-SyndPL', description)
- report.add_script()
- data_headers = ('SWYConverszGenAlbum-Creation Date',
- 'SWYConverszGenAlbum-Start Date',
- 'SWYConverszGenAlbum-End Date',
- 'zAsset- Conversation= zGenAlbum_zPK',
- 'SWYConverszGenAlbum- Import Session ID-SWY',
- 'SWYzGenAlbum-Imported by Bundle Identifier',
- 'SWYConverszGenAlbum-Album Kind',
- 'SWYConverszGenAlbum-Cloud_Local_State',
- 'SWYConverszGenAlbum- Syndicate',
- 'SWYConverszGenAlbum-Sync Event Order Key',
- 'SWYConverszGenAlbum-Pinned',
- 'SWYConverszGenAlbum-Custom Sort Key',
- 'SWYConverszGenAlbum-Custom Sort Ascending',
- 'SWYConverszGenAlbum-Is Prototype',
- 'SWYConverszGenAlbum-Project Document Type',
- 'SWYConverszGenAlbum-Custom Query Type',
- 'SWYConverszGenAlbum-Trashed State',
- 'SWYConverszGenAlbum-Trash Date',
- 'SWYConverszGenAlbum-Cloud Delete State')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph25.2-SWY Conversation Records NAD-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph25.2-SWY Conversation Records NAD-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite'
- ' Shared with You Conversation Album Records with No Asset Data')
-
- db.close()
- return
-
- elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
-
- cursor.execute("""
+
+ query = '''
SELECT
DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date',
DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date',
@@ -730,69 +790,175 @@ def get_ph25swyconvalbumnadsyndpl(files_found, report_folder, seeker, wrap_text,
= zCldShareAlbumInvRec.ZALBUM
WHERE SWYConverszGenAlbum.ZKIND = 1509
ORDER BY SWYConverszGenAlbum.ZCREATIONDATE
- """)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19]))
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
+ data_headers = (('SWYConverszGenAlbum-Creation Date-0', 'datetime'),
+ ('SWYConverszGenAlbum-Start Date-1', 'datetime'),
+ ('SWYConverszGenAlbum-End Date-2', 'datetime'),
+ 'zAsset- Conversation= zGenAlbum_zPK-3',
+ 'SWYConverszGenAlbum- Import Session ID-SWY-4',
+ 'SWYzGenAlbum-Imported by Bundle Identifier-5',
+ 'SWYConverszGenAlbum-Album Kind-6',
+ 'SWYConverszGenAlbum-Cloud_Local_State-7',
+ 'SWYConverszGenAlbum- Syndicate-8',
+ 'SWYConverszGenAlbum-Sync Event Order Key-9',
+ 'SWYConverszGenAlbum-Pinned-10',
+ 'SWYConverszGenAlbum-Custom Sort Key-11',
+ 'SWYConverszGenAlbum-Custom Sort Ascending-12',
+ 'SWYConverszGenAlbum-Is Prototype-13',
+ 'SWYConverszGenAlbum-Project Document Type-14',
+ 'SWYConverszGenAlbum-Custom Query Type-15',
+ 'SWYConverszGenAlbum-Trashed State-16',
+ ('SWYConverszGenAlbum-Trash Date-17', 'datetime'),
+ 'SWYConverszGenAlbum-Cloud Delete State-18',
+ 'SWYConverszGenAlbum-Privacy State-19')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
+ elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19]))
-
- counter += 1
-
- description = 'Parses Shared with You Conversation Album records found in the' \
- ' Syndication.photoslibrary-database-Photos.sqlite ZGENERICALBUM Table and' \
- ' supports iOS 16-17. Parses Share with You Conversation Album' \
- ' records only, no asset data being parsed.'
- report = ArtifactHtmlReport('Ph25.2-SWY Conversation Records NAD-SyndPL')
- report.start_artifact_report(report_folder, 'Ph25.2-SWY Conversation Records NAD-SyndPL', description)
- report.add_script()
- data_headers = ('SWYConverszGenAlbum-Creation Date-0',
- 'SWYConverszGenAlbum-Start Date-1',
- 'SWYConverszGenAlbum-End Date-2',
- 'zAsset- Conversation= zGenAlbum_zPK-3',
- 'SWYConverszGenAlbum- Import Session ID-SWY-4',
- 'SWYzGenAlbum-Imported by Bundle Identifier-5',
- 'SWYConverszGenAlbum-Album Kind-6',
- 'SWYConverszGenAlbum-Cloud_Local_State-7',
- 'SWYConverszGenAlbum- Syndicate-8',
- 'SWYConverszGenAlbum-Sync Event Order Key-9',
- 'SWYConverszGenAlbum-Pinned-10',
- 'SWYConverszGenAlbum-Custom Sort Key-11',
- 'SWYConverszGenAlbum-Custom Sort Ascending-12',
- 'SWYConverszGenAlbum-Is Prototype-13',
- 'SWYConverszGenAlbum-Project Document Type-14',
- 'SWYConverszGenAlbum-Custom Query Type-15',
- 'SWYConverszGenAlbum-Trashed State-16',
- 'SWYConverszGenAlbum-Trash Date-17',
- 'SWYConverszGenAlbum-Cloud Delete State-18',
- 'SWYConverszGenAlbum-Privacy State-19')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph25.2-SWY Conversation Records NAD-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph25.2-SWY Conversation Records NAD-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite'
- ' Shared with You Conversation Album Records with No Asset Data')
-
- db.close()
- return
+
+ query = '''
+ SELECT
+ DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date',
+ DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date',
+ DateTime(SWYConverszGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-End Date',
+ zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK',
+ SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID-SWY',
+ SWYConverszGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'SWYzGenAlbum-Imported by Bundle Identifier',
+ CASE SWYConverszGenAlbum.ZKIND
+ WHEN 2 THEN '2-Non-Shared-Album-2'
+ WHEN 1505 THEN '1505-Shared-Album-1505'
+ WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT'
+ WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT'
+ WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509'
+ WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510'
+ WHEN 3571 THEN '3571-Progress-Sync-3571'
+ WHEN 3572 THEN '3572-Progress-OTA-Restore-3572'
+ WHEN 3573 THEN '3573-Progress-FS-Import-3573'
+ WHEN 3998 THEN '3998-Project Root Folder-3998'
+ WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999'
+ WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZKIND || ''
+ END AS 'SWYConverszGenAlbum-Album Kind',
+ CASE SWYConverszGenAlbum.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0'
+ WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDLOCALSTATE || ''
+ END AS 'SWYConverszGenAlbum-Cloud_Local_State',
+ CASE SWYConverszGenAlbum.ZSYNDICATE
+ WHEN 1 THEN '1-SWYConverszGenAlbum-Syndicate - SWY-SyncedFile-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSYNDICATE || ''
+ END AS 'SWYConverszGenAlbum- Syndicate',
+ SWYConverszGenAlbum.ZSYNCEVENTORDERKEY AS 'SWYConverszGenAlbum-Sync Event Order Key',
+ CASE SWYConverszGenAlbum.ZISPINNED
+ WHEN 0 THEN 'SWYConverszGenAlbum-Local Not Pinned-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum-Local Pinned-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPINNED || ''
+ END AS 'SWYConverszGenAlbum-Pinned',
+ CASE SWYConverszGenAlbum.ZCUSTOMSORTKEY
+ WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Manually-0_RT'
+ WHEN 1 THEN '1-SWYConverszGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT'
+ WHEN 5 THEN '5-SWYConverszGenAlbum-Sorted_by_Title-5_RT'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTKEY || ''
+ END AS 'SWYConverszGenAlbum-Custom Sort Key',
+ CASE SWYConverszGenAlbum.ZCUSTOMSORTASCENDING
+ WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Newest_First-0'
+ WHEN 1 THEN '1-SWYConverszGenAlbum-Sorted_Oldest_First-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTASCENDING || ''
+ END AS 'SWYConverszGenAlbum-Custom Sort Ascending',
+ CASE SWYConverszGenAlbum.ZISPROTOTYPE
+ WHEN 0 THEN 'SWYConverszGenAlbum-Not Prototype-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum-Prototype-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPROTOTYPE || ''
+ END AS 'SWYConverszGenAlbum-Is Prototype',
+ CASE SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE || ''
+ END AS 'SWYConverszGenAlbum-Project Document Type',
+ CASE SWYConverszGenAlbum.ZCUSTOMQUERYTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMQUERYTYPE || ''
+ END AS 'SWYConverszGenAlbum-Custom Query Type',
+ CASE SWYConverszGenAlbum.ZTRASHEDSTATE
+ WHEN 0 THEN 'SWYConverszGenAlbum Not In Trash-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum Album In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZTRASHEDSTATE || ''
+ END AS 'SWYConverszGenAlbum-Trashed State',
+ DateTime(SWYConverszGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Trash Date',
+ CASE SWYConverszGenAlbum.ZCLOUDDELETESTATE
+ WHEN 0 THEN 'SWYConverszGenAlbum Cloud Not Deleted-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum Cloud Album Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDDELETESTATE || ''
+ END AS 'SWYConverszGenAlbum-Cloud Delete State',
+ CASE SWYConverszGenAlbum.ZPRIVACYSTATE
+ WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0'
+ WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1'
+ WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPRIVACYSTATE || ''
+ END AS 'SWYConverszGenAlbum-Privacy State'
+ FROM ZGENERICALBUM SWYConverszGenAlbum
+ LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = SWYConverszGenAlbum.ZPARENTFOLDER
+ LEFT JOIN ZASSET zAsset ON zAsset.ZCONVERSATION = SWYConverszGenAlbum.Z_PK
+ LEFT JOIN Z_29ASSETS z29Assets ON z29Assets.Z_3ASSETS = zAsset.Z_PK
+ LEFT JOIN Z_29ASSETS Albumsz29Assets ON Albumsz29Assets.Z_29ALBUMS = SWYConverszGenAlbum.Z_PK
+ LEFT JOIN Z_28ALBUMLISTS z28AlbumLists ON z28AlbumLists.Z_28ALBUMS = SWYConverszGenAlbum.Z_PK
+ LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z28AlbumLists.Z_2ALBUMLISTS
+ LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON SWYConverszGenAlbum.Z_PK
+ = zCldShareAlbumInvRec.ZALBUM
+ WHERE SWYConverszGenAlbum.ZKIND = 1509
+ ORDER BY SWYConverszGenAlbum.ZCREATIONDATE
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19]))
+
+ data_headers = (('SWYConverszGenAlbum-Creation Date-0', 'datetime'),
+ ('SWYConverszGenAlbum-Start Date-1', 'datetime'),
+ ('SWYConverszGenAlbum-End Date-2', 'datetime'),
+ 'zAsset- Conversation= zGenAlbum_zPK-3',
+ 'SWYConverszGenAlbum- Import Session ID-SWY-4',
+ 'SWYzGenAlbum-Imported by Bundle Identifier-5',
+ 'SWYConverszGenAlbum-Album Kind-6',
+ 'SWYConverszGenAlbum-Cloud_Local_State-7',
+ 'SWYConverszGenAlbum- Syndicate-8',
+ 'SWYConverszGenAlbum-Sync Event Order Key-9',
+ 'SWYConverszGenAlbum-Pinned-10',
+ 'SWYConverszGenAlbum-Custom Sort Key-11',
+ 'SWYConverszGenAlbum-Custom Sort Ascending-12',
+ 'SWYConverszGenAlbum-Is Prototype-13',
+ 'SWYConverszGenAlbum-Project Document Type-14',
+ 'SWYConverszGenAlbum-Custom Query Type-15',
+ 'SWYConverszGenAlbum-Trashed State-16',
+ ('SWYConverszGenAlbum-Trash Date-17', 'datetime'),
+ 'SWYConverszGenAlbum-Cloud Delete State-18',
+ 'SWYConverszGenAlbum-Privacy State-19')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date',
DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date',
@@ -874,99 +1040,45 @@ def get_ph25swyconvalbumnadsyndpl(files_found, report_folder, seeker, wrap_text,
FROM ZGENERICALBUM SWYConverszGenAlbum
LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = SWYConverszGenAlbum.ZPARENTFOLDER
LEFT JOIN ZASSET zAsset ON zAsset.ZCONVERSATION = SWYConverszGenAlbum.Z_PK
- LEFT JOIN Z_31ASSETS z31Assets ON z31Assets.Z_3ASSETS = zAsset.Z_PK
- LEFT JOIN Z_31ASSETS Albumsz31Assets ON Albumsz31Assets.Z_31ALBUMS = SWYConverszGenAlbum.Z_PK
- LEFT JOIN Z_30ALBUMLISTS z30AlbumLists ON z30AlbumLists.Z_30ALBUMS = SWYConverszGenAlbum.Z_PK
- LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z30AlbumLists.Z_2ALBUMLISTS
+ LEFT JOIN Z_30ASSETS z30Assets ON z30Assets.Z_3ASSETS = zAsset.Z_PK
+ LEFT JOIN Z_30ASSETS Albumsz30Assets ON Albumsz30Assets.Z_30ALBUMS = SWYConverszGenAlbum.Z_PK
+ LEFT JOIN Z_29ALBUMLISTS z29AlbumLists ON z29AlbumLists.Z_29ALBUMS = SWYConverszGenAlbum.Z_PK
+ LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z29AlbumLists.Z_2ALBUMLISTS
LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON SWYConverszGenAlbum.Z_PK
= zCldShareAlbumInvRec.ZALBUM
WHERE SWYConverszGenAlbum.ZKIND = 1509
ORDER BY SWYConverszGenAlbum.ZCREATIONDATE
- """)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19]))
+
+ data_headers = (('SWYConverszGenAlbum-Creation Date-0', 'datetime'),
+ ('SWYConverszGenAlbum-Start Date-1', 'datetime'),
+ ('SWYConverszGenAlbum-End Date-2', 'datetime'),
+ 'zAsset- Conversation= zGenAlbum_zPK-3',
+ 'SWYConverszGenAlbum- Import Session ID-SWY-4',
+ 'SWYzGenAlbum-Imported by Bundle Identifier-5',
+ 'SWYConverszGenAlbum-Album Kind-6',
+ 'SWYConverszGenAlbum-Cloud_Local_State-7',
+ 'SWYConverszGenAlbum- Syndicate-8',
+ 'SWYConverszGenAlbum-Sync Event Order Key-9',
+ 'SWYConverszGenAlbum-Pinned-10',
+ 'SWYConverszGenAlbum-Custom Sort Key-11',
+ 'SWYConverszGenAlbum-Custom Sort Ascending-12',
+ 'SWYConverszGenAlbum-Is Prototype-13',
+ 'SWYConverszGenAlbum-Project Document Type-14',
+ 'SWYConverszGenAlbum-Custom Query Type-15',
+ 'SWYConverszGenAlbum-Trashed State-16',
+ ('SWYConverszGenAlbum-Trash Date-17', 'datetime'),
+ 'SWYConverszGenAlbum-Cloud Delete State-18',
+ 'SWYConverszGenAlbum-Privacy State-19')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19]))
-
- counter += 1
-
- description = 'Parses Shared with You Conversation Album records found in the' \
- ' Syndication.photoslibrary-database-Photos.sqlite ZGENERICALBUM Table and' \
- ' supports iOS 198 Parses Share with You Conversation Album' \
- ' records only, no asset data being parsed.'
- report = ArtifactHtmlReport('Ph25.2-SWY Conversation Records NAD-SyndPL')
- report.start_artifact_report(report_folder, 'Ph25.2-SWY Conversation Records NAD-SyndPL', description)
- report.add_script()
- data_headers = ('SWYConverszGenAlbum-Creation Date-0',
- 'SWYConverszGenAlbum-Start Date-1',
- 'SWYConverszGenAlbum-End Date-2',
- 'zAsset- Conversation= zGenAlbum_zPK-3',
- 'SWYConverszGenAlbum- Import Session ID-SWY-4',
- 'SWYzGenAlbum-Imported by Bundle Identifier-5',
- 'SWYConverszGenAlbum-Album Kind-6',
- 'SWYConverszGenAlbum-Cloud_Local_State-7',
- 'SWYConverszGenAlbum- Syndicate-8',
- 'SWYConverszGenAlbum-Sync Event Order Key-9',
- 'SWYConverszGenAlbum-Pinned-10',
- 'SWYConverszGenAlbum-Custom Sort Key-11',
- 'SWYConverszGenAlbum-Custom Sort Ascending-12',
- 'SWYConverszGenAlbum-Is Prototype-13',
- 'SWYConverszGenAlbum-Project Document Type-14',
- 'SWYConverszGenAlbum-Custom Query Type-15',
- 'SWYConverszGenAlbum-Trashed State-16',
- 'SWYConverszGenAlbum-Trash Date-17',
- 'SWYConverszGenAlbum-Cloud Delete State-18',
- 'SWYConverszGenAlbum-Privacy State-19')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph25.2-SWY Conversation Records NAD-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph25.2-SWY Conversation Records NAD-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite'
- ' Shared with You Conversation Album Records with No Asset Data')
-
- db.close()
- return
-__artifacts_v2__ = {
- 'Ph25-1-SWY Conversation Records with NAD-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite Ph25.1 SWY Conversation Album Records with No Asset Data',
- 'description': 'Parses Shared with You Conversation Album records found in the PhotoData-Photos.sqlite'
- ' ZGENERICALBUM Table and supports iOS 15-18. Parses Share with You Conversation Album'
- ' records only, no asset data being parsed.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-13',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-D-Generic_Album_Records-NAD',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph25swyconvalbumnadphdapsql'
- },
- 'Ph25-2-SWY Conversation Records with NAD-SyndPL': {
- 'name': 'SyndPL Photos.sqlite Ph25.2 SWY Conversation Records with No Asset Data',
- 'description': 'Parses SWY Conversation Album Records found in the'
- ' Syndication.photoslibrary-database-Photos.sqlite ZGENERICALBUM Table and supports iOS 15-18.'
- ' Parses Share with You Conversation Album records only, no asset data being parsed.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-13',
- 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite',
- 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts',
- 'notes': '',
- 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',
- 'function': 'get_ph25swyconvalbumnadsyndpl'
- }
-}
diff --git a/scripts/artifacts/Ph26SyndicationPLAssets.py b/scripts/artifacts/Ph26SyndicationPLAssets.py
index 1ea3d4e2..b1a4ebec 100644
--- a/scripts/artifacts/Ph26SyndicationPLAssets.py
+++ b/scripts/artifacts/Ph26SyndicationPLAssets.py
@@ -1,50 +1,81 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 2.0
-#
-# Description:
-# Parses Syndication Photos Library assets which includes Shared with You Conversation assets from
-# PhotoData-Photos.sqlite and Syndication.photoslibrary-database-Photos.sqlite and supports iOS 15-18.
-# Parses assets that have a ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER value. ZASSET ZSAVEDASSETTYPE and
-# ZASSET ZSYNDICATIONSTATE fields can be used to filter those results:
-# ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER: 0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0
-# 1-SyndPs-Sent-SWY_Synd_Asset-1 2-SyndPs-Manually-Saved_SWY_Synd_Asset-2
-# 8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8 9-SyndPs-STILLTESTING_Sent_SWY-9
-# 10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10
-# ZASSET ZSAVEDASSETTYPE: 12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12
-# This parser is based on research and SQLite Queries written by Scott Koenig
-# This is very large query and script, I recommend opening the TSV generated report with Zimmerman's Tools
-# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results.
-# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347
-#
+__artifacts_v2__ = {
+ 'Ph26_1SyndicationIDAssetsPhDaPsql': {
+ 'name': 'Ph26.1-Syndication ID Assets-PhDaPsql',
+ 'description': 'Parses Syndication ID and Syndication Photos Library assets which includes'
+ ' Shared with You Conversation assets from PhotoData-Photos.sqlite and'
+ ' Syndication.photoslibrary-database-Photos.sqlite'
+ ' and supports iOS 15-18. Parses assets that have a ZADDITIONALASSETATTRIBUTES'
+ ' ZSYNDICATIONIDENTIFIER value. ZASSET ZSAVEDASSETTYPE and ZASSET ZSYNDICATIONSTATE fields'
+ ' can be used to filter those results: ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER:'
+ ' 0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0 1-SyndPs-Sent-SWY_Synd_Asset-1'
+ ' 2-SyndPs-Manually-Saved_SWY_Synd_Asset-2'
+ ' 8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8'
+ ' 9-SyndPs-STILLTESTING_Sent_SWY-9'
+ ' 10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10'
+ ' ZASSET ZSAVEDASSETTYPE: 12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-C-Other_Artifacts',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ },
+ 'Ph26_2SyndicationPLAssetsSyndPL': {
+ 'name': 'Ph26.2-Syndication PL Assets-SyndPL',
+ 'description': 'Parses Syndication ID and Syndication Photos Library assets which includes'
+ ' Shared with You Conversation assets from PhotoData-Photos.sqlite and'
+ ' Syndication.photoslibrary-database-Photos.sqlite'
+ ' and supports iOS 15-18. Parses assets that have a ZADDITIONALASSETATTRIBUTES'
+ ' ZSYNDICATIONIDENTIFIER value. ZASSET ZSAVEDASSETTYPE and ZASSET ZSYNDICATIONSTATE fields'
+ ' can be used to filter those results: ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER:'
+ ' 0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0 1-SyndPs-Sent-SWY_Synd_Asset-1'
+ ' 2-SyndPs-Manually-Saved_SWY_Synd_Asset-2'
+ ' 8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8'
+ ' 9-SyndPs-STILLTESTING_Sent_SWY-9'
+ ' 10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10'
+ ' ZASSET ZSAVEDASSETTYPE: 12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite',
+ 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts',
+ 'notes': '',
+ 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import glob
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, kmlgen, timeline, is_platform_windows, media_to_html, open_sqlite_db_readonly
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
+@artifact_processor
+def Ph26_1SyndicationIDAssetsPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
-def get_ph26syndicationidassetsphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("14.8.1"):
- logfunc("Unsupported version for Syndication ID or Syndication Photos Library assets from"
- " PhotoData-Photos.sqlite for iOS " + iosversion)
+ logfunc("Unsupported version from PhotoData-Photos.sqlite for iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date',
@@ -186,103 +217,72 @@ def get_ph26syndicationidassetsphdapsql(files_found, report_folder, seeker, wrap
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE zAddAssetAttr.ZSYNDICATIONIDENTIFIER IS NOT NULL
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43]))
-
- counter += 1
-
- description = 'Parses Syndication ID and Syndication Photos Library assets which includes' \
- ' Shared with You Conversation assets from PhotoData-Photos.sqlite and' \
- ' Syndication.photoslibrary-database-Photos.sqlite' \
- ' and supports iOS 15. Parses assets that have a ZADDITIONALASSETATTRIBUTES' \
- ' ZSYNDICATIONIDENTIFIER value. ZASSET ZSAVEDASSETTYPE and ZASSET ZSYNDICATIONSTATE fields' \
- ' can be used to filter those results: ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER:' \
- ' 0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0 1-SyndPs-Sent-SWY_Synd_Asset-1' \
- ' 2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' \
- ' 8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' \
- ' 9-SyndPs-STILLTESTING_Sent_SWY-9' \
- ' 10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10 ZASSET ZSAVEDASSETTYPE:' \
- ' 12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12'
- report = ArtifactHtmlReport('Ph26.1-Syndication ID Assets-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph26.1-Syndication ID Assets-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'SWYConverszGenAlbum-Creation Date-1',
- 'SWYConverszGenAlbum-Start Date-2',
- 'SWYConverszGenAlbum-End Date-3',
- 'zAsset- Conversation= zGenAlbum_zPK-4',
- 'SWYConverszGenAlbum- Import Session ID-SWY-5',
- 'SWYzGenAlbum-Imported by Bundle Identifier-6',
- 'zAsset-zPK-7',
- 'zAsset-Directory-Path-8',
- 'zAsset-Filename-9',
- 'zAddAssetAttr- Original Filename-10',
- 'zCldMast- Original Filename-11',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-12',
- 'zAsset-Syndication State-13',
- 'zAsset-Bundle Scope-14',
- 'zAddAssetAttr- Imported by Bundle Identifier-15',
- 'zAddAssetAttr-Imported By Display Name-16',
- 'zAsset-Visibility State-17',
- 'zAsset-Saved Asset Type-18',
- 'zAddAssetAttr-Share Type-19',
- 'zAsset- SortToken -CameraRoll-20',
- 'zAsset-Added Date-21',
- 'zCldMast-Creation Date-22',
- 'zAddAssetAttr-Time Zone Name-23',
- 'zAddAssetAttr-EXIF-String-24',
- 'zAsset-Modification Date-25',
- 'zAsset-Last Shared Date-26',
- 'zAsset-Trashed Date-27',
- 'zAddAssetAttr-zPK-28',
- 'zAsset-UUID = store.cloudphotodb-29',
- 'zAddAssetAttr-Master Fingerprint-30',
- 'SWYConverszGenAlbum-Album Kind-31',
- 'SWYConverszGenAlbum-Cloud_Local_State-32',
- 'SWYConverszGenAlbum- Syndicate-33',
- 'SWYConverszGenAlbum-Sync Event Order Key-34',
- 'SWYConverszGenAlbum-Pinned-35',
- 'SWYConverszGenAlbum-Custom Sort Key-36',
- 'SWYConverszGenAlbum-Custom Sort Ascending-37',
- 'SWYConverszGenAlbum-Is Prototype-38',
- 'SWYConverszGenAlbum-Project Document Type-39',
- 'SWYConverszGenAlbum-Custom Query Type-40',
- 'SWYConverszGenAlbum-Trashed State-41',
- 'SWYConverszGenAlbum-Trash Date-42',
- 'SWYConverszGenAlbum-Cloud Delete State-43')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph26.1-Syndication ID Assets-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph26.1-Syndication ID Assets-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43]))
- else:
- logfunc('No assets with a ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER value from'
- ' PhotoData-Photos.sqlite')
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('SWYConverszGenAlbum-Creation Date-1', 'datetime'),
+ ('SWYConverszGenAlbum-Start Date-2', 'datetime'),
+ ('SWYConverszGenAlbum-End Date-3', 'datetime'),
+ 'zAsset- Conversation= zGenAlbum_zPK-4',
+ 'SWYConverszGenAlbum- Import Session ID-SWY-5',
+ 'SWYzGenAlbum-Imported by Bundle Identifier-6',
+ 'zAsset-zPK-7',
+ 'zAsset-Directory-Path-8',
+ 'zAsset-Filename-9',
+ 'zAddAssetAttr- Original Filename-10',
+ 'zCldMast- Original Filename-11',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-12',
+ 'zAsset-Syndication State-13',
+ 'zAsset-Bundle Scope-14',
+ 'zAddAssetAttr- Imported by Bundle Identifier-15',
+ 'zAddAssetAttr-Imported By Display Name-16',
+ 'zAsset-Visibility State-17',
+ 'zAsset-Saved Asset Type-18',
+ 'zAddAssetAttr-Share Type-19',
+ ('zAsset- SortToken -CameraRoll-20', 'datetime'),
+ ('zAsset-Added Date-21', 'datetime'),
+ ('zCldMast-Creation Date-22', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-23',
+ 'zAddAssetAttr-EXIF-String-24',
+ ('zAsset-Modification Date-25', 'datetime'),
+ ('zAsset-Last Shared Date-26', 'datetime'),
+ ('zAsset-Trashed Date-27', 'datetime'),
+ 'zAddAssetAttr-zPK-28',
+ 'zAsset-UUID = store.cloudphotodb-29',
+ 'zAddAssetAttr-Master Fingerprint-30',
+ 'SWYConverszGenAlbum-Album Kind-31',
+ 'SWYConverszGenAlbum-Cloud_Local_State-32',
+ 'SWYConverszGenAlbum- Syndicate-33',
+ 'SWYConverszGenAlbum-Sync Event Order Key-34',
+ 'SWYConverszGenAlbum-Pinned-35',
+ 'SWYConverszGenAlbum-Custom Sort Key-36',
+ 'SWYConverszGenAlbum-Custom Sort Ascending-37',
+ 'SWYConverszGenAlbum-Is Prototype-38',
+ 'SWYConverszGenAlbum-Project Document Type-39',
+ 'SWYConverszGenAlbum-Custom Query Type-40',
+ 'SWYConverszGenAlbum-Trashed State-41',
+ ('SWYConverszGenAlbum-Trash Date-42', 'datetime'),
+ 'SWYConverszGenAlbum-Cloud Delete State-43')
+ data_list = get_sqlite_db_records(source_path, query)
- db.close()
- return
+ return data_headers, data_list, source_path
- elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17.6")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date',
@@ -436,107 +436,299 @@ def get_ph26syndicationidassetsphdapsql(files_found, report_folder, seeker, wrap
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE zAddAssetAttr.ZSYNDICATIONIDENTIFIER IS NOT NULL
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46]))
-
- counter += 1
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46]))
- description = 'Parses Syndication ID and Syndication Photos Library assets which includes' \
- ' Shared with You Conversation assets from PhotoData-Photos.sqlite and' \
- ' Syndication.photoslibrary-database-Photos.sqlite' \
- ' and supports iOS 16-17. Parses assets that have a ZADDITIONALASSETATTRIBUTES' \
- ' ZSYNDICATIONIDENTIFIER value. ZASSET ZSAVEDASSETTYPE and ZASSET ZSYNDICATIONSTATE fields' \
- ' can be used to filter those results: ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER:' \
- ' 0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0 1-SyndPs-Sent-SWY_Synd_Asset-1' \
- ' 2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' \
- ' 8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' \
- ' 9-SyndPs-STILLTESTING_Sent_SWY-9' \
- ' 10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10 ZASSET ZSAVEDASSETTYPE:' \
- ' 12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12'
- report = ArtifactHtmlReport('Ph26.1-Syndication ID Assets-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph26.1-Syndication ID Assets-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'SWYConverszGenAlbum-Creation Date-1',
- 'SWYConverszGenAlbum-Start Date-2',
- 'SWYConverszGenAlbum-End Date-3',
- 'zAsset- Conversation= zGenAlbum_zPK-4',
- 'SWYConverszGenAlbum- Import Session ID-SWY-5',
- 'SWYzGenAlbum-Imported by Bundle Identifier-6',
- 'zAsset-zPK-7',
- 'zAsset-Directory-Path-8',
- 'zAsset-Filename-9',
- 'zAddAssetAttr- Original Filename-10',
- 'zCldMast- Original Filename-11',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-12',
- 'zAsset-Syndication State-13',
- 'zAsset-Bundle Scope-14',
- 'zAddAssetAttr.Imported by Bundle Identifier-15',
- 'zAddAssetAttr-Imported By Display Name-16',
- 'zAsset-Visibility State-17',
- 'zAsset-Saved Asset Type-18',
- 'zAddAssetAttr-Share Type-19',
- 'zAsset-Active Library Scope Participation State-20',
- 'zAsset- SortToken -CameraRoll-21',
- 'zAsset-Added Date-22',
- 'zCldMast-Creation Date-23',
- 'zAddAssetAttr-Time Zone Name-24',
- 'zAddAssetAttr-EXIF-String-25',
- 'zAsset-Modification Date-26',
- 'zAsset-Last Shared Date-27',
- 'zAsset-Trashed Date-28',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-29',
- 'zAddAssetAttr-zPK-30',
- 'zAsset-UUID = store.cloudphotodb-31',
- 'zAddAssetAttr-Master Fingerprint-32',
- 'SWYConverszGenAlbum-Album Kind-33',
- 'SWYConverszGenAlbum-Cloud_Local_State-34',
- 'SWYConverszGenAlbum- Syndicate-35',
- 'SWYConverszGenAlbum-Sync Event Order Key-36',
- 'SWYConverszGenAlbum-Pinned-37',
- 'SWYConverszGenAlbum-Custom Sort Key-38',
- 'SWYConverszGenAlbum-Custom Sort Ascending-39',
- 'SWYConverszGenAlbum-Is Prototype-40',
- 'SWYConverszGenAlbum-Project Document Type-41',
- 'SWYConverszGenAlbum-Custom Query Type-42',
- 'SWYConverszGenAlbum-Trashed State-43',
- 'SWYConverszGenAlbum-Trash Date-44',
- 'SWYConverszGenAlbum-Cloud Delete State-45',
- 'SWYConverszGenAlbum-Privacy State-46')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('SWYConverszGenAlbum-Creation Date-1', 'datetime'),
+ ('SWYConverszGenAlbum-Start Date-2', 'datetime'),
+ ('SWYConverszGenAlbum-End Date-3', 'datetime'),
+ 'zAsset- Conversation= zGenAlbum_zPK-4',
+ 'SWYConverszGenAlbum- Import Session ID-SWY-5',
+ 'SWYzGenAlbum-Imported by Bundle Identifier-6',
+ 'zAsset-zPK-7',
+ 'zAsset-Directory-Path-8',
+ 'zAsset-Filename-9',
+ 'zAddAssetAttr- Original Filename-10',
+ 'zCldMast- Original Filename-11',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-12',
+ 'zAsset-Syndication State-13',
+ 'zAsset-Bundle Scope-14',
+ 'zAddAssetAttr.Imported by Bundle Identifier-15',
+ 'zAddAssetAttr-Imported By Display Name-16',
+ 'zAsset-Visibility State-17',
+ 'zAsset-Saved Asset Type-18',
+ 'zAddAssetAttr-Share Type-19',
+ 'zAsset-Active Library Scope Participation State-20',
+ ('zAsset- SortToken -CameraRoll-21', 'datetime'),
+ ('zAsset-Added Date-22', 'datetime'),
+ ('zCldMast-Creation Date-23', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-24',
+ 'zAddAssetAttr-EXIF-String-25',
+ ('zAsset-Modification Date-26', 'datetime'),
+ ('zAsset-Last Shared Date-27', 'datetime'),
+ ('zAsset-Trashed Date-28', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-29',
+ 'zAddAssetAttr-zPK-30',
+ 'zAsset-UUID = store.cloudphotodb-31',
+ 'zAddAssetAttr-Master Fingerprint-32',
+ 'SWYConverszGenAlbum-Album Kind-33',
+ 'SWYConverszGenAlbum-Cloud_Local_State-34',
+ 'SWYConverszGenAlbum- Syndicate-35',
+ 'SWYConverszGenAlbum-Sync Event Order Key-36',
+ 'SWYConverszGenAlbum-Pinned-37',
+ 'SWYConverszGenAlbum-Custom Sort Key-38',
+ 'SWYConverszGenAlbum-Custom Sort Ascending-39',
+ 'SWYConverszGenAlbum-Is Prototype-40',
+ 'SWYConverszGenAlbum-Project Document Type-41',
+ 'SWYConverszGenAlbum-Custom Query Type-42',
+ 'SWYConverszGenAlbum-Trashed State-43',
+ ('SWYConverszGenAlbum-Trash Date-44', 'datetime'),
+ 'SWYConverszGenAlbum-Cloud Delete State-45',
+ 'SWYConverszGenAlbum-Privacy State-46')
+ data_list = get_sqlite_db_records(source_path, query)
- tsvname = 'Ph26.1-Syndication ID Assets-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
+ return data_headers, data_list, source_path
+
+ elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- tlactivity = 'Ph26.1-Syndication ID Assets-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ query = '''
+ SELECT
+ DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
+ DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date',
+ DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date',
+ DateTime(SWYConverszGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-End Date',
+ zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK',
+ SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID-SWY',
+ SWYConverszGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'SWYzGenAlbum-Imported by Bundle Identifier',
+ zAsset.Z_PK AS 'zAsset-zPK',
+ zAsset.ZDIRECTORY AS 'zAsset-Directory-Path',
+ zAsset.ZFILENAME AS 'zAsset-Filename',
+ zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename',
+ zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename',
+ zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files',
+ CASE zAsset.ZSYNDICATIONSTATE
+ WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0'
+ WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1'
+ WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2'
+ WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3'
+ WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8'
+ WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9'
+ WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || ''
+ END AS 'zAsset-Syndication State',
+ CASE zAsset.ZBUNDLESCOPE
+ WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0'
+ WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1'
+ WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2'
+ WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || ''
+ END AS 'zAsset-Bundle Scope',
+ zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr- Imported by Bundle Identifier',
+ zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr- Imported By Display Name',
+ CASE zAsset.ZVISIBILITYSTATE
+ WHEN 0 THEN '0-Visible-PL-CameraRoll-0'
+ WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || ''
+ END AS 'zAsset-Visibility State',
+ CASE zAsset.ZSAVEDASSETTYPE
+ WHEN 0 THEN '0-Saved-via-other-source-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ WHEN 2 THEN '2-StillTesting-2'
+ WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3'
+ WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4'
+ WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5'
+ WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6'
+ WHEN 7 THEN '7-StillTesting-7'
+ WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8'
+ WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || ''
+ END AS 'zAsset-Saved Asset Type',
+ CASE zAddAssetAttr.ZSHARETYPE
+ WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0'
+ WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || ''
+ END AS 'zAddAssetAttr-Share Type',
+ CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE
+ WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0'
+ WHEN 1 THEN '1-Asset-In-Active-SPL-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || ''
+ END AS 'zAsset-Active Library Scope Participation State',
+ DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
+ DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date',
+ DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date',
+ zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name',
+ zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String',
+ DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
+ DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date',
+ DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
+ zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK',
+ zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
+ zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
+ zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint',
+ CASE SWYConverszGenAlbum.ZKIND
+ WHEN 2 THEN '2-Non-Shared-Album-2'
+ WHEN 1505 THEN '1505-Shared-Album-1505'
+ WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT'
+ WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT'
+ WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509'
+ WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510'
+ WHEN 3571 THEN '3571-Progress-Sync-3571'
+ WHEN 3572 THEN '3572-Progress-OTA-Restore-3572'
+ WHEN 3573 THEN '3573-Progress-FS-Import-3573'
+ WHEN 3998 THEN '3998-Project Root Folder-3998'
+ WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999'
+ WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZKIND || ''
+ END AS 'SWYConverszGenAlbum-Album Kind',
+ CASE SWYConverszGenAlbum.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0'
+ WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDLOCALSTATE || ''
+ END AS 'SWYConverszGenAlbum-Cloud_Local_State',
+ CASE SWYConverszGenAlbum.ZSYNDICATE
+ WHEN 1 THEN '1-SWYConverszGenAlbum-Syndicate - SWY-SyncedFile-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSYNDICATE || ''
+ END AS 'SWYConverszGenAlbum- Syndicate',
+ SWYConverszGenAlbum.ZSYNCEVENTORDERKEY AS 'SWYConverszGenAlbum-Sync Event Order Key',
+ CASE SWYConverszGenAlbum.ZISPINNED
+ WHEN 0 THEN 'SWYConverszGenAlbum-Local Not Pinned-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum-Local Pinned-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPINNED || ''
+ END AS 'SWYConverszGenAlbum-Pinned',
+ CASE SWYConverszGenAlbum.ZCUSTOMSORTKEY
+ WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Manually-0_RT'
+ WHEN 1 THEN '1-SWYConverszGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT'
+ WHEN 5 THEN '5-SWYConverszGenAlbum-Sorted_by_Title-5_RT'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTKEY || ''
+ END AS 'SWYConverszGenAlbum-Custom Sort Key',
+ CASE SWYConverszGenAlbum.ZCUSTOMSORTASCENDING
+ WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Newest_First-0'
+ WHEN 1 THEN '1-SWYConverszGenAlbum-Sorted_Oldest_First-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTASCENDING || ''
+ END AS 'SWYConverszGenAlbum-Custom Sort Ascending',
+ CASE SWYConverszGenAlbum.ZISPROTOTYPE
+ WHEN 0 THEN 'SWYConverszGenAlbum-Not Prototype-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum-Prototype-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPROTOTYPE || ''
+ END AS 'SWYConverszGenAlbum-Is Prototype',
+ CASE SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE || ''
+ END AS 'SWYConverszGenAlbum-Project Document Type',
+ CASE SWYConverszGenAlbum.ZCUSTOMQUERYTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMQUERYTYPE || ''
+ END AS 'SWYConverszGenAlbum-Custom Query Type',
+ CASE SWYConverszGenAlbum.ZTRASHEDSTATE
+ WHEN 0 THEN 'SWYConverszGenAlbum Not In Trash-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum Album In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZTRASHEDSTATE || ''
+ END AS 'SWYConverszGenAlbum-Trashed State',
+ DateTime(SWYConverszGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Trash Date',
+ CASE SWYConverszGenAlbum.ZCLOUDDELETESTATE
+ WHEN 0 THEN 'SWYConverszGenAlbum Cloud Not Deleted-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum Cloud Album Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDDELETESTATE || ''
+ END AS 'SWYConverszGenAlbum-Cloud Delete State',
+ CASE SWYConverszGenAlbum.ZPRIVACYSTATE
+ WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0'
+ WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1'
+ WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPRIVACYSTATE || ''
+ END AS 'SWYConverszGenAlbum-Privacy State'
+ FROM ZASSET zAsset
+ LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
+ LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES
+ LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION
+ LEFT JOIN Z_28ALBUMLISTS z28AlbumLists ON z28AlbumLists.Z_28ALBUMS = SWYConverszGenAlbum.Z_PK
+ LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z28AlbumLists.Z_2ALBUMLISTS
+ LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
+ WHERE zAddAssetAttr.ZSYNDICATIONIDENTIFIER IS NOT NULL
+ ORDER BY zAsset.ZDATECREATED
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46]))
- else:
- logfunc('No assets with a ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER value from'
- ' PhotoData-Photos.sqlite')
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('SWYConverszGenAlbum-Creation Date-1', 'datetime'),
+ ('SWYConverszGenAlbum-Start Date-2', 'datetime'),
+ ('SWYConverszGenAlbum-End Date-3', 'datetime'),
+ 'zAsset- Conversation= zGenAlbum_zPK-4',
+ 'SWYConverszGenAlbum- Import Session ID-SWY-5',
+ 'SWYzGenAlbum-Imported by Bundle Identifier-6',
+ 'zAsset-zPK-7',
+ 'zAsset-Directory-Path-8',
+ 'zAsset-Filename-9',
+ 'zAddAssetAttr- Original Filename-10',
+ 'zCldMast- Original Filename-11',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-12',
+ 'zAsset-Syndication State-13',
+ 'zAsset-Bundle Scope-14',
+ 'zAddAssetAttr.Imported by Bundle Identifier-15',
+ 'zAddAssetAttr-Imported By Display Name-16',
+ 'zAsset-Visibility State-17',
+ 'zAsset-Saved Asset Type-18',
+ 'zAddAssetAttr-Share Type-19',
+ 'zAsset-Active Library Scope Participation State-20',
+ ('zAsset- SortToken -CameraRoll-21', 'datetime'),
+ ('zAsset-Added Date-22', 'datetime'),
+ ('zCldMast-Creation Date-23', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-24',
+ 'zAddAssetAttr-EXIF-String-25',
+ ('zAsset-Modification Date-26', 'datetime'),
+ ('zAsset-Last Shared Date-27', 'datetime'),
+ ('zAsset-Trashed Date-28', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-29',
+ 'zAddAssetAttr-zPK-30',
+ 'zAsset-UUID = store.cloudphotodb-31',
+ 'zAddAssetAttr-Master Fingerprint-32',
+ 'SWYConverszGenAlbum-Album Kind-33',
+ 'SWYConverszGenAlbum-Cloud_Local_State-34',
+ 'SWYConverszGenAlbum- Syndicate-35',
+ 'SWYConverszGenAlbum-Sync Event Order Key-36',
+ 'SWYConverszGenAlbum-Pinned-37',
+ 'SWYConverszGenAlbum-Custom Sort Key-38',
+ 'SWYConverszGenAlbum-Custom Sort Ascending-39',
+ 'SWYConverszGenAlbum-Is Prototype-40',
+ 'SWYConverszGenAlbum-Project Document Type-41',
+ 'SWYConverszGenAlbum-Custom Query Type-42',
+ 'SWYConverszGenAlbum-Trashed State-43',
+ ('SWYConverszGenAlbum-Trash Date-44', 'datetime'),
+ 'SWYConverszGenAlbum-Cloud Delete State-45',
+ 'SWYConverszGenAlbum-Privacy State-46')
+ data_list = get_sqlite_db_records(source_path, query)
- db.close()
- return
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date',
@@ -609,8 +801,8 @@ def get_ph26syndicationidassetsphdapsql(files_found, report_folder, seeker, wrap
zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18',
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash',
CASE SWYConverszGenAlbum.ZKIND
WHEN 2 THEN '2-Non-Shared-Album-2'
WHEN 1505 THEN '1505-Shared-Album-1505'
@@ -686,127 +878,96 @@ def get_ph26syndicationidassetsphdapsql(files_found, report_folder, seeker, wrap
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES
LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION
- LEFT JOIN Z_30ALBUMLISTS z30AlbumLists ON z30AlbumLists.Z_30ALBUMS = SWYConverszGenAlbum.Z_PK
- LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z30AlbumLists.Z_2ALBUMLISTS
+ LEFT JOIN Z_29ALBUMLISTS z29AlbumLists ON z29AlbumLists.Z_29ALBUMS = SWYConverszGenAlbum.Z_PK
+ LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z29AlbumLists.Z_2ALBUMLISTS
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE zAddAssetAttr.ZSYNDICATIONIDENTIFIER IS NOT NULL
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47]))
-
- counter += 1
-
- description = 'Parses Syndication ID and Syndication Photos Library assets which includes' \
- ' Shared with You Conversation assets from PhotoData-Photos.sqlite and' \
- ' Syndication.photoslibrary-database-Photos.sqlite' \
- ' and supports iOS 18. Parses assets that have a ZADDITIONALASSETATTRIBUTES' \
- ' ZSYNDICATIONIDENTIFIER value. ZASSET ZSAVEDASSETTYPE and ZASSET ZSYNDICATIONSTATE fields' \
- ' can be used to filter those results: ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER:' \
- ' 0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0 1-SyndPs-Sent-SWY_Synd_Asset-1' \
- ' 2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' \
- ' 8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' \
- ' 9-SyndPs-STILLTESTING_Sent_SWY-9' \
- ' 10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10 ZASSET ZSAVEDASSETTYPE:' \
- ' 12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12'
- report = ArtifactHtmlReport('Ph26.1-Syndication ID Assets-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph26.1-Syndication ID Assets-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'SWYConverszGenAlbum-Creation Date-1',
- 'SWYConverszGenAlbum-Start Date-2',
- 'SWYConverszGenAlbum-End Date-3',
- 'zAsset- Conversation= zGenAlbum_zPK-4',
- 'SWYConverszGenAlbum- Import Session ID-SWY-5',
- 'SWYzGenAlbum-Imported by Bundle Identifier-6',
- 'zAsset-zPK-7',
- 'zAsset-Directory-Path-8',
- 'zAsset-Filename-9',
- 'zAddAssetAttr- Original Filename-10',
- 'zCldMast- Original Filename-11',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-12',
- 'zAsset-Syndication State-13',
- 'zAsset-Bundle Scope-14',
- 'zAddAssetAttr.Imported by Bundle Identifier-15',
- 'zAddAssetAttr-Imported By Display Name-16',
- 'zAsset-Visibility State-17',
- 'zAsset-Saved Asset Type-18',
- 'zAddAssetAttr-Share Type-19',
- 'zAsset-Active Library Scope Participation State-20',
- 'zAsset- SortToken -CameraRoll-21',
- 'zAsset-Added Date-22',
- 'zCldMast-Creation Date-23',
- 'zAddAssetAttr-Time Zone Name-24',
- 'zAddAssetAttr-EXIF-String-25',
- 'zAsset-Modification Date-26',
- 'zAsset-Last Shared Date-27',
- 'zAsset-Trashed Date-28',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-29',
- 'zAddAssetAttr-zPK-30',
- 'zAsset-UUID = store.cloudphotodb-31',
- 'zAddAssetAttr-Original Stable Hash-iOS18-32',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-33',
- 'SWYConverszGenAlbum-Album Kind-34',
- 'SWYConverszGenAlbum-Cloud_Local_State-35',
- 'SWYConverszGenAlbum- Syndicate-36',
- 'SWYConverszGenAlbum-Sync Event Order Key-37',
- 'SWYConverszGenAlbum-Pinned-38',
- 'SWYConverszGenAlbum-Custom Sort Key-39',
- 'SWYConverszGenAlbum-Custom Sort Ascending-40',
- 'SWYConverszGenAlbum-Is Prototype-41',
- 'SWYConverszGenAlbum-Project Document Type-42',
- 'SWYConverszGenAlbum-Custom Query Type-43',
- 'SWYConverszGenAlbum-Trashed State-44',
- 'SWYConverszGenAlbum-Trash Date-45',
- 'SWYConverszGenAlbum-Cloud Delete State-46',
- 'SWYConverszGenAlbum-Privacy State-47')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph26.1-Syndication ID Assets-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph26.1-Syndication ID Assets-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No assets with a ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER value from'
- ' PhotoData-Photos.sqlite')
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47]))
- db.close()
- return
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('SWYConverszGenAlbum-Creation Date-1', 'datetime'),
+ ('SWYConverszGenAlbum-Start Date-2', 'datetime'),
+ ('SWYConverszGenAlbum-End Date-3', 'datetime'),
+ 'zAsset- Conversation= zGenAlbum_zPK-4',
+ 'SWYConverszGenAlbum- Import Session ID-SWY-5',
+ 'SWYzGenAlbum-Imported by Bundle Identifier-6',
+ 'zAsset-zPK-7',
+ 'zAsset-Directory-Path-8',
+ 'zAsset-Filename-9',
+ 'zAddAssetAttr- Original Filename-10',
+ 'zCldMast- Original Filename-11',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-12',
+ 'zAsset-Syndication State-13',
+ 'zAsset-Bundle Scope-14',
+ 'zAddAssetAttr.Imported by Bundle Identifier-15',
+ 'zAddAssetAttr-Imported By Display Name-16',
+ 'zAsset-Visibility State-17',
+ 'zAsset-Saved Asset Type-18',
+ 'zAddAssetAttr-Share Type-19',
+ 'zAsset-Active Library Scope Participation State-20',
+ ('zAsset- SortToken -CameraRoll-21', 'datetime'),
+ ('zAsset-Added Date-22', 'datetime'),
+ ('zCldMast-Creation Date-23', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-24',
+ 'zAddAssetAttr-EXIF-String-25',
+ ('zAsset-Modification Date-26', 'datetime'),
+ ('zAsset-Last Shared Date-27', 'datetime'),
+ ('zAsset-Trashed Date-28', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-29',
+ 'zAddAssetAttr-zPK-30',
+ 'zAsset-UUID = store.cloudphotodb-31',
+ 'zAddAssetAttr-Original Stable Hash-32',
+ 'zAddAssetAttr.Adjusted Stable Hash-33',
+ 'SWYConverszGenAlbum-Album Kind-34',
+ 'SWYConverszGenAlbum-Cloud_Local_State-35',
+ 'SWYConverszGenAlbum- Syndicate-36',
+ 'SWYConverszGenAlbum-Sync Event Order Key-37',
+ 'SWYConverszGenAlbum-Pinned-38',
+ 'SWYConverszGenAlbum-Custom Sort Key-39',
+ 'SWYConverszGenAlbum-Custom Sort Ascending-40',
+ 'SWYConverszGenAlbum-Is Prototype-41',
+ 'SWYConverszGenAlbum-Project Document Type-42',
+ 'SWYConverszGenAlbum-Custom Query Type-43',
+ 'SWYConverszGenAlbum-Trashed State-44',
+ ('SWYConverszGenAlbum-Trash Date-45', 'datetime'),
+ 'SWYConverszGenAlbum-Cloud Delete State-46',
+ 'SWYConverszGenAlbum-Privacy State-47')
+ data_list = get_sqlite_db_records(source_path, query)
+ return data_headers, data_list, source_path
-def get_ph26syndicationplassetssyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
+@artifact_processor
+def Ph26_2SyndicationPLAssetsSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("14.8.1"):
- logfunc("Unsupported version for Syndication Photos Library assets from"
- " Syndication.photoslibrary-database-Photos.sqlite for iOS " + iosversion)
+ logfunc("Unsupported version from Syndication.photoslibrary for iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date',
@@ -948,103 +1109,72 @@ def get_ph26syndicationplassetssyndpl(files_found, report_folder, seeker, wrap_t
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE zAddAssetAttr.ZSYNDICATIONIDENTIFIER IS NOT NULL
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43]))
-
- counter += 1
-
- description = 'Parses Syndication ID and Syndication Photos Library assets which includes' \
- ' Shared with You Conversation assets from PhotoData-Photos.sqlite and' \
- ' Syndication.photoslibrary-database-Photos.sqlite' \
- ' and supports iOS 16-17. Parses assets that have a ZADDITIONALASSETATTRIBUTES' \
- ' ZSYNDICATIONIDENTIFIER value. ZASSET ZSAVEDASSETTYPE and ZASSET ZSYNDICATIONSTATE fields' \
- ' can be used to filter those results: ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER:' \
- ' 0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0 1-SyndPs-Sent-SWY_Synd_Asset-1' \
- ' 2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' \
- ' 8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' \
- ' 9-SyndPs-STILLTESTING_Sent_SWY-9' \
- ' 10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10 ZASSET ZSAVEDASSETTYPE:' \
- ' 12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12'
- report = ArtifactHtmlReport('Ph26.2-Syndication PL Assets-SyndPL')
- report.start_artifact_report(report_folder, 'Ph26.2-Syndication PL Assets-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'SWYConverszGenAlbum-Creation Date-1',
- 'SWYConverszGenAlbum-Start Date-2',
- 'SWYConverszGenAlbum-End Date-3',
- 'zAsset- Conversation= zGenAlbum_zPK-4',
- 'SWYConverszGenAlbum- Import Session ID-SWY-5',
- 'SWYzGenAlbum-Imported by Bundle Identifier-6',
- 'zAsset-zPK-7',
- 'zAsset-Directory-Path-8',
- 'zAsset-Filename-9',
- 'zAddAssetAttr- Original Filename-10',
- 'zCldMast- Original Filename-11',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-12',
- 'zAsset-Syndication State-13',
- 'zAsset-Bundle Scope-14',
- 'zAddAssetAttr- Imported by Bundle Identifier-15',
- 'zAddAssetAttr-Imported By Display Name-16',
- 'zAsset-Visibility State-17',
- 'zAsset-Saved Asset Type-18',
- 'zAddAssetAttr-Share Type-19',
- 'zAsset- SortToken -CameraRoll-20',
- 'zAsset-Added Date-21',
- 'zCldMast-Creation Date-22',
- 'zAddAssetAttr-Time Zone Name-23',
- 'zAddAssetAttr-EXIF-String-24',
- 'zAsset-Modification Date-25',
- 'zAsset-Last Shared Date-26',
- 'zAsset-Trashed Date-27',
- 'zAddAssetAttr-zPK-28',
- 'zAsset-UUID = store.cloudphotodb-29',
- 'zAddAssetAttr-Master Fingerprint-30',
- 'SWYConverszGenAlbum-Album Kind-31',
- 'SWYConverszGenAlbum-Cloud_Local_State-32',
- 'SWYConverszGenAlbum- Syndicate-33',
- 'SWYConverszGenAlbum-Sync Event Order Key-34',
- 'SWYConverszGenAlbum-Pinned-35',
- 'SWYConverszGenAlbum-Custom Sort Key-36',
- 'SWYConverszGenAlbum-Custom Sort Ascending-37',
- 'SWYConverszGenAlbum-Is Prototype-38',
- 'SWYConverszGenAlbum-Project Document Type-39',
- 'SWYConverszGenAlbum-Custom Query Type-40',
- 'SWYConverszGenAlbum-Trashed State-41',
- 'SWYConverszGenAlbum-Trash Date-42',
- 'SWYConverszGenAlbum-Cloud Delete State-43')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph26.2-Syndication PL Assets-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph26.2-Syndication PL Assets-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43]))
- else:
- logfunc('No assets with a ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER value from'
- ' Syndication.photoslibrary-database-Photos.sqlite')
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('SWYConverszGenAlbum-Creation Date-1', 'datetime'),
+ ('SWYConverszGenAlbum-Start Date-2', 'datetime'),
+ ('SWYConverszGenAlbum-End Date-3', 'datetime'),
+ 'zAsset- Conversation= zGenAlbum_zPK-4',
+ 'SWYConverszGenAlbum- Import Session ID-SWY-5',
+ 'SWYzGenAlbum-Imported by Bundle Identifier-6',
+ 'zAsset-zPK-7',
+ 'zAsset-Directory-Path-8',
+ 'zAsset-Filename-9',
+ 'zAddAssetAttr- Original Filename-10',
+ 'zCldMast- Original Filename-11',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-12',
+ 'zAsset-Syndication State-13',
+ 'zAsset-Bundle Scope-14',
+ 'zAddAssetAttr- Imported by Bundle Identifier-15',
+ 'zAddAssetAttr-Imported By Display Name-16',
+ 'zAsset-Visibility State-17',
+ 'zAsset-Saved Asset Type-18',
+ 'zAddAssetAttr-Share Type-19',
+ ('zAsset- SortToken -CameraRoll-20', 'datetime'),
+ ('zAsset-Added Date-21', 'datetime'),
+ ('zCldMast-Creation Date-22', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-23',
+ 'zAddAssetAttr-EXIF-String-24',
+ ('zAsset-Modification Date-25', 'datetime'),
+ ('zAsset-Last Shared Date-26', 'datetime'),
+ ('zAsset-Trashed Date-27', 'datetime'),
+ 'zAddAssetAttr-zPK-28',
+ 'zAsset-UUID = store.cloudphotodb-29',
+ 'zAddAssetAttr-Master Fingerprint-30',
+ 'SWYConverszGenAlbum-Album Kind-31',
+ 'SWYConverszGenAlbum-Cloud_Local_State-32',
+ 'SWYConverszGenAlbum- Syndicate-33',
+ 'SWYConverszGenAlbum-Sync Event Order Key-34',
+ 'SWYConverszGenAlbum-Pinned-35',
+ 'SWYConverszGenAlbum-Custom Sort Key-36',
+ 'SWYConverszGenAlbum-Custom Sort Ascending-37',
+ 'SWYConverszGenAlbum-Is Prototype-38',
+ 'SWYConverszGenAlbum-Project Document Type-39',
+ 'SWYConverszGenAlbum-Custom Query Type-40',
+ 'SWYConverszGenAlbum-Trashed State-41',
+ ('SWYConverszGenAlbum-Trash Date-42', 'datetime'),
+ 'SWYConverszGenAlbum-Cloud Delete State-43')
+ data_list = get_sqlite_db_records(source_path, query)
- db.close()
- return
+ return data_headers, data_list, source_path
- if (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17.6")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date',
@@ -1198,107 +1328,299 @@ def get_ph26syndicationplassetssyndpl(files_found, report_folder, seeker, wrap_t
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE zAddAssetAttr.ZSYNDICATIONIDENTIFIER IS NOT NULL
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46]))
-
- counter += 1
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46]))
- description = 'Parses Syndication ID and Syndication Photos Library assets which includes' \
- ' Shared with You Conversation assets from PhotoData-Photos.sqlite and' \
- ' Syndication.photoslibrary-database-Photos.sqlite' \
- ' and supports iOS 16-17. Parses assets that have a ZADDITIONALASSETATTRIBUTES' \
- ' ZSYNDICATIONIDENTIFIER value. ZASSET ZSAVEDASSETTYPE and ZASSET ZSYNDICATIONSTATE fields' \
- ' can be used to filter those results: ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER:' \
- ' 0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0 1-SyndPs-Sent-SWY_Synd_Asset-1' \
- ' 2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' \
- ' 8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' \
- ' 9-SyndPs-STILLTESTING_Sent_SWY-9' \
- ' 10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10 ZASSET ZSAVEDASSETTYPE:' \
- ' 12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12'
- report = ArtifactHtmlReport('Ph26.2-Syndication PL Assets-SyndPL')
- report.start_artifact_report(report_folder, 'Ph26.2-Syndication PL Assets-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'SWYConverszGenAlbum-Creation Date-1',
- 'SWYConverszGenAlbum-Start Date-2',
- 'SWYConverszGenAlbum-End Date-3',
- 'zAsset- Conversation= zGenAlbum_zPK-4',
- 'SWYConverszGenAlbum- Import Session ID-SWY-5',
- 'SWYzGenAlbum-Imported by Bundle Identifier-6',
- 'zAsset-zPK-7',
- 'zAsset-Directory-Path-8',
- 'zAsset-Filename-9',
- 'zAddAssetAttr- Original Filename-10',
- 'zCldMast- Original Filename-11',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-12',
- 'zAsset-Syndication State-13',
- 'zAsset-Bundle Scope-14',
- 'zAddAssetAttr.Imported by Bundle Identifier-15',
- 'zAddAssetAttr-Imported By Display Name-16',
- 'zAsset-Visibility State-17',
- 'zAsset-Saved Asset Type-18',
- 'zAddAssetAttr-Share Type-19',
- 'zAsset-Active Library Scope Participation State-20',
- 'zAsset- SortToken -CameraRoll-21',
- 'zAsset-Added Date-22',
- 'zCldMast-Creation Date-23',
- 'zAddAssetAttr-Time Zone Name-24',
- 'zAddAssetAttr-EXIF-String-25',
- 'zAsset-Modification Date-26',
- 'zAsset-Last Shared Date-27',
- 'zAsset-Trashed Date-28',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-29',
- 'zAddAssetAttr-zPK-30',
- 'zAsset-UUID = store.cloudphotodb-31',
- 'zAddAssetAttr-Master Fingerprint-32',
- 'SWYConverszGenAlbum-Album Kind-33',
- 'SWYConverszGenAlbum-Cloud_Local_State-34',
- 'SWYConverszGenAlbum- Syndicate-35',
- 'SWYConverszGenAlbum-Sync Event Order Key-36',
- 'SWYConverszGenAlbum-Pinned-37',
- 'SWYConverszGenAlbum-Custom Sort Key-38',
- 'SWYConverszGenAlbum-Custom Sort Ascending-39',
- 'SWYConverszGenAlbum-Is Prototype-40',
- 'SWYConverszGenAlbum-Project Document Type-41',
- 'SWYConverszGenAlbum-Custom Query Type-42',
- 'SWYConverszGenAlbum-Trashed State-43',
- 'SWYConverszGenAlbum-Trash Date-44',
- 'SWYConverszGenAlbum-Cloud Delete State-45',
- 'SWYConverszGenAlbum-Privacy State-46')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('SWYConverszGenAlbum-Creation Date-1', 'datetime'),
+ ('SWYConverszGenAlbum-Start Date-2', 'datetime'),
+ ('SWYConverszGenAlbum-End Date-3', 'datetime'),
+ 'zAsset- Conversation= zGenAlbum_zPK-4',
+ 'SWYConverszGenAlbum- Import Session ID-SWY-5',
+ 'SWYzGenAlbum-Imported by Bundle Identifier-6',
+ 'zAsset-zPK-7',
+ 'zAsset-Directory-Path-8',
+ 'zAsset-Filename-9',
+ 'zAddAssetAttr- Original Filename-10',
+ 'zCldMast- Original Filename-11',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-12',
+ 'zAsset-Syndication State-13',
+ 'zAsset-Bundle Scope-14',
+ 'zAddAssetAttr.Imported by Bundle Identifier-15',
+ 'zAddAssetAttr-Imported By Display Name-16',
+ 'zAsset-Visibility State-17',
+ 'zAsset-Saved Asset Type-18',
+ 'zAddAssetAttr-Share Type-19',
+ 'zAsset-Active Library Scope Participation State-20',
+ ('zAsset- SortToken -CameraRoll-21', 'datetime'),
+ ('zAsset-Added Date-22', 'datetime'),
+ ('zCldMast-Creation Date-23', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-24',
+ 'zAddAssetAttr-EXIF-String-25',
+ ('zAsset-Modification Date-26', 'datetime'),
+ ('zAsset-Last Shared Date-27', 'datetime'),
+ ('zAsset-Trashed Date-28', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-29',
+ 'zAddAssetAttr-zPK-30',
+ 'zAsset-UUID = store.cloudphotodb-31',
+ 'zAddAssetAttr-Master Fingerprint-32',
+ 'SWYConverszGenAlbum-Album Kind-33',
+ 'SWYConverszGenAlbum-Cloud_Local_State-34',
+ 'SWYConverszGenAlbum- Syndicate-35',
+ 'SWYConverszGenAlbum-Sync Event Order Key-36',
+ 'SWYConverszGenAlbum-Pinned-37',
+ 'SWYConverszGenAlbum-Custom Sort Key-38',
+ 'SWYConverszGenAlbum-Custom Sort Ascending-39',
+ 'SWYConverszGenAlbum-Is Prototype-40',
+ 'SWYConverszGenAlbum-Project Document Type-41',
+ 'SWYConverszGenAlbum-Custom Query Type-42',
+ 'SWYConverszGenAlbum-Trashed State-43',
+ ('SWYConverszGenAlbum-Trash Date-44', 'datetime'),
+ 'SWYConverszGenAlbum-Cloud Delete State-45',
+ 'SWYConverszGenAlbum-Privacy State-46')
+ data_list = get_sqlite_db_records(source_path, query)
- tsvname = 'Ph26.2-Syndication PL Assets-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
+ return data_headers, data_list, source_path
+
+ elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- tlactivity = 'Ph26.2-Syndication PL Assets-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ query = '''
+ SELECT
+ DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
+ DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date',
+ DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date',
+ DateTime(SWYConverszGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-End Date',
+ zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK',
+ SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID-SWY',
+ SWYConverszGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'SWYzGenAlbum-Imported by Bundle Identifier',
+ zAsset.Z_PK AS 'zAsset-zPK',
+ zAsset.ZDIRECTORY AS 'zAsset-Directory-Path',
+ zAsset.ZFILENAME AS 'zAsset-Filename',
+ zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename',
+ zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename',
+ zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files',
+ CASE zAsset.ZSYNDICATIONSTATE
+ WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0'
+ WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1'
+ WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2'
+ WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3'
+ WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8'
+ WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9'
+ WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || ''
+ END AS 'zAsset-Syndication State',
+ CASE zAsset.ZBUNDLESCOPE
+ WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0'
+ WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1'
+ WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2'
+ WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || ''
+ END AS 'zAsset-Bundle Scope',
+ zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr- Imported by Bundle Identifier',
+ zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr- Imported By Display Name',
+ CASE zAsset.ZVISIBILITYSTATE
+ WHEN 0 THEN '0-Visible-PL-CameraRoll-0'
+ WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || ''
+ END AS 'zAsset-Visibility State',
+ CASE zAsset.ZSAVEDASSETTYPE
+ WHEN 0 THEN '0-Saved-via-other-source-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ WHEN 2 THEN '2-StillTesting-2'
+ WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3'
+ WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4'
+ WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5'
+ WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6'
+ WHEN 7 THEN '7-StillTesting-7'
+ WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8'
+ WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || ''
+ END AS 'zAsset-Saved Asset Type',
+ CASE zAddAssetAttr.ZSHARETYPE
+ WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0'
+ WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || ''
+ END AS 'zAddAssetAttr-Share Type',
+ CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE
+ WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0'
+ WHEN 1 THEN '1-Asset-In-Active-SPL-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || ''
+ END AS 'zAsset-Active Library Scope Participation State',
+ DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
+ DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date',
+ DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date',
+ zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name',
+ zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String',
+ DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
+ DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date',
+ DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
+ zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK',
+ zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
+ zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
+ zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint',
+ CASE SWYConverszGenAlbum.ZKIND
+ WHEN 2 THEN '2-Non-Shared-Album-2'
+ WHEN 1505 THEN '1505-Shared-Album-1505'
+ WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT'
+ WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT'
+ WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509'
+ WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510'
+ WHEN 3571 THEN '3571-Progress-Sync-3571'
+ WHEN 3572 THEN '3572-Progress-OTA-Restore-3572'
+ WHEN 3573 THEN '3573-Progress-FS-Import-3573'
+ WHEN 3998 THEN '3998-Project Root Folder-3998'
+ WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999'
+ WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZKIND || ''
+ END AS 'SWYConverszGenAlbum-Album Kind',
+ CASE SWYConverszGenAlbum.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0'
+ WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDLOCALSTATE || ''
+ END AS 'SWYConverszGenAlbum-Cloud_Local_State',
+ CASE SWYConverszGenAlbum.ZSYNDICATE
+ WHEN 1 THEN '1-SWYConverszGenAlbum-Syndicate - SWY-SyncedFile-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSYNDICATE || ''
+ END AS 'SWYConverszGenAlbum- Syndicate',
+ SWYConverszGenAlbum.ZSYNCEVENTORDERKEY AS 'SWYConverszGenAlbum-Sync Event Order Key',
+ CASE SWYConverszGenAlbum.ZISPINNED
+ WHEN 0 THEN 'SWYConverszGenAlbum-Local Not Pinned-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum-Local Pinned-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPINNED || ''
+ END AS 'SWYConverszGenAlbum-Pinned',
+ CASE SWYConverszGenAlbum.ZCUSTOMSORTKEY
+ WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Manually-0_RT'
+ WHEN 1 THEN '1-SWYConverszGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT'
+ WHEN 5 THEN '5-SWYConverszGenAlbum-Sorted_by_Title-5_RT'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTKEY || ''
+ END AS 'SWYConverszGenAlbum-Custom Sort Key',
+ CASE SWYConverszGenAlbum.ZCUSTOMSORTASCENDING
+ WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Newest_First-0'
+ WHEN 1 THEN '1-SWYConverszGenAlbum-Sorted_Oldest_First-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTASCENDING || ''
+ END AS 'SWYConverszGenAlbum-Custom Sort Ascending',
+ CASE SWYConverszGenAlbum.ZISPROTOTYPE
+ WHEN 0 THEN 'SWYConverszGenAlbum-Not Prototype-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum-Prototype-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPROTOTYPE || ''
+ END AS 'SWYConverszGenAlbum-Is Prototype',
+ CASE SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE || ''
+ END AS 'SWYConverszGenAlbum-Project Document Type',
+ CASE SWYConverszGenAlbum.ZCUSTOMQUERYTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMQUERYTYPE || ''
+ END AS 'SWYConverszGenAlbum-Custom Query Type',
+ CASE SWYConverszGenAlbum.ZTRASHEDSTATE
+ WHEN 0 THEN 'SWYConverszGenAlbum Not In Trash-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum Album In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZTRASHEDSTATE || ''
+ END AS 'SWYConverszGenAlbum-Trashed State',
+ DateTime(SWYConverszGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Trash Date',
+ CASE SWYConverszGenAlbum.ZCLOUDDELETESTATE
+ WHEN 0 THEN 'SWYConverszGenAlbum Cloud Not Deleted-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum Cloud Album Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDDELETESTATE || ''
+ END AS 'SWYConverszGenAlbum-Cloud Delete State',
+ CASE SWYConverszGenAlbum.ZPRIVACYSTATE
+ WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0'
+ WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1'
+ WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPRIVACYSTATE || ''
+ END AS 'SWYConverszGenAlbum-Privacy State'
+ FROM ZASSET zAsset
+ LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
+ LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES
+ LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION
+ LEFT JOIN Z_28ALBUMLISTS z28AlbumLists ON z28AlbumLists.Z_28ALBUMS = SWYConverszGenAlbum.Z_PK
+ LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z28AlbumLists.Z_2ALBUMLISTS
+ LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
+ WHERE zAddAssetAttr.ZSYNDICATIONIDENTIFIER IS NOT NULL
+ ORDER BY zAsset.ZDATECREATED
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46]))
- else:
- logfunc('No assets with a ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER value from'
- ' Syndication.photoslibrary-database-Photos.sqlite')
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('SWYConverszGenAlbum-Creation Date-1', 'datetime'),
+ ('SWYConverszGenAlbum-Start Date-2', 'datetime'),
+ ('SWYConverszGenAlbum-End Date-3', 'datetime'),
+ 'zAsset- Conversation= zGenAlbum_zPK-4',
+ 'SWYConverszGenAlbum- Import Session ID-SWY-5',
+ 'SWYzGenAlbum-Imported by Bundle Identifier-6',
+ 'zAsset-zPK-7',
+ 'zAsset-Directory-Path-8',
+ 'zAsset-Filename-9',
+ 'zAddAssetAttr- Original Filename-10',
+ 'zCldMast- Original Filename-11',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-12',
+ 'zAsset-Syndication State-13',
+ 'zAsset-Bundle Scope-14',
+ 'zAddAssetAttr.Imported by Bundle Identifier-15',
+ 'zAddAssetAttr-Imported By Display Name-16',
+ 'zAsset-Visibility State-17',
+ 'zAsset-Saved Asset Type-18',
+ 'zAddAssetAttr-Share Type-19',
+ 'zAsset-Active Library Scope Participation State-20',
+ ('zAsset- SortToken -CameraRoll-21', 'datetime'),
+ ('zAsset-Added Date-22', 'datetime'),
+ ('zCldMast-Creation Date-23', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-24',
+ 'zAddAssetAttr-EXIF-String-25',
+ ('zAsset-Modification Date-26', 'datetime'),
+ ('zAsset-Last Shared Date-27', 'datetime'),
+ ('zAsset-Trashed Date-28', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-29',
+ 'zAddAssetAttr-zPK-30',
+ 'zAsset-UUID = store.cloudphotodb-31',
+ 'zAddAssetAttr-Master Fingerprint-32',
+ 'SWYConverszGenAlbum-Album Kind-33',
+ 'SWYConverszGenAlbum-Cloud_Local_State-34',
+ 'SWYConverszGenAlbum- Syndicate-35',
+ 'SWYConverszGenAlbum-Sync Event Order Key-36',
+ 'SWYConverszGenAlbum-Pinned-37',
+ 'SWYConverszGenAlbum-Custom Sort Key-38',
+ 'SWYConverszGenAlbum-Custom Sort Ascending-39',
+ 'SWYConverszGenAlbum-Is Prototype-40',
+ 'SWYConverszGenAlbum-Project Document Type-41',
+ 'SWYConverszGenAlbum-Custom Query Type-42',
+ 'SWYConverszGenAlbum-Trashed State-43',
+ ('SWYConverszGenAlbum-Trash Date-44', 'datetime'),
+ 'SWYConverszGenAlbum-Cloud Delete State-45',
+ 'SWYConverszGenAlbum-Privacy State-46')
+ data_list = get_sqlite_db_records(source_path, query)
- db.close()
- return
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date',
@@ -1371,8 +1693,8 @@ def get_ph26syndicationplassetssyndpl(files_found, report_folder, seeker, wrap_t
zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18',
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash',
CASE SWYConverszGenAlbum.ZKIND
WHEN 2 THEN '2-Non-Shared-Album-2'
WHEN 1505 THEN '1505-Shared-Album-1505'
@@ -1448,153 +1770,70 @@ def get_ph26syndicationplassetssyndpl(files_found, report_folder, seeker, wrap_t
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES
LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION
- LEFT JOIN Z_30ALBUMLISTS z30AlbumLists ON z30AlbumLists.Z_30ALBUMS = SWYConverszGenAlbum.Z_PK
- LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z30AlbumLists.Z_2ALBUMLISTS
+ LEFT JOIN Z_29ALBUMLISTS z29AlbumLists ON z29AlbumLists.Z_29ALBUMS = SWYConverszGenAlbum.Z_PK
+ LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z29AlbumLists.Z_2ALBUMLISTS
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE zAddAssetAttr.ZSYNDICATIONIDENTIFIER IS NOT NULL
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47]))
-
- counter += 1
-
- description = 'Parses Syndication ID and Syndication Photos Library assets which includes' \
- ' Shared with You Conversation assets from PhotoData-Photos.sqlite and' \
- ' Syndication.photoslibrary-database-Photos.sqlite' \
- ' and supports iOS 16-17. Parses assets that have a ZADDITIONALASSETATTRIBUTES' \
- ' ZSYNDICATIONIDENTIFIER value. ZASSET ZSAVEDASSETTYPE and ZASSET ZSYNDICATIONSTATE fields' \
- ' can be used to filter those results: ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER:' \
- ' 0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0 1-SyndPs-Sent-SWY_Synd_Asset-1' \
- ' 2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' \
- ' 8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' \
- ' 9-SyndPs-STILLTESTING_Sent_SWY-9' \
- ' 10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10 ZASSET ZSAVEDASSETTYPE:' \
- ' 12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12'
- report = ArtifactHtmlReport('Ph26.2-Syndication PL Assets-SyndPL')
- report.start_artifact_report(report_folder, 'Ph26.2-Syndication PL Assets-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'SWYConverszGenAlbum-Creation Date-1',
- 'SWYConverszGenAlbum-Start Date-2',
- 'SWYConverszGenAlbum-End Date-3',
- 'zAsset- Conversation= zGenAlbum_zPK-4',
- 'SWYConverszGenAlbum- Import Session ID-SWY-5',
- 'SWYzGenAlbum-Imported by Bundle Identifier-6',
- 'zAsset-zPK-7',
- 'zAsset-Directory-Path-8',
- 'zAsset-Filename-9',
- 'zAddAssetAttr- Original Filename-10',
- 'zCldMast- Original Filename-11',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-12',
- 'zAsset-Syndication State-13',
- 'zAsset-Bundle Scope-14',
- 'zAddAssetAttr.Imported by Bundle Identifier-15',
- 'zAddAssetAttr-Imported By Display Name-16',
- 'zAsset-Visibility State-17',
- 'zAsset-Saved Asset Type-18',
- 'zAddAssetAttr-Share Type-19',
- 'zAsset-Active Library Scope Participation State-20',
- 'zAsset- SortToken -CameraRoll-21',
- 'zAsset-Added Date-22',
- 'zCldMast-Creation Date-23',
- 'zAddAssetAttr-Time Zone Name-24',
- 'zAddAssetAttr-EXIF-String-25',
- 'zAsset-Modification Date-26',
- 'zAsset-Last Shared Date-27',
- 'zAsset-Trashed Date-28',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-29',
- 'zAddAssetAttr-zPK-30',
- 'zAsset-UUID = store.cloudphotodb-31',
- 'zAddAssetAttr-Original Stable Hash-iOS18-32',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-33',
- 'SWYConverszGenAlbum-Album Kind-34',
- 'SWYConverszGenAlbum-Cloud_Local_State-35',
- 'SWYConverszGenAlbum- Syndicate-36',
- 'SWYConverszGenAlbum-Sync Event Order Key-37',
- 'SWYConverszGenAlbum-Pinned-38',
- 'SWYConverszGenAlbum-Custom Sort Key-39',
- 'SWYConverszGenAlbum-Custom Sort Ascending-40',
- 'SWYConverszGenAlbum-Is Prototype-41',
- 'SWYConverszGenAlbum-Project Document Type-42',
- 'SWYConverszGenAlbum-Custom Query Type-43',
- 'SWYConverszGenAlbum-Trashed State-44',
- 'SWYConverszGenAlbum-Trash Date-45',
- 'SWYConverszGenAlbum-Cloud Delete State-46',
- 'SWYConverszGenAlbum-Privacy State-47')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph26.2-Syndication PL Assets-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph26.2-Syndication PL Assets-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No assets with a ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER value from'
- ' Syndication.photoslibrary-database-Photos.sqlite')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47]))
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('SWYConverszGenAlbum-Creation Date-1', 'datetime'),
+ ('SWYConverszGenAlbum-Start Date-2', 'datetime'),
+ ('SWYConverszGenAlbum-End Date-3', 'datetime'),
+ 'zAsset- Conversation= zGenAlbum_zPK-4',
+ 'SWYConverszGenAlbum- Import Session ID-SWY-5',
+ 'SWYzGenAlbum-Imported by Bundle Identifier-6',
+ 'zAsset-zPK-7',
+ 'zAsset-Directory-Path-8',
+ 'zAsset-Filename-9',
+ 'zAddAssetAttr- Original Filename-10',
+ 'zCldMast- Original Filename-11',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-12',
+ 'zAsset-Syndication State-13',
+ 'zAsset-Bundle Scope-14',
+ 'zAddAssetAttr.Imported by Bundle Identifier-15',
+ 'zAddAssetAttr-Imported By Display Name-16',
+ 'zAsset-Visibility State-17',
+ 'zAsset-Saved Asset Type-18',
+ 'zAddAssetAttr-Share Type-19',
+ 'zAsset-Active Library Scope Participation State-20',
+ ('zAsset- SortToken -CameraRoll-21', 'datetime'),
+ ('zAsset-Added Date-22', 'datetime'),
+ ('zCldMast-Creation Date-23', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-24',
+ 'zAddAssetAttr-EXIF-String-25',
+ ('zAsset-Modification Date-26', 'datetime'),
+ ('zAsset-Last Shared Date-27', 'datetime'),
+ ('zAsset-Trashed Date-28', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-29',
+ 'zAddAssetAttr-zPK-30',
+ 'zAsset-UUID = store.cloudphotodb-31',
+ 'zAddAssetAttr-Original Stable Hash-32',
+ 'zAddAssetAttr.Adjusted Stable Hash-33',
+ 'SWYConverszGenAlbum-Album Kind-34',
+ 'SWYConverszGenAlbum-Cloud_Local_State-35',
+ 'SWYConverszGenAlbum- Syndicate-36',
+ 'SWYConverszGenAlbum-Sync Event Order Key-37',
+ 'SWYConverszGenAlbum-Pinned-38',
+ 'SWYConverszGenAlbum-Custom Sort Key-39',
+ 'SWYConverszGenAlbum-Custom Sort Ascending-40',
+ 'SWYConverszGenAlbum-Is Prototype-41',
+ 'SWYConverszGenAlbum-Project Document Type-42',
+ 'SWYConverszGenAlbum-Custom Query Type-43',
+ 'SWYConverszGenAlbum-Trashed State-44',
+ ('SWYConverszGenAlbum-Trash Date-45', 'datetime'),
+ 'SWYConverszGenAlbum-Cloud Delete State-46',
+ 'SWYConverszGenAlbum-Privacy State-47')
+ data_list = get_sqlite_db_records(source_path, query)
-__artifacts_v2__ = {
- 'Ph26-1-Syndication ID Assets-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite Ph26.1 Syndication ID Assets',
- 'description': 'Parses Syndication ID and Syndication Photos Library assets which includes'
- ' Shared with You Conversation assets from PhotoData-Photos.sqlite and'
- ' Syndication.photoslibrary-database-Photos.sqlite'
- ' and supports iOS 15-18. Parses assets that have a ZADDITIONALASSETATTRIBUTES'
- ' ZSYNDICATIONIDENTIFIER value. ZASSET ZSAVEDASSETTYPE and ZASSET ZSYNDICATIONSTATE fields'
- ' can be used to filter those results: ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER:'
- ' 0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0 1-SyndPs-Sent-SWY_Synd_Asset-1'
- ' 2-SyndPs-Manually-Saved_SWY_Synd_Asset-2'
- ' 8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8'
- ' 9-SyndPs-STILLTESTING_Sent_SWY-9'
- ' 10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10'
- ' ZASSET ZSAVEDASSETTYPE: 12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-13',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-C-Other_Artifacts',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph26syndicationidassetsphdapsql'
- },
- 'Ph26-2-Syndication PL Assets-SyndPL': {
- 'name': 'SyndPL Photos.sqlite Ph26.2 Syndication PL Assets',
- 'description': 'Parses Syndication ID and Syndication Photos Library assets which includes'
- ' Shared with You Conversation assets from PhotoData-Photos.sqlite and'
- ' Syndication.photoslibrary-database-Photos.sqlite'
- ' and supports iOS 15-18. Parses assets that have a ZADDITIONALASSETATTRIBUTES'
- ' ZSYNDICATIONIDENTIFIER value. ZASSET ZSAVEDASSETTYPE and ZASSET ZSYNDICATIONSTATE fields'
- ' can be used to filter those results: ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER:'
- ' 0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0 1-SyndPs-Sent-SWY_Synd_Asset-1'
- ' 2-SyndPs-Manually-Saved_SWY_Synd_Asset-2'
- ' 8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8'
- ' 9-SyndPs-STILLTESTING_Sent_SWY-9'
- ' 10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10'
- ' ZASSET ZSAVEDASSETTYPE: 12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-13',
- 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite',
- 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts',
- 'notes': '',
- 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',
- 'function': 'get_ph26syndicationplassetssyndpl'
- }
-}
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph2BasicAssetandAlbumData.py b/scripts/artifacts/Ph2BasicAssetandAlbumData.py
index fd359560..44152f45 100644
--- a/scripts/artifacts/Ph2BasicAssetandAlbumData.py
+++ b/scripts/artifacts/Ph2BasicAssetandAlbumData.py
@@ -1,45 +1,69 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 2.0
-#
-# Description:
-# Parses basic asset record data from Photos.sqlite to include associated album data and supports iOS 11-18.
-# The results could produce multiple records for a single asset.
-# Use '2-Non-Shared-Album-2' in the search box to view Assets in Non-Shared Albums.
-# Use '1505-Shared-Album-1505' in the search box to view Assets in Shared Albums.
-# Use '1509-SWY_Synced_Conversation_Media-1509' in the search box to view Shared with You Conversation Assets.
-# This parser is based on research and SQLite queries written by Scott Koenig
-# This is very large query and script, I recommend opening the TSV generated report with Zimmerman's Tools
-# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results.
-# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347
-#
+__artifacts_v2__ = {
+ 'Ph2_1AssetBasicGenAlbumDataPhDaPsql': {
+ 'name': 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql',
+ 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite for basic asset and album data.'
+ ' The results may contain multiple records per ZASSET table Z_PK value and supports iOS 11-18.'
+ ' Use 2-Non-Shared-Album-2 in the search box to view Non-Shared Albums Assets.'
+ ' Use 1505-Shared-Album-1505 in the search box to view Shared Albums Assets.'
+ ' Use 1509-SWY_Synced_Conversation_Media-1509 in the search box to view'
+ ' Shared with You Conversation Identifiers Assets.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-A-Asset_Basic_Data',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ },
+ 'Ph2_2AssetBasicConversationDataSyndPL': {
+ 'name': 'Ph2.2-Asset Basic Data & Convers Data-SyndPL',
+ 'description': 'Parses basic asset row data from -Syndication.photoslibrary-database-Photos.sqlite'
+ ' for basic asset and album data. The results may contain multiple records'
+ ' per ZASSET table Z_PK value and supports iOS 11-18.'
+ ' Use -Non-Shared-Album-2 in the search box to view Non-Shared Albums Assets.'
+ ' Use 1505-Shared-Album-1505 in the search box to view Shared Albums Assets.'
+ ' Use 1509-SWY_Synced_Conversation_Media-1509 in the search box to view'
+ ' Shared with You Conversation Identifiers Assets.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite',
+ 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts',
+ 'notes': '',
+ 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
-
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
-def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+@artifact_processor
+def Ph2_1AssetBasicGenAlbumDataPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("10.3.4"):
- logfunc("Unsupported version for PhotoData-Photos.sqlite basic asset and album data from iOS " + iosversion)
+ logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("12")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -178,102 +202,77 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr
LEFT JOIN Z_20ASSETS z20Assets ON z20Assets.Z_27ASSETS = zAsset.Z_PK
LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z20Assets.Z_20ALBUMS
ORDER BY zAsset.ZDATECREATED
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
row[46], row[47]))
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \
- ' basic asset and album data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 11.' \
- ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \
- ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \
- ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \
- ' Shared with You Conversation Identifiers Assets.'
- report = ArtifactHtmlReport('Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAsset-Modification Date-5',
- 'zAsset-Last Shared Date-6',
- 'zAsset-Directory-Path-7',
- 'zAsset-Filename-8',
- 'zAddAssetAttr- Original Filename-9',
- 'zCldMast- Original Filename-10',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-11',
- 'zAsset-Trashed Date-12',
- 'zAsset-Saved Asset Type-13',
- 'zAddAssetAttr- Creator Bundle ID-14',
- 'zAddAssetAttr-Imported by-15',
- 'zAsset-Visibility State-16',
- 'zAddAssetAttr-Camera Captured Device-17',
- 'zCldMast-Cloud Local State-18',
- 'zCldMast-Import Date-19',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-20',
- 'zAsset-Cloud Batch Publish Date-21',
- 'zAsset-Cloud Server Publish Date-22',
- 'zAsset-Cloud Download Requests-23',
- 'zAsset-Cloud Batch ID-24',
- 'zAsset-Latitude-25',
- 'zAsset-Longitude-26',
- 'zAddAssetAttr-Location Hash-27',
- 'zAddAssetAttr-Shifted Location Valid-28',
- 'zAddAssetAttr-Shifted Location Data-29',
- 'zAddAssetAttr-Reverse Location Is Valid-30',
- 'zAddAssetAttr-Reverse Location Data-31',
- 'zGenAlbum-Start Date-32',
- 'zGenAlbum-End Date-33',
- 'zGenAlbum-Album Kind-34',
- 'zGenAlbum-Title-User&System Applied-35',
- 'zGenAlbum- Import Session ID-36',
- 'zGenAlbum-Cached Photos Count-37',
- 'zGenAlbum-Cached Videos Count-38',
- 'zGenAlbum-Cached Count-39',
- 'zGenAlbum-Trashed State-40',
- 'zGenAlbum-Trash Date-41',
- 'zGenAlbum-UUID-42',
- 'zGenAlbum-Cloud GUID-43',
- 'zAsset-zPK-44',
- 'zAddAssetAttr-zPK-45',
- 'zAsset-UUID = store.cloudphotodb-46',
- 'zAddAssetAttr-Master Fingerprint-47')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite basic asset and album data')
-
- db.close()
- return
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ ('zAsset-Modification Date-5', 'datetime'),
+ ('zAsset-Last Shared Date-6', 'datetime'),
+ 'zAsset-Directory-Path-7',
+ 'zAsset-Filename-8',
+ 'zAddAssetAttr- Original Filename-9',
+ 'zCldMast- Original Filename-10',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-11',
+ ('zAsset-Trashed Date-12', 'datetime'),
+ 'zAsset-Saved Asset Type-13',
+ 'zAddAssetAttr- Creator Bundle ID-14',
+ 'zAddAssetAttr-Imported by-15',
+ 'zAsset-Visibility State-16',
+ 'zAddAssetAttr-Camera Captured Device-17',
+ 'zCldMast-Cloud Local State-18',
+ ('zCldMast-Import Date-19', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-20',
+ ('zAsset-Cloud Batch Publish Date-21', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-22', 'datetime'),
+ 'zAsset-Cloud Download Requests-23',
+ 'zAsset-Cloud Batch ID-24',
+ 'zAsset-Latitude-25',
+ 'zAsset-Longitude-26',
+ 'zAddAssetAttr-Location Hash-27',
+ 'zAddAssetAttr-Shifted Location Valid-28',
+ 'zAddAssetAttr-Shifted Location Data-29',
+ 'zAddAssetAttr-Reverse Location Is Valid-30',
+ 'zAddAssetAttr-Reverse Location Data-31',
+ ('zGenAlbum-Start Date-32', 'datetime'),
+ ('zGenAlbum-End Date-33', 'datetime'),
+ 'zGenAlbum-Album Kind-34',
+ 'zGenAlbum-Title-User&System Applied-35',
+ 'zGenAlbum- Import Session ID-36',
+ 'zGenAlbum-Cached Photos Count-37',
+ 'zGenAlbum-Cached Videos Count-38',
+ 'zGenAlbum-Cached Count-39',
+ 'zGenAlbum-Trashed State-40',
+ ('zGenAlbum-Trash Date-41', 'datetime'),
+ 'zGenAlbum-UUID-42',
+ 'zGenAlbum-Cloud GUID-43',
+ 'zAsset-zPK-44',
+ 'zAddAssetAttr-zPK-45',
+ 'zAsset-UUID = store.cloudphotodb-46',
+ 'zAddAssetAttr-Master Fingerprint-47')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("12")) & (version.parse(iosversion) < version.parse("13")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -412,102 +411,77 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr
LEFT JOIN Z_23ASSETS z23Assets ON z23Assets.Z_30ASSETS = zAsset.Z_PK
LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z23Assets.Z_23ALBUMS
ORDER BY zAsset.ZDATECREATED
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
row[46], row[47]))
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \
- ' basic asset and album data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 12.' \
- ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \
- ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \
- ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \
- ' Shared with You Conversation Identifiers Assets.'
- report = ArtifactHtmlReport('Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAsset-Modification Date-5',
- 'zAsset-Last Shared Date-6',
- 'zAsset-Directory-Path-7',
- 'zAsset-Filename-8',
- 'zAddAssetAttr- Original Filename-9',
- 'zCldMast- Original Filename-10',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-11',
- 'zAsset-Trashed Date-12',
- 'zAsset-Saved Asset Type-13',
- 'zAddAssetAttr- Creator Bundle ID-14',
- 'zAddAssetAttr-Imported by-15',
- 'zAsset-Visibility State-16',
- 'zAddAssetAttr-Camera Captured Device-17',
- 'zCldMast-Cloud Local State-18',
- 'zCldMast-Import Date-19',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-20',
- 'zAsset-Cloud Batch Publish Date-21',
- 'zAsset-Cloud Server Publish Date-22',
- 'zAsset-Cloud Download Requests-23',
- 'zAsset-Cloud Batch ID-24',
- 'zAsset-Latitude-25',
- 'zAsset-Longitude-26',
- 'zAddAssetAttr-Location Hash-27',
- 'zAddAssetAttr-Shifted Location Valid-28',
- 'zAddAssetAttr-Shifted Location Data-29',
- 'zAddAssetAttr-Reverse Location Is Valid-30',
- 'zAddAssetAttr-Reverse Location Data-31',
- 'zGenAlbum-Start Date-32',
- 'zGenAlbum-End Date-33',
- 'zGenAlbum-Album Kind-34',
- 'zGenAlbum-Title-User&System Applied-35',
- 'zGenAlbum- Import Session ID-36',
- 'zGenAlbum-Cached Photos Count-37',
- 'zGenAlbum-Cached Videos Count-38',
- 'zGenAlbum-Cached Count-39',
- 'zGenAlbum-Trashed State-40',
- 'zGenAlbum-Trash Date-41',
- 'zGenAlbum-UUID-42',
- 'zGenAlbum-Cloud GUID-43',
- 'zAsset-zPK-44',
- 'zAddAssetAttr-zPK-45',
- 'zAsset-UUID = store.cloudphotodb-46',
- 'zAddAssetAttr-Master Fingerprint-47')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite basic asset and album data')
-
- db.close()
- return
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ ('zAsset-Modification Date-5', 'datetime'),
+ ('zAsset-Last Shared Date-6', 'datetime'),
+ 'zAsset-Directory-Path-7',
+ 'zAsset-Filename-8',
+ 'zAddAssetAttr- Original Filename-9',
+ 'zCldMast- Original Filename-10',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-11',
+ ('zAsset-Trashed Date-12', 'datetime'),
+ 'zAsset-Saved Asset Type-13',
+ 'zAddAssetAttr- Creator Bundle ID-14',
+ 'zAddAssetAttr-Imported by-15',
+ 'zAsset-Visibility State-16',
+ 'zAddAssetAttr-Camera Captured Device-17',
+ 'zCldMast-Cloud Local State-18',
+ ('zCldMast-Import Date-19', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-20',
+ ('zAsset-Cloud Batch Publish Date-21', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-22', 'datetime'),
+ 'zAsset-Cloud Download Requests-23',
+ 'zAsset-Cloud Batch ID-24',
+ 'zAsset-Latitude-25',
+ 'zAsset-Longitude-26',
+ 'zAddAssetAttr-Location Hash-27',
+ 'zAddAssetAttr-Shifted Location Valid-28',
+ 'zAddAssetAttr-Shifted Location Data-29',
+ 'zAddAssetAttr-Reverse Location Is Valid-30',
+ 'zAddAssetAttr-Reverse Location Data-31',
+ ('zGenAlbum-Start Date-32', 'datetime'),
+ ('zGenAlbum-End Date-33', 'datetime'),
+ 'zGenAlbum-Album Kind-34',
+ 'zGenAlbum-Title-User&System Applied-35',
+ 'zGenAlbum- Import Session ID-36',
+ 'zGenAlbum-Cached Photos Count-37',
+ 'zGenAlbum-Cached Videos Count-38',
+ 'zGenAlbum-Cached Count-39',
+ 'zGenAlbum-Trashed State-40',
+ ('zGenAlbum-Trash Date-41', 'datetime'),
+ 'zGenAlbum-UUID-42',
+ 'zGenAlbum-Cloud GUID-43',
+ 'zAsset-zPK-44',
+ 'zAddAssetAttr-zPK-45',
+ 'zAsset-UUID = store.cloudphotodb-46',
+ 'zAddAssetAttr-Master Fingerprint-47')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("13")) & (version.parse(iosversion) < version.parse("14")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -710,15 +684,11 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr
LEFT JOIN Z_26ASSETS z26Assets ON z26Assets.Z_34ASSETS = zAsset.Z_PK
LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z26Assets.Z_26ALBUMS
ORDER BY zAsset.ZDATECREATED
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
@@ -727,106 +697,84 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr
row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
row[64], row[65]))
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \
- ' basic asset and album data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 13.' \
- ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \
- ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \
- ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \
- ' Shared with You Conversation Identifiers Assets.'
- report = ArtifactHtmlReport('Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-Time Zone Offset-5',
- 'zAddAssetAttr-EXIF-String-6',
- 'zAsset-Modification Date-7',
- 'zAsset-Last Shared Date-8',
- 'zAsset-Directory-Path-9',
- 'zAsset-Filename-10',
- 'zAddAssetAttr- Original Filename-11',
- 'zCldMast- Original Filename-12',
- 'zAsset-Trashed Date-13',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14',
- 'zAsset-Saved Asset Type-15',
- 'zAddAssetAttr- Creator Bundle ID-16',
- 'zAddAssetAttr-Imported by-17',
- 'zCldMast-Imported By-18',
- 'zAsset-Visibility State-19',
- 'zExtAttr-Camera Make-20',
- 'zExtAttr-Camera Model-21',
- 'zExtAttr-Lens Model-22',
- 'zAddAssetAttr-Camera Captured Device-23',
- 'zAddAssetAttr-Share Type-24',
- 'zCldMast-Cloud Local State-25',
- 'zCldMast-Import Date-26',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-27',
- 'zAddAssetAttr-Import Session ID-28',
- 'zAddAssetAttr-Alt Import Image Date-29',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-30',
- 'zAsset-Cloud Batch Publish Date-31',
- 'zAsset-Cloud Server Publish Date-32',
- 'zAsset-Cloud Download Requests-33',
- 'zAsset-Cloud Batch ID-34',
- 'zAsset-Latitude-35',
- 'zExtAttr-Latitude-36',
- 'zAsset-Longitude-37',
- 'zExtAttr-Longitude-38',
- 'zAddAssetAttr-Location Hash-39',
- 'zAddAssetAttr-Shifted Location Valid-40',
- 'zAddAssetAttr-Shifted Location Data-41',
- 'zAddAssetAttr-Reverse Location Is Valid-42',
- 'zAddAssetAttr-Reverse Location Data-43',
- 'AAAzCldMastMedData-zOPT-44',
- 'zAddAssetAttr-Media Metadata Type-45',
- 'AAAzCldMastMedData-Data-46',
- 'CldMasterzCldMastMedData-zOPT-47',
- 'zCldMast-Media Metadata Type-48',
- 'CMzCldMastMedData-Data-49',
- 'zGenAlbum-Start Date-50',
- 'zGenAlbum-End Date-51',
- 'zGenAlbum-Album Kind-52',
- 'zGenAlbum-Title-User&System Applied-53',
- 'zGenAlbum- Import Session ID-54',
- 'zGenAlbum-Cached Photos Count-55',
- 'zGenAlbum-Cached Videos Count-56',
- 'zGenAlbum-Cached Count-57',
- 'zGenAlbum-Trashed State-58',
- 'zGenAlbum-Trash Date-59',
- 'zGenAlbum-UUID-60',
- 'zGenAlbum-Cloud GUID-61',
- 'zAsset-zPK-62',
- 'zAddAssetAttr-zPK-63',
- 'zAsset-UUID = store.cloudphotodb-64',
- 'zAddAssetAttr-Master Fingerprint-65')
-
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite basic asset and album data')
-
- db.close()
- return
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-Time Zone Offset-5',
+ 'zAddAssetAttr-EXIF-String-6',
+ ('zAsset-Modification Date-7', 'datetime'),
+ ('zAsset-Last Shared Date-8', 'datetime'),
+ 'zAsset-Directory-Path-9',
+ 'zAsset-Filename-10',
+ 'zAddAssetAttr- Original Filename-11',
+ 'zCldMast- Original Filename-12',
+ ('zAsset-Trashed Date-13', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14',
+ 'zAsset-Saved Asset Type-15',
+ 'zAddAssetAttr- Creator Bundle ID-16',
+ 'zAddAssetAttr-Imported by-17',
+ 'zCldMast-Imported By-18',
+ 'zAsset-Visibility State-19',
+ 'zExtAttr-Camera Make-20',
+ 'zExtAttr-Camera Model-21',
+ 'zExtAttr-Lens Model-22',
+ 'zAddAssetAttr-Camera Captured Device-23',
+ 'zAddAssetAttr-Share Type-24',
+ 'zCldMast-Cloud Local State-25',
+ ('zCldMast-Import Date-26', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-27', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-28',
+ ('zAddAssetAttr-Alt Import Image Date-29', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-30',
+ ('zAsset-Cloud Batch Publish Date-31', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-32', 'datetime'),
+ 'zAsset-Cloud Download Requests-33',
+ 'zAsset-Cloud Batch ID-34',
+ 'zAsset-Latitude-35',
+ 'zExtAttr-Latitude-36',
+ 'zAsset-Longitude-37',
+ 'zExtAttr-Longitude-38',
+ 'zAddAssetAttr-Location Hash-39',
+ 'zAddAssetAttr-Shifted Location Valid-40',
+ 'zAddAssetAttr-Shifted Location Data-41',
+ 'zAddAssetAttr-Reverse Location Is Valid-42',
+ 'zAddAssetAttr-Reverse Location Data-43',
+ 'AAAzCldMastMedData-zOPT-44',
+ 'zAddAssetAttr-Media Metadata Type-45',
+ 'AAAzCldMastMedData-Data-46',
+ 'CldMasterzCldMastMedData-zOPT-47',
+ 'zCldMast-Media Metadata Type-48',
+ 'CMzCldMastMedData-Data-49',
+ ('zGenAlbum-Start Date-50', 'datetime'),
+ ('zGenAlbum-End Date-51', 'datetime'),
+ 'zGenAlbum-Album Kind-52',
+ 'zGenAlbum-Title-User&System Applied-53',
+ 'zGenAlbum- Import Session ID-54',
+ 'zGenAlbum-Cached Photos Count-55',
+ 'zGenAlbum-Cached Videos Count-56',
+ 'zGenAlbum-Cached Count-57',
+ 'zGenAlbum-Trashed State-58',
+ ('zGenAlbum-Trash Date-59', 'datetime'),
+ 'zGenAlbum-UUID-60',
+ 'zGenAlbum-Cloud GUID-61',
+ 'zAsset-zPK-62',
+ 'zAddAssetAttr-zPK-63',
+ 'zAsset-UUID = store.cloudphotodb-64',
+ 'zAddAssetAttr-Master Fingerprint-65')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -1043,15 +991,11 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr
LEFT JOIN Z_26ASSETS z26Assets ON z26Assets.Z_3ASSETS = zAsset.Z_PK
LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z26Assets.Z_26ALBUMS
ORDER BY zAsset.ZDATECREATED
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
@@ -1060,112 +1004,91 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr
row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72]))
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \
- ' basic asset and album data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 14.' \
- ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \
- ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \
- ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \
- ' Shared with You Conversation Identifiers Assets.'
- report = ArtifactHtmlReport('Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-Time Zone Offset-5',
- 'zAddAssetAttr-EXIF-String-6',
- 'zAsset-Modification Date-7',
- 'zAsset-Last Shared Date-8',
- 'zAsset-Directory-Path-9',
- 'zAsset-Filename-10',
- 'zAddAssetAttr- Original Filename-11',
- 'zCldMast- Original Filename-12',
- 'zAsset-Trashed Date-13',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14',
- 'zAsset-Saved Asset Type-15',
- 'zAddAssetAttr-Creator Bundle ID-16',
- 'zAddAssetAttr-Imported By Display Name-17',
- 'zAddAssetAttr-Imported by-18',
- 'zCldMast-Imported by Bundle ID-19',
- 'zCldMast-Imported by Display Name-20',
- 'zCldMast-Imported By-21',
- 'zAsset-Visibility State-22',
- 'zExtAttr-Camera Make-23',
- 'zExtAttr-Camera Model-24',
- 'zExtAttr-Lens Model-25',
- 'zAsset-Derived Camera Capture Device-26',
- 'zAddAssetAttr-Camera Captured Device-27',
- 'zAddAssetAttr-Share Type-28',
- 'zCldMast-Cloud Local State-29',
- 'zCldMast-Import Date-30',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-31',
- 'zAddAssetAttr-Import Session ID-32',
- 'zAddAssetAttr-Alt Import Image Date-33',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-34',
- 'zAsset-Cloud Batch Publish Date-35',
- 'zAsset-Cloud Server Publish Date-36',
- 'zAsset-Cloud Download Requests-37',
- 'zAsset-Cloud Batch ID-38',
- 'zAsset-Latitude-39',
- 'zExtAttr-Latitude-40',
- 'zAsset-Longitude-41',
- 'zExtAttr-Longitude-42',
- 'zAddAssetAttr-GPS Horizontal Accuracy-43',
- 'zAddAssetAttr-Location Hash-44',
- 'zAddAssetAttr-Shifted Location Valid-45',
- 'zAddAssetAttr-Shifted Location Data-46',
- 'zAddAssetAttr-Reverse Location Is Valid-47',
- 'zAddAssetAttr-Reverse Location Data-48',
- 'AAAzCldMastMedData-zOPT-49',
- 'zAddAssetAttr-Media Metadata Type-50',
- 'AAAzCldMastMedData-Data-51',
- 'CldMasterzCldMastMedData-zOPT-52',
- 'zCldMast-Media Metadata Type-53',
- 'CMzCldMastMedData-Data-54',
- 'zGenAlbum-Creation Date-55',
- 'zGenAlbum-Start Date-56',
- 'zGenAlbum-End Date-57',
- 'zGenAlbum-Album Kind-58',
- 'zGenAlbum-Title-User&System Applied-59',
- 'zGenAlbum- Import Session ID-60',
- 'zGenAlbum-Creator Bundle Identifier-61',
- 'zGenAlbum-Cached Photos Count-62',
- 'zGenAlbum-Cached Videos Count-63',
- 'zGenAlbum-Cached Count-64',
- 'zGenAlbum-Trashed State-65',
- 'zGenAlbum-Trash Date-66',
- 'zGenAlbum-UUID-67',
- 'zGenAlbum-Cloud GUID-68',
- 'zAsset-zPK-69',
- 'zAddAssetAttr-zPK-70',
- 'zAsset-UUID = store.cloudphotodb-71',
- 'zAddAssetAttr-Master Fingerprint-72')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite basic asset and album data')
-
- db.close()
- return
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-Time Zone Offset-5',
+ 'zAddAssetAttr-EXIF-String-6',
+ ('zAsset-Modification Date-7', 'datetime'),
+ ('zAsset-Last Shared Date-8', 'datetime'),
+ 'zAsset-Directory-Path-9',
+ 'zAsset-Filename-10',
+ 'zAddAssetAttr- Original Filename-11',
+ 'zCldMast- Original Filename-12',
+ ('zAsset-Trashed Date-13', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14',
+ 'zAsset-Saved Asset Type-15',
+ 'zAddAssetAttr-Creator Bundle ID-16',
+ 'zAddAssetAttr-Imported By Display Name-17',
+ 'zAddAssetAttr-Imported by-18',
+ 'zCldMast-Imported by Bundle ID-19',
+ 'zCldMast-Imported by Display Name-20',
+ 'zCldMast-Imported By-21',
+ 'zAsset-Visibility State-22',
+ 'zExtAttr-Camera Make-23',
+ 'zExtAttr-Camera Model-24',
+ 'zExtAttr-Lens Model-25',
+ 'zAsset-Derived Camera Capture Device-26',
+ 'zAddAssetAttr-Camera Captured Device-27',
+ 'zAddAssetAttr-Share Type-28',
+ 'zCldMast-Cloud Local State-29',
+ ('zCldMast-Import Date-30', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-31', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-32',
+ ('zAddAssetAttr-Alt Import Image Date-33', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-34',
+ ('zAsset-Cloud Batch Publish Date-35', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-36', 'datetime'),
+ 'zAsset-Cloud Download Requests-37',
+ 'zAsset-Cloud Batch ID-38',
+ 'zAsset-Latitude-39',
+ 'zExtAttr-Latitude-40',
+ 'zAsset-Longitude-41',
+ 'zExtAttr-Longitude-42',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-43',
+ 'zAddAssetAttr-Location Hash-44',
+ 'zAddAssetAttr-Shifted Location Valid-45',
+ 'zAddAssetAttr-Shifted Location Data-46',
+ 'zAddAssetAttr-Reverse Location Is Valid-47',
+ 'zAddAssetAttr-Reverse Location Data-48',
+ 'AAAzCldMastMedData-zOPT-49',
+ 'zAddAssetAttr-Media Metadata Type-50',
+ 'AAAzCldMastMedData-Data-51',
+ 'CldMasterzCldMastMedData-zOPT-52',
+ 'zCldMast-Media Metadata Type-53',
+ 'CMzCldMastMedData-Data-54',
+ ('zGenAlbum-Creation Date-55', 'datetime'),
+ ('zGenAlbum-Start Date-56', 'datetime'),
+ ('zGenAlbum-End Date-57', 'datetime'),
+ 'zGenAlbum-Album Kind-58',
+ 'zGenAlbum-Title-User&System Applied-59',
+ 'zGenAlbum- Import Session ID-60',
+ 'zGenAlbum-Creator Bundle Identifier-61',
+ 'zGenAlbum-Cached Photos Count-62',
+ 'zGenAlbum-Cached Videos Count-63',
+ 'zGenAlbum-Cached Count-64',
+ 'zGenAlbum-Trashed State-65',
+ ('zGenAlbum-Trash Date-66', 'datetime'),
+ 'zGenAlbum-UUID-67',
+ 'zGenAlbum-Cloud GUID-68',
+ 'zAsset-zPK-69',
+ 'zAddAssetAttr-zPK-70',
+ 'zAsset-UUID = store.cloudphotodb-71',
+ 'zAddAssetAttr-Master Fingerprint-72')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -1403,15 +1326,11 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr
LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z27Assets.Z_27ALBUMS
LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION
ORDER BY zAsset.ZDATECREATED
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
@@ -1421,117 +1340,96 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr
row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
row[73], row[74], row[75], row[76], row[77]))
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \
- ' basic asset and album data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 15.' \
- ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \
- ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \
- ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \
- ' Shared with You Conversation Identifiers Assets.'
- report = ArtifactHtmlReport('Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-Time Zone Offset-5',
- 'zAddAssetAttr-EXIF-String-6',
- 'zAsset-Modification Date-7',
- 'zAsset-Last Shared Date-8',
- 'zAsset-Directory-Path-9',
- 'zAsset-Filename-10',
- 'zAddAssetAttr- Original Filename-11',
- 'zCldMast- Original Filename-12',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-13',
- 'zAsset- Conversation= zGenAlbum_zPK-14',
- 'SWYConverszGenAlbum- Import Session ID-15',
- 'zAsset-Syndication State-16',
- 'zAsset-Trashed Date-17',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-18',
- 'zAsset-Saved Asset Type-19',
- 'zAddAssetAttr-Imported by Bundle ID-20',
- 'zAddAssetAttr-Imported By Display Name-21',
- 'zAddAssetAttr-Imported by-22',
- 'zCldMast-Imported by Bundle ID-23',
- 'zCldMast-Imported by Display Name-24',
- 'zCldMast-Imported By-25',
- 'zAsset-Visibility State-26',
- 'zExtAttr-Camera Make-27',
- 'zExtAttr-Camera Model-28',
- 'zExtAttr-Lens Model-29',
- 'zAsset-Derived Camera Capture Device-30',
- 'zAddAssetAttr-Camera Captured Device-31',
- 'zAddAssetAttr-Share Type-32',
- 'zCldMast-Cloud Local State-33',
- 'zCldMast-Import Date-34',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-35',
- 'zAddAssetAttr-Import Session ID-36',
- 'zAddAssetAttr-Alt Import Image Date-37',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-38',
- 'zAsset-Cloud Batch Publish Date-39',
- 'zAsset-Cloud Server Publish Date-40',
- 'zAsset-Cloud Download Requests-41',
- 'zAsset-Cloud Batch ID-42',
- 'zAsset-Latitude-43',
- 'zExtAttr-Latitude-44',
- 'zAsset-Longitude-45',
- 'zExtAttr-Longitude-46',
- 'zAddAssetAttr-GPS Horizontal Accuracy-47',
- 'zAddAssetAttr-Location Hash-48',
- 'zAddAssetAttr-Shifted Location Valid-49',
- 'zAddAssetAttr-Shifted Location Data-50',
- 'zAddAssetAttr-Reverse Location Is Valid-51',
- 'zAddAssetAttr-Reverse Location Data-52',
- 'AAAzCldMastMedData-zOPT-53',
- 'zAddAssetAttr-Media Metadata Type-54',
- 'AAAzCldMastMedData-Data-55',
- 'CldMasterzCldMastMedData-zOPT-56',
- 'zCldMast-Media Metadata Type-57',
- 'CMzCldMastMedData-Data-58',
- 'zAsset-Bundle Scope-59',
- 'zGenAlbum-Creation Date-60',
- 'zGenAlbum-Start Date-61',
- 'zGenAlbum-End Date-62',
- 'zGenAlbum-Album Kind-63',
- 'zGenAlbum-Title-User&System Applied-64',
- 'zGenAlbum- Import Session ID-65',
- 'zGenAlbum-Imported by Bundle Identifier-66',
- 'zGenAlbum-Cached Photos Count-67',
- 'zGenAlbum-Cached Videos Count-68',
- 'zGenAlbum-Cached Count-69',
- 'zGenAlbum-Trashed State-70',
- 'zGenAlbum-Trash Date-71',
- 'zGenAlbum-UUID-72',
- 'zGenAlbum-Cloud GUID-73',
- 'zAsset-zPK-74',
- 'zAddAssetAttr-zPK-75',
- 'zAsset-UUID = store.cloudphotodb-76',
- 'zAddAssetAttr-Master Fingerprint-77')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite basic asset and album data')
-
- db.close()
- return
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-Time Zone Offset-5',
+ 'zAddAssetAttr-EXIF-String-6',
+ ('zAsset-Modification Date-7', 'datetime'),
+ ('zAsset-Last Shared Date-8', 'datetime'),
+ 'zAsset-Directory-Path-9',
+ 'zAsset-Filename-10',
+ 'zAddAssetAttr- Original Filename-11',
+ 'zCldMast- Original Filename-12',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-13',
+ 'zAsset- Conversation= zGenAlbum_zPK-14',
+ 'SWYConverszGenAlbum- Import Session ID-15',
+ 'zAsset-Syndication State-16',
+ ('zAsset-Trashed Date-17', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-18',
+ 'zAsset-Saved Asset Type-19',
+ 'zAddAssetAttr-Imported by Bundle ID-20',
+ 'zAddAssetAttr-Imported By Display Name-21',
+ 'zAddAssetAttr-Imported by-22',
+ 'zCldMast-Imported by Bundle ID-23',
+ 'zCldMast-Imported by Display Name-24',
+ 'zCldMast-Imported By-25',
+ 'zAsset-Visibility State-26',
+ 'zExtAttr-Camera Make-27',
+ 'zExtAttr-Camera Model-28',
+ 'zExtAttr-Lens Model-29',
+ 'zAsset-Derived Camera Capture Device-30',
+ 'zAddAssetAttr-Camera Captured Device-31',
+ 'zAddAssetAttr-Share Type-32',
+ 'zCldMast-Cloud Local State-33',
+ ('zCldMast-Import Date-34', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-35', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-36',
+ ('zAddAssetAttr-Alt Import Image Date-37', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-38',
+ ('zAsset-Cloud Batch Publish Date-39', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-40', 'datetime'),
+ 'zAsset-Cloud Download Requests-41',
+ 'zAsset-Cloud Batch ID-42',
+ 'zAsset-Latitude-43',
+ 'zExtAttr-Latitude-44',
+ 'zAsset-Longitude-45',
+ 'zExtAttr-Longitude-46',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-47',
+ 'zAddAssetAttr-Location Hash-48',
+ 'zAddAssetAttr-Shifted Location Valid-49',
+ 'zAddAssetAttr-Shifted Location Data-50',
+ 'zAddAssetAttr-Reverse Location Is Valid-51',
+ 'zAddAssetAttr-Reverse Location Data-52',
+ 'AAAzCldMastMedData-zOPT-53',
+ 'zAddAssetAttr-Media Metadata Type-54',
+ 'AAAzCldMastMedData-Data-55',
+ 'CldMasterzCldMastMedData-zOPT-56',
+ 'zCldMast-Media Metadata Type-57',
+ 'CMzCldMastMedData-Data-58',
+ 'zAsset-Bundle Scope-59',
+ ('zGenAlbum-Creation Date-60', 'datetime'),
+ ('zGenAlbum-Start Date-61', 'datetime'),
+ ('zGenAlbum-End Date-62', 'datetime'),
+ 'zGenAlbum-Album Kind-63',
+ 'zGenAlbum-Title-User&System Applied-64',
+ 'zGenAlbum- Import Session ID-65',
+ 'zGenAlbum-Imported by Bundle Identifier-66',
+ 'zGenAlbum-Cached Photos Count-67',
+ 'zGenAlbum-Cached Videos Count-68',
+ 'zGenAlbum-Cached Count-69',
+ 'zGenAlbum-Trashed State-70',
+ ('zGenAlbum-Trash Date-71', 'datetime'),
+ 'zGenAlbum-UUID-72',
+ 'zGenAlbum-Cloud GUID-73',
+ 'zAsset-zPK-74',
+ 'zAddAssetAttr-zPK-75',
+ 'zAsset-UUID = store.cloudphotodb-76',
+ 'zAddAssetAttr-Master Fingerprint-77')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -1775,15 +1673,11 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr
CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION
ORDER BY zAsset.ZDATECREATED
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
@@ -1793,119 +1687,98 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr
row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
row[73], row[74], row[75], row[76], row[77], row[78], row[79]))
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \
- ' basic asset and album data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 16.' \
- ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \
- ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \
- ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \
- ' Shared with You Conversation Identifiers Assets.'
- report = ArtifactHtmlReport('Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-Time Zone Offset-5',
- 'zAddAssetAttr-EXIF-String-6',
- 'zAsset-Modification Date-7',
- 'zAsset-Last Shared Date-8',
- 'zAsset-Directory-Path-9',
- 'zAsset-Filename-10',
- 'zAddAssetAttr- Original Filename-11',
- 'zCldMast- Original Filename-12',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-13',
- 'zAsset- Conversation= zGenAlbum_zPK-14',
- 'SWYConverszGenAlbum- Import Session ID-15',
- 'zAsset-Syndication State-16',
- 'zAsset-Trashed Date-17',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-18',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-19',
- 'zAsset-Saved Asset Type-20',
- 'zAddAssetAttr-Imported by Bundle ID-21',
- 'zAddAssetAttr-Imported By Display Name-22',
- 'zAddAssetAttr-Imported by-23',
- 'zCldMast-Imported by Bundle ID-24',
- 'zCldMast-Imported by Display Name-25',
- 'zCldMast-Imported By-26',
- 'zAsset-Visibility State-27',
- 'zExtAttr-Camera Make-28',
- 'zExtAttr-Camera Model-29',
- 'zExtAttr-Lens Model-30',
- 'zAsset-Derived Camera Capture Device-31',
- 'zAddAssetAttr-Camera Captured Device-32',
- 'zAddAssetAttr-Share Type-33',
- 'zCldMast-Cloud Local State-34',
- 'zCldMast-Import Date-35',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-36',
- 'zAddAssetAttr-Import Session ID-37',
- 'zAddAssetAttr-Alt Import Image Date-38',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-39',
- 'zAsset-Cloud Batch Publish Date-40',
- 'zAsset-Cloud Server Publish Date-41',
- 'zAsset-Cloud Download Requests-42',
- 'zAsset-Cloud Batch ID-43',
- 'zAsset-Latitude-44',
- 'zExtAttr-Latitude-45',
- 'zAsset-Longitude-46',
- 'zExtAttr-Longitude-47',
- 'zAddAssetAttr-GPS Horizontal Accuracy-48',
- 'zAddAssetAttr-Location Hash-49',
- 'zAddAssetAttr-Shifted Location Valid-50',
- 'zAddAssetAttr-Shifted Location Data-51',
- 'zAddAssetAttr-Reverse Location Is Valid-52',
- 'zAddAssetAttr-Reverse Location Data-53',
- 'AAAzCldMastMedData-zOPT-54',
- 'zAddAssetAttr-Media Metadata Type-55',
- 'AAAzCldMastMedData-Data-56',
- 'CldMasterzCldMastMedData-zOPT-57',
- 'zCldMast-Media Metadata Type-58',
- 'CMzCldMastMedData-Data-59',
- 'zAsset-Bundle Scope-60',
- 'zGenAlbum-Creation Date-61',
- 'zGenAlbum-Start Date-62',
- 'zGenAlbum-End Date-63',
- 'zGenAlbum-Album Kind-64',
- 'zGenAlbum-Title-User&System Applied-65',
- 'zGenAlbum- Import Session ID-66',
- 'zGenAlbum-Imported by Bundle Identifier-67',
- 'zGenAlbum-Cached Photos Count-68',
- 'zGenAlbum-Cached Videos Count-69',
- 'zGenAlbum-Cached Count-70',
- 'zGenAlbum-Trashed State-71',
- 'zGenAlbum-Trash Date-72',
- 'zGenAlbum-UUID-73',
- 'zGenAlbum-Cloud GUID-74',
- 'zAsset-Active Library Scope Participation State-75',
- 'zAsset-zPK-76',
- 'zAddAssetAttr-zPK-77',
- 'zAsset-UUID = store.cloudphotodb-78',
- 'zAddAssetAttr-Master Fingerprint-79')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite basic asset and album data')
-
- db.close()
- return
-
- elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-Time Zone Offset-5',
+ 'zAddAssetAttr-EXIF-String-6',
+ ('zAsset-Modification Date-7', 'datetime'),
+ ('zAsset-Last Shared Date-8', 'datetime'),
+ 'zAsset-Directory-Path-9',
+ 'zAsset-Filename-10',
+ 'zAddAssetAttr- Original Filename-11',
+ 'zCldMast- Original Filename-12',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-13',
+ 'zAsset- Conversation= zGenAlbum_zPK-14',
+ 'SWYConverszGenAlbum- Import Session ID-15',
+ 'zAsset-Syndication State-16',
+ ('zAsset-Trashed Date-17', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-18',
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-19',
+ 'zAsset-Saved Asset Type-20',
+ 'zAddAssetAttr-Imported by Bundle ID-21',
+ 'zAddAssetAttr-Imported By Display Name-22',
+ 'zAddAssetAttr-Imported by-23',
+ 'zCldMast-Imported by Bundle ID-24',
+ 'zCldMast-Imported by Display Name-25',
+ 'zCldMast-Imported By-26',
+ 'zAsset-Visibility State-27',
+ 'zExtAttr-Camera Make-28',
+ 'zExtAttr-Camera Model-29',
+ 'zExtAttr-Lens Model-30',
+ 'zAsset-Derived Camera Capture Device-31',
+ 'zAddAssetAttr-Camera Captured Device-32',
+ 'zAddAssetAttr-Share Type-33',
+ 'zCldMast-Cloud Local State-34',
+ ('zCldMast-Import Date-35', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-36', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-37',
+ ('zAddAssetAttr-Alt Import Image Date-38', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-39',
+ ('zAsset-Cloud Batch Publish Date-40', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-41', 'datetime'),
+ 'zAsset-Cloud Download Requests-42',
+ 'zAsset-Cloud Batch ID-43',
+ 'zAsset-Latitude-44',
+ 'zExtAttr-Latitude-45',
+ 'zAsset-Longitude-46',
+ 'zExtAttr-Longitude-47',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-48',
+ 'zAddAssetAttr-Location Hash-49',
+ 'zAddAssetAttr-Shifted Location Valid-50',
+ 'zAddAssetAttr-Shifted Location Data-51',
+ 'zAddAssetAttr-Reverse Location Is Valid-52',
+ 'zAddAssetAttr-Reverse Location Data-53',
+ 'AAAzCldMastMedData-zOPT-54',
+ 'zAddAssetAttr-Media Metadata Type-55',
+ 'AAAzCldMastMedData-Data-56',
+ 'CldMasterzCldMastMedData-zOPT-57',
+ 'zCldMast-Media Metadata Type-58',
+ 'CMzCldMastMedData-Data-59',
+ 'zAsset-Bundle Scope-60',
+ ('zGenAlbum-Creation Date-61', 'datetime'),
+ ('zGenAlbum-Start Date-62', 'datetime'),
+ ('zGenAlbum-End Date-63', 'datetime'),
+ 'zGenAlbum-Album Kind-64',
+ 'zGenAlbum-Title-User&System Applied-65',
+ 'zGenAlbum- Import Session ID-66',
+ 'zGenAlbum-Imported by Bundle Identifier-67',
+ 'zGenAlbum-Cached Photos Count-68',
+ 'zGenAlbum-Cached Videos Count-69',
+ 'zGenAlbum-Cached Count-70',
+ 'zGenAlbum-Trashed State-71',
+ ('zGenAlbum-Trash Date-72', 'datetime'),
+ 'zGenAlbum-UUID-73',
+ 'zGenAlbum-Cloud GUID-74',
+ 'zAsset-Active Library Scope Participation State-75',
+ 'zAsset-zPK-76',
+ 'zAddAssetAttr-zPK-77',
+ 'zAsset-UUID = store.cloudphotodb-78',
+ 'zAddAssetAttr-Master Fingerprint-79')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
+ elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("17.6")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -2150,15 +2023,11 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr
CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION
ORDER BY zAsset.ZDATECREATED
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
@@ -2168,120 +2037,99 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr
row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80]))
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \
- ' basic asset and album data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 17.' \
- ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \
- ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \
- ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \
- ' Shared with You Conversation Identifiers Assets.'
- report = ArtifactHtmlReport('Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-Time Zone Offset-5',
- 'zAddAssetAttr-EXIF-String-6',
- 'zAsset-Modification Date-7',
- 'zAsset-Last Shared Date-8',
- 'zAddAssetAttr-Last Viewed Date-9',
- 'zAsset-Directory-Path-10',
- 'zAsset-Filename-11',
- 'zAddAssetAttr- Original Filename-12',
- 'zCldMast- Original Filename-13',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-14',
- 'zAsset- Conversation= zGenAlbum_zPK-15',
- 'SWYConverszGenAlbum- Import Session ID-16',
- 'zAsset-Syndication State-17',
- 'zAsset-Trashed Date-18',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-19',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-20',
- 'zAsset-Saved Asset Type-21',
- 'zAddAssetAttr-Imported by Bundle ID-22',
- 'zAddAssetAttr-Imported By Display Name-23',
- 'zAddAssetAttr-Imported by-24',
- 'zCldMast-Imported by Bundle ID-25',
- 'zCldMast-Imported by Display Name-26',
- 'zCldMast-Imported By-27',
- 'zAsset-Visibility State-28',
- 'zExtAttr-Camera Make-29',
- 'zExtAttr-Camera Model-30',
- 'zExtAttr-Lens Model-31',
- 'zAsset-Derived Camera Capture Device-32',
- 'zAddAssetAttr-Camera Captured Device-33',
- 'zAddAssetAttr-Share Type-34',
- 'zCldMast-Cloud Local State-35',
- 'zCldMast-Import Date-36',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-37',
- 'zAddAssetAttr-Import Session ID-38',
- 'zAddAssetAttr-Alt Import Image Date-39',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-40',
- 'zAsset-Cloud Batch Publish Date-41',
- 'zAsset-Cloud Server Publish Date-42',
- 'zAsset-Cloud Download Requests-43',
- 'zAsset-Cloud Batch ID-44',
- 'zAsset-Latitude-45',
- 'zExtAttr-Latitude-46',
- 'zAsset-Longitude-47',
- 'zExtAttr-Longitude-48',
- 'zAddAssetAttr-GPS Horizontal Accuracy-49',
- 'zAddAssetAttr-Location Hash-50',
- 'zAddAssetAttr-Shifted Location Valid-51',
- 'zAddAssetAttr-Shifted Location Data-52',
- 'zAddAssetAttr-Reverse Location Is Valid-53',
- 'zAddAssetAttr-Reverse Location Data-54',
- 'AAAzCldMastMedData-zOPT-55',
- 'zAddAssetAttr-Media Metadata Type-56',
- 'AAAzCldMastMedData-Data-57',
- 'CldMasterzCldMastMedData-zOPT-58',
- 'zCldMast-Media Metadata Type-59',
- 'CMzCldMastMedData-Data-60',
- 'zAsset-Bundle Scope-61',
- 'zGenAlbum-Creation Date-62',
- 'zGenAlbum-Start Date-63',
- 'zGenAlbum-End Date-64',
- 'zGenAlbum-Album Kind-65',
- 'zGenAlbum-Title-User&System Applied-66',
- 'zGenAlbum- Import Session ID-67',
- 'zGenAlbum-Imported by Bundle Identifier-68',
- 'zGenAlbum-Cached Photos Count-69',
- 'zGenAlbum-Cached Videos Count-70',
- 'zGenAlbum-Cached Count-71',
- 'zGenAlbum-Trashed State-72',
- 'zGenAlbum-Trash Date-73',
- 'zGenAlbum-UUID-74',
- 'zGenAlbum-Cloud GUID-75',
- 'zAsset-Active Library Scope Participation State-76',
- 'zAsset-zPK-77',
- 'zAddAssetAttr-zPK-78',
- 'zAsset-UUID = store.cloudphotodb-79',
- 'zAddAssetAttr-Master Fingerprint-80')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite basic asset and album data')
-
- db.close()
- return
-
- elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-Time Zone Offset-5',
+ 'zAddAssetAttr-EXIF-String-6',
+ ('zAsset-Modification Date-7', 'datetime'),
+ ('zAsset-Last Shared Date-8', 'datetime'),
+ ('zAddAssetAttr-Last Viewed Date-9', 'datetime'),
+ 'zAsset-Directory-Path-10',
+ 'zAsset-Filename-11',
+ 'zAddAssetAttr- Original Filename-12',
+ 'zCldMast- Original Filename-13',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-14',
+ 'zAsset- Conversation= zGenAlbum_zPK-15',
+ 'SWYConverszGenAlbum- Import Session ID-16',
+ 'zAsset-Syndication State-17',
+ ('zAsset-Trashed Date-18', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-19',
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-20',
+ 'zAsset-Saved Asset Type-21',
+ 'zAddAssetAttr-Imported by Bundle ID-22',
+ 'zAddAssetAttr-Imported By Display Name-23',
+ 'zAddAssetAttr-Imported by-24',
+ 'zCldMast-Imported by Bundle ID-25',
+ 'zCldMast-Imported by Display Name-26',
+ 'zCldMast-Imported By-27',
+ 'zAsset-Visibility State-28',
+ 'zExtAttr-Camera Make-29',
+ 'zExtAttr-Camera Model-30',
+ 'zExtAttr-Lens Model-31',
+ 'zAsset-Derived Camera Capture Device-32',
+ 'zAddAssetAttr-Camera Captured Device-33',
+ 'zAddAssetAttr-Share Type-34',
+ 'zCldMast-Cloud Local State-35',
+ ('zCldMast-Import Date-36', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-37', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-38',
+ ('zAddAssetAttr-Alt Import Image Date-39', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-40',
+ ('zAsset-Cloud Batch Publish Date-41', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-42', 'datetime'),
+ 'zAsset-Cloud Download Requests-43',
+ 'zAsset-Cloud Batch ID-44',
+ 'zAsset-Latitude-45',
+ 'zExtAttr-Latitude-46',
+ 'zAsset-Longitude-47',
+ 'zExtAttr-Longitude-48',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-49',
+ 'zAddAssetAttr-Location Hash-50',
+ 'zAddAssetAttr-Shifted Location Valid-51',
+ 'zAddAssetAttr-Shifted Location Data-52',
+ 'zAddAssetAttr-Reverse Location Is Valid-53',
+ 'zAddAssetAttr-Reverse Location Data-54',
+ 'AAAzCldMastMedData-zOPT-55',
+ 'zAddAssetAttr-Media Metadata Type-56',
+ 'AAAzCldMastMedData-Data-57',
+ 'CldMasterzCldMastMedData-zOPT-58',
+ 'zCldMast-Media Metadata Type-59',
+ 'CMzCldMastMedData-Data-60',
+ 'zAsset-Bundle Scope-61',
+ ('zGenAlbum-Creation Date-62', 'datetime'),
+ ('zGenAlbum-Start Date-63', 'datetime'),
+ ('zGenAlbum-End Date-64', 'datetime'),
+ 'zGenAlbum-Album Kind-65',
+ 'zGenAlbum-Title-User&System Applied-66',
+ 'zGenAlbum- Import Session ID-67',
+ 'zGenAlbum-Imported by Bundle Identifier-68',
+ 'zGenAlbum-Cached Photos Count-69',
+ 'zGenAlbum-Cached Videos Count-70',
+ 'zGenAlbum-Cached Count-71',
+ 'zGenAlbum-Trashed State-72',
+ ('zGenAlbum-Trash Date-73', 'datetime'),
+ 'zGenAlbum-UUID-74',
+ 'zGenAlbum-Cloud GUID-75',
+ 'zAsset-Active Library Scope Participation State-76',
+ 'zAsset-zPK-77',
+ 'zAddAssetAttr-zPK-78',
+ 'zAsset-UUID = store.cloudphotodb-79',
+ 'zAddAssetAttr-Master Fingerprint-80')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
+ elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -2292,7 +2140,7 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr
zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String',
DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date',
- DateTime(zAddAssetAttr.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Viewed Date',
+ DateTime(zAddAssetAttr.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Viewed Date',
zAsset.ZDIRECTORY AS 'zAsset-Directory-Path',
zAsset.ZFILENAME AS 'zAsset-Filename',
zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename',
@@ -2317,11 +2165,6 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr
ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || ''
END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK',
- CASE zAsset.ZISRECENTLYSAVED
- WHEN 0 THEN '0-Not_Recenlty_Saved iOS18_Still_Testing-0'
- WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || ''
- END AS 'zAsset-Is_Recently_Saved-iOS18',
CASE zAsset.ZSAVEDASSETTYPE
WHEN 0 THEN '0-Saved-via-other-source-0'
WHEN 1 THEN '1-StillTesting-1'
@@ -2388,8 +2231,7 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr
WHEN 0 THEN '0-Back-Camera-Other-0'
WHEN 1 THEN '1-Front-Camera-1'
ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || ''
- END AS 'zAddAssetAttr-Camera Captured Device',
- zAsset.ZCAPTURESESSIONIDENTIFIER AS 'zAsset-Capture_Session_Identifier-iOS18',
+ END AS 'zAddAssetAttr-Camera Captured Device',
CASE zAddAssetAttr.ZSHARETYPE
WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0'
WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1'
@@ -2519,13 +2361,12 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr
zAsset.Z_PK AS 'zAsset-zPK',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18'
+ zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint'
FROM ZASSET zAsset
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES
- LEFT JOIN Z_31ASSETS z31Assets ON z31Assets.Z_3ASSETS = zAsset.Z_PK
- LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z31Assets.Z_31ALBUMS
+ LEFT JOIN Z_29ASSETS z29Assets ON z29Assets.Z_3ASSETS = zAsset.Z_PK
+ LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z29Assets.Z_29ALBUMS
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON
AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA
@@ -2533,15 +2374,11 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr
CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION
ORDER BY zAsset.ZDATECREATED
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
@@ -2549,158 +2386,141 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr
row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \
- ' basic asset and album data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 18.' \
- ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \
- ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \
- ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \
- ' Shared with You Conversation Identifiers Assets.'
- report = ArtifactHtmlReport('Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-Time Zone Offset-5',
- 'zAddAssetAttr-EXIF-String-6',
- 'zAsset-Modification Date-7',
- 'zAsset-Last Shared Date-8',
- 'zAddAssetAttr-Last Viewed Date-9',
- 'zAsset-Directory-Path-10',
- 'zAsset-Filename-11',
- 'zAddAssetAttr- Original Filename-12',
- 'zCldMast- Original Filename-13',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-14',
- 'zAsset- Conversation= zGenAlbum_zPK-15',
- 'SWYConverszGenAlbum- Import Session ID-16',
- 'zAsset-Syndication State-17',
- 'zAsset-Trashed Date-18',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-19',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-20',
- 'zAsset-Is_Recently_Saved-iOS18-21',
- 'zAsset-Saved Asset Type-22',
- 'zAddAssetAttr-Imported by Bundle ID-23',
- 'zAddAssetAttr-Imported By Display Name-24',
- 'zAddAssetAttr-Imported by-25',
- 'zCldMast-Imported by Bundle ID-26',
- 'zCldMast-Imported by Display Name-27',
- 'zCldMast-Imported By-28',
- 'zAsset-Visibility State-29',
- 'zExtAttr-Camera Make-30',
- 'zExtAttr-Camera Model-31',
- 'zExtAttr-Lens Model-32',
- 'zAsset-Derived Camera Capture Device-33',
- 'zAddAssetAttr-Camera Captured Device-34',
- 'zAsset-Capture_Session_Identifier-iOS18-35',
- 'zAddAssetAttr-Share Type-36',
- 'zCldMast-Cloud Local State-37',
- 'zCldMast-Import Date-38',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-39',
- 'zAddAssetAttr-Import Session ID-40',
- 'zAddAssetAttr-Alt Import Image Date-41',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-42',
- 'zAsset-Cloud Batch Publish Date-43',
- 'zAsset-Cloud Server Publish Date-44',
- 'zAsset-Cloud Download Requests-45',
- 'zAsset-Cloud Batch ID-46',
- 'zAsset-Latitude-47',
- 'zExtAttr-Latitude-48',
- 'zAsset-Longitude-49',
- 'zExtAttr-Longitude-50',
- 'zAddAssetAttr-GPS Horizontal Accuracy-51',
- 'zAddAssetAttr-Location Hash-52',
- 'zAddAssetAttr-Shifted Location Valid-53',
- 'zAddAssetAttr-Shifted Location Data-54',
- 'zAddAssetAttr-Reverse Location Is Valid-55',
- 'zAddAssetAttr-Reverse Location Data-56',
- 'AAAzCldMastMedData-zOPT-57',
- 'zAddAssetAttr-Media Metadata Type-58',
- 'AAAzCldMastMedData-Data-59',
- 'CldMasterzCldMastMedData-zOPT-60',
- 'zCldMast-Media Metadata Type-61',
- 'CMzCldMastMedData-Data-62',
- 'zAsset-Bundle Scope-63',
- 'zGenAlbum-Creation Date-64',
- 'zGenAlbum-Start Date-65',
- 'zGenAlbum-End Date-66',
- 'zGenAlbum-Album Kind-67',
- 'zGenAlbum-Title-User&System Applied-68',
- 'zGenAlbum- Import Session ID-69',
- 'zGenAlbum-Imported by Bundle Identifier-70',
- 'zGenAlbum-Cached Photos Count-71',
- 'zGenAlbum-Cached Videos Count-72',
- 'zGenAlbum-Cached Count-73',
- 'zGenAlbum-Trashed State-74',
- 'zGenAlbum-Trash Date-75',
- 'zGenAlbum-UUID-76',
- 'zGenAlbum-Cloud GUID-77',
- 'zAsset-Active Library Scope Participation State-78',
- 'zAsset-zPK-79',
- 'zAddAssetAttr-zPK-80',
- 'zAsset-UUID = store.cloudphotodb-81',
- 'zAddAssetAttr-Original Stable Hash-iOS18-82',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-83')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite basic asset and album data')
-
- db.close()
- return
-
-
-def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset):
-
- for file_found in files_found:
- file_found = str(file_found)
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80]))
- if file_found.endswith('.sqlite'):
- break
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-Time Zone Offset-5',
+ 'zAddAssetAttr-EXIF-String-6',
+ ('zAsset-Modification Date-7', 'datetime'),
+ ('zAsset-Last Shared Date-8', 'datetime'),
+ ('zAddAssetAttr-Last Viewed Date-9', 'datetime'),
+ 'zAsset-Directory-Path-10',
+ 'zAsset-Filename-11',
+ 'zAddAssetAttr- Original Filename-12',
+ 'zCldMast- Original Filename-13',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-14',
+ 'zAsset- Conversation= zGenAlbum_zPK-15',
+ 'SWYConverszGenAlbum- Import Session ID-16',
+ 'zAsset-Syndication State-17',
+ ('zAsset-Trashed Date-18', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-19',
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-20',
+ 'zAsset-Saved Asset Type-21',
+ 'zAddAssetAttr-Imported by Bundle ID-22',
+ 'zAddAssetAttr-Imported By Display Name-23',
+ 'zAddAssetAttr-Imported by-24',
+ 'zCldMast-Imported by Bundle ID-25',
+ 'zCldMast-Imported by Display Name-26',
+ 'zCldMast-Imported By-27',
+ 'zAsset-Visibility State-28',
+ 'zExtAttr-Camera Make-29',
+ 'zExtAttr-Camera Model-30',
+ 'zExtAttr-Lens Model-31',
+ 'zAsset-Derived Camera Capture Device-32',
+ 'zAddAssetAttr-Camera Captured Device-33',
+ 'zAddAssetAttr-Share Type-34',
+ 'zCldMast-Cloud Local State-35',
+ ('zCldMast-Import Date-36', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-37', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-38',
+ ('zAddAssetAttr-Alt Import Image Date-39', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-40',
+ ('zAsset-Cloud Batch Publish Date-41', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-42', 'datetime'),
+ 'zAsset-Cloud Download Requests-43',
+ 'zAsset-Cloud Batch ID-44',
+ 'zAsset-Latitude-45',
+ 'zExtAttr-Latitude-46',
+ 'zAsset-Longitude-47',
+ 'zExtAttr-Longitude-48',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-49',
+ 'zAddAssetAttr-Location Hash-50',
+ 'zAddAssetAttr-Shifted Location Valid-51',
+ 'zAddAssetAttr-Shifted Location Data-52',
+ 'zAddAssetAttr-Reverse Location Is Valid-53',
+ 'zAddAssetAttr-Reverse Location Data-54',
+ 'AAAzCldMastMedData-zOPT-55',
+ 'zAddAssetAttr-Media Metadata Type-56',
+ 'AAAzCldMastMedData-Data-57',
+ 'CldMasterzCldMastMedData-zOPT-58',
+ 'zCldMast-Media Metadata Type-59',
+ 'CMzCldMastMedData-Data-60',
+ 'zAsset-Bundle Scope-61',
+ ('zGenAlbum-Creation Date-62', 'datetime'),
+ ('zGenAlbum-Start Date-63', 'datetime'),
+ ('zGenAlbum-End Date-64', 'datetime'),
+ 'zGenAlbum-Album Kind-65',
+ 'zGenAlbum-Title-User&System Applied-66',
+ 'zGenAlbum- Import Session ID-67',
+ 'zGenAlbum-Imported by Bundle Identifier-68',
+ 'zGenAlbum-Cached Photos Count-69',
+ 'zGenAlbum-Cached Videos Count-70',
+ 'zGenAlbum-Cached Count-71',
+ 'zGenAlbum-Trashed State-72',
+ ('zGenAlbum-Trash Date-73', 'datetime'),
+ 'zGenAlbum-UUID-74',
+ 'zGenAlbum-Cloud GUID-75',
+ 'zAsset-Active Library Scope Participation State-76',
+ 'zAsset-zPK-77',
+ 'zAddAssetAttr-zPK-78',
+ 'zAsset-UUID = store.cloudphotodb-79',
+ 'zAddAssetAttr-Master Fingerprint-80')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
- if report_folder.endswith('/') or report_folder.endswith('\\'):
- report_folder = report_folder[:-1]
- iosversion = scripts.artifacts.artGlobals.versionf
- if version.parse(iosversion) <= version.parse("10.3.4"):
- logfunc("Unsupported version for Syndication.photoslibrary-database-Photos.sqlite basic asset and album data iOS " + iosversion)
- if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("12")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ elif version.parse(iosversion) >= version.parse("18"):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
- DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
+ DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date',
DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date',
zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name',
+ zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset',
+ zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String',
DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date',
+ DateTime(zAddAssetAttr.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Viewed Date',
zAsset.ZDIRECTORY AS 'zAsset-Directory-Path',
zAsset.ZFILENAME AS 'zAsset-Filename',
zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename',
zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename',
+ zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files',
+ zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK ',
+ SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID',
+ CASE zAsset.ZSYNDICATIONSTATE
+ WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0'
+ WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1'
+ WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2'
+ WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3'
+ WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8'
+ WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9'
+ WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || ''
+ END AS 'zAsset-Syndication State',
+ DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
CASE zAsset.ZTRASHEDSTATE
WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0'
WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1'
ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || ''
END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
- DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
+ zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK',
+ CASE zAsset.ZISRECENTLYSAVED
+ WHEN 0 THEN '0-Not_Recenlty_Saved_Still_Testing-0'
+ WHEN 1 THEN '1-Recently_Saved_Still_Testing-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || ''
+ END AS 'zAsset-Is_Recently_Saved',
CASE zAsset.ZSAVEDASSETTYPE
WHEN 0 THEN '0-Saved-via-other-source-0'
WHEN 1 THEN '1-StillTesting-1'
@@ -2713,8 +2533,9 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr
WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8'
WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12'
ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || ''
- END AS 'zAsset-Saved Asset Type',
- zAddAssetAttr.ZCREATORBUNDLEID AS 'zAddAssetAttr- Creator Bundle ID',
+ END AS 'zAsset-Saved Asset Type',
+ zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr-Imported by Bundle ID',
+ zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name',
CASE zAddAssetAttr.ZIMPORTEDBY
WHEN 0 THEN '0-Cloud-Other-0'
WHEN 1 THEN '1-Native-Back-Camera-1'
@@ -2731,16 +2552,48 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr
WHEN 12 THEN '12-SWY_Syndication_PL-12'
ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || ''
END AS 'zAddAssetAttr-Imported by',
+ zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID',
+ zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name',
+ CASE zCldMast.ZIMPORTEDBY
+ WHEN 0 THEN '0-Cloud-Other-0'
+ WHEN 1 THEN '1-Native-Back-Camera-1'
+ WHEN 2 THEN '2-Native-Front-Camera-2'
+ WHEN 3 THEN '3-Third-Party-App-3'
+ WHEN 4 THEN '4-StillTesting-4'
+ WHEN 5 THEN '5-PhotoBooth_PL-Asset-5'
+ WHEN 6 THEN '6-Third-Party-App-6'
+ WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7'
+ WHEN 8 THEN '8-System-Package-App-8'
+ WHEN 9 THEN '9-Native-App-9'
+ WHEN 10 THEN '10-StillTesting-10'
+ WHEN 11 THEN '11-StillTesting-11'
+ WHEN 12 THEN '12-SWY_Syndication_PL-12'
+ ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || ''
+ END AS 'zCldMast-Imported By',
CASE zAsset.ZVISIBILITYSTATE
WHEN 0 THEN '0-Visible-PL-CameraRoll-0'
WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2'
ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || ''
END AS 'zAsset-Visibility State',
+ zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make',
+ zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model',
+ zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model',
+ CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE
+ WHEN 0 THEN '0-Back-Camera-Other-0'
+ WHEN 1 THEN '1-Front-Camera-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZDERIVEDCAMERACAPTUREDEVICE || ''
+ END AS 'zAsset-Derived Camera Capture Device',
CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE
WHEN 0 THEN '0-Back-Camera-Other-0'
WHEN 1 THEN '1-Front-Camera-1'
ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || ''
- END AS 'zAddAssetAttr-Camera Captured Device',
+ END AS 'zAddAssetAttr-Camera Captured Device',
+ zAsset.ZCAPTURESESSIONIDENTIFIER AS 'zAsset-Capture_Session_Identifier',
+ CASE zAddAssetAttr.ZSHARETYPE
+ WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0'
+ WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || ''
+ END AS 'zAddAssetAttr-Share Type',
CASE zCldMast.ZCLOUDLOCALSTATE
WHEN 0 THEN '0-Not Synced with Cloud-0'
WHEN 1 THEN '1-Pending Upload-1'
@@ -2749,6 +2602,11 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr
ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || ''
END AS 'zCldMast-Cloud Local State',
DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date',
+ DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH')
+ AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files',
+ zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID',
+ DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH')
+ AS 'zAddAssetAttr-Alt Import Image Date',
zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting',
DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date',
DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date',
@@ -2758,10 +2616,16 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr
WHEN -180.0 THEN '-180.0'
ELSE zAsset.ZLATITUDE
END AS 'zAsset-Latitude',
+ zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude',
CASE zAsset.ZLONGITUDE
WHEN -180.0 THEN '-180.0'
ELSE zAsset.ZLONGITUDE
END AS 'zAsset-Longitude',
+ zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude',
+ CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY
+ WHEN -1.0 THEN '-1.0'
+ ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY
+ END AS 'zAddAssetAttr-GPS Horizontal Accuracy',
zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash',
CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID
WHEN 0 THEN '0-Shifted Location Not Valid-0'
@@ -2781,6 +2645,40 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr
WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist'
ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL'
END AS 'zAddAssetAttr-Reverse Location Data',
+ CASE AAAzCldMastMedData.Z_OPT
+ WHEN 1 THEN '1-StillTesting-Cloud-1'
+ WHEN 2 THEN '2-StillTesting-This Device-2'
+ WHEN 3 THEN '3-StillTesting-Muted-3'
+ WHEN 4 THEN '4-StillTesting-Unknown-4'
+ WHEN 5 THEN '5-StillTesting-Unknown-5'
+ ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || ''
+ END AS 'AAAzCldMastMedData-zOPT',
+ zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type',
+ CASE
+ WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist'
+ ELSE 'AAAzCldMastMedData-Data_Empty-NULL'
+ END AS 'AAAzCldMastMedData-Data',
+ CASE CMzCldMastMedData.Z_OPT
+ WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1'
+ WHEN 2 THEN '2-StillTesting-Local_Asset-2'
+ WHEN 3 THEN '3-StillTesting-Muted-3'
+ WHEN 4 THEN '4-StillTesting-Unknown-4'
+ WHEN 5 THEN '5-StillTesting-Unknown-5'
+ ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || ''
+ END AS 'CldMasterzCldMastMedData-zOPT',
+ zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type',
+ CASE
+ WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist'
+ ELSE 'CMzCldMastMedData-Data_Empty-NULL'
+ END AS 'CMzCldMastMedData-Data',
+ CASE zAsset.ZBUNDLESCOPE
+ WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0'
+ WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1'
+ WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2'
+ WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || ''
+ END AS 'zAsset-Bundle Scope',
+ DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date',
DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date',
CASE zGenAlbum.ZKIND
@@ -2799,7 +2697,8 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr
ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || ''
END AS 'zGenAlbum-Album Kind',
zGenAlbum.ZTITLE AS 'zGenAlbum-Title-User&System Applied',
- zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum- Import Session ID',
+ zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum- Import Session ID',
+ zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier',
zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum-Cached Photos Count',
zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum-Cached Videos Count',
zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum-Cached Count',
@@ -2810,117 +2709,155 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr
END AS 'zGenAlbum-Trashed State',
DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date',
zGenAlbum.ZUUID AS 'zGenAlbum-UUID',
- zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID',
+ zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID',
+ CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE
+ WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0'
+ WHEN 1 THEN '1-Asset-In-Active-SPL-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || ''
+ END AS 'zAsset-Active Library Scope Participation State',
zAsset.Z_PK AS 'zAsset-zPK',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint'
- FROM ZGENERICASSET zAsset
- LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON
- zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash'
+ FROM ZASSET zAsset
+ LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
+ LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES
+ LEFT JOIN Z_30ASSETS z30Assets ON z30Assets.Z_3ASSETS = zAsset.Z_PK
+ LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z30Assets.Z_30ALBUMS
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
- LEFT JOIN Z_20ASSETS z20Assets ON z20Assets.Z_27ASSETS = zAsset.Z_PK
- LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z20Assets.Z_20ALBUMS
+ LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON
+ AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA
+ LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON
+ CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
+ LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION
ORDER BY zAsset.ZDATECREATED
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47]))
-
- counter += 1
-
- description = 'Parses basic asset record data from' \
- ' Syndication.photoslibrary-database-Photos.sqlite' \
- ' for basic asset and album data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 11.' \
- ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \
- ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \
- ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \
- ' Shared with You Conversation Identifiers Assets.'
- report = ArtifactHtmlReport('Ph2.2-Asset Basic Data & Convers Data-SyndPL')
- report.start_artifact_report(report_folder, 'Ph2.2-Asset Basic Data & Convers Data-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAsset-Modification Date-5',
- 'zAsset-Last Shared Date-6',
- 'zAsset-Directory-Path-7',
- 'zAsset-Filename-8',
- 'zAddAssetAttr- Original Filename-9',
- 'zCldMast- Original Filename-10',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-11',
- 'zAsset-Trashed Date-12',
- 'zAsset-Saved Asset Type-13',
- 'zAddAssetAttr- Creator Bundle ID-14',
- 'zAddAssetAttr-Imported by-15',
- 'zAsset-Visibility State-16',
- 'zAddAssetAttr-Camera Captured Device-17',
- 'zCldMast-Cloud Local State-18',
- 'zCldMast-Import Date-19',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-20',
- 'zAsset-Cloud Batch Publish Date-21',
- 'zAsset-Cloud Server Publish Date-22',
- 'zAsset-Cloud Download Requests-23',
- 'zAsset-Cloud Batch ID-24',
- 'zAsset-Latitude-25',
- 'zAsset-Longitude-26',
- 'zAddAssetAttr-Location Hash-27',
- 'zAddAssetAttr-Shifted Location Valid-28',
- 'zAddAssetAttr-Shifted Location Data-29',
- 'zAddAssetAttr-Reverse Location Is Valid-30',
- 'zAddAssetAttr-Reverse Location Data-31',
- 'zGenAlbum-Start Date-32',
- 'zGenAlbum-End Date-33',
- 'zGenAlbum-Album Kind-34',
- 'zGenAlbum-Title-User&System Applied-35',
- 'zGenAlbum- Import Session ID-36',
- 'zGenAlbum-Cached Photos Count-37',
- 'zGenAlbum-Cached Videos Count-38',
- 'zGenAlbum-Cached Count-39',
- 'zGenAlbum-Trashed State-40',
- 'zGenAlbum-Trash Date-41',
- 'zGenAlbum-UUID-42',
- 'zGenAlbum-Cloud GUID-43',
- 'zAsset-zPK-44',
- 'zAddAssetAttr-zPK-45',
- 'zAsset-UUID = store.cloudphotodb-46',
- 'zAddAssetAttr-Master Fingerprint-47')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite'
- ' basic asset and album data')
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83]))
- db.close()
- return
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-Time Zone Offset-5',
+ 'zAddAssetAttr-EXIF-String-6',
+ ('zAsset-Modification Date-7', 'datetime'),
+ ('zAsset-Last Shared Date-8', 'datetime'),
+ ('zAddAssetAttr-Last Viewed Date-9', 'datetime'),
+ 'zAsset-Directory-Path-10',
+ 'zAsset-Filename-11',
+ 'zAddAssetAttr- Original Filename-12',
+ 'zCldMast- Original Filename-13',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-14',
+ 'zAsset- Conversation= zGenAlbum_zPK-15',
+ 'SWYConverszGenAlbum- Import Session ID-16',
+ 'zAsset-Syndication State-17',
+ ('zAsset-Trashed Date-18', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-19',
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-20',
+ 'zAsset-Is_Recently_Saved-21',
+ 'zAsset-Saved Asset Type-22',
+ 'zAddAssetAttr-Imported by Bundle ID-23',
+ 'zAddAssetAttr-Imported By Display Name-24',
+ 'zAddAssetAttr-Imported by-25',
+ 'zCldMast-Imported by Bundle ID-26',
+ 'zCldMast-Imported by Display Name-27',
+ 'zCldMast-Imported By-28',
+ 'zAsset-Visibility State-29',
+ 'zExtAttr-Camera Make-30',
+ 'zExtAttr-Camera Model-31',
+ 'zExtAttr-Lens Model-32',
+ 'zAsset-Derived Camera Capture Device-33',
+ 'zAddAssetAttr-Camera Captured Device-34',
+ 'zAsset-Capture_Session_Identifier-35',
+ 'zAddAssetAttr-Share Type-36',
+ 'zCldMast-Cloud Local State-37',
+ ('zCldMast-Import Date-38', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-39', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-40',
+ ('zAddAssetAttr-Alt Import Image Date-41', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-42',
+ ('zAsset-Cloud Batch Publish Date-43', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-44', 'datetime'),
+ 'zAsset-Cloud Download Requests-45',
+ 'zAsset-Cloud Batch ID-46',
+ 'zAsset-Latitude-47',
+ 'zExtAttr-Latitude-48',
+ 'zAsset-Longitude-49',
+ 'zExtAttr-Longitude-50',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-51',
+ 'zAddAssetAttr-Location Hash-52',
+ 'zAddAssetAttr-Shifted Location Valid-53',
+ 'zAddAssetAttr-Shifted Location Data-54',
+ 'zAddAssetAttr-Reverse Location Is Valid-55',
+ 'zAddAssetAttr-Reverse Location Data-56',
+ 'AAAzCldMastMedData-zOPT-57',
+ 'zAddAssetAttr-Media Metadata Type-58',
+ 'AAAzCldMastMedData-Data-59',
+ 'CldMasterzCldMastMedData-zOPT-60',
+ 'zCldMast-Media Metadata Type-61',
+ 'CMzCldMastMedData-Data-62',
+ 'zAsset-Bundle Scope-63',
+ ('zGenAlbum-Creation Date-64', 'datetime'),
+ ('zGenAlbum-Start Date-65', 'datetime'),
+ ('zGenAlbum-End Date-66', 'datetime'),
+ 'zGenAlbum-Album Kind-67',
+ 'zGenAlbum-Title-User&System Applied-68',
+ 'zGenAlbum- Import Session ID-69',
+ 'zGenAlbum-Imported by Bundle Identifier-70',
+ 'zGenAlbum-Cached Photos Count-71',
+ 'zGenAlbum-Cached Videos Count-72',
+ 'zGenAlbum-Cached Count-73',
+ 'zGenAlbum-Trashed State-74',
+ ('zGenAlbum-Trash Date-75', 'datetime'),
+ 'zGenAlbum-UUID-76',
+ 'zGenAlbum-Cloud GUID-77',
+ 'zAsset-Active Library Scope Participation State-78',
+ 'zAsset-zPK-79',
+ 'zAddAssetAttr-zPK-80',
+ 'zAsset-UUID = store.cloudphotodb-81',
+ 'zAddAssetAttr-Original Stable Hash-82',
+ 'zAddAssetAttr.Adjusted Stable Hash-83')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
+@artifact_processor
+def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
+
+ if source_path.endswith('.sqlite'):
+ break
- elif (version.parse(iosversion) >= version.parse("12")) & (version.parse(iosversion) < version.parse("13")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ if report_folder.endswith('/') or report_folder.endswith('\\'):
+ report_folder = report_folder[:-1]
+ iosversion = scripts.artifacts.artGlobals.versionf
+ if version.parse(iosversion) <= version.parse("10.3.4"):
+ logfunc("Unsupported version for Syndication.photoslibrary iOS " + iosversion)
+ return (), [], source_path
+ if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("12")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
- SELECT
+ query = '''
+ SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date',
@@ -3056,107 +2993,290 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON
zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
- LEFT JOIN Z_23ASSETS z23Assets ON z23Assets.Z_30ASSETS = zAsset.Z_PK
- LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z23Assets.Z_23ALBUMS
+ LEFT JOIN Z_20ASSETS z20Assets ON z20Assets.Z_27ASSETS = zAsset.Z_PK
+ LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z20Assets.Z_20ALBUMS
ORDER BY zAsset.ZDATECREATED
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
row[46], row[47]))
- counter += 1
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ ('zAsset-Modification Date-5', 'datetime'),
+ ('zAsset-Last Shared Date-6', 'datetime'),
+ 'zAsset-Directory-Path-7',
+ 'zAsset-Filename-8',
+ 'zAddAssetAttr- Original Filename-9',
+ 'zCldMast- Original Filename-10',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-11',
+ ('zAsset-Trashed Date-12', 'datetime'),
+ 'zAsset-Saved Asset Type-13',
+ 'zAddAssetAttr- Creator Bundle ID-14',
+ 'zAddAssetAttr-Imported by-15',
+ 'zAsset-Visibility State-16',
+ 'zAddAssetAttr-Camera Captured Device-17',
+ 'zCldMast-Cloud Local State-18',
+ ('zCldMast-Import Date-19', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-20',
+ ('zAsset-Cloud Batch Publish Date-21', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-22', 'datetime'),
+ 'zAsset-Cloud Download Requests-23',
+ 'zAsset-Cloud Batch ID-24',
+ 'zAsset-Latitude-25',
+ 'zAsset-Longitude-26',
+ 'zAddAssetAttr-Location Hash-27',
+ 'zAddAssetAttr-Shifted Location Valid-28',
+ 'zAddAssetAttr-Shifted Location Data-29',
+ 'zAddAssetAttr-Reverse Location Is Valid-30',
+ 'zAddAssetAttr-Reverse Location Data-31',
+ ('zGenAlbum-Start Date-32', 'datetime'),
+ ('zGenAlbum-End Date-33', 'datetime'),
+ 'zGenAlbum-Album Kind-34',
+ 'zGenAlbum-Title-User&System Applied-35',
+ 'zGenAlbum- Import Session ID-36',
+ 'zGenAlbum-Cached Photos Count-37',
+ 'zGenAlbum-Cached Videos Count-38',
+ 'zGenAlbum-Cached Count-39',
+ 'zGenAlbum-Trashed State-40',
+ ('zGenAlbum-Trash Date-41', 'datetime'),
+ 'zGenAlbum-UUID-42',
+ 'zGenAlbum-Cloud GUID-43',
+ 'zAsset-zPK-44',
+ 'zAddAssetAttr-zPK-45',
+ 'zAsset-UUID = store.cloudphotodb-46',
+ 'zAddAssetAttr-Master Fingerprint-47')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
- description = 'Parses basic asset record data from' \
- ' Syndication.photoslibrary-database-Photos.sqlite' \
- ' for basic asset and album data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 12.' \
- ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \
- ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \
- ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \
- ' Shared with You Conversation Identifiers Assets.'
- report = ArtifactHtmlReport('Ph2.2-Asset Basic Data & Convers Data-SyndPL')
- report.start_artifact_report(report_folder, 'Ph2.2-Asset Basic Data & Convers Data-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAsset-Modification Date-5',
- 'zAsset-Last Shared Date-6',
- 'zAsset-Directory-Path-7',
- 'zAsset-Filename-8',
- 'zAddAssetAttr- Original Filename-9',
- 'zCldMast- Original Filename-10',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-11',
- 'zAsset-Trashed Date-12',
- 'zAsset-Saved Asset Type-13',
- 'zAddAssetAttr- Creator Bundle ID-14',
- 'zAddAssetAttr-Imported by-15',
- 'zAsset-Visibility State-16',
- 'zAddAssetAttr-Camera Captured Device-17',
- 'zCldMast-Cloud Local State-18',
- 'zCldMast-Import Date-19',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-20',
- 'zAsset-Cloud Batch Publish Date-21',
- 'zAsset-Cloud Server Publish Date-22',
- 'zAsset-Cloud Download Requests-23',
- 'zAsset-Cloud Batch ID-24',
- 'zAsset-Latitude-25',
- 'zAsset-Longitude-26',
- 'zAddAssetAttr-Location Hash-27',
- 'zAddAssetAttr-Shifted Location Valid-28',
- 'zAddAssetAttr-Shifted Location Data-29',
- 'zAddAssetAttr-Reverse Location Is Valid-30',
- 'zAddAssetAttr-Reverse Location Data-31',
- 'zGenAlbum-Start Date-32',
- 'zGenAlbum-End Date-33',
- 'zGenAlbum-Album Kind-34',
- 'zGenAlbum-Title-User&System Applied-35',
- 'zGenAlbum- Import Session ID-36',
- 'zGenAlbum-Cached Photos Count-37',
- 'zGenAlbum-Cached Videos Count-38',
- 'zGenAlbum-Cached Count-39',
- 'zGenAlbum-Trashed State-40',
- 'zGenAlbum-Trash Date-41',
- 'zGenAlbum-UUID-42',
- 'zGenAlbum-Cloud GUID-43',
- 'zAsset-zPK-44',
- 'zAddAssetAttr-zPK-45',
- 'zAsset-UUID = store.cloudphotodb-46',
- 'zAddAssetAttr-Master Fingerprint-47')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
+ elif (version.parse(iosversion) >= version.parse("12")) & (version.parse(iosversion) < version.parse("13")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- tlactivity = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ query = '''
+ SELECT
+ DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
+ DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
+ DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date',
+ DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date',
+ zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name',
+ DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
+ DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date',
+ zAsset.ZDIRECTORY AS 'zAsset-Directory-Path',
+ zAsset.ZFILENAME AS 'zAsset-Filename',
+ zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename',
+ zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename',
+ CASE zAsset.ZTRASHEDSTATE
+ WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0'
+ WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || ''
+ END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
+ DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
+ CASE zAsset.ZSAVEDASSETTYPE
+ WHEN 0 THEN '0-Saved-via-other-source-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ WHEN 2 THEN '2-StillTesting-2'
+ WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3'
+ WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4'
+ WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5'
+ WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6'
+ WHEN 7 THEN '7-StillTesting-7'
+ WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8'
+ WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || ''
+ END AS 'zAsset-Saved Asset Type',
+ zAddAssetAttr.ZCREATORBUNDLEID AS 'zAddAssetAttr- Creator Bundle ID',
+ CASE zAddAssetAttr.ZIMPORTEDBY
+ WHEN 0 THEN '0-Cloud-Other-0'
+ WHEN 1 THEN '1-Native-Back-Camera-1'
+ WHEN 2 THEN '2-Native-Front-Camera-2'
+ WHEN 3 THEN '3-Third-Party-App-3'
+ WHEN 4 THEN '4-StillTesting-4'
+ WHEN 5 THEN '5-PhotoBooth_PL-Asset-5'
+ WHEN 6 THEN '6-Third-Party-App-6'
+ WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7'
+ WHEN 8 THEN '8-System-Package-App-8'
+ WHEN 9 THEN '9-Native-App-9'
+ WHEN 10 THEN '10-StillTesting-10'
+ WHEN 11 THEN '11-StillTesting-11'
+ WHEN 12 THEN '12-SWY_Syndication_PL-12'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || ''
+ END AS 'zAddAssetAttr-Imported by',
+ CASE zAsset.ZVISIBILITYSTATE
+ WHEN 0 THEN '0-Visible-PL-CameraRoll-0'
+ WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || ''
+ END AS 'zAsset-Visibility State',
+ CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE
+ WHEN 0 THEN '0-Back-Camera-Other-0'
+ WHEN 1 THEN '1-Front-Camera-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || ''
+ END AS 'zAddAssetAttr-Camera Captured Device',
+ CASE zCldMast.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-Not Synced with Cloud-0'
+ WHEN 1 THEN '1-Pending Upload-1'
+ WHEN 2 THEN '2-StillTesting'
+ WHEN 3 THEN '3-Synced with Cloud-3'
+ ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || ''
+ END AS 'zCldMast-Cloud Local State',
+ DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date',
+ zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting',
+ DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date',
+ DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date',
+ zAsset.ZCLOUDDOWNLOADREQUESTS AS 'zAsset-Cloud Download Requests',
+ zAsset.ZCLOUDBATCHID AS 'zAsset-Cloud Batch ID',
+ CASE zAsset.ZLATITUDE
+ WHEN -180.0 THEN '-180.0'
+ ELSE zAsset.ZLATITUDE
+ END AS 'zAsset-Latitude',
+ CASE zAsset.ZLONGITUDE
+ WHEN -180.0 THEN '-180.0'
+ ELSE zAsset.ZLONGITUDE
+ END AS 'zAsset-Longitude',
+ zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash',
+ CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID
+ WHEN 0 THEN '0-Shifted Location Not Valid-0'
+ WHEN 1 THEN '1-Shifted Location Valid-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || ''
+ END AS 'zAddAssetAttr-Shifted Location Valid',
+ CASE
+ WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist'
+ ELSE 'zAddAssetArrt-Shifted_Location_Data_Empty-NULL'
+ END AS 'zAddAssetAttr-Shifted Location Data',
+ CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID
+ WHEN 0 THEN '0-Reverse Location Not Valid-0'
+ WHEN 1 THEN '1-Reverse Location Valid-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || ''
+ END AS 'zAddAssetAttr-Reverse Location Is Valid',
+ CASE
+ WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist'
+ ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL'
+ END AS 'zAddAssetAttr-Reverse Location Data',
+ DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
+ DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date',
+ CASE zGenAlbum.ZKIND
+ WHEN 2 THEN '2-Non-Shared-Album-2'
+ WHEN 1505 THEN '1505-Shared-Album-1505'
+ WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT'
+ WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT'
+ WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509'
+ WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510'
+ WHEN 3571 THEN '3571-Progress-Sync-3571'
+ WHEN 3572 THEN '3572-Progress-OTA-Restore-3572'
+ WHEN 3573 THEN '3573-Progress-FS-Import-3573'
+ WHEN 3998 THEN '3998-Project Root Folder-3998'
+ WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999'
+ WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || ''
+ END AS 'zGenAlbum-Album Kind',
+ zGenAlbum.ZTITLE AS 'zGenAlbum-Title-User&System Applied',
+ zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum- Import Session ID',
+ zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum-Cached Photos Count',
+ zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum-Cached Videos Count',
+ zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum-Cached Count',
+ CASE zGenAlbum.ZTRASHEDSTATE
+ WHEN 0 THEN 'zGenAlbum Not In Trash-0'
+ WHEN 1 THEN 'zGenAlbum Album In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZTRASHEDSTATE || ''
+ END AS 'zGenAlbum-Trashed State',
+ DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date',
+ zGenAlbum.ZUUID AS 'zGenAlbum-UUID',
+ zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID',
+ zAsset.Z_PK AS 'zAsset-zPK',
+ zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
+ zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
+ zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint'
+ FROM ZGENERICASSET zAsset
+ LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON
+ zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
+ LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
+ LEFT JOIN Z_23ASSETS z23Assets ON z23Assets.Z_30ASSETS = zAsset.Z_PK
+ LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z23Assets.Z_23ALBUMS
+ ORDER BY zAsset.ZDATECREATED
+ '''
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite'
- ' basic asset and album data')
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47]))
- db.close()
- return
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ ('zAsset-Modification Date-5', 'datetime'),
+ ('zAsset-Last Shared Date-6', 'datetime'),
+ 'zAsset-Directory-Path-7',
+ 'zAsset-Filename-8',
+ 'zAddAssetAttr- Original Filename-9',
+ 'zCldMast- Original Filename-10',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-11',
+ ('zAsset-Trashed Date-12', 'datetime'),
+ 'zAsset-Saved Asset Type-13',
+ 'zAddAssetAttr- Creator Bundle ID-14',
+ 'zAddAssetAttr-Imported by-15',
+ 'zAsset-Visibility State-16',
+ 'zAddAssetAttr-Camera Captured Device-17',
+ 'zCldMast-Cloud Local State-18',
+ ('zCldMast-Import Date-19', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-20',
+ ('zAsset-Cloud Batch Publish Date-21', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-22', 'datetime'),
+ 'zAsset-Cloud Download Requests-23',
+ 'zAsset-Cloud Batch ID-24',
+ 'zAsset-Latitude-25',
+ 'zAsset-Longitude-26',
+ 'zAddAssetAttr-Location Hash-27',
+ 'zAddAssetAttr-Shifted Location Valid-28',
+ 'zAddAssetAttr-Shifted Location Data-29',
+ 'zAddAssetAttr-Reverse Location Is Valid-30',
+ 'zAddAssetAttr-Reverse Location Data-31',
+ ('zGenAlbum-Start Date-32', 'datetime'),
+ ('zGenAlbum-End Date-33', 'datetime'),
+ 'zGenAlbum-Album Kind-34',
+ 'zGenAlbum-Title-User&System Applied-35',
+ 'zGenAlbum- Import Session ID-36',
+ 'zGenAlbum-Cached Photos Count-37',
+ 'zGenAlbum-Cached Videos Count-38',
+ 'zGenAlbum-Cached Count-39',
+ 'zGenAlbum-Trashed State-40',
+ ('zGenAlbum-Trash Date-41', 'datetime'),
+ 'zGenAlbum-UUID-42',
+ 'zGenAlbum-Cloud GUID-43',
+ 'zAsset-zPK-44',
+ 'zAddAssetAttr-zPK-45',
+ 'zAsset-UUID = store.cloudphotodb-46',
+ 'zAddAssetAttr-Master Fingerprint-47')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("13")) & (version.parse(iosversion) < version.parse("14")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -3360,15 +3480,11 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr
LEFT JOIN Z_26ASSETS z26Assets ON z26Assets.Z_34ASSETS = zAsset.Z_PK
LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z26Assets.Z_26ALBUMS
ORDER BY zAsset.ZDATECREATED
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
@@ -3377,107 +3493,84 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr
row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
row[64], row[65]))
- counter += 1
-
- description = 'Parses basic asset record data from' \
- ' Syndication.photoslibrary-database-Photos.sqlite' \
- ' for basic asset and album data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 13.' \
- ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \
- ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \
- ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \
- ' Shared with You Conversation Identifiers Assets.'
- report = ArtifactHtmlReport('Ph2.2-Asset Basic Data & Convers Data-SyndPL')
- report.start_artifact_report(report_folder, 'Ph2.2-Asset Basic Data & Convers Data-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-Time Zone Offset-5',
- 'zAddAssetAttr-EXIF-String-6',
- 'zAsset-Modification Date-7',
- 'zAsset-Last Shared Date-8',
- 'zAsset-Directory-Path-9',
- 'zAsset-Filename-10',
- 'zAddAssetAttr- Original Filename-11',
- 'zCldMast- Original Filename-12',
- 'zAsset-Trashed Date-13',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14',
- 'zAsset-Saved Asset Type-15',
- 'zAddAssetAttr- Creator Bundle ID-16',
- 'zAddAssetAttr-Imported by-17',
- 'zCldMast-Imported By-18',
- 'zAsset-Visibility State-19',
- 'zExtAttr-Camera Make-20',
- 'zExtAttr-Camera Model-21',
- 'zExtAttr-Lens Model-22',
- 'zAddAssetAttr-Camera Captured Device-23',
- 'zAddAssetAttr-Share Type-24',
- 'zCldMast-Cloud Local State-25',
- 'zCldMast-Import Date-26',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-27',
- 'zAddAssetAttr-Import Session ID-28',
- 'zAddAssetAttr-Alt Import Image Date-29',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-30',
- 'zAsset-Cloud Batch Publish Date-31',
- 'zAsset-Cloud Server Publish Date-32',
- 'zAsset-Cloud Download Requests-33',
- 'zAsset-Cloud Batch ID-34',
- 'zAsset-Latitude-35',
- 'zExtAttr-Latitude-36',
- 'zAsset-Longitude-37',
- 'zExtAttr-Longitude-38',
- 'zAddAssetAttr-Location Hash-39',
- 'zAddAssetAttr-Shifted Location Valid-40',
- 'zAddAssetAttr-Shifted Location Data-41',
- 'zAddAssetAttr-Reverse Location Is Valid-42',
- 'zAddAssetAttr-Reverse Location Data-43',
- 'AAAzCldMastMedData-zOPT-44',
- 'zAddAssetAttr-Media Metadata Type-45',
- 'AAAzCldMastMedData-Data-46',
- 'CldMasterzCldMastMedData-zOPT-47',
- 'zCldMast-Media Metadata Type-48',
- 'CMzCldMastMedData-Data-49',
- 'zGenAlbum-Start Date-50',
- 'zGenAlbum-End Date-51',
- 'zGenAlbum-Album Kind-52',
- 'zGenAlbum-Title-User&System Applied-53',
- 'zGenAlbum- Import Session ID-54',
- 'zGenAlbum-Cached Photos Count-55',
- 'zGenAlbum-Cached Videos Count-56',
- 'zGenAlbum-Cached Count-57',
- 'zGenAlbum-Trashed State-58',
- 'zGenAlbum-Trash Date-59',
- 'zGenAlbum-UUID-60',
- 'zGenAlbum-Cloud GUID-61',
- 'zAsset-zPK-62',
- 'zAddAssetAttr-zPK-63',
- 'zAsset-UUID = store.cloudphotodb-64',
- 'zAddAssetAttr-Master Fingerprint-65')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite'
- ' basic asset and album data')
-
- db.close()
- return
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-Time Zone Offset-5',
+ 'zAddAssetAttr-EXIF-String-6',
+ ('zAsset-Modification Date-7', 'datetime'),
+ ('zAsset-Last Shared Date-8', 'datetime'),
+ 'zAsset-Directory-Path-9',
+ 'zAsset-Filename-10',
+ 'zAddAssetAttr- Original Filename-11',
+ 'zCldMast- Original Filename-12',
+ ('zAsset-Trashed Date-13', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14',
+ 'zAsset-Saved Asset Type-15',
+ 'zAddAssetAttr- Creator Bundle ID-16',
+ 'zAddAssetAttr-Imported by-17',
+ 'zCldMast-Imported By-18',
+ 'zAsset-Visibility State-19',
+ 'zExtAttr-Camera Make-20',
+ 'zExtAttr-Camera Model-21',
+ 'zExtAttr-Lens Model-22',
+ 'zAddAssetAttr-Camera Captured Device-23',
+ 'zAddAssetAttr-Share Type-24',
+ 'zCldMast-Cloud Local State-25',
+ ('zCldMast-Import Date-26', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-27', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-28',
+ 'zAddAssetAttr-Alt Import Image Date-29',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-30',
+ ('zAsset-Cloud Batch Publish Date-31', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-32', 'datetime'),
+ 'zAsset-Cloud Download Requests-33',
+ 'zAsset-Cloud Batch ID-34',
+ 'zAsset-Latitude-35',
+ 'zExtAttr-Latitude-36',
+ 'zAsset-Longitude-37',
+ 'zExtAttr-Longitude-38',
+ 'zAddAssetAttr-Location Hash-39',
+ 'zAddAssetAttr-Shifted Location Valid-40',
+ 'zAddAssetAttr-Shifted Location Data-41',
+ 'zAddAssetAttr-Reverse Location Is Valid-42',
+ 'zAddAssetAttr-Reverse Location Data-43',
+ 'AAAzCldMastMedData-zOPT-44',
+ 'zAddAssetAttr-Media Metadata Type-45',
+ 'AAAzCldMastMedData-Data-46',
+ 'CldMasterzCldMastMedData-zOPT-47',
+ 'zCldMast-Media Metadata Type-48',
+ 'CMzCldMastMedData-Data-49',
+ ('zGenAlbum-Start Date-50', 'datetime'),
+ ('zGenAlbum-End Date-51', 'datetime'),
+ 'zGenAlbum-Album Kind-52',
+ 'zGenAlbum-Title-User&System Applied-53',
+ 'zGenAlbum- Import Session ID-54',
+ 'zGenAlbum-Cached Photos Count-55',
+ 'zGenAlbum-Cached Videos Count-56',
+ 'zGenAlbum-Cached Count-57',
+ 'zGenAlbum-Trashed State-58',
+ ('zGenAlbum-Trash Date-59', 'datetime'),
+ 'zGenAlbum-UUID-60',
+ 'zGenAlbum-Cloud GUID-61',
+ 'zAsset-zPK-62',
+ 'zAddAssetAttr-zPK-63',
+ 'zAsset-UUID = store.cloudphotodb-64',
+ 'zAddAssetAttr-Master Fingerprint-65')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -3695,15 +3788,10 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr
LEFT JOIN Z_26ASSETS z26Assets ON z26Assets.Z_3ASSETS = zAsset.Z_PK
LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z26Assets.Z_26ALBUMS
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ '''
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
@@ -3712,114 +3800,91 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr
row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72]))
- counter += 1
-
- description = 'Parses basic asset record data from' \
- ' Syndication.photoslibrary-database-Photos.sqlite' \
- ' for basic asset and album data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 14.' \
- ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \
- ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \
- ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \
- ' Shared with You Conversation Identifiers Assets.'
- report = ArtifactHtmlReport('Ph2.2-Asset Basic Data & Convers Data-SyndPL')
- report.start_artifact_report(report_folder, 'Ph2.2-Asset Basic Data & Convers Data-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-Time Zone Offset-5',
- 'zAddAssetAttr-EXIF-String-6',
- 'zAsset-Modification Date-7',
- 'zAsset-Last Shared Date-8',
- 'zAsset-Directory-Path-9',
- 'zAsset-Filename-10',
- 'zAddAssetAttr- Original Filename-11',
- 'zCldMast- Original Filename-12',
- 'zAsset-Trashed Date-13',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14',
- 'zAsset-Saved Asset Type-15',
- 'zAddAssetAttr-Creator Bundle ID-16',
- 'zAddAssetAttr-Imported By Display Name-17',
- 'zAddAssetAttr-Imported by-18',
- 'zCldMast-Imported by Bundle ID-19',
- 'zCldMast-Imported by Display Name-20',
- 'zCldMast-Imported By-21',
- 'zAsset-Visibility State-22',
- 'zExtAttr-Camera Make-23',
- 'zExtAttr-Camera Model-24',
- 'zExtAttr-Lens Model-25',
- 'zAsset-Derived Camera Capture Device-26',
- 'zAddAssetAttr-Camera Captured Device-27',
- 'zAddAssetAttr-Share Type-28',
- 'zCldMast-Cloud Local State-29',
- 'zCldMast-Import Date-30',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-31',
- 'zAddAssetAttr-Import Session ID-32',
- 'zAddAssetAttr-Alt Import Image Date-33',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-34',
- 'zAsset-Cloud Batch Publish Date-35',
- 'zAsset-Cloud Server Publish Date-36',
- 'zAsset-Cloud Download Requests-37',
- 'zAsset-Cloud Batch ID-38',
- 'zAsset-Latitude-39',
- 'zExtAttr-Latitude-40',
- 'zAsset-Longitude-41',
- 'zExtAttr-Longitude-42',
- 'zAddAssetAttr-GPS Horizontal Accuracy-43',
- 'zAddAssetAttr-Location Hash-44',
- 'zAddAssetAttr-Shifted Location Valid-45',
- 'zAddAssetAttr-Shifted Location Data-46',
- 'zAddAssetAttr-Reverse Location Is Valid-47',
- 'zAddAssetAttr-Reverse Location Data-48',
- 'AAAzCldMastMedData-zOPT-49',
- 'zAddAssetAttr-Media Metadata Type-50',
- 'AAAzCldMastMedData-Data-51',
- 'CldMasterzCldMastMedData-zOPT-52',
- 'zCldMast-Media Metadata Type-53',
- 'CMzCldMastMedData-Data-54',
- 'zGenAlbum-Creation Date-55',
- 'zGenAlbum-Start Date-56',
- 'zGenAlbum-End Date-57',
- 'zGenAlbum-Album Kind-58',
- 'zGenAlbum-Title-User&System Applied-59',
- 'zGenAlbum- Import Session ID-60',
- 'zGenAlbum-Creator Bundle Identifier-61',
- 'zGenAlbum-Cached Photos Count-62',
- 'zGenAlbum-Cached Videos Count-63',
- 'zGenAlbum-Cached Count-64',
- 'zGenAlbum-Trashed State-65',
- 'zGenAlbum-Trash Date-66',
- 'zGenAlbum-UUID-67',
- 'zGenAlbum-Cloud GUID-68',
- 'zAsset-zPK-69',
- 'zAddAssetAttr-zPK-70',
- 'zAsset-UUID = store.cloudphotodb-71',
- 'zAddAssetAttr-Master Fingerprint-72')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite'
- ' basic asset and album data')
-
- db.close()
- return
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-Time Zone Offset-5',
+ 'zAddAssetAttr-EXIF-String-6',
+ ('zAsset-Modification Date-7', 'datetime'),
+ ('zAsset-Last Shared Date-8', 'datetime'),
+ 'zAsset-Directory-Path-9',
+ 'zAsset-Filename-10',
+ 'zAddAssetAttr- Original Filename-11',
+ 'zCldMast- Original Filename-12',
+ ('zAsset-Trashed Date-13', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14',
+ 'zAsset-Saved Asset Type-15',
+ 'zAddAssetAttr-Creator Bundle ID-16',
+ 'zAddAssetAttr-Imported By Display Name-17',
+ 'zAddAssetAttr-Imported by-18',
+ 'zCldMast-Imported by Bundle ID-19',
+ 'zCldMast-Imported by Display Name-20',
+ 'zCldMast-Imported By-21',
+ 'zAsset-Visibility State-22',
+ 'zExtAttr-Camera Make-23',
+ 'zExtAttr-Camera Model-24',
+ 'zExtAttr-Lens Model-25',
+ 'zAsset-Derived Camera Capture Device-26',
+ 'zAddAssetAttr-Camera Captured Device-27',
+ 'zAddAssetAttr-Share Type-28',
+ 'zCldMast-Cloud Local State-29',
+ ('zCldMast-Import Date-30', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-31', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-32',
+ ('zAddAssetAttr-Alt Import Image Date-33', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-34',
+ ('zAsset-Cloud Batch Publish Date-35', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-36', 'datetime'),
+ 'zAsset-Cloud Download Requests-37',
+ 'zAsset-Cloud Batch ID-38',
+ 'zAsset-Latitude-39',
+ 'zExtAttr-Latitude-40',
+ 'zAsset-Longitude-41',
+ 'zExtAttr-Longitude-42',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-43',
+ 'zAddAssetAttr-Location Hash-44',
+ 'zAddAssetAttr-Shifted Location Valid-45',
+ 'zAddAssetAttr-Shifted Location Data-46',
+ 'zAddAssetAttr-Reverse Location Is Valid-47',
+ 'zAddAssetAttr-Reverse Location Data-48',
+ 'AAAzCldMastMedData-zOPT-49',
+ 'zAddAssetAttr-Media Metadata Type-50',
+ 'AAAzCldMastMedData-Data-51',
+ 'CldMasterzCldMastMedData-zOPT-52',
+ 'zCldMast-Media Metadata Type-53',
+ 'CMzCldMastMedData-Data-54',
+ ('zGenAlbum-Creation Date-55', 'datetime'),
+ ('zGenAlbum-Start Date-56', 'datetime'),
+ ('zGenAlbum-End Date-57', 'datetime'),
+ 'zGenAlbum-Album Kind-58',
+ 'zGenAlbum-Title-User&System Applied-59',
+ 'zGenAlbum- Import Session ID-60',
+ 'zGenAlbum-Creator Bundle Identifier-61',
+ 'zGenAlbum-Cached Photos Count-62',
+ 'zGenAlbum-Cached Videos Count-63',
+ 'zGenAlbum-Cached Count-64',
+ 'zGenAlbum-Trashed State-65',
+ ('zGenAlbum-Trash Date-66', 'datetime'),
+ 'zGenAlbum-UUID-67',
+ 'zGenAlbum-Cloud GUID-68',
+ 'zAsset-zPK-69',
+ 'zAddAssetAttr-zPK-70',
+ 'zAsset-UUID = store.cloudphotodb-71',
+ 'zAddAssetAttr-Master Fingerprint-72')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -4058,15 +4123,11 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr
LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z27Assets.Z_27ALBUMS
LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION
ORDER BY zAsset.ZDATECREATED
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
@@ -4076,119 +4137,96 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr
row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
row[73], row[74], row[75], row[76], row[77]))
- counter += 1
-
- description = 'Parses basic asset record data from' \
- ' Syndication.photoslibrary-database-Photos.sqlite' \
- ' for basic asset and album data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 15.' \
- ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \
- ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \
- ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \
- ' Shared with You Conversation Identifiers Assets.'
- report = ArtifactHtmlReport('Ph2.2-Asset Basic Data & Convers Data-SyndPL')
- report.start_artifact_report(report_folder, 'Ph2.2-Asset Basic Data & Convers Data-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-Time Zone Offset-5',
- 'zAddAssetAttr-EXIF-String-6',
- 'zAsset-Modification Date-7',
- 'zAsset-Last Shared Date-8',
- 'zAsset-Directory-Path-9',
- 'zAsset-Filename-10',
- 'zAddAssetAttr- Original Filename-11',
- 'zCldMast- Original Filename-12',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-13',
- 'zAsset- Conversation= zGenAlbum_zPK-14',
- 'SWYConverszGenAlbum- Import Session ID-15',
- 'zAsset-Syndication State-16',
- 'zAsset-Trashed Date-17',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-18',
- 'zAsset-Saved Asset Type-19',
- 'zAddAssetAttr-Imported by Bundle ID-20',
- 'zAddAssetAttr-Imported By Display Name-21',
- 'zAddAssetAttr-Imported by-22',
- 'zCldMast-Imported by Bundle ID-23',
- 'zCldMast-Imported by Display Name-24',
- 'zCldMast-Imported By-25',
- 'zAsset-Visibility State-26',
- 'zExtAttr-Camera Make-27',
- 'zExtAttr-Camera Model-28',
- 'zExtAttr-Lens Model-29',
- 'zAsset-Derived Camera Capture Device-30',
- 'zAddAssetAttr-Camera Captured Device-31',
- 'zAddAssetAttr-Share Type-32',
- 'zCldMast-Cloud Local State-33',
- 'zCldMast-Import Date-34',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-35',
- 'zAddAssetAttr-Import Session ID-36',
- 'zAddAssetAttr-Alt Import Image Date-37',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-38',
- 'zAsset-Cloud Batch Publish Date-39',
- 'zAsset-Cloud Server Publish Date-40',
- 'zAsset-Cloud Download Requests-41',
- 'zAsset-Cloud Batch ID-42',
- 'zAsset-Latitude-43',
- 'zExtAttr-Latitude-44',
- 'zAsset-Longitude-45',
- 'zExtAttr-Longitude-46',
- 'zAddAssetAttr-GPS Horizontal Accuracy-47',
- 'zAddAssetAttr-Location Hash-48',
- 'zAddAssetAttr-Shifted Location Valid-49',
- 'zAddAssetAttr-Shifted Location Data-50',
- 'zAddAssetAttr-Reverse Location Is Valid-51',
- 'zAddAssetAttr-Reverse Location Data-52',
- 'AAAzCldMastMedData-zOPT-53',
- 'zAddAssetAttr-Media Metadata Type-54',
- 'AAAzCldMastMedData-Data-55',
- 'CldMasterzCldMastMedData-zOPT-56',
- 'zCldMast-Media Metadata Type-57',
- 'CMzCldMastMedData-Data-58',
- 'zAsset-Bundle Scope-59',
- 'zGenAlbum-Creation Date-60',
- 'zGenAlbum-Start Date-61',
- 'zGenAlbum-End Date-62',
- 'zGenAlbum-Album Kind-63',
- 'zGenAlbum-Title-User&System Applied-64',
- 'zGenAlbum- Import Session ID-65',
- 'zGenAlbum-Imported by Bundle Identifier-66',
- 'zGenAlbum-Cached Photos Count-67',
- 'zGenAlbum-Cached Videos Count-68',
- 'zGenAlbum-Cached Count-69',
- 'zGenAlbum-Trashed State-70',
- 'zGenAlbum-Trash Date-71',
- 'zGenAlbum-UUID-72',
- 'zGenAlbum-Cloud GUID-73',
- 'zAsset-zPK-74',
- 'zAddAssetAttr-zPK-75',
- 'zAsset-UUID = store.cloudphotodb-76',
- 'zAddAssetAttr-Master Fingerprint-77')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite'
- ' basic asset and album data')
-
- db.close()
- return
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-Time Zone Offset-5',
+ 'zAddAssetAttr-EXIF-String-6',
+ ('zAsset-Modification Date-7', 'datetime'),
+ ('zAsset-Last Shared Date-8', 'datetime'),
+ 'zAsset-Directory-Path-9',
+ 'zAsset-Filename-10',
+ 'zAddAssetAttr- Original Filename-11',
+ 'zCldMast- Original Filename-12',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-13',
+ 'zAsset- Conversation= zGenAlbum_zPK-14',
+ 'SWYConverszGenAlbum- Import Session ID-15',
+ 'zAsset-Syndication State-16',
+ ('zAsset-Trashed Date-17', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-18',
+ 'zAsset-Saved Asset Type-19',
+ 'zAddAssetAttr-Imported by Bundle ID-20',
+ 'zAddAssetAttr-Imported By Display Name-21',
+ 'zAddAssetAttr-Imported by-22',
+ 'zCldMast-Imported by Bundle ID-23',
+ 'zCldMast-Imported by Display Name-24',
+ 'zCldMast-Imported By-25',
+ 'zAsset-Visibility State-26',
+ 'zExtAttr-Camera Make-27',
+ 'zExtAttr-Camera Model-28',
+ 'zExtAttr-Lens Model-29',
+ 'zAsset-Derived Camera Capture Device-30',
+ 'zAddAssetAttr-Camera Captured Device-31',
+ 'zAddAssetAttr-Share Type-32',
+ 'zCldMast-Cloud Local State-33',
+ ('zCldMast-Import Date-34', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-35', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-36',
+ ('zAddAssetAttr-Alt Import Image Date-37', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-38',
+ ('zAsset-Cloud Batch Publish Date-39', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-40', 'datetime'),
+ 'zAsset-Cloud Download Requests-41',
+ 'zAsset-Cloud Batch ID-42',
+ 'zAsset-Latitude-43',
+ 'zExtAttr-Latitude-44',
+ 'zAsset-Longitude-45',
+ 'zExtAttr-Longitude-46',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-47',
+ 'zAddAssetAttr-Location Hash-48',
+ 'zAddAssetAttr-Shifted Location Valid-49',
+ 'zAddAssetAttr-Shifted Location Data-50',
+ 'zAddAssetAttr-Reverse Location Is Valid-51',
+ 'zAddAssetAttr-Reverse Location Data-52',
+ 'AAAzCldMastMedData-zOPT-53',
+ 'zAddAssetAttr-Media Metadata Type-54',
+ 'AAAzCldMastMedData-Data-55',
+ 'CldMasterzCldMastMedData-zOPT-56',
+ 'zCldMast-Media Metadata Type-57',
+ 'CMzCldMastMedData-Data-58',
+ 'zAsset-Bundle Scope-59',
+ ('zGenAlbum-Creation Date-60', 'datetime'),
+ ('zGenAlbum-Start Date-61', 'datetime'),
+ ('zGenAlbum-End Date-62', 'datetime'),
+ 'zGenAlbum-Album Kind-63',
+ 'zGenAlbum-Title-User&System Applied-64',
+ 'zGenAlbum- Import Session ID-65',
+ 'zGenAlbum-Imported by Bundle Identifier-66',
+ 'zGenAlbum-Cached Photos Count-67',
+ 'zGenAlbum-Cached Videos Count-68',
+ 'zGenAlbum-Cached Count-69',
+ 'zGenAlbum-Trashed State-70',
+ ('zGenAlbum-Trash Date-71', 'datetime'),
+ 'zGenAlbum-UUID-72',
+ 'zGenAlbum-Cloud GUID-73',
+ 'zAsset-zPK-74',
+ 'zAddAssetAttr-zPK-75',
+ 'zAsset-UUID = store.cloudphotodb-76',
+ 'zAddAssetAttr-Master Fingerprint-77')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -4433,15 +4471,11 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr
CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION
ORDER BY zAsset.ZDATECREATED
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
@@ -4451,121 +4485,98 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr
row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
row[73], row[74], row[75], row[76], row[77], row[78], row[79]))
- counter += 1
-
- description = 'Parses basic asset record data from' \
- ' Syndication.photoslibrary-database-Photos.sqlite' \
- ' for basic asset and album data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 16.' \
- ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \
- ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \
- ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \
- ' Shared with You Conversation Identifiers Assets.'
- report = ArtifactHtmlReport('Ph2.2-Asset Basic Data & Convers Data-SyndPL')
- report.start_artifact_report(report_folder, 'Ph2.2-Asset Basic Data & Convers Data-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-Time Zone Offset-5',
- 'zAddAssetAttr-EXIF-String-6',
- 'zAsset-Modification Date-7',
- 'zAsset-Last Shared Date-8',
- 'zAsset-Directory-Path-9',
- 'zAsset-Filename-10',
- 'zAddAssetAttr- Original Filename-11',
- 'zCldMast- Original Filename-12',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-13',
- 'zAsset- Conversation= zGenAlbum_zPK-14',
- 'SWYConverszGenAlbum- Import Session ID-15',
- 'zAsset-Syndication State-16',
- 'zAsset-Trashed Date-17',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-18',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-19',
- 'zAsset-Saved Asset Type-20',
- 'zAddAssetAttr-Imported by Bundle ID-21',
- 'zAddAssetAttr-Imported By Display Name-22',
- 'zAddAssetAttr-Imported by-23',
- 'zCldMast-Imported by Bundle ID-24',
- 'zCldMast-Imported by Display Name-25',
- 'zCldMast-Imported By-26',
- 'zAsset-Visibility State-27',
- 'zExtAttr-Camera Make-28',
- 'zExtAttr-Camera Model-29',
- 'zExtAttr-Lens Model-30',
- 'zAsset-Derived Camera Capture Device-31',
- 'zAddAssetAttr-Camera Captured Device-32',
- 'zAddAssetAttr-Share Type-33',
- 'zCldMast-Cloud Local State-34',
- 'zCldMast-Import Date-35',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-36',
- 'zAddAssetAttr-Import Session ID-37',
- 'zAddAssetAttr-Alt Import Image Date-38',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-39',
- 'zAsset-Cloud Batch Publish Date-40',
- 'zAsset-Cloud Server Publish Date-41',
- 'zAsset-Cloud Download Requests-42',
- 'zAsset-Cloud Batch ID-43',
- 'zAsset-Latitude-44',
- 'zExtAttr-Latitude-45',
- 'zAsset-Longitude-46',
- 'zExtAttr-Longitude-47',
- 'zAddAssetAttr-GPS Horizontal Accuracy-48',
- 'zAddAssetAttr-Location Hash-49',
- 'zAddAssetAttr-Shifted Location Valid-50',
- 'zAddAssetAttr-Shifted Location Data-51',
- 'zAddAssetAttr-Reverse Location Is Valid-52',
- 'zAddAssetAttr-Reverse Location Data-53',
- 'AAAzCldMastMedData-zOPT-54',
- 'zAddAssetAttr-Media Metadata Type-55',
- 'AAAzCldMastMedData-Data-56',
- 'CldMasterzCldMastMedData-zOPT-57',
- 'zCldMast-Media Metadata Type-58',
- 'CMzCldMastMedData-Data-59',
- 'zAsset-Bundle Scope-60',
- 'zGenAlbum-Creation Date-61',
- 'zGenAlbum-Start Date-62',
- 'zGenAlbum-End Date-63',
- 'zGenAlbum-Album Kind-64',
- 'zGenAlbum-Title-User&System Applied-65',
- 'zGenAlbum- Import Session ID-66',
- 'zGenAlbum-Imported by Bundle Identifier-67',
- 'zGenAlbum-Cached Photos Count-68',
- 'zGenAlbum-Cached Videos Count-69',
- 'zGenAlbum-Cached Count-70',
- 'zGenAlbum-Trashed State-71',
- 'zGenAlbum-Trash Date-72',
- 'zGenAlbum-UUID-73',
- 'zGenAlbum-Cloud GUID-74',
- 'zAsset-Active Library Scope Participation State-75',
- 'zAsset-zPK-76',
- 'zAddAssetAttr-zPK-77',
- 'zAsset-UUID = store.cloudphotodb-78',
- 'zAddAssetAttr-Master Fingerprint-79')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite'
- ' basic asset and album data')
-
- db.close()
- return
-
- elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-Time Zone Offset-5',
+ 'zAddAssetAttr-EXIF-String-6',
+ ('zAsset-Modification Date-7', 'datetime'),
+ ('zAsset-Last Shared Date-8', 'datetime'),
+ 'zAsset-Directory-Path-9',
+ 'zAsset-Filename-10',
+ 'zAddAssetAttr- Original Filename-11',
+ 'zCldMast- Original Filename-12',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-13',
+ 'zAsset- Conversation= zGenAlbum_zPK-14',
+ 'SWYConverszGenAlbum- Import Session ID-15',
+ 'zAsset-Syndication State-16',
+ ('zAsset-Trashed Date-17', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-18',
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-19',
+ 'zAsset-Saved Asset Type-20',
+ 'zAddAssetAttr-Imported by Bundle ID-21',
+ 'zAddAssetAttr-Imported By Display Name-22',
+ 'zAddAssetAttr-Imported by-23',
+ 'zCldMast-Imported by Bundle ID-24',
+ 'zCldMast-Imported by Display Name-25',
+ 'zCldMast-Imported By-26',
+ 'zAsset-Visibility State-27',
+ 'zExtAttr-Camera Make-28',
+ 'zExtAttr-Camera Model-29',
+ 'zExtAttr-Lens Model-30',
+ 'zAsset-Derived Camera Capture Device-31',
+ 'zAddAssetAttr-Camera Captured Device-32',
+ 'zAddAssetAttr-Share Type-33',
+ 'zCldMast-Cloud Local State-34',
+ ('zCldMast-Import Date-35', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-36', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-37',
+ ('zAddAssetAttr-Alt Import Image Date-38', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-39',
+ ('zAsset-Cloud Batch Publish Date-40', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-41', 'datetime'),
+ ('zAsset-Cloud Download Requests-42', 'datetime'),
+ 'zAsset-Cloud Batch ID-43',
+ 'zAsset-Latitude-44',
+ 'zExtAttr-Latitude-45',
+ 'zAsset-Longitude-46',
+ 'zExtAttr-Longitude-47',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-48',
+ 'zAddAssetAttr-Location Hash-49',
+ 'zAddAssetAttr-Shifted Location Valid-50',
+ 'zAddAssetAttr-Shifted Location Data-51',
+ 'zAddAssetAttr-Reverse Location Is Valid-52',
+ 'zAddAssetAttr-Reverse Location Data-53',
+ 'AAAzCldMastMedData-zOPT-54',
+ 'zAddAssetAttr-Media Metadata Type-55',
+ 'AAAzCldMastMedData-Data-56',
+ 'CldMasterzCldMastMedData-zOPT-57',
+ 'zCldMast-Media Metadata Type-58',
+ 'CMzCldMastMedData-Data-59',
+ 'zAsset-Bundle Scope-60',
+ ('zGenAlbum-Creation Date-61', 'datetime'),
+ ('zGenAlbum-Start Date-62', 'datetime'),
+ ('zGenAlbum-End Date-63', 'datetime'),
+ 'zGenAlbum-Album Kind-64',
+ 'zGenAlbum-Title-User&System Applied-65',
+ 'zGenAlbum- Import Session ID-66',
+ 'zGenAlbum-Imported by Bundle Identifier-67',
+ 'zGenAlbum-Cached Photos Count-68',
+ 'zGenAlbum-Cached Videos Count-69',
+ 'zGenAlbum-Cached Count-70',
+ 'zGenAlbum-Trashed State-71',
+ ('zGenAlbum-Trash Date-72', 'datetime'),
+ 'zGenAlbum-UUID-73',
+ 'zGenAlbum-Cloud GUID-74',
+ 'zAsset-Active Library Scope Participation State-75',
+ 'zAsset-zPK-76',
+ 'zAddAssetAttr-zPK-77',
+ 'zAsset-UUID = store.cloudphotodb-78',
+ 'zAddAssetAttr-Master Fingerprint-79')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
+ elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("17.6")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -4810,15 +4821,11 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr
CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION
ORDER BY zAsset.ZDATECREATED
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
@@ -4828,122 +4835,450 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr
row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80]))
- counter += 1
-
- description = 'Parses basic asset record data from' \
- ' Syndication.photoslibrary-database-Photos.sqlite' \
- ' for basic asset and album data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 17.' \
- ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \
- ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \
- ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \
- ' Shared with You Conversation Identifiers Assets.'
- report = ArtifactHtmlReport('Ph2.2-Asset Basic Data & Convers Data-SyndPL')
- report.start_artifact_report(report_folder, 'Ph2.2-Asset Basic Data & Convers Data-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-Time Zone Offset-5',
- 'zAddAssetAttr-EXIF-String-6',
- 'zAsset-Modification Date-7',
- 'zAsset-Last Shared Date-8',
- 'zAddAssetAttr-Last Viewed Date-9',
- 'zAsset-Directory-Path-10',
- 'zAsset-Filename-11',
- 'zAddAssetAttr- Original Filename-12',
- 'zCldMast- Original Filename-13',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-14',
- 'zAsset- Conversation= zGenAlbum_zPK-15',
- 'SWYConverszGenAlbum- Import Session ID-16',
- 'zAsset-Syndication State-17',
- 'zAsset-Trashed Date-18',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-19',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-20',
- 'zAsset-Saved Asset Type-21',
- 'zAddAssetAttr-Imported by Bundle ID-22',
- 'zAddAssetAttr-Imported By Display Name-23',
- 'zAddAssetAttr-Imported by-24',
- 'zCldMast-Imported by Bundle ID-25',
- 'zCldMast-Imported by Display Name-26',
- 'zCldMast-Imported By-27',
- 'zAsset-Visibility State-28',
- 'zExtAttr-Camera Make-29',
- 'zExtAttr-Camera Model-30',
- 'zExtAttr-Lens Model-31',
- 'zAsset-Derived Camera Capture Device-32',
- 'zAddAssetAttr-Camera Captured Device-33',
- 'zAddAssetAttr-Share Type-34',
- 'zCldMast-Cloud Local State-35',
- 'zCldMast-Import Date-36',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-37',
- 'zAddAssetAttr-Import Session ID-38',
- 'zAddAssetAttr-Alt Import Image Date-39',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-40',
- 'zAsset-Cloud Batch Publish Date-41',
- 'zAsset-Cloud Server Publish Date-42',
- 'zAsset-Cloud Download Requests-43',
- 'zAsset-Cloud Batch ID-44',
- 'zAsset-Latitude-45',
- 'zExtAttr-Latitude-46',
- 'zAsset-Longitude-47',
- 'zExtAttr-Longitude-48',
- 'zAddAssetAttr-GPS Horizontal Accuracy-49',
- 'zAddAssetAttr-Location Hash-50',
- 'zAddAssetAttr-Shifted Location Valid-51',
- 'zAddAssetAttr-Shifted Location Data-52',
- 'zAddAssetAttr-Reverse Location Is Valid-53',
- 'zAddAssetAttr-Reverse Location Data-54',
- 'AAAzCldMastMedData-zOPT-55',
- 'zAddAssetAttr-Media Metadata Type-56',
- 'AAAzCldMastMedData-Data-57',
- 'CldMasterzCldMastMedData-zOPT-58',
- 'zCldMast-Media Metadata Type-59',
- 'CMzCldMastMedData-Data-60',
- 'zAsset-Bundle Scope-61',
- 'zGenAlbum-Creation Date-62',
- 'zGenAlbum-Start Date-63',
- 'zGenAlbum-End Date-64',
- 'zGenAlbum-Album Kind-65',
- 'zGenAlbum-Title-User&System Applied-66',
- 'zGenAlbum- Import Session ID-67',
- 'zGenAlbum-Imported by Bundle Identifier-68',
- 'zGenAlbum-Cached Photos Count-69',
- 'zGenAlbum-Cached Videos Count-70',
- 'zGenAlbum-Cached Count-71',
- 'zGenAlbum-Trashed State-72',
- 'zGenAlbum-Trash Date-73',
- 'zGenAlbum-UUID-74',
- 'zGenAlbum-Cloud GUID-75',
- 'zAsset-Active Library Scope Participation State-76',
- 'zAsset-zPK-77',
- 'zAddAssetAttr-zPK-78',
- 'zAsset-UUID = store.cloudphotodb-79',
- 'zAddAssetAttr-Master Fingerprint-80')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-Time Zone Offset-5',
+ 'zAddAssetAttr-EXIF-String-6',
+ ('zAsset-Modification Date-7', 'datetime'),
+ ('zAsset-Last Shared Date-8', 'datetime'),
+ ('zAddAssetAttr-Last Viewed Date-9', 'datetime'),
+ 'zAsset-Directory-Path-10',
+ 'zAsset-Filename-11',
+ 'zAddAssetAttr- Original Filename-12',
+ 'zCldMast- Original Filename-13',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-14',
+ 'zAsset- Conversation= zGenAlbum_zPK-15',
+ 'SWYConverszGenAlbum- Import Session ID-16',
+ 'zAsset-Syndication State-17',
+ ('zAsset-Trashed Date-18', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-19',
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-20',
+ 'zAsset-Saved Asset Type-21',
+ 'zAddAssetAttr-Imported by Bundle ID-22',
+ 'zAddAssetAttr-Imported By Display Name-23',
+ 'zAddAssetAttr-Imported by-24',
+ 'zCldMast-Imported by Bundle ID-25',
+ 'zCldMast-Imported by Display Name-26',
+ 'zCldMast-Imported By-27',
+ 'zAsset-Visibility State-28',
+ 'zExtAttr-Camera Make-29',
+ 'zExtAttr-Camera Model-30',
+ 'zExtAttr-Lens Model-31',
+ 'zAsset-Derived Camera Capture Device-32',
+ 'zAddAssetAttr-Camera Captured Device-33',
+ 'zAddAssetAttr-Share Type-34',
+ 'zCldMast-Cloud Local State-35',
+ ('zCldMast-Import Date-36', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-37', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-38',
+ ('zAddAssetAttr-Alt Import Image Date-39', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-40',
+ ('zAsset-Cloud Batch Publish Date-41', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-42', 'datetime'),
+ 'zAsset-Cloud Download Requests-43',
+ 'zAsset-Cloud Batch ID-44',
+ 'zAsset-Latitude-45',
+ 'zExtAttr-Latitude-46',
+ 'zAsset-Longitude-47',
+ 'zExtAttr-Longitude-48',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-49',
+ 'zAddAssetAttr-Location Hash-50',
+ 'zAddAssetAttr-Shifted Location Valid-51',
+ 'zAddAssetAttr-Shifted Location Data-52',
+ 'zAddAssetAttr-Reverse Location Is Valid-53',
+ 'zAddAssetAttr-Reverse Location Data-54',
+ 'AAAzCldMastMedData-zOPT-55',
+ 'zAddAssetAttr-Media Metadata Type-56',
+ 'AAAzCldMastMedData-Data-57',
+ 'CldMasterzCldMastMedData-zOPT-58',
+ 'zCldMast-Media Metadata Type-59',
+ 'CMzCldMastMedData-Data-60',
+ 'zAsset-Bundle Scope-61',
+ ('zGenAlbum-Creation Date-62', 'datetime'),
+ ('zGenAlbum-Start Date-63', 'datetime'),
+ ('zGenAlbum-End Date-64', 'datetime'),
+ 'zGenAlbum-Album Kind-65',
+ 'zGenAlbum-Title-User&System Applied-66',
+ 'zGenAlbum- Import Session ID-67',
+ 'zGenAlbum-Imported by Bundle Identifier-68',
+ 'zGenAlbum-Cached Photos Count-69',
+ 'zGenAlbum-Cached Videos Count-70',
+ 'zGenAlbum-Cached Count-71',
+ 'zGenAlbum-Trashed State-72',
+ ('zGenAlbum-Trash Date-73', 'datetime'),
+ 'zGenAlbum-UUID-74',
+ 'zGenAlbum-Cloud GUID-75',
+ 'zAsset-Active Library Scope Participation State-76',
+ 'zAsset-zPK-77',
+ 'zAddAssetAttr-zPK-78',
+ 'zAsset-UUID = store.cloudphotodb-79',
+ 'zAddAssetAttr-Master Fingerprint-80')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
+ elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- tlactivity = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ query = '''
+ SELECT
+ DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
+ DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
+ DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date',
+ DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date',
+ zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name',
+ zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset',
+ zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String',
+ DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
+ DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date',
+ DateTime(zAddAssetAttr.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Viewed Date',
+ zAsset.ZDIRECTORY AS 'zAsset-Directory-Path',
+ zAsset.ZFILENAME AS 'zAsset-Filename',
+ zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename',
+ zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename',
+ zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files',
+ zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK ',
+ SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID',
+ CASE zAsset.ZSYNDICATIONSTATE
+ WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0'
+ WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1'
+ WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2'
+ WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3'
+ WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8'
+ WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9'
+ WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || ''
+ END AS 'zAsset-Syndication State',
+ DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
+ CASE zAsset.ZTRASHEDSTATE
+ WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0'
+ WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || ''
+ END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
+ zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK',
+ CASE zAsset.ZSAVEDASSETTYPE
+ WHEN 0 THEN '0-Saved-via-other-source-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ WHEN 2 THEN '2-StillTesting-2'
+ WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3'
+ WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4'
+ WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5'
+ WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6'
+ WHEN 7 THEN '7-StillTesting-7'
+ WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8'
+ WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || ''
+ END AS 'zAsset-Saved Asset Type',
+ zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr-Imported by Bundle ID',
+ zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name',
+ CASE zAddAssetAttr.ZIMPORTEDBY
+ WHEN 0 THEN '0-Cloud-Other-0'
+ WHEN 1 THEN '1-Native-Back-Camera-1'
+ WHEN 2 THEN '2-Native-Front-Camera-2'
+ WHEN 3 THEN '3-Third-Party-App-3'
+ WHEN 4 THEN '4-StillTesting-4'
+ WHEN 5 THEN '5-PhotoBooth_PL-Asset-5'
+ WHEN 6 THEN '6-Third-Party-App-6'
+ WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7'
+ WHEN 8 THEN '8-System-Package-App-8'
+ WHEN 9 THEN '9-Native-App-9'
+ WHEN 10 THEN '10-StillTesting-10'
+ WHEN 11 THEN '11-StillTesting-11'
+ WHEN 12 THEN '12-SWY_Syndication_PL-12'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || ''
+ END AS 'zAddAssetAttr-Imported by',
+ zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID',
+ zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name',
+ CASE zCldMast.ZIMPORTEDBY
+ WHEN 0 THEN '0-Cloud-Other-0'
+ WHEN 1 THEN '1-Native-Back-Camera-1'
+ WHEN 2 THEN '2-Native-Front-Camera-2'
+ WHEN 3 THEN '3-Third-Party-App-3'
+ WHEN 4 THEN '4-StillTesting-4'
+ WHEN 5 THEN '5-PhotoBooth_PL-Asset-5'
+ WHEN 6 THEN '6-Third-Party-App-6'
+ WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7'
+ WHEN 8 THEN '8-System-Package-App-8'
+ WHEN 9 THEN '9-Native-App-9'
+ WHEN 10 THEN '10-StillTesting-10'
+ WHEN 11 THEN '11-StillTesting-11'
+ WHEN 12 THEN '12-SWY_Syndication_PL-12'
+ ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || ''
+ END AS 'zCldMast-Imported By',
+ CASE zAsset.ZVISIBILITYSTATE
+ WHEN 0 THEN '0-Visible-PL-CameraRoll-0'
+ WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || ''
+ END AS 'zAsset-Visibility State',
+ zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make',
+ zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model',
+ zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model',
+ CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE
+ WHEN 0 THEN '0-Back-Camera-Other-0'
+ WHEN 1 THEN '1-Front-Camera-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZDERIVEDCAMERACAPTUREDEVICE || ''
+ END AS 'zAsset-Derived Camera Capture Device',
+ CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE
+ WHEN 0 THEN '0-Back-Camera-Other-0'
+ WHEN 1 THEN '1-Front-Camera-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || ''
+ END AS 'zAddAssetAttr-Camera Captured Device',
+ CASE zAddAssetAttr.ZSHARETYPE
+ WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0'
+ WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || ''
+ END AS 'zAddAssetAttr-Share Type',
+ CASE zCldMast.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-Not Synced with Cloud-0'
+ WHEN 1 THEN '1-Pending Upload-1'
+ WHEN 2 THEN '2-StillTesting'
+ WHEN 3 THEN '3-Synced with Cloud-3'
+ ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || ''
+ END AS 'zCldMast-Cloud Local State',
+ DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date',
+ DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH')
+ AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files',
+ zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID',
+ DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH')
+ AS 'zAddAssetAttr-Alt Import Image Date',
+ zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting',
+ DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date',
+ DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date',
+ zAsset.ZCLOUDDOWNLOADREQUESTS AS 'zAsset-Cloud Download Requests',
+ zAsset.ZCLOUDBATCHID AS 'zAsset-Cloud Batch ID',
+ CASE zAsset.ZLATITUDE
+ WHEN -180.0 THEN '-180.0'
+ ELSE zAsset.ZLATITUDE
+ END AS 'zAsset-Latitude',
+ zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude',
+ CASE zAsset.ZLONGITUDE
+ WHEN -180.0 THEN '-180.0'
+ ELSE zAsset.ZLONGITUDE
+ END AS 'zAsset-Longitude',
+ zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude',
+ CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY
+ WHEN -1.0 THEN '-1.0'
+ ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY
+ END AS 'zAddAssetAttr-GPS Horizontal Accuracy',
+ zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash',
+ CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID
+ WHEN 0 THEN '0-Shifted Location Not Valid-0'
+ WHEN 1 THEN '1-Shifted Location Valid-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || ''
+ END AS 'zAddAssetAttr-Shifted Location Valid',
+ CASE
+ WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist'
+ ELSE 'zAddAssetArrt-Shifted_Location_Data_Empty-NULL'
+ END AS 'zAddAssetAttr-Shifted Location Data',
+ CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID
+ WHEN 0 THEN '0-Reverse Location Not Valid-0'
+ WHEN 1 THEN '1-Reverse Location Valid-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || ''
+ END AS 'zAddAssetAttr-Reverse Location Is Valid',
+ CASE
+ WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist'
+ ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL'
+ END AS 'zAddAssetAttr-Reverse Location Data',
+ CASE AAAzCldMastMedData.Z_OPT
+ WHEN 1 THEN '1-StillTesting-Cloud-1'
+ WHEN 2 THEN '2-StillTesting-This Device-2'
+ WHEN 3 THEN '3-StillTesting-Muted-3'
+ WHEN 4 THEN '4-StillTesting-Unknown-4'
+ WHEN 5 THEN '5-StillTesting-Unknown-5'
+ ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || ''
+ END AS 'AAAzCldMastMedData-zOPT',
+ zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type',
+ CASE
+ WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist'
+ ELSE 'AAAzCldMastMedData-Data_Empty-NULL'
+ END AS 'AAAzCldMastMedData-Data',
+ CASE CMzCldMastMedData.Z_OPT
+ WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1'
+ WHEN 2 THEN '2-StillTesting-Local_Asset-2'
+ WHEN 3 THEN '3-StillTesting-Muted-3'
+ WHEN 4 THEN '4-StillTesting-Unknown-4'
+ WHEN 5 THEN '5-StillTesting-Unknown-5'
+ ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || ''
+ END AS 'CldMasterzCldMastMedData-zOPT',
+ zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type',
+ CASE
+ WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist'
+ ELSE 'CMzCldMastMedData-Data_Empty-NULL'
+ END AS 'CMzCldMastMedData-Data',
+ CASE zAsset.ZBUNDLESCOPE
+ WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0'
+ WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1'
+ WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2'
+ WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || ''
+ END AS 'zAsset-Bundle Scope',
+ DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date',
+ DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
+ DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date',
+ CASE zGenAlbum.ZKIND
+ WHEN 2 THEN '2-Non-Shared-Album-2'
+ WHEN 1505 THEN '1505-Shared-Album-1505'
+ WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT'
+ WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT'
+ WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509'
+ WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510'
+ WHEN 3571 THEN '3571-Progress-Sync-3571'
+ WHEN 3572 THEN '3572-Progress-OTA-Restore-3572'
+ WHEN 3573 THEN '3573-Progress-FS-Import-3573'
+ WHEN 3998 THEN '3998-Project Root Folder-3998'
+ WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999'
+ WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || ''
+ END AS 'zGenAlbum-Album Kind',
+ zGenAlbum.ZTITLE AS 'zGenAlbum-Title-User&System Applied',
+ zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum- Import Session ID',
+ zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier',
+ zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum-Cached Photos Count',
+ zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum-Cached Videos Count',
+ zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum-Cached Count',
+ CASE zGenAlbum.ZTRASHEDSTATE
+ WHEN 0 THEN 'zGenAlbum Not In Trash-0'
+ WHEN 1 THEN 'zGenAlbum Album In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZTRASHEDSTATE || ''
+ END AS 'zGenAlbum-Trashed State',
+ DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date',
+ zGenAlbum.ZUUID AS 'zGenAlbum-UUID',
+ zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID',
+ CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE
+ WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0'
+ WHEN 1 THEN '1-Asset-In-Active-SPL-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || ''
+ END AS 'zAsset-Active Library Scope Participation State',
+ zAsset.Z_PK AS 'zAsset-zPK',
+ zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
+ zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
+ zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint'
+ FROM ZASSET zAsset
+ LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
+ LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES
+ LEFT JOIN Z_29ASSETS z29Assets ON z29Assets.Z_3ASSETS = zAsset.Z_PK
+ LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z29Assets.Z_29ALBUMS
+ LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
+ LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON
+ AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA
+ LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON
+ CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
+ LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION
+ ORDER BY zAsset.ZDATECREATED
+ '''
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite'
- ' basic asset and album data')
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80]))
- db.close()
- return
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-Time Zone Offset-5',
+ 'zAddAssetAttr-EXIF-String-6',
+ ('zAsset-Modification Date-7', 'datetime'),
+ ('zAsset-Last Shared Date-8', 'datetime'),
+ ('zAddAssetAttr-Last Viewed Date-9', 'datetime'),
+ 'zAsset-Directory-Path-10',
+ 'zAsset-Filename-11',
+ 'zAddAssetAttr- Original Filename-12',
+ 'zCldMast- Original Filename-13',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-14',
+ 'zAsset- Conversation= zGenAlbum_zPK-15',
+ 'SWYConverszGenAlbum- Import Session ID-16',
+ 'zAsset-Syndication State-17',
+ ('zAsset-Trashed Date-18', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-19',
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-20',
+ 'zAsset-Saved Asset Type-21',
+ 'zAddAssetAttr-Imported by Bundle ID-22',
+ 'zAddAssetAttr-Imported By Display Name-23',
+ 'zAddAssetAttr-Imported by-24',
+ 'zCldMast-Imported by Bundle ID-25',
+ 'zCldMast-Imported by Display Name-26',
+ 'zCldMast-Imported By-27',
+ 'zAsset-Visibility State-28',
+ 'zExtAttr-Camera Make-29',
+ 'zExtAttr-Camera Model-30',
+ 'zExtAttr-Lens Model-31',
+ 'zAsset-Derived Camera Capture Device-32',
+ 'zAddAssetAttr-Camera Captured Device-33',
+ 'zAddAssetAttr-Share Type-34',
+ 'zCldMast-Cloud Local State-35',
+ ('zCldMast-Import Date-36', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-37', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-38',
+ ('zAddAssetAttr-Alt Import Image Date-39', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-40',
+ ('zAsset-Cloud Batch Publish Date-41', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-42', 'datetime'),
+ 'zAsset-Cloud Download Requests-43',
+ 'zAsset-Cloud Batch ID-44',
+ 'zAsset-Latitude-45',
+ 'zExtAttr-Latitude-46',
+ 'zAsset-Longitude-47',
+ 'zExtAttr-Longitude-48',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-49',
+ 'zAddAssetAttr-Location Hash-50',
+ 'zAddAssetAttr-Shifted Location Valid-51',
+ 'zAddAssetAttr-Shifted Location Data-52',
+ 'zAddAssetAttr-Reverse Location Is Valid-53',
+ 'zAddAssetAttr-Reverse Location Data-54',
+ 'AAAzCldMastMedData-zOPT-55',
+ 'zAddAssetAttr-Media Metadata Type-56',
+ 'AAAzCldMastMedData-Data-57',
+ 'CldMasterzCldMastMedData-zOPT-58',
+ 'zCldMast-Media Metadata Type-59',
+ 'CMzCldMastMedData-Data-60',
+ 'zAsset-Bundle Scope-61',
+ ('zGenAlbum-Creation Date-62', 'datetime'),
+ ('zGenAlbum-Start Date-63', 'datetime'),
+ ('zGenAlbum-End Date-64', 'datetime'),
+ 'zGenAlbum-Album Kind-65',
+ 'zGenAlbum-Title-User&System Applied-66',
+ 'zGenAlbum- Import Session ID-67',
+ 'zGenAlbum-Imported by Bundle Identifier-68',
+ 'zGenAlbum-Cached Photos Count-69',
+ 'zGenAlbum-Cached Videos Count-70',
+ 'zGenAlbum-Cached Count-71',
+ 'zGenAlbum-Trashed State-72',
+ ('zGenAlbum-Trash Date-73', 'datetime'),
+ 'zGenAlbum-UUID-74',
+ 'zGenAlbum-Cloud GUID-75',
+ 'zAsset-Active Library Scope Participation State-76',
+ 'zAsset-zPK-77',
+ 'zAddAssetAttr-zPK-78',
+ 'zAsset-UUID = store.cloudphotodb-79',
+ 'zAddAssetAttr-Master Fingerprint-80')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -4980,10 +5315,10 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr
END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK',
CASE zAsset.ZISRECENTLYSAVED
- WHEN 0 THEN '0-Not_Recenlty_Saved iOS18_Still_Testing-0'
- WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1'
+ WHEN 0 THEN '0-Not_Recenlty_Saved_Still_Testing-0'
+ WHEN 1 THEN '1-Recently_Saved_Still_Testing-1'
ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || ''
- END AS 'zAsset-Is_Recently_Saved-iOS18',
+ END AS 'zAsset-Is_Recently_Saved',
CASE zAsset.ZSAVEDASSETTYPE
WHEN 0 THEN '0-Saved-via-other-source-0'
WHEN 1 THEN '1-StillTesting-1'
@@ -5051,7 +5386,7 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr
WHEN 1 THEN '1-Front-Camera-1'
ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || ''
END AS 'zAddAssetAttr-Camera Captured Device',
- zAsset.ZCAPTURESESSIONIDENTIFIER AS 'zAsset-Capture_Session_Identifier-iOS18',
+ zAsset.ZCAPTURESESSIONIDENTIFIER AS 'zAsset-Capture_Session_Identifier',
CASE zAddAssetAttr.ZSHARETYPE
WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0'
WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1'
@@ -5181,13 +5516,13 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr
zAsset.Z_PK AS 'zAsset-zPK',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18'
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash'
FROM ZASSET zAsset
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES
- LEFT JOIN Z_31ASSETS z31Assets ON z31Assets.Z_3ASSETS = zAsset.Z_PK
- LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z31Assets.Z_31ALBUMS
+ LEFT JOIN Z_30ASSETS z30Assets ON z30Assets.Z_3ASSETS = zAsset.Z_PK
+ LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z30Assets.Z_30ALBUMS
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON
AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA
@@ -5195,15 +5530,11 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr
CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION
ORDER BY zAsset.ZDATECREATED
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
@@ -5214,154 +5545,90 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr
row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
row[82], row[83]))
- counter += 1
-
- description = 'Parses basic asset record data from' \
- ' Syndication.photoslibrary-database-Photos.sqlite' \
- ' for basic asset and album data. The results may contain multiple records' \
- ' per ZASSET table Z_PK value and supports iOS 18.' \
- ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \
- ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \
- ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \
- ' Shared with You Conversation Identifiers Assets.'
- report = ArtifactHtmlReport('Ph2.2-Asset Basic Data & Convers Data-SyndPL')
- report.start_artifact_report(report_folder, 'Ph2.2-Asset Basic Data & Convers Data-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset-Added Date-2',
- 'zCldMast-Creation Date-3',
- 'zAddAssetAttr-Time Zone Name-4',
- 'zAddAssetAttr-Time Zone Offset-5',
- 'zAddAssetAttr-EXIF-String-6',
- 'zAsset-Modification Date-7',
- 'zAsset-Last Shared Date-8',
- 'zAddAssetAttr-Last Viewed Date-9',
- 'zAsset-Directory-Path-10',
- 'zAsset-Filename-11',
- 'zAddAssetAttr- Original Filename-12',
- 'zCldMast- Original Filename-13',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-14',
- 'zAsset- Conversation= zGenAlbum_zPK-15',
- 'SWYConverszGenAlbum- Import Session ID-16',
- 'zAsset-Syndication State-17',
- 'zAsset-Trashed Date-18',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-19',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-20',
- 'zAsset-Is_Recently_Saved-iOS18-21',
- 'zAsset-Saved Asset Type-22',
- 'zAddAssetAttr-Imported by Bundle ID-23',
- 'zAddAssetAttr-Imported By Display Name-24',
- 'zAddAssetAttr-Imported by-25',
- 'zCldMast-Imported by Bundle ID-26',
- 'zCldMast-Imported by Display Name-27',
- 'zCldMast-Imported By-28',
- 'zAsset-Visibility State-29',
- 'zExtAttr-Camera Make-30',
- 'zExtAttr-Camera Model-31',
- 'zExtAttr-Lens Model-32',
- 'zAsset-Derived Camera Capture Device-33',
- 'zAddAssetAttr-Camera Captured Device-34',
- 'zAsset-Capture_Session_Identifier-iOS18-35',
- 'zAddAssetAttr-Share Type-36',
- 'zCldMast-Cloud Local State-37',
- 'zCldMast-Import Date-38',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-39',
- 'zAddAssetAttr-Import Session ID-40',
- 'zAddAssetAttr-Alt Import Image Date-41',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-42',
- 'zAsset-Cloud Batch Publish Date-43',
- 'zAsset-Cloud Server Publish Date-44',
- 'zAsset-Cloud Download Requests-45',
- 'zAsset-Cloud Batch ID-46',
- 'zAsset-Latitude-47',
- 'zExtAttr-Latitude-48',
- 'zAsset-Longitude-49',
- 'zExtAttr-Longitude-50',
- 'zAddAssetAttr-GPS Horizontal Accuracy-51',
- 'zAddAssetAttr-Location Hash-52',
- 'zAddAssetAttr-Shifted Location Valid-53',
- 'zAddAssetAttr-Shifted Location Data-54',
- 'zAddAssetAttr-Reverse Location Is Valid-55',
- 'zAddAssetAttr-Reverse Location Data-56',
- 'AAAzCldMastMedData-zOPT-57',
- 'zAddAssetAttr-Media Metadata Type-58',
- 'AAAzCldMastMedData-Data-59',
- 'CldMasterzCldMastMedData-zOPT-60',
- 'zCldMast-Media Metadata Type-61',
- 'CMzCldMastMedData-Data-62',
- 'zAsset-Bundle Scope-63',
- 'zGenAlbum-Creation Date-64',
- 'zGenAlbum-Start Date-65',
- 'zGenAlbum-End Date-66',
- 'zGenAlbum-Album Kind-67',
- 'zGenAlbum-Title-User&System Applied-68',
- 'zGenAlbum- Import Session ID-69',
- 'zGenAlbum-Imported by Bundle Identifier-70',
- 'zGenAlbum-Cached Photos Count-71',
- 'zGenAlbum-Cached Videos Count-72',
- 'zGenAlbum-Cached Count-73',
- 'zGenAlbum-Trashed State-74',
- 'zGenAlbum-Trash Date-75',
- 'zGenAlbum-UUID-76',
- 'zGenAlbum-Cloud GUID-77',
- 'zAsset-Active Library Scope Participation State-78',
- 'zAsset-zPK-79',
- 'zAddAssetAttr-zPK-80',
- 'zAsset-UUID = store.cloudphotodb-81',
- 'zAddAssetAttr-Original Stable Hash-iOS18-82',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-83')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite'
- ' basic asset and album data')
-
- db.close()
- return
-
-
-__artifacts_v2__ = {
- 'Ph2-1-Asset Basic & GenAlbum Data-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite 2.1 Asset Basic & Generic Album Data',
- 'description': 'Parses basic asset record data from PhotoData-Photos.sqlite for basic asset and album data.'
- ' The results may contain multiple records per ZASSET table Z_PK value and supports iOS 11-18.'
- ' Use 2-Non-Shared-Album-2 in the search box to view Non-Shared Albums Assets.'
- ' Use 1505-Shared-Album-1505 in the search box to view Shared Albums Assets.'
- ' Use 1509-SWY_Synced_Conversation_Media-1509 in the search box to view'
- ' Shared with You Conversation Identifiers Assets.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-12',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-A-Asset_Basic_Data',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph2assetbasicandalbumdataphdapsql'
- },
- 'Ph2-2-Asset Basic & Conversation Data-SyndPL': {
- 'name': 'SyndPL Photos.sqlite 2.2 Asset Basic and Conversation Data',
- 'description': 'Parses basic asset record data from -Syndication.photoslibrary-database-Photos.sqlite'
- ' for basic asset and album data. The results may contain multiple records'
- ' per ZASSET table Z_PK value and supports iOS 11-18.'
- ' Use -Non-Shared-Album-2 in the search box to view Non-Shared Albums Assets.'
- ' Use 1505-Shared-Album-1505 in the search box to view Shared Albums Assets.'
- ' Use 1509-SWY_Synced_Conversation_Media-1509 in the search box to view'
- ' Shared with You Conversation Identifiers Assets.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-12',
- 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite',
- 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts',
- 'notes': '',
- 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',
- 'function': 'get_ph2asserbasicandconversdatasyndpl'
- }
-}
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-1', 'datetime'),
+ ('zAsset-Added Date-2', 'datetime'),
+ ('zCldMast-Creation Date-3', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-4',
+ 'zAddAssetAttr-Time Zone Offset-5',
+ 'zAddAssetAttr-EXIF-String-6',
+ ('zAsset-Modification Date-7', 'datetime'),
+ ('zAsset-Last Shared Date-8', 'datetime'),
+ ('zAddAssetAttr-Last Viewed Date-9', 'datetime'),
+ 'zAsset-Directory-Path-10',
+ 'zAsset-Filename-11',
+ 'zAddAssetAttr- Original Filename-12',
+ 'zCldMast- Original Filename-13',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-14',
+ 'zAsset- Conversation= zGenAlbum_zPK-15',
+ 'SWYConverszGenAlbum- Import Session ID-16',
+ 'zAsset-Syndication State-17',
+ ('zAsset-Trashed Date-18', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-19',
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-20',
+ 'zAsset-Is_Recently_Saved-21',
+ 'zAsset-Saved Asset Type-22',
+ 'zAddAssetAttr-Imported by Bundle ID-23',
+ 'zAddAssetAttr-Imported By Display Name-24',
+ 'zAddAssetAttr-Imported by-25',
+ 'zCldMast-Imported by Bundle ID-26',
+ 'zCldMast-Imported by Display Name-27',
+ 'zCldMast-Imported By-28',
+ 'zAsset-Visibility State-29',
+ 'zExtAttr-Camera Make-30',
+ 'zExtAttr-Camera Model-31',
+ 'zExtAttr-Lens Model-32',
+ 'zAsset-Derived Camera Capture Device-33',
+ 'zAddAssetAttr-Camera Captured Device-34',
+ 'zAsset-Capture_Session_Identifier-35',
+ 'zAddAssetAttr-Share Type-36',
+ 'zCldMast-Cloud Local State-37',
+ ('zCldMast-Import Date-38', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-39', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-40',
+ ('zAddAssetAttr-Alt Import Image Date-41', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-42',
+ ('zAsset-Cloud Batch Publish Date-43', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-44', 'datetime'),
+ 'zAsset-Cloud Download Requests-45',
+ 'zAsset-Cloud Batch ID-46',
+ 'zAsset-Latitude-47',
+ 'zExtAttr-Latitude-48',
+ 'zAsset-Longitude-49',
+ 'zExtAttr-Longitude-50',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-51',
+ 'zAddAssetAttr-Location Hash-52',
+ 'zAddAssetAttr-Shifted Location Valid-53',
+ 'zAddAssetAttr-Shifted Location Data-54',
+ 'zAddAssetAttr-Reverse Location Is Valid-55',
+ 'zAddAssetAttr-Reverse Location Data-56',
+ 'AAAzCldMastMedData-zOPT-57',
+ 'zAddAssetAttr-Media Metadata Type-58',
+ 'AAAzCldMastMedData-Data-59',
+ 'CldMasterzCldMastMedData-zOPT-60',
+ 'zCldMast-Media Metadata Type-61',
+ 'CMzCldMastMedData-Data-62',
+ 'zAsset-Bundle Scope-63',
+ ('zGenAlbum-Creation Date-64', 'datetime'),
+ ('zGenAlbum-Start Date-65', 'datetime'),
+ ('zGenAlbum-End Date-66', 'datetime'),
+ 'zGenAlbum-Album Kind-67',
+ 'zGenAlbum-Title-User&System Applied-68',
+ 'zGenAlbum- Import Session ID-69',
+ 'zGenAlbum-Imported by Bundle Identifier-70',
+ 'zGenAlbum-Cached Photos Count-71',
+ 'zGenAlbum-Cached Videos Count-72',
+ 'zGenAlbum-Cached Count-73',
+ 'zGenAlbum-Trashed State-74',
+ ('zGenAlbum-Trash Date-75', 'datetime'),
+ 'zGenAlbum-UUID-76',
+ 'zGenAlbum-Cloud GUID-77',
+ 'zAsset-Active Library Scope Participation State-78',
+ 'zAsset-zPK-79',
+ 'zAddAssetAttr-zPK-80',
+ 'zAsset-UUID = store.cloudphotodb-81',
+ 'zAddAssetAttr-Original Stable Hash-82',
+ 'zAddAssetAttr.Adjusted Stable Hash-83')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph30iCloudShareMethodsNAD.py b/scripts/artifacts/Ph30iCloudShareMethodsNAD.py
index cfaf3c04..b43d93ef 100644
--- a/scripts/artifacts/Ph30iCloudShareMethodsNAD.py
+++ b/scripts/artifacts/Ph30iCloudShareMethodsNAD.py
@@ -1,42 +1,50 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 2.0
-#
-# Description:
-# Parses records for different methods which media files have been shared via iCloud Share
-# found in the PhotoData-Photos.sqlite ZSHARE Table and supports iOS 14-18. Parses iCloud Share Methods and
-# Participant records only no asset data being parsed. The iCloud Share methods being stored in these records include
-# Shred iCloud Links Cloud Master Moments-CMM and Shared iCloud Photo Library (SPL).
-# This parser is based on research and SQLite Queries written by Scott Koenig
-# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347
-#
+__artifacts_v2__ = {
+ 'Ph30iCloudSharedMethodswithNADPhDaPsql': {
+ 'name': 'Ph30-iCloud Shared Methods NAD-PhDaPsql',
+ 'description': 'Parses records for different methods which media files have been shared via iCloud Share'
+ ' found in the PhotoData-Photos.sqlite ZSHARE Table and supports iOS 14-18.'
+ ' Parses iCloud Share Methods and Participant records only no asset data being parsed.'
+ ' The iCloud Share methods being stored in these records include'
+ ' Shred iCloud Links Cloud Master Moments-CMM and Shared iCloud Photo Library SPL.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-F-Cloud_Shared_Methods',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
+@artifact_processor
+def Ph30iCloudSharedMethodswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
-def get_ph30icldsharemethphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("13.7"):
- logfunc("Unsupported version for PhotoData-Photos.sqlite zSHARE iCloud Shared Method records"
- " with no asset data on iOS " + iosversion)
+ logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date',
DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date',
@@ -60,7 +68,7 @@ def get_ph30icldsharemethphdapsql(files_found, report_folder, seeker, wrap_text,
zShare.ZPHOTOSCOUNT AS 'zShare-Photos Count',
zShare.ZUPLOADEDPHOTOSCOUNT AS 'zShare-Uploaded Photos Count',
zShare.ZVIDEOSCOUNT AS 'zShare-Videos Count',
- zShare.ZUPLOADEDVIDEOSCOUNT AS 'zShare-Uploaded Videos Count',
+ zShare.ZUPLOADEDVIDEOSCOUNT AS 'zShare-Uploaded Videos Count',
zShare.ZSCOPEIDENTIFIER AS 'zShare-Scope ID',
zShare.ZTITLE AS 'zShare-Title-SPL',
zShare.ZSHAREURL AS 'zShare-Share URL',
@@ -116,90 +124,66 @@ def get_ph30icldsharemethphdapsql(files_found, report_folder, seeker, wrap_text,
CASE zShare.Z_ENT
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || ''
END AS 'zShare-zENT'
FROM ZSHARE zShare
LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK
ORDER BY zShare.ZCREATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31]))
-
- counter += 1
-
- description = 'Parses records for different methods which media files have been shared via iCloud Share' \
- ' found in the PhotoData-Photos.sqlite ZSHARE Table and supports iOS 14-15.' \
- ' Parses iCloud Share Methods and Participant records only no asset data being parsed.' \
- ' The iCloud Share methods being stored in these records include' \
- ' Shred iCloud Links Cloud Master Moments-CMM and Shared iCloud Photo Library SPL.'
- report = ArtifactHtmlReport('Ph30-iCld Share Methods NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph30-iCld Share Methods NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zShare-Creation Date-0',
- 'zShare-Start Date-1',
- 'zShare-End Date-2',
- 'zShare-Expiry Date-3',
- 'zShare-UUID-4',
- 'zShare-Originating Scope ID-5',
- 'zShare-Status-6',
- 'zShare-Scope Type-7',
- 'zShare-Asset Count-8',
- 'zShare-Force Sync Attempted-9',
- 'zShare-Photos Count-10',
- 'zShare-Uploaded Photos Count-11',
- 'zShare-Videos Count-12',
- 'zShare-Uploaded Videos Count-13',
- 'zShare-Scope ID-14',
- 'zShare-Title-SPL-15',
- 'zShare-Share URL-16',
- 'zShare-Local Publish State-17',
- 'zShare-Public Permission-18',
- 'zSharePartic-Acceptance Status-19',
- 'zSharePartic-User ID-20',
- 'zSharePartic-zPK-21',
- 'zSharePartic-Email Address-22',
- 'zSharePartic-Phone Number-23',
- 'zSharePartic-Is Current User-24',
- 'zSharePartic-Role-25',
- 'zSharePartic-Premission-26',
- 'zShare-Should Notify On Upload Completion-27',
- 'zShare-Should Ignore Budgets-28',
- 'zShare-Trashed State-29',
- 'zShare-Cloud Delete State-30',
- 'zShare-zENT-31')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph30-iCld Share Methods NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph30-iCld Share Methods NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31]))
- else:
- logfunc('No data available for PhotoData-Photos.sqlite ZSHARE iCloud Share Method icld links and SPL'
- ' Records with No Asset Data')
+ data_headers = (('zShare-Creation Date-0', 'datetime'),
+ ('zShare-Start Date-1', 'datetime'),
+ ('zShare-End Date-2', 'datetime'),
+ ('zShare-Expiry Date-3', 'datetime'),
+ 'zShare-UUID-4',
+ 'zShare-Originating Scope ID-5',
+ 'zShare-Status-6',
+ 'zShare-Scope Type-7',
+ 'zShare-Asset Count-8',
+ 'zShare-Force Sync Attempted-9',
+ 'zShare-Photos Count-10',
+ 'zShare-Uploaded Photos Count-11',
+ 'zShare-Videos Count-12',
+ 'zShare-Uploaded Videos Count-13',
+ 'zShare-Scope ID-14',
+ 'zShare-Title-SPL-15',
+ 'zShare-Share URL-16',
+ 'zShare-Local Publish State-17',
+ 'zShare-Public Permission-18',
+ 'zSharePartic-Acceptance Status-19',
+ 'zSharePartic-User ID-20',
+ 'zSharePartic-zPK-21',
+ 'zSharePartic-Email Address-22',
+ 'zSharePartic-Phone Number-23',
+ 'zSharePartic-Is Current User-24',
+ 'zSharePartic-Role-25',
+ 'zSharePartic-Premission-26',
+ 'zShare-Should Notify On Upload Completion-27',
+ 'zShare-Should Ignore Budgets-28',
+ 'zShare-Trashed State-29',
+ 'zShare-Cloud Delete State-30',
+ 'zShare-zENT-31')
+ data_list = get_sqlite_db_records(source_path, query)
- db.close()
- return
+ return data_headers, data_list, source_path
- elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17.6")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date',
DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date',
@@ -210,8 +194,8 @@ def get_ph30icldsharemethphdapsql(files_found, report_folder, seeker, wrap_text,
CASE zSharePartic.Z54_SHARE
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
ELSE 'Unknown-New-Value!: ' || zSharePartic.Z54_SHARE || ''
END AS 'zSharePartic-z54SHARE',
CASE zShare.ZSTATUS
@@ -332,110 +316,298 @@ def get_ph30icldsharemethphdapsql(files_found, report_folder, seeker, wrap_text,
CASE zShare.Z_ENT
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || ''
END AS 'zShare-zENT'
FROM ZSHARE zShare
LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK
ORDER BY zShare.ZCREATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49]))
-
- counter += 1
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49]))
- description = 'Parses records for different methods which media files have been shared via iCloud Share' \
- ' found in the PhotoData-Photos.sqlite ZSHARE Table and supports iOS 16-17.' \
- ' Parses iCloud Share Methods and Participant records only no asset data being parsed.' \
- ' The iCloud Share methods being stored in these records include' \
- ' Shred iCloud Links Cloud Master Moments-CMM and Shared iCloud Photo Library SPL.'
- report = ArtifactHtmlReport('Ph30-iCld Share Methods NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph30-iCld Share Methods NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zShare-Creation Date-0',
- 'zShare-Start Date-1',
- 'zShare-End Date-2',
- 'zShare-Expiry Date-3',
- 'zShare-UUID-4',
- 'zShare-Originating Scope ID-5',
- 'zSharePartic-z54SHARE-6',
- 'zShare-Status-7',
- 'zShare-Scope Type-8',
- 'zShare-Cloud Photo Count-9',
- 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-10',
- 'zShare-Cloud Video Count-11',
- 'zShare-Asset Count-12',
- 'zShare-Force Sync Attempted-13',
- 'zShare-Photos Count-14',
- 'zShare-Uploaded Photos Count-15',
- 'zShare-Videos Count-16',
- 'zShare-Uploaded Videos Count-17',
- 'zShare-Scope ID-18',
- 'zShare-Title-SPL-19',
- 'zShare-Share URL-20',
- 'zShare-Local Publish State-21',
- 'zShare-Public Permission-22',
- 'zShare-Cloud Local State-23',
- 'zShare-Scope Syncing State-24',
- 'zShare-Auto Share Policy-25',
- 'zSharePartic-Acceptance Status-26',
- 'zSharePartic-User ID-27',
- 'zSharePartic-zPK-28',
- 'zSharePartic-Email Address-29',
- 'zSharePartic-Phone Number-30',
- 'zSharePartic-Participant ID-31',
- 'zSharePartic-UUID-32',
- 'zSharePartic-Is Current User-33',
- 'zSharePartic-Role-34',
- 'zSharePartic-Permission-35',
- 'zShare-Participant Cloud Update State-36',
- 'zSharePartic-Exit State-37',
- 'zShare-Preview State-38',
- 'zShare-Should Notify On Upload Completion-39',
- 'zShare-Should Ignore Budgets-40',
- 'zShare-Exit Source-41',
- 'zShare-Exit State-42',
- 'zShare-Exit Type-43',
- 'zShare-Trashed State-44',
- 'zShare-Cloud Delete State-45',
- 'zShare-Trashed Date-46',
- 'zShare-LastParticipant Asset Trash Notification Date-47',
- 'zShare-Last Participant Asset Trash Notification View Date-48',
- 'zShare-zENT-49')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
+ data_headers = (('zShare-Creation Date-0', 'datetime'),
+ ('zShare-Start Date-1', 'datetime'),
+ ('zShare-End Date-2', 'datetime'),
+ ('zShare-Expiry Date-3', 'datetime'),
+ 'zShare-UUID-4',
+ 'zShare-Originating Scope ID-5',
+ 'zSharePartic-z54SHARE-6',
+ 'zShare-Status-7',
+ 'zShare-Scope Type-8',
+ 'zShare-Cloud Photo Count-9',
+ 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-10',
+ 'zShare-Cloud Video Count-11',
+ 'zShare-Asset Count-12',
+ 'zShare-Force Sync Attempted-13',
+ 'zShare-Photos Count-14',
+ 'zShare-Uploaded Photos Count-15',
+ 'zShare-Videos Count-16',
+ 'zShare-Uploaded Videos Count-17',
+ 'zShare-Scope ID-18',
+ 'zShare-Title-SPL-19',
+ 'zShare-Share URL-20',
+ 'zShare-Local Publish State-21',
+ 'zShare-Public Permission-22',
+ 'zShare-Cloud Local State-23',
+ 'zShare-Scope Syncing State-24',
+ 'zShare-Auto Share Policy-25',
+ 'zSharePartic-Acceptance Status-26',
+ 'zSharePartic-User ID-27',
+ 'zSharePartic-zPK-28',
+ 'zSharePartic-Email Address-29',
+ 'zSharePartic-Phone Number-30',
+ 'zSharePartic-Participant ID-31',
+ 'zSharePartic-UUID-32',
+ 'zSharePartic-Is Current User-33',
+ 'zSharePartic-Role-34',
+ 'zSharePartic-Permission-35',
+ 'zShare-Participant Cloud Update State-36',
+ 'zSharePartic-Exit State-37',
+ 'zShare-Preview State-38',
+ 'zShare-Should Notify On Upload Completion-39',
+ 'zShare-Should Ignore Budgets-40',
+ 'zShare-Exit Source-41',
+ 'zShare-Exit State-42',
+ 'zShare-Exit Type-43',
+ 'zShare-Trashed State-44',
+ 'zShare-Cloud Delete State-45',
+ ('zShare-Trashed Date-46', 'datetime'),
+ ('zShare-LastParticipant Asset Trash Notification Date-47', 'datetime'),
+ ('zShare-Last Participant Asset Trash Notification View Date-48', 'datetime'),
+ 'zShare-zENT-49')
+ data_list = get_sqlite_db_records(source_path, query)
- tsvname = 'Ph30-iCld Share Methods NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
+ return data_headers, data_list, source_path
+
+ elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- tlactivity = 'Ph30-iCld Share Methods NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ query = '''
+ SELECT
+ DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date',
+ DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date',
+ DateTime(zShare.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-End Date',
+ DateTime(zShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Expiry Date',
+ zShare.ZUUID AS 'zShare-UUID',
+ zShare.ZORIGINATINGSCOPEIDENTIFIER AS 'zShare-Originating Scope ID',
+ CASE zSharePartic.Z55_SHARE
+ WHEN 55 THEN '55-SPL-Entity-55'
+ WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.Z55_SHARE || ''
+ END AS 'zSharePartic-z55SHARE',
+ CASE zShare.ZSTATUS
+ WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1'
+ WHEN 3 THEN '3-SPL-Actively-Sharing-3'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSTATUS || ''
+ END AS 'zShare-Status',
+ CASE zShare.ZSCOPETYPE
+ WHEN 2 THEN '2-iCloudLink-CMMoment-2'
+ WHEN 4 THEN '4-iCld-Shared-Photo-Library-SPL-4'
+ WHEN 5 THEN '5-SPL-Active-Participant-5'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPETYPE || ''
+ END AS 'zShare-Scope Type',
+ zShare.ZCLOUDPHOTOCOUNT AS 'zShare-Cloud Photo Count',
+ zShare.ZCOUNTOFASSETSADDEDBYCAMERASMARTSHARING AS 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare',
+ zShare.ZCLOUDVIDEOCOUNT AS 'zShare-Cloud Video Count',
+ zShare.ZASSETCOUNT AS 'zShare-Asset Count',
+ zShare.ZFORCESYNCATTEMPTED AS 'zShare-Force Sync Attempted',
+ zShare.ZPHOTOSCOUNT AS 'zShare-Photos Count',
+ zShare.ZUPLOADEDPHOTOSCOUNT AS 'zShare-Uploaded Photos Count',
+ zShare.ZVIDEOSCOUNT AS 'zShare-Videos Count',
+ zShare.ZUPLOADEDVIDEOSCOUNT AS 'zShare-Uploaded Videos Count',
+ zShare.ZSCOPEIDENTIFIER AS 'zShare-Scope ID',
+ zShare.ZTITLE AS 'zShare-Title-SPL',
+ zShare.ZSHAREURL AS 'zShare-Share URL',
+ CASE zShare.ZLOCALPUBLISHSTATE
+ WHEN 2 THEN '2-Published-2'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZLOCALPUBLISHSTATE || ''
+ END AS 'zShare-Local Publish State',
+ CASE zShare.ZPUBLICPERMISSION
+ WHEN 1 THEN '1-Public_Permission_Denied-Private-1'
+ WHEN 2 THEN '2-Public_Permission_Granted-Public-2'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZPUBLICPERMISSION || ''
+ END AS 'zShare-Public Permission',
+ CASE zShare.ZCLOUDLOCALSTATE
+ WHEN 1 THEN '1-Local-and-Cloud-SPL-1'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDLOCALSTATE || ''
+ END AS 'zShare-Cloud Local State',
+ CASE zShare.ZSCOPESYNCINGSTATE
+ WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPESYNCINGSTATE || ''
+ END AS 'zShare-Scope Syncing State',
+ CASE zShare.ZAUTOSHAREPOLICY
+ WHEN 0 THEN '0-AutoShare-OFF_SPL_Test_NotAllAtSetup-0'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZAUTOSHAREPOLICY || ''
+ END AS 'zShare-Auto Share Policy',
+ CASE zSharePartic.ZACCEPTANCESTATUS
+ WHEN 1 THEN '1-Invite-Pending_or_Declined-1'
+ WHEN 2 THEN '2-Invite-Accepted-2'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZACCEPTANCESTATUS || ''
+ END AS 'zSharePartic-Acceptance Status',
+ zSharePartic.ZUSERIDENTIFIER AS 'zSharePartic-User ID',
+ zSharePartic.Z_PK AS 'zSharePartic-zPK',
+ zSharePartic.ZEMAILADDRESS AS 'zSharePartic-Email Address',
+ zSharePartic.ZPHONENUMBER AS 'zSharePartic-Phone Number',
+ zSharePartic.ZPARTICIPANTID AS 'zSharePartic-Participant ID',
+ zSharePartic.ZUUID AS 'zSharePartic-UUID',
+ CASE zSharePartic.ZISCURRENTUSER
+ WHEN 0 THEN '0-SPL_Not_This_User-CMM_NotCldStorageOwner-0'
+ WHEN 1 THEN '1-SPL_Is_This_User-CMM_IsCldStorageOwner-1'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || ''
+ END AS 'zSharePartic-Is Current User',
+ CASE zSharePartic.ZROLE
+ WHEN 1 THEN '1-Participant-is-Owner-Role-1'
+ WHEN 2 THEN '2-Participant-is-Invitee-Role-2'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZROLE || ''
+ END AS 'zSharePartic-Role',
+ CASE zSharePartic.ZPERMISSION
+ WHEN 3 THEN '3-Participant-has-Full-Permissions-3'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZPERMISSION || ''
+ END AS 'zSharePartic-Permission',
+ CASE zShare.ZPARTICIPANTCLOUDUPDATESTATE
+ WHEN 2 THEN '2-ParticipantAllowedToUpdate_SPL_StillTesting-2'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZPARTICIPANTCLOUDUPDATESTATE || ''
+ END AS 'zShare-Participant Cloud Update State',
+ CASE zSharePartic.ZEXITSTATE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZEXITSTATE || ''
+ END AS 'zSharePartic-Exit State',
+ CASE zShare.ZPREVIEWSTATE
+ WHEN 0 THEN '0-NotInPreviewState-StillTesting-SPL-0'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZPREVIEWSTATE || ''
+ END AS 'zShare-Preview State',
+ CASE zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION
+ WHEN 0 THEN '0-DoNotNotify-SPL-0'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION || ''
+ END AS 'zShare-Should Notify On Upload Completion',
+ CASE zShare.ZSHOULDIGNOREBUDGETS
+ WHEN 1 THEN '1-StillTesting-CMM-1'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDIGNOREBUDGETS || ''
+ END AS 'zShare-Should Ignore Budgets',
+ CASE zShare.ZEXITSOURCE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSOURCE || ''
+ END AS 'zShare-Exit Source',
+ CASE zShare.ZEXITSTATE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSTATE || ''
+ END AS 'zShare-Exit State',
+ CASE zShare.ZEXITTYPE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZEXITTYPE || ''
+ END AS 'zShare-Exit Type',
+ CASE zShare.ZTRASHEDSTATE
+ WHEN 0 THEN '0-Not_in_Trash-0'
+ WHEN 1 THEN '1-In_Trash-1'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZTRASHEDSTATE || ''
+ END AS 'zShare-Trashed State',
+ CASE zShare.ZCLOUDDELETESTATE
+ WHEN 0 THEN '0-Not Deleted-0'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDDELETESTATE || ''
+ END AS 'zShare-Cloud Delete State',
+ DateTime(zShare.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Trashed Date',
+ DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONDATE + 978307200, 'UNIXEPOCH') AS
+ 'zShare-LastParticipant Asset Trash Notification Date',
+ DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONVIEWEDDATE + 978307200, 'UNIXEPOCH') AS
+ 'zShare-Last Participant Asset Trash Notification View Date',
+ CASE zShare.Z_ENT
+ WHEN 55 THEN '55-SPL-Entity-55'
+ WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
+ ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || ''
+ END AS 'zShare-zENT'
+ FROM ZSHARE zShare
+ LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK
+ ORDER BY zShare.ZCREATIONDATE
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49]))
- else:
- logfunc('No data available for PhotoData-Photos.sqlite ZSHARE iCloud Share Method icld links and SPL'
- ' Records with No Asset Data')
+ data_headers = (('zShare-Creation Date-0', 'datetime'),
+ ('zShare-Start Date-1', 'datetime'),
+ ('zShare-End Date-2', 'datetime'),
+ ('zShare-Expiry Date-3', 'datetime'),
+ 'zShare-UUID-4',
+ 'zShare-Originating Scope ID-5',
+ 'zSharePartic-z55SHARE-6',
+ 'zShare-Status-7',
+ 'zShare-Scope Type-8',
+ 'zShare-Cloud Photo Count-9',
+ 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-10',
+ 'zShare-Cloud Video Count-11',
+ 'zShare-Asset Count-12',
+ 'zShare-Force Sync Attempted-13',
+ 'zShare-Photos Count-14',
+ 'zShare-Uploaded Photos Count-15',
+ 'zShare-Videos Count-16',
+ 'zShare-Uploaded Videos Count-17',
+ 'zShare-Scope ID-18',
+ 'zShare-Title-SPL-19',
+ 'zShare-Share URL-20',
+ 'zShare-Local Publish State-21',
+ 'zShare-Public Permission-22',
+ 'zShare-Cloud Local State-23',
+ 'zShare-Scope Syncing State-24',
+ 'zShare-Auto Share Policy-25',
+ 'zSharePartic-Acceptance Status-26',
+ 'zSharePartic-User ID-27',
+ 'zSharePartic-zPK-28',
+ 'zSharePartic-Email Address-29',
+ 'zSharePartic-Phone Number-30',
+ 'zSharePartic-Participant ID-31',
+ 'zSharePartic-UUID-32',
+ 'zSharePartic-Is Current User-33',
+ 'zSharePartic-Role-34',
+ 'zSharePartic-Permission-35',
+ 'zShare-Participant Cloud Update State-36',
+ 'zSharePartic-Exit State-37',
+ 'zShare-Preview State-38',
+ 'zShare-Should Notify On Upload Completion-39',
+ 'zShare-Should Ignore Budgets-40',
+ 'zShare-Exit Source-41',
+ 'zShare-Exit State-42',
+ 'zShare-Exit Type-43',
+ 'zShare-Trashed State-44',
+ 'zShare-Cloud Delete State-45',
+ ('zShare-Trashed Date-46', 'datetime'),
+ ('zShare-LastParticipant Asset Trash Notification Date-47', 'datetime'),
+ ('zShare-Last Participant Asset Trash Notification View Date-48', 'datetime'),
+ 'zShare-zENT-49')
+ data_list = get_sqlite_db_records(source_path, query)
- db.close()
- return
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date',
DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date',
@@ -443,13 +615,13 @@ def get_ph30icldsharemethphdapsql(files_found, report_folder, seeker, wrap_text,
DateTime(zShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Expiry Date',
zShare.ZUUID AS 'zShare-UUID',
zShare.ZORIGINATINGSCOPEIDENTIFIER AS 'zShare-Originating Scope ID',
- CASE zSharePartic.Z62_SHARE
+ CASE zSharePartic.Z61_SHARE
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
- ELSE 'Unknown-New-Value!: ' || zSharePartic.Z62_SHARE || ''
- END AS 'zSharePartic-z62SHARE',
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.Z61_SHARE || ''
+ END AS 'zSharePartic-z61SHARE',
CASE zShare.ZSTATUS
WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1'
WHEN 3 THEN '3-SPL-Actively-Sharing-3'
@@ -568,120 +740,74 @@ def get_ph30icldsharemethphdapsql(files_found, report_folder, seeker, wrap_text,
CASE zShare.Z_ENT
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || ''
END AS 'zShare-zENT'
FROM ZSHARE zShare
LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK
ORDER BY zShare.ZCREATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49]))
-
- counter += 1
-
- description = 'Parses records for different methods which media files have been shared via iCloud Share' \
- ' found in the PhotoData-Photos.sqlite ZSHARE Table and supports iOS 18.' \
- ' Parses iCloud Share Methods and Participant records only no asset data being parsed.' \
- ' The iCloud Share methods being stored in these records include' \
- ' Shred iCloud Links Cloud Master Moments-CMM and Shared iCloud Photo Library SPL.'
- report = ArtifactHtmlReport('Ph30-iCld Share Methods NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph30-iCld Share Methods NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zShare-Creation Date-0',
- 'zShare-Start Date-1',
- 'zShare-End Date-2',
- 'zShare-Expiry Date-3',
- 'zShare-UUID-4',
- 'zShare-Originating Scope ID-5',
- 'zSharePartic-z62SHARE-6',
- 'zShare-Status-7',
- 'zShare-Scope Type-8',
- 'zShare-Cloud Photo Count-9',
- 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-10',
- 'zShare-Cloud Video Count-11',
- 'zShare-Asset Count-12',
- 'zShare-Force Sync Attempted-13',
- 'zShare-Photos Count-14',
- 'zShare-Uploaded Photos Count-15',
- 'zShare-Videos Count-16',
- 'zShare-Uploaded Videos Count-17',
- 'zShare-Scope ID-18',
- 'zShare-Title-SPL-19',
- 'zShare-Share URL-20',
- 'zShare-Local Publish State-21',
- 'zShare-Public Permission-22',
- 'zShare-Cloud Local State-23',
- 'zShare-Scope Syncing State-24',
- 'zShare-Auto Share Policy-25',
- 'zSharePartic-Acceptance Status-26',
- 'zSharePartic-User ID-27',
- 'zSharePartic-zPK-28',
- 'zSharePartic-Email Address-29',
- 'zSharePartic-Phone Number-30',
- 'zSharePartic-Participant ID-31',
- 'zSharePartic-UUID-32',
- 'zSharePartic-Is Current User-33',
- 'zSharePartic-Role-34',
- 'zSharePartic-Permission-35',
- 'zShare-Participant Cloud Update State-36',
- 'zSharePartic-Exit State-37',
- 'zShare-Preview State-38',
- 'zShare-Should Notify On Upload Completion-39',
- 'zShare-Should Ignore Budgets-40',
- 'zShare-Exit Source-41',
- 'zShare-Exit State-42',
- 'zShare-Exit Type-43',
- 'zShare-Trashed State-44',
- 'zShare-Cloud Delete State-45',
- 'zShare-Trashed Date-46',
- 'zShare-LastParticipant Asset Trash Notification Date-47',
- 'zShare-Last Participant Asset Trash Notification View Date-48',
- 'zShare-zENT-49')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph30-iCld Share Methods NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph30-iCld Share Methods NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite ZSHARE iCloud Share Method icld links and SPL'
- ' Records with No Asset Data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49]))
+ data_headers = (('zShare-Creation Date-0', 'datetime'),
+ ('zShare-Start Date-1', 'datetime'),
+ ('zShare-End Date-2', 'datetime'),
+ ('zShare-Expiry Date-3', 'datetime'),
+ 'zShare-UUID-4',
+ 'zShare-Originating Scope ID-5',
+ 'zSharePartic-z61SHARE-6',
+ 'zShare-Status-7',
+ 'zShare-Scope Type-8',
+ 'zShare-Cloud Photo Count-9',
+ 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-10',
+ 'zShare-Cloud Video Count-11',
+ 'zShare-Asset Count-12',
+ 'zShare-Force Sync Attempted-13',
+ 'zShare-Photos Count-14',
+ 'zShare-Uploaded Photos Count-15',
+ 'zShare-Videos Count-16',
+ 'zShare-Uploaded Videos Count-17',
+ 'zShare-Scope ID-18',
+ 'zShare-Title-SPL-19',
+ 'zShare-Share URL-20',
+ 'zShare-Local Publish State-21',
+ 'zShare-Public Permission-22',
+ 'zShare-Cloud Local State-23',
+ 'zShare-Scope Syncing State-24',
+ 'zShare-Auto Share Policy-25',
+ 'zSharePartic-Acceptance Status-26',
+ 'zSharePartic-User ID-27',
+ 'zSharePartic-zPK-28',
+ 'zSharePartic-Email Address-29',
+ 'zSharePartic-Phone Number-30',
+ 'zSharePartic-Participant ID-31',
+ 'zSharePartic-UUID-32',
+ 'zSharePartic-Is Current User-33',
+ 'zSharePartic-Role-34',
+ 'zSharePartic-Permission-35',
+ 'zShare-Participant Cloud Update State-36',
+ 'zSharePartic-Exit State-37',
+ 'zShare-Preview State-38',
+ 'zShare-Should Notify On Upload Completion-39',
+ 'zShare-Should Ignore Budgets-40',
+ 'zShare-Exit Source-41',
+ 'zShare-Exit State-42',
+ 'zShare-Exit Type-43',
+ 'zShare-Trashed State-44',
+ 'zShare-Cloud Delete State-45',
+ ('zShare-Trashed Date-46', 'datetime'),
+ ('zShare-LastParticipant Asset Trash Notification Date-47', 'datetime'),
+ ('zShare-Last Participant Asset Trash Notification View Date-48', 'datetime'),
+ 'zShare-zENT-49')
+ data_list = get_sqlite_db_records(source_path, query)
-__artifacts_v2__ = {
- 'Ph30-iCloud Shared Methods with NAD-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite Ph30 iCld Share Methods with No Asset Data',
- 'description': 'Parses records for different methods which media files have been shared via iCloud Share'
- ' found in the PhotoData-Photos.sqlite ZSHARE Table and supports iOS 14-18.'
- ' Parses iCloud Share Methods and Participant records only no asset data being parsed.'
- ' The iCloud Share methods being stored in these records include'
- ' Shred iCloud Links Cloud Master Moments-CMM and Shared iCloud Photo Library SPL.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-13',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-F-Cloud_Shared_Methods',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph30icldsharemethphdapsql'
- }
-}
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph31iCloudSharePhotoLibraryNAD.py b/scripts/artifacts/Ph31iCloudSharePhotoLibraryNAD.py
index 2b1c1cc0..f4754ecd 100644
--- a/scripts/artifacts/Ph31iCloudSharePhotoLibraryNAD.py
+++ b/scripts/artifacts/Ph31iCloudSharePhotoLibraryNAD.py
@@ -1,40 +1,48 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 2.0
-#
-# Description:
-# Parses iCloud Shared Photo Library records and invites from the PhotoData-Photos.sqlite ZSHARE Table
-# and supports iOS 14-18. Parses iCloud SPL and Participant information records only no asset data being parsed.
-# This parser is based on research and SQLite Queries written by Scott Koenig
-# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347
-#
+__artifacts_v2__ = {
+ 'Ph31iCloudSPLwithParticipantswithNADPhDaPsql': {
+ 'name': 'Ph31-iCloud SPL with Participants NAD-PhDaPsql',
+ 'description': 'Parses iCloud Shared Photo Library records and invites from the PhotoData-Photos.sqlite'
+ ' ZSHARE Table and supports iOS 14-18. Parses iCloud SPL and Participant information'
+ ' records only no asset data being parsed.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-F-Cloud_Shared_Methods',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
+@artifact_processor
+def Ph31iCloudSPLwithParticipantswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
-def get_ph31icldsharephotolibphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("13.7"):
- logfunc("Unsupported version for PhotoData-Photos.sqlite zSHARE iCloud Shared Photo Library records"
- " with no asset data from iOS " + iosversion)
+ logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date',
DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date',
@@ -108,82 +116,60 @@ def get_ph31icldsharephotolibphdapsql(files_found, report_folder, seeker, wrap_t
CASE zShare.Z_ENT
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || ''
END AS 'zShare-zENT'
FROM ZSHARE zShare
LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK
WHERE zShare.ZSCOPETYPE IN (4, 5)
ORDER BY zShare.ZCREATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25]))
-
- counter += 1
-
- description = 'Parses iCloud Shared Photo Library records and invites from the PhotoData-Photos.sqlite' \
- ' ZSHARE Table and supports iOS 14-15. Parses iCloud SPL and Participant information' \
- ' records only no asset data being parsed.'
- report = ArtifactHtmlReport('Ph31-iCld Shared Photo Lib Records NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph31-iCld Shared Photo Lib Records NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zShare-Creation Date-0',
- 'zShare-Start Date-1',
- 'zShare-End Date-2',
- 'zShare-Expiry Date-3',
- 'zShare-UUID-4',
- 'zShare-Originating Scope ID-5',
- 'zShare-Status-6',
- 'zShare-Scope Type-7',
- 'zShare-Scope ID-8',
- 'zShare-Title-SPL-9',
- 'zShare-Share URL-10',
- 'zShare-Local Publish State-11',
- 'zShare-Public Permission-12',
- 'zSharePartic-Acceptance Status-13',
- 'zSharePartic-User ID-14',
- 'zSharePartic-zPK-15',
- 'zSharePartic-Email Address-16',
- 'zSharePartic-Phone Number-17',
- 'zSharePartic-Is Current User-18',
- 'zSharePartic-Role-19',
- 'zSharePartic-Premission-20',
- 'zShare-Should Notify On Upload Completion-21',
- 'zShare-Should Ignore Budgets-22',
- 'zShare-Trashed State-23',
- 'zShare-Cloud Delete State-24',
- 'zShare-zENT-25')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph31-iCld Shared Photo Lib Records NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph31-iCld Shared Photo Lib Records NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25]))
- else:
- logfunc('No data available for PhotoData-Photos.sqlite ZSHARE iCloud Shared Photo Library Records'
- ' with No Asset Data')
+ data_headers = (('zShare-Creation Date-0', 'datetime'),
+ ('zShare-Start Date-1', 'datetime'),
+ ('zShare-End Date-2', 'datetime'),
+ ('zShare-Expiry Date-3', 'datetime'),
+ 'zShare-UUID-4',
+ 'zShare-Originating Scope ID-5',
+ 'zShare-Status-6',
+ 'zShare-Scope Type-7',
+ 'zShare-Scope ID-8',
+ 'zShare-Title-SPL-9',
+ 'zShare-Share URL-10',
+ 'zShare-Local Publish State-11',
+ 'zShare-Public Permission-12',
+ 'zSharePartic-Acceptance Status-13',
+ 'zSharePartic-User ID-14',
+ 'zSharePartic-zPK-15',
+ 'zSharePartic-Email Address-16',
+ 'zSharePartic-Phone Number-17',
+ 'zSharePartic-Is Current User-18',
+ 'zSharePartic-Role-19',
+ 'zSharePartic-Premission-20',
+ 'zShare-Should Notify On Upload Completion-21',
+ 'zShare-Should Ignore Budgets-22',
+ 'zShare-Trashed State-23',
+ 'zShare-Cloud Delete State-24',
+ 'zShare-zENT-25')
+ data_list = get_sqlite_db_records(source_path, query)
- db.close()
- return
+ return data_headers, data_list, source_path
- elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17.6")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date',
DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date',
@@ -194,8 +180,8 @@ def get_ph31icldsharephotolibphdapsql(files_found, report_folder, seeker, wrap_t
CASE zSharePartic.Z54_SHARE
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
ELSE 'Unknown-New-Value!: ' || zSharePartic.Z54_SHARE || ''
END AS 'zSharePartic-z54SHARE',
CASE zShare.ZSTATUS
@@ -310,102 +296,280 @@ def get_ph31icldsharephotolibphdapsql(files_found, report_folder, seeker, wrap_t
CASE zShare.Z_ENT
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || ''
END AS 'zShare-zENT'
FROM ZSHARE zShare
LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK
WHERE zShare.ZSCOPETYPE IN (4, 5)
ORDER BY zShare.ZCREATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43]))
-
- counter += 1
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43]))
- description = 'Parses iCloud Shared Photo Library records and invites from the PhotoData-Photos.sqlite' \
- ' ZSHARE Table and supports iOS 16-17. Parses iCloud SPL and Participant information' \
- ' records only no asset data being parsed.'
- report = ArtifactHtmlReport('Ph31-iCld Shared Photo Lib Records NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph31-iCld Shared Photo Lib Records NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zShare-Creation Date-0',
- 'zShare-Start Date-1',
- 'zShare-End Date-2',
- 'zShare-Expiry Date-3',
- 'zShare-UUID-4',
- 'zShare-Originating Scope ID-5',
- 'zSharePartic-z54SHARE-6',
- 'zShare-Status-7',
- 'zShare-Scope Type-8',
- 'zShare-Cloud Photo Count-9',
- 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-10',
- 'zShare-Cloud Video Count-11',
- 'zShare-Scope ID-12',
- 'zShare-Title-SPL-13',
- 'zShare-Share URL-14',
- 'zShare-Local Publish State-15',
- 'zShare-Public Permission-16',
- 'zShare-Cloud Local State-17',
- 'zShare-Scope Syncing State-18',
- 'zShare-Auto Share Policy-19',
- 'zSharePartic-Acceptance Status-20',
- 'zSharePartic-User ID-21',
- 'zSharePartic-zPK-22',
- 'zSharePartic-Email Address-23',
- 'zSharePartic-Phone Number-24',
- 'zSharePartic-Participant ID-25',
- 'zSharePartic-UUID-26',
- 'zSharePartic-Is Current User-27',
- 'zSharePartic-Role-28',
- 'zSharePartic-Premission-29',
- 'zShare-Participant Cloud Update State-30',
- 'zSharePartic-Exit State-31',
- 'zShare-Preview State-32',
- 'zShare-Should Notify On Upload Completion-33',
- 'zShare-Should Ignore Budgets-34',
- 'zShare-Exit Source-35',
- 'zShare-Exit State-36',
- 'zShare-Exit Type-37',
- 'zShare-Trashed State-38',
- 'zShare-Cloud Delete State-39',
- 'zShare-Trashed Date-40',
- 'zShare-LastParticipant Asset Trash Notification Date-41',
- 'zShare-Last Participant Asset Trash Notification View Date-42',
- 'zShare-zENT-43')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
+ data_headers = (('zShare-Creation Date-0', 'datetime'),
+ ('zShare-Start Date-1', 'datetime'),
+ ('zShare-End Date-2', 'datetime'),
+ ('zShare-Expiry Date-3', 'datetime'),
+ 'zShare-UUID-4',
+ 'zShare-Originating Scope ID-5',
+ 'zSharePartic-z54SHARE-6',
+ 'zShare-Status-7',
+ 'zShare-Scope Type-8',
+ 'zShare-Cloud Photo Count-9',
+ 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-10',
+ 'zShare-Cloud Video Count-11',
+ 'zShare-Scope ID-12',
+ 'zShare-Title-SPL-13',
+ 'zShare-Share URL-14',
+ 'zShare-Local Publish State-15',
+ 'zShare-Public Permission-16',
+ 'zShare-Cloud Local State-17',
+ 'zShare-Scope Syncing State-18',
+ 'zShare-Auto Share Policy-19',
+ 'zSharePartic-Acceptance Status-20',
+ 'zSharePartic-User ID-21',
+ 'zSharePartic-zPK-22',
+ 'zSharePartic-Email Address-23',
+ 'zSharePartic-Phone Number-24',
+ 'zSharePartic-Participant ID-25',
+ 'zSharePartic-UUID-26',
+ 'zSharePartic-Is Current User-27',
+ 'zSharePartic-Role-28',
+ 'zSharePartic-Premission-29',
+ 'zShare-Participant Cloud Update State-30',
+ 'zSharePartic-Exit State-31',
+ 'zShare-Preview State-32',
+ 'zShare-Should Notify On Upload Completion-33',
+ 'zShare-Should Ignore Budgets-34',
+ 'zShare-Exit Source-35',
+ 'zShare-Exit State-36',
+ 'zShare-Exit Type-37',
+ 'zShare-Trashed State-38',
+ 'zShare-Cloud Delete State-39',
+ ('zShare-Trashed Date-40', 'datetime'),
+ ('zShare-LastParticipant Asset Trash Notification Date-41', 'datetime'),
+ ('zShare-Last Participant Asset Trash Notification View Date-42', 'datetime'),
+ 'zShare-zENT-43')
+ data_list = get_sqlite_db_records(source_path, query)
- tsvname = 'Ph31-iCld Shared Photo Lib Records NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
+ return data_headers, data_list, source_path
+
+ elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- tlactivity = 'Ph31-iCld Shared Photo Lib Records NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ query = '''
+ SELECT
+ DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date',
+ DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date',
+ DateTime(zShare.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-End Date',
+ DateTime(zShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Expiry Date',
+ zShare.ZUUID AS 'zShare-UUID',
+ zShare.ZORIGINATINGSCOPEIDENTIFIER AS 'zShare-Originating Scope ID',
+ CASE zSharePartic.Z55_SHARE
+ WHEN 55 THEN '55-SPL-Entity-55'
+ WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.Z55_SHARE || ''
+ END AS 'zSharePartic-z55SHARE',
+ CASE zShare.ZSTATUS
+ WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1'
+ WHEN 3 THEN '3-SPL-Actively-Sharing-3'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSTATUS || ''
+ END AS 'zShare-Status',
+ CASE zShare.ZSCOPETYPE
+ WHEN 2 THEN '2-iCloudLink-CMMoment-2'
+ WHEN 4 THEN '4-iCld-Shared-Photo-Library-SPL-4'
+ WHEN 5 THEN '5-SPL-Active-Participant-5'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPETYPE || ''
+ END AS 'zShare-Scope Type',
+ zShare.ZCLOUDPHOTOCOUNT AS 'zShare-Cloud Photo Count',
+ zShare.ZCOUNTOFASSETSADDEDBYCAMERASMARTSHARING AS 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare',
+ zShare.ZCLOUDVIDEOCOUNT AS 'zShare-Cloud Video Count',
+ zShare.ZSCOPEIDENTIFIER AS 'zShare-Scope ID',
+ zShare.ZTITLE AS 'zShare-Title-SPL',
+ zShare.ZSHAREURL AS 'zShare-Share URL',
+ CASE zShare.ZLOCALPUBLISHSTATE
+ WHEN 2 THEN '2-Published-2'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZLOCALPUBLISHSTATE || ''
+ END AS 'zShare-Local Publish State',
+ CASE zShare.ZPUBLICPERMISSION
+ WHEN 1 THEN '1-Public_Premission_Denied-Private-1'
+ WHEN 2 THEN '2-Public_Premission_Granted-Public-2'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZPUBLICPERMISSION || ''
+ END AS 'zShare-Public Permission',
+ CASE zShare.ZCLOUDLOCALSTATE
+ WHEN 1 THEN '1-LocalandCloud-SPL-1'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDLOCALSTATE || ''
+ END AS 'zShare-Cloud Local State',
+ CASE zShare.ZSCOPESYNCINGSTATE
+ WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPESYNCINGSTATE || ''
+ END AS 'zShare-Scope Syncing State',
+ CASE zShare.ZAUTOSHAREPOLICY
+ WHEN 0 THEN '0-AutoShare-OFF_SPL_Test_NotAllAtSetup-0'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZAUTOSHAREPOLICY || ''
+ END AS 'zShare-Auto Share Policy',
+ CASE zSharePartic.ZACCEPTANCESTATUS
+ WHEN 1 THEN '1-Invite-Pending_or_Declined-1'
+ WHEN 2 THEN '2-Invite-Accepted-2'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZACCEPTANCESTATUS || ''
+ END AS 'zSharePartic-Acceptance Status',
+ zSharePartic.ZUSERIDENTIFIER AS 'zSharePartic-User ID',
+ zSharePartic.Z_PK AS 'zSharePartic-zPK',
+ zSharePartic.ZEMAILADDRESS AS 'zSharePartic-Email Address',
+ zSharePartic.ZPHONENUMBER AS 'zSharePartic-Phone Number',
+ zSharePartic.ZPARTICIPANTID AS 'zSharePartic-Participant ID',
+ zSharePartic.ZUUID AS 'zSharePartic-UUID',
+ CASE zSharePartic.ZISCURRENTUSER
+ WHEN 0 THEN '0-Participant-Not_This_User-0'
+ WHEN 1 THEN '1-Participant-Is_This_User-1'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || ''
+ END AS 'zSharePartic-Is Current User',
+ CASE zSharePartic.ZROLE
+ WHEN 1 THEN '1-Participant-is-Owner-Role-1'
+ WHEN 2 THEN '2-Participant-is-Invitee-Role-2'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZROLE || ''
+ END AS 'zSharePartic-Role',
+ CASE zSharePartic.ZPERMISSION
+ WHEN 3 THEN '3-Participant-has-Full-Permissions-3'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZPERMISSION || ''
+ END AS 'zSharePartic-Premission',
+ CASE zShare.ZPARTICIPANTCLOUDUPDATESTATE
+ WHEN 2 THEN '2-ParticipantAllowedToUpdate_SPL_StillTesting-2'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZPARTICIPANTCLOUDUPDATESTATE || ''
+ END AS 'zShare-Participant Cloud Update State',
+ CASE zSharePartic.ZEXITSTATE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZEXITSTATE || ''
+ END AS 'zSharePartic-Exit State',
+ CASE zShare.ZPREVIEWSTATE
+ WHEN 0 THEN '0-NotInPreviewState-StillTesting-SPL-0'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZPREVIEWSTATE || ''
+ END AS 'zShare-Preview State',
+ CASE zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION
+ WHEN 0 THEN '0-DoNotNotify-SPL-0'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION || ''
+ END AS 'zShare-Should Notify On Upload Completion',
+ CASE zShare.ZSHOULDIGNOREBUDGETS
+ WHEN 1 THEN '1-StillTesting-CMM-1'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDIGNOREBUDGETS || ''
+ END AS 'zShare-Should Ignore Budgets',
+ CASE zShare.ZEXITSOURCE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSOURCE || ''
+ END AS 'zShare-Exit Source',
+ CASE zShare.ZEXITSTATE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSTATE || ''
+ END AS 'zShare-Exit State',
+ CASE zShare.ZEXITTYPE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZEXITTYPE || ''
+ END AS 'zShare-Exit Type',
+ CASE zShare.ZTRASHEDSTATE
+ WHEN 0 THEN '0-Not_in_Trash-0'
+ WHEN 1 THEN '1-In_Trash-1'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZTRASHEDSTATE || ''
+ END AS 'zShare-Trashed State',
+ CASE zShare.ZCLOUDDELETESTATE
+ WHEN 0 THEN '0-Not Deleted-0'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDDELETESTATE || ''
+ END AS 'zShare-Cloud Delete State',
+ DateTime(zShare.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Trashed Date',
+ DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONDATE + 978307200, 'UNIXEPOCH') AS
+ 'zShare-LastParticipant Asset Trash Notification Date',
+ DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONVIEWEDDATE + 978307200, 'UNIXEPOCH') AS
+ 'zShare-Last Participant Asset Trash Notification View Date',
+ CASE zShare.Z_ENT
+ WHEN 55 THEN '55-SPL-Entity-55'
+ WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
+ ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || ''
+ END AS 'zShare-zENT'
+ FROM ZSHARE zShare
+ LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK
+ WHERE zShare.ZSCOPETYPE IN (4, 5)
+ ORDER BY zShare.ZCREATIONDATE
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43]))
- else:
- logfunc('No data available for PhotoData-Photos.sqlite ZSHARE iCloud Shared Photo Library Records'
- ' with No Asset Data')
+ data_headers = (('zShare-Creation Date-0', 'datetime'),
+ ('zShare-Start Date-1', 'datetime'),
+ ('zShare-End Date-2', 'datetime'),
+ ('zShare-Expiry Date-3', 'datetime'),
+ 'zShare-UUID-4',
+ 'zShare-Originating Scope ID-5',
+ 'zSharePartic-z55SHARE-6',
+ 'zShare-Status-7',
+ 'zShare-Scope Type-8',
+ 'zShare-Cloud Photo Count-9',
+ 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-10',
+ 'zShare-Cloud Video Count-11',
+ 'zShare-Scope ID-12',
+ 'zShare-Title-SPL-13',
+ 'zShare-Share URL-14',
+ 'zShare-Local Publish State-15',
+ 'zShare-Public Permission-16',
+ 'zShare-Cloud Local State-17',
+ 'zShare-Scope Syncing State-18',
+ 'zShare-Auto Share Policy-19',
+ 'zSharePartic-Acceptance Status-20',
+ 'zSharePartic-User ID-21',
+ 'zSharePartic-zPK-22',
+ 'zSharePartic-Email Address-23',
+ 'zSharePartic-Phone Number-24',
+ 'zSharePartic-Participant ID-25',
+ 'zSharePartic-UUID-26',
+ 'zSharePartic-Is Current User-27',
+ 'zSharePartic-Role-28',
+ 'zSharePartic-Premission-29',
+ 'zShare-Participant Cloud Update State-30',
+ 'zSharePartic-Exit State-31',
+ 'zShare-Preview State-32',
+ 'zShare-Should Notify On Upload Completion-33',
+ 'zShare-Should Ignore Budgets-34',
+ 'zShare-Exit Source-35',
+ 'zShare-Exit State-36',
+ 'zShare-Exit Type-37',
+ 'zShare-Trashed State-38',
+ 'zShare-Cloud Delete State-39',
+ ('zShare-Trashed Date-40', 'datetime'),
+ ('zShare-LastParticipant Asset Trash Notification Date-41', 'datetime'),
+ ('zShare-Last Participant Asset Trash Notification View Date-42', 'datetime'),
+ 'zShare-zENT-43')
+ data_list = get_sqlite_db_records(source_path, query)
- db.close()
- return
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date',
DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date',
@@ -413,13 +577,13 @@ def get_ph31icldsharephotolibphdapsql(files_found, report_folder, seeker, wrap_t
DateTime(zShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Expiry Date',
zShare.ZUUID AS 'zShare-UUID',
zShare.ZORIGINATINGSCOPEIDENTIFIER AS 'zShare-Originating Scope ID',
- CASE zSharePartic.Z62_SHARE
+ CASE zSharePartic.Z61_SHARE
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
- ELSE 'Unknown-New-Value!: ' || zSharePartic.Z62_SHARE || ''
- END AS 'zSharePartic-z62SHARE',
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.Z61_SHARE || ''
+ END AS 'zSharePartic-z61SHARE',
CASE zShare.ZSTATUS
WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1'
WHEN 3 THEN '3-SPL-Actively-Sharing-3'
@@ -532,110 +696,68 @@ def get_ph31icldsharephotolibphdapsql(files_found, report_folder, seeker, wrap_t
CASE zShare.Z_ENT
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || ''
END AS 'zShare-zENT'
FROM ZSHARE zShare
LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK
WHERE zShare.ZSCOPETYPE IN (4, 5)
ORDER BY zShare.ZCREATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43]))
-
- counter += 1
-
- description = 'Parses iCloud Shared Photo Library records and invites from the PhotoData-Photos.sqlite' \
- ' ZSHARE Table and supports iOS 18. Parses iCloud SPL and Participant information' \
- ' records only no asset data being parsed.'
- report = ArtifactHtmlReport('Ph31-iCld Shared Photo Lib Records NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph31-iCld Shared Photo Lib Records NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zShare-Creation Date-0',
- 'zShare-Start Date-1',
- 'zShare-End Date-2',
- 'zShare-Expiry Date-3',
- 'zShare-UUID-4',
- 'zShare-Originating Scope ID-5',
- 'zSharePartic-z62SHARE-6',
- 'zShare-Status-7',
- 'zShare-Scope Type-8',
- 'zShare-Cloud Photo Count-9',
- 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-10',
- 'zShare-Cloud Video Count-11',
- 'zShare-Scope ID-12',
- 'zShare-Title-SPL-13',
- 'zShare-Share URL-14',
- 'zShare-Local Publish State-15',
- 'zShare-Public Permission-16',
- 'zShare-Cloud Local State-17',
- 'zShare-Scope Syncing State-18',
- 'zShare-Auto Share Policy-19',
- 'zSharePartic-Acceptance Status-20',
- 'zSharePartic-User ID-21',
- 'zSharePartic-zPK-22',
- 'zSharePartic-Email Address-23',
- 'zSharePartic-Phone Number-24',
- 'zSharePartic-Participant ID-25',
- 'zSharePartic-UUID-26',
- 'zSharePartic-Is Current User-27',
- 'zSharePartic-Role-28',
- 'zSharePartic-Premission-29',
- 'zShare-Participant Cloud Update State-30',
- 'zSharePartic-Exit State-31',
- 'zShare-Preview State-32',
- 'zShare-Should Notify On Upload Completion-33',
- 'zShare-Should Ignore Budgets-34',
- 'zShare-Exit Source-35',
- 'zShare-Exit State-36',
- 'zShare-Exit Type-37',
- 'zShare-Trashed State-38',
- 'zShare-Cloud Delete State-39',
- 'zShare-Trashed Date-40',
- 'zShare-LastParticipant Asset Trash Notification Date-41',
- 'zShare-Last Participant Asset Trash Notification View Date-42',
- 'zShare-zENT-43')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph31-iCld Shared Photo Lib Records NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph31-iCld Shared Photo Lib Records NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite ZSHARE iCloud Shared Photo Library Records'
- ' with No Asset Data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43]))
+ data_headers = (('zShare-Creation Date-0', 'datetime'),
+ ('zShare-Start Date-1', 'datetime'),
+ ('zShare-End Date-2', 'datetime'),
+ ('zShare-Expiry Date-3', 'datetime'),
+ 'zShare-UUID-4',
+ 'zShare-Originating Scope ID-5',
+ 'zSharePartic-z61SHARE-6',
+ 'zShare-Status-7',
+ 'zShare-Scope Type-8',
+ 'zShare-Cloud Photo Count-9',
+ 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-10',
+ 'zShare-Cloud Video Count-11',
+ 'zShare-Scope ID-12',
+ 'zShare-Title-SPL-13',
+ 'zShare-Share URL-14',
+ 'zShare-Local Publish State-15',
+ 'zShare-Public Permission-16',
+ 'zShare-Cloud Local State-17',
+ 'zShare-Scope Syncing State-18',
+ 'zShare-Auto Share Policy-19',
+ 'zSharePartic-Acceptance Status-20',
+ 'zSharePartic-User ID-21',
+ 'zSharePartic-zPK-22',
+ 'zSharePartic-Email Address-23',
+ 'zSharePartic-Phone Number-24',
+ 'zSharePartic-Participant ID-25',
+ 'zSharePartic-UUID-26',
+ 'zSharePartic-Is Current User-27',
+ 'zSharePartic-Role-28',
+ 'zSharePartic-Premission-29',
+ 'zShare-Participant Cloud Update State-30',
+ 'zSharePartic-Exit State-31',
+ 'zShare-Preview State-32',
+ 'zShare-Should Notify On Upload Completion-33',
+ 'zShare-Should Ignore Budgets-34',
+ 'zShare-Exit Source-35',
+ 'zShare-Exit State-36',
+ 'zShare-Exit Type-37',
+ 'zShare-Trashed State-38',
+ 'zShare-Cloud Delete State-39',
+ ('zShare-Trashed Date-40', 'datetime'),
+ ('zShare-LastParticipant Asset Trash Notification Date-41', 'datetime'),
+ ('zShare-Last Participant Asset Trash Notification View Date-42', 'datetime'),
+ 'zShare-zENT-43')
+ data_list = get_sqlite_db_records(source_path, query)
-__artifacts_v2__ = {
- 'Ph31-iCloud SPL with Participants with NAD-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite Ph31 iCld Shared Photo Library with Partic with No Asset Data',
- 'description': 'Parses iCloud Shared Photo Library records and invites from the PhotoData-Photos.sqlite'
- ' ZSHARE Table and supports iOS 14-18. Parses iCloud SPL and Participant information'
- ' records only no asset data being parsed.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-13',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-F-Cloud_Shared_Methods',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph31icldsharephotolibphdapsql'
- }
-}
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph32AssetsIniCldSPLwContrib.py b/scripts/artifacts/Ph32AssetsIniCldSPLwContrib.py
index f3aec322..ee36f1cb 100644
--- a/scripts/artifacts/Ph32AssetsIniCldSPLwContrib.py
+++ b/scripts/artifacts/Ph32AssetsIniCldSPLwContrib.py
@@ -1,43 +1,50 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 2.0
-#
-# Description:
-# Parses Assets in iCloud Shared Photo Library with contributor information from PhotoData-Photos.sqlite ZSHARE Table
-# and supports iOS 16-18. Parses basic asset data and iCloud SPL and contributor information.
-# If you are attempting to match SPL count with results please check hidden, trashed, and burst assets.
-# This parser is based on research and SQLite Queries written by Scott Koenig
-# This is very large query and script, I recommend opening the TSV generated report with Zimmerman's Tools
-# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results.
-# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347
-#
+__artifacts_v2__ = {
+ 'Ph32iCloudSPLAssetswithContributorPhDaPsql': {
+ 'name': 'Ph32-iCloud SPL Assets with Contributor-PhDaPsql',
+ 'description': 'Parses Assets in iCloud Shared Photo Library with contributor information from'
+ ' PhotoData-Photos.sqlite ZSHARE Table and supports iOS 16-18.'
+ ' Parses basic asset data and iCloud SPL and contributor information.'
+ ' If you are attempting to match SPL count with results please check'
+ ' hidden, trashed, and burst assets.',
+ 'author': 'Scott Koenig https://theforensicscooter.com/',
+ 'version': '4.0',
+ 'date': '2024-12-31',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-F-Cloud_Shared_Methods',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
+@artifact_processor
+def Ph32iCloudSPLAssetswithContributorPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
-def get_ph32icldsplassetsphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('-') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("15.8.2"):
- logfunc("Unsupported version for iCloud Shared Photo Library assets from PhotoData-Photos.sqlite"
- " from iOS " + iosversion)
- if (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ logfunc("Unsupported version PhotoData-Photos.sqlite from iOS " + iosversion)
+ return (), [], source_path
+ if (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17.6")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE
@@ -149,12 +156,7 @@ def get_ph32icldsplassetsphdapsql(files_found, report_folder, seeker, wrap_text,
ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || ''
END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
- zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK',
- CASE zAddAssetAttr.ZSHARETYPE
- WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0'
- WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || ''
- END AS 'zAddAssetAttr-Share Type',
+ zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint',
@@ -183,8 +185,8 @@ def get_ph32icldsplassetsphdapsql(files_found, report_folder, seeker, wrap_text,
CASE SPLzSharePartic.Z54_SHARE
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.Z54_SHARE || ''
END AS 'SPLzSharePartic-z54SHARE',
CASE SPLzShare.ZSTATUS
@@ -207,104 +209,318 @@ def get_ph32icldsplassetsphdapsql(files_found, report_folder, seeker, wrap_text,
LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT
WHERE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE = 1
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51]))
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50]))
- counter += 1
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-Active Library Scope Participation State-1',
+ 'zAsset-zPK-2',
+ 'zAsset-Directory-Path-3',
+ 'zAsset-Filename-4',
+ 'zAddAssetAttr- Original Filename-5',
+ 'zCldMast- Original Filename-6',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-7',
+ 'zAsset-Syndication State-8',
+ 'zAsset-Bundle Scope-9',
+ 'zAddAssetAttr-Imported by-10',
+ 'zExtAttr-Camera Make-11',
+ 'zExtAttr-Camera Model-12',
+ 'zAddAssetAttr.Imported by Bundle Identifier-13',
+ 'zAddAssetAttr-Imported By Display Name-14',
+ 'zAsset-Visibility State-15',
+ 'zAsset-Saved Asset Type-16',
+ 'zAddAssetAttr-Share Type-17',
+ ('zAsset- SortToken -CameraRoll-18', 'datetime'),
+ ('zAsset-Added Date-19', 'datetime'),
+ ('zCldMast-Creation Date-20', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-21',
+ 'zAddAssetAttr-EXIF-String-22',
+ ('zAsset-Modification Date-23', 'datetime'),
+ ('zAsset-Last Shared Date-24', 'datetime'),
+ 'zAsset-Hidden-25',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-26',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-27',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-28',
+ ('zAsset-Trashed Date-29', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-30',
+ 'zAddAssetAttr-zPK-31',
+ 'zAsset-UUID = store.cloudphotodb-32',
+ 'zAddAssetAttr-Master Fingerprint-33',
+ 'zAddAssetAttr.Adjusted Fingerprint-34',
+ 'SPLzSharePartic-Is Current User-35',
+ 'SPLzSharePartic-Role-36',
+ 'zAsstContrib-Participant= zSharePartic-zPK-37',
+ 'SPLzSharePartic-Email Address-38',
+ 'SPLzSharePartic-Phone Number-39',
+ 'SPLzShare-Title-SPL-40',
+ 'SPLzShare-Share URL-SPL-41',
+ 'SPLzShare-Scope ID-SPL-42',
+ ('SPLzShare-Creation Date-SPL-43', 'datetime'),
+ ('SPLzShare-Expiry Date-SPL-44', 'datetime'),
+ 'SPLzShare-Cloud Photo Count-SPL-45',
+ 'SPLzShare-Assets AddedByCamera SmartSharing-46',
+ 'SPLzShare-Cloud Video Count-SPL-47',
+ 'SPLzSharePartic-z54SHARE-48',
+ 'SPLzShare-Status-49',
+ 'SPLzShare-Scope Type-50')
+ data_list = get_sqlite_db_records(source_path, query)
- description = 'Parses Assets in iCloud Shared Photo Library with contributor information from' \
- ' PhotoData-Photos.sqlite ZSHARE Table and supports iOS 16-17.' \
- ' Parses basic asset data and iCloud SPL and contributor information.' \
- ' If you are attempting to match SPL count with results please check' \
- ' hidden, trashed, and burst assets.'
- report = ArtifactHtmlReport('Ph32-iCld Shared Photo Lib Assets-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph32-iCld Shared Photo Lib Assets-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-Active Library Scope Participation State-1',
- 'zAsset-zPK-2',
- 'zAsset-Directory-Path-3',
- 'zAsset-Filename-4',
- 'zAddAssetAttr- Original Filename-5',
- 'zCldMast- Original Filename-6',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-7',
- 'zAsset-Syndication State-8',
- 'zAsset-Bundle Scope-9',
- 'zAddAssetAttr-Imported by-10',
- 'zExtAttr-Camera Make-11',
- 'zExtAttr-Camera Model-12',
- 'zAddAssetAttr.Imported by Bundle Identifier-13',
- 'zAddAssetAttr-Imported By Display Name-14',
- 'zAsset-Visibility State-15',
- 'zAsset-Saved Asset Type-16',
- 'zAddAssetAttr-Share Type-17',
- 'zAsset- SortToken -CameraRoll-18',
- 'zAsset-Added Date-19',
- 'zCldMast-Creation Date-20',
- 'zAddAssetAttr-Time Zone Name-21',
- 'zAddAssetAttr-EXIF-String-22',
- 'zAsset-Modification Date-23',
- 'zAsset-Last Shared Date-24',
- 'zAsset-Hidden-25',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-26',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-27',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-28',
- 'zAsset-Trashed Date-29',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-30',
- 'zAddAssetAttr-Share Type-31',
- 'zAddAssetAttr-zPK-32',
- 'zAsset-UUID = store.cloudphotodb-33',
- 'zAddAssetAttr-Master Fingerprint-34',
- 'zAddAssetAttr.Adjusted Fingerprint-35',
- 'SPLzSharePartic-Is Current User-36',
- 'SPLzSharePartic-Role-37',
- 'zAsstContrib-Participant= zSharePartic-zPK-38',
- 'SPLzSharePartic-Email Address-39',
- 'SPLzSharePartic-Phone Number-10',
- 'SPLzShare-Title-SPL-41',
- 'SPLzShare-Share URL-SPL-42',
- 'SPLzShare-Scope ID-SPL-43',
- 'SPLzShare-Creation Date-SPL-44',
- 'SPLzShare-Expiry Date-SPL-45',
- 'SPLzShare-Cloud Photo Count-SPL-46',
- 'SPLzShare-Assets AddedByCamera SmartSharing-47',
- 'SPLzShare-Cloud Video Count-SPL-48',
- 'SPLzSharePartic-z54SHARE-49',
- 'SPLzShare-Status-50',
- 'SPLzShare-Scope Type-51')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
+ return data_headers, data_list, source_path
- tsvname = 'Ph32-iCld Shared Photo Lib Assets-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
+ elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- tlactivity = 'Ph32-iCld Shared Photo Lib Assets-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ query = '''
+ SELECT
+ DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
+ CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE
+ WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0'
+ WHEN 1 THEN '1-Asset-In-Active-SPL-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || ''
+ END AS 'zAsset-Active Library Scope Participation State',
+ zAsset.Z_PK AS 'zAsset-zPK',
+ zAsset.ZDIRECTORY AS 'zAsset-Directory-Path',
+ zAsset.ZFILENAME AS 'zAsset-Filename',
+ zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename',
+ zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename',
+ zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files',
+ CASE zAsset.ZSYNDICATIONSTATE
+ WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0'
+ WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1'
+ WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2'
+ WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3'
+ WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8'
+ WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9'
+ WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || ''
+ END AS 'zAsset-Syndication State',
+ CASE zAsset.ZBUNDLESCOPE
+ WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0'
+ WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1'
+ WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2'
+ WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || ''
+ END AS 'zAsset-Bundle Scope',
+ CASE zAddAssetAttr.ZIMPORTEDBY
+ WHEN 0 THEN '0-Cloud-Other-0'
+ WHEN 1 THEN '1-Native-Back-Camera-1'
+ WHEN 2 THEN '2-Native-Front-Camera-2'
+ WHEN 3 THEN '3-Third-Party-App-3'
+ WHEN 4 THEN '4-StillTesting-4'
+ WHEN 5 THEN '5-PhotoBooth_PL-Asset-5'
+ WHEN 6 THEN '6-Third-Party-App-6'
+ WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7'
+ WHEN 8 THEN '8-System-Package-App-8'
+ WHEN 9 THEN '9-Native-App-9'
+ WHEN 10 THEN '10-StillTesting-10'
+ WHEN 11 THEN '11-StillTesting-11'
+ WHEN 12 THEN '12-SWY_Syndication_PL-12'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || ''
+ END AS 'zAddAssetAttr-Imported by',
+ zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make',
+ zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model',
+ zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr- Imported by Bundle Identifier',
+ zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr- Imported By Display Name',
+ CASE zAsset.ZVISIBILITYSTATE
+ WHEN 0 THEN '0-Visible-PL-CameraRoll-0'
+ WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || ''
+ END AS 'zAsset-Visibility State',
+ CASE zAsset.ZSAVEDASSETTYPE
+ WHEN 0 THEN '0-Saved-via-other-source-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ WHEN 2 THEN '2-StillTesting-2'
+ WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3'
+ WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4'
+ WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5'
+ WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6'
+ WHEN 7 THEN '7-StillTesting-7'
+ WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8'
+ WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || ''
+ END AS 'zAsset-Saved Asset Type',
+ CASE zAddAssetAttr.ZSHARETYPE
+ WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0'
+ WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || ''
+ END AS 'zAddAssetAttr-Share Type',
+ DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
+ DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date',
+ DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date',
+ zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name',
+ zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String',
+ DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
+ DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date',
+ CASE zAsset.ZHIDDEN
+ WHEN 0 THEN '0-Asset Not Hidden-0'
+ WHEN 1 THEN '1-Asset Hidden-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZHIDDEN || ''
+ END AS 'zAsset-Hidden',
+ CASE zAsset.ZAVALANCHEPICKTYPE
+ WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT'
+ WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT'
+ WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT'
+ WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT'
+ WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT'
+ WHEN 32 THEN '32-StillTesting-32_RT'
+ WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEPICKTYPE || ''
+ END AS 'zAsset-Avalanche_Pick_Type-BurstAsset',
+ CASE zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE
+ WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT'
+ WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT'
+ WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT'
+ WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT'
+ WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT'
+ WHEN 32 THEN '32-StillTesting-32_RT'
+ WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE || ''
+ END AS 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset',
+ CASE zAsset.ZTRASHEDSTATE
+ WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0'
+ WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || ''
+ END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
+ DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
+ zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK',
+ zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
+ zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
+ zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint',
+ zAddAssetAttr.ZADJUSTEDFINGERPRINT AS 'zAddAssetAttr.Adjusted Fingerprint',
+ CASE SPLzSharePartic.ZISCURRENTUSER
+ WHEN 0 THEN '0-Participant-Not_This_User-0'
+ WHEN 1 THEN '1-Participant-Is_This_User-1'
+ ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZISCURRENTUSER || ''
+ END AS 'SPLzSharePartic-Is Current User',
+ CASE SPLzSharePartic.ZROLE
+ WHEN 1 THEN '1-Participant-is-Owner-Role-1'
+ WHEN 2 THEN '2-Participant-is-Invitee-Role-2'
+ ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZROLE || ''
+ END AS 'SPLzSharePartic-Role',
+ zAssetContrib.ZPARTICIPANT AS 'zAsstContrib-Participant= zSharePartic-zPK',
+ SPLzSharePartic.ZEMAILADDRESS AS 'SPLzSharePartic-Email Address',
+ SPLzSharePartic.ZPHONENUMBER AS 'SPLzSharePartic-Phone Number',
+ SPLzShare.ZTITLE AS 'SPLzShare-Title-SPL',
+ SPLzShare.ZSHAREURL AS 'SPLzShare-Share URL-SPL',
+ SPLzShare.ZSCOPEIDENTIFIER AS 'SPLzShare-Scope ID-SPL',
+ DateTime(SPLzShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Creation Date-SPL',
+ DateTime(SPLzShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Expiry Date-SPL',
+ SPLzShare.ZCLOUDPHOTOCOUNT AS 'SPLzShare-Cloud Photo Count-SPL',
+ SPLzShare.ZCOUNTOFASSETSADDEDBYCAMERASMARTSHARING AS 'SPLzShare-Assets AddedByCamera SmartSharing',
+ SPLzShare.ZCLOUDVIDEOCOUNT AS 'SPLzShare-Cloud Video Count-SPL',
+ CASE SPLzSharePartic.Z55_SHARE
+ WHEN 55 THEN '55-SPL-Entity-55'
+ WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
+ ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.Z55_SHARE || ''
+ END AS 'SPLzSharePartic-z55SHARE',
+ CASE SPLzShare.ZSTATUS
+ WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1'
+ WHEN 3 THEN '3-SPL-Actively-Sharing-3'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSTATUS || ''
+ END AS 'SPLzShare-Status',
+ CASE SPLzShare.ZSCOPETYPE
+ WHEN 2 THEN '2-iCloudLink-CMMoment-2'
+ WHEN 4 THEN '4-iCld-Shared-Photo-Library-SPL-4'
+ WHEN 5 THEN '5-SPL-Active-Participant-5'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSCOPETYPE || ''
+ END AS 'SPLzShare-Scope Type'
+ FROM ZASSET zAsset
+ LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
+ LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES
+ LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
+ LEFT JOIN ZSHARE SPLzShare ON SPLzShare.Z_PK = zAsset.ZLIBRARYSCOPE
+ LEFT JOIN ZASSETCONTRIBUTOR zAssetContrib ON zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS = zAsset.Z_PK
+ LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT
+ WHERE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE = 1
+ ORDER BY zAsset.ZDATECREATED
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50]))
- else:
- logfunc('No assets in iCloud Shared Photo Library found in PhotoData-Photos.sqlite ZSHARE table')
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-Active Library Scope Participation State-1',
+ 'zAsset-zPK-2',
+ 'zAsset-Directory-Path-3',
+ 'zAsset-Filename-4',
+ 'zAddAssetAttr- Original Filename-5',
+ 'zCldMast- Original Filename-6',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-7',
+ 'zAsset-Syndication State-8',
+ 'zAsset-Bundle Scope-9',
+ 'zAddAssetAttr-Imported by-10',
+ 'zExtAttr-Camera Make-11',
+ 'zExtAttr-Camera Model-12',
+ 'zAddAssetAttr.Imported by Bundle Identifier-13',
+ 'zAddAssetAttr-Imported By Display Name-14',
+ 'zAsset-Visibility State-15',
+ 'zAsset-Saved Asset Type-16',
+ 'zAddAssetAttr-Share Type-17',
+ ('zAsset- SortToken -CameraRoll-18', 'datetime'),
+ ('zAsset-Added Date-19', 'datetime'),
+ ('zCldMast-Creation Date-20', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-21',
+ 'zAddAssetAttr-EXIF-String-22',
+ ('zAsset-Modification Date-23', 'datetime'),
+ ('zAsset-Last Shared Date-24', 'datetime'),
+ 'zAsset-Hidden-25',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-26',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-27',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-28',
+ ('zAsset-Trashed Date-29', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-30',
+ 'zAddAssetAttr-zPK-31',
+ 'zAsset-UUID = store.cloudphotodb-32',
+ 'zAddAssetAttr-Master Fingerprint-33',
+ 'zAddAssetAttr.Adjusted Fingerprint-34',
+ 'SPLzSharePartic-Is Current User-35',
+ 'SPLzSharePartic-Role-36',
+ 'zAsstContrib-Participant= zSharePartic-zPK-37',
+ 'SPLzSharePartic-Email Address-38',
+ 'SPLzSharePartic-Phone Number-39',
+ 'SPLzShare-Title-SPL-40',
+ 'SPLzShare-Share URL-SPL-41',
+ 'SPLzShare-Scope ID-SPL-42',
+ ('SPLzShare-Creation Date-SPL-43', 'datetime'),
+ ('SPLzShare-Expiry Date-SPL-44', 'datetime'),
+ 'SPLzShare-Cloud Photo Count-SPL-45',
+ 'SPLzShare-Assets AddedByCamera SmartSharing-46',
+ 'SPLzShare-Cloud Video Count-SPL-47',
+ 'SPLzSharePartic-z55SHARE-48',
+ 'SPLzShare-Status-49',
+ 'SPLzShare-Scope Type-50')
+ data_list = get_sqlite_db_records(source_path, query)
- db.close()
- return
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE
@@ -361,10 +577,10 @@ def get_ph32icldsplassetsphdapsql(files_found, report_folder, seeker, wrap_text,
ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || ''
END AS 'zAsset-Visibility State',
CASE zAsset.ZISRECENTLYSAVED
- WHEN 0 THEN '0-Not_Recently_Saved iOS18_Still_Testing-0'
- WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1'
+ WHEN 0 THEN '0-Not_Recently_Saved-0'
+ WHEN 1 THEN '1-Recently_Saved-1'
ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || ''
- END AS 'zAsset-Is_Recently_Saved-iOS18',
+ END AS 'zAsset-Is_Recently_Saved',
CASE zAsset.ZSAVEDASSETTYPE
WHEN 0 THEN '0-Saved-via-other-source-0'
WHEN 1 THEN '1-StillTesting-1'
@@ -391,10 +607,10 @@ def get_ph32icldsplassetsphdapsql(files_found, report_folder, seeker, wrap_text,
DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date',
CASE zAsset.ZISDETECTEDSCREENSHOT
- WHEN 0 THEN '0-Not_Detected_Screenshot iOS18_Still_Testing-0'
- WHEN 1 THEN '1-Detected_Screenshot iOS18_Still_Testing-1'
+ WHEN 0 THEN '0-Not_Screenshot-0'
+ WHEN 1 THEN '1-Screenshot-1'
ELSE 'Unknown-New-Value!: ' || zAsset.ZISDETECTEDSCREENSHOT || ''
- END AS 'zAsset-Is_Detected_Screenshot-iOS18',
+ END AS 'zAsset-Is_Detected_Screenshot',
CASE zAsset.ZHIDDEN
WHEN 0 THEN '0-Asset Not Hidden-0'
WHEN 1 THEN '1-Asset Hidden-1'
@@ -402,15 +618,15 @@ def get_ph32icldsplassetsphdapsql(files_found, report_folder, seeker, wrap_text,
END AS 'zAsset-Hidden',
CASE zAsset.ZADJUSTMENTSSTATE
WHEN 0 THEN '0-No-Adjustments-0'
- WHEN 2 THEN '2-Yes-Adjustments iOS18_needs_update_Decoding-2'
- WHEN 3 THEN '3-Yes-Adjustments iOS18_needs_update_Decoding-3'
+ WHEN 2 THEN '2-Adjusted-PhotosAppEdit-2'
+ WHEN 3 THEN '3-Adjusted-Camera-lens-3'
ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || ''
- END AS 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18',
+ END AS 'zAsset-Adjustments_State',
CASE zAsset.ZAVALANCHEKIND
WHEN 0 THEN '0-No_Avalanche iOS18_Still_Testing-0'
WHEN 1 THEN '1-Is_Avalanche iOS18_Still_Testing-1'
ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEKIND || ''
- END AS 'zAsset-Avalanche_Kind-iOS18',
+ END AS 'zAsset-Avalanche_Kind',
CASE zAsset.ZAVALANCHEPICKTYPE
WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT'
WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT'
@@ -437,16 +653,11 @@ def get_ph32icldsplassetsphdapsql(files_found, report_folder, seeker, wrap_text,
ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || ''
END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
- zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK',
- CASE zAddAssetAttr.ZSHARETYPE
- WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0'
- WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || ''
- END AS 'zAddAssetAttr-Share Type',
+ zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18',
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash',
CASE SPLzSharePartic.ZISCURRENTUSER
WHEN 0 THEN '0-Participant-Not_This_User-0'
WHEN 1 THEN '1-Participant-Is_This_User-1'
@@ -468,11 +679,12 @@ def get_ph32icldsplassetsphdapsql(files_found, report_folder, seeker, wrap_text,
SPLzShare.ZCLOUDPHOTOCOUNT AS 'SPLzShare-Cloud Photo Count-SPL',
SPLzShare.ZCOUNTOFASSETSADDEDBYCAMERASMARTSHARING AS 'SPLzShare-Assets AddedByCamera SmartSharing',
SPLzShare.ZCLOUDVIDEOCOUNT AS 'SPLzShare-Cloud Video Count-SPL',
- CASE zExtAttr.ZGENERATIVEAITYPE
- WHEN 0 THEN '0-Not_Generative_AI iOS18_Still_Testing-0'
+ CASE zExtAttr.ZGENERATIVEAITYPE
+ WHEN 0 THEN '0-Gen_AI_Type_Not_Detected-0'
+ WHEN 2 THEN '2-CleanUp-SafetyFilter-2'
ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || ''
- END AS 'zExtAttr-Generative_AI_Type-iOS18',
- zExtAttr.ZCREDIT AS 'zExtAttr-Credit-iOS18'
+ END AS 'zExtAttr-Generative_AI_Type',
+ zExtAttr.ZCREDIT AS 'zExtAttr-Credit'
FROM ZASSET zAsset
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES
@@ -482,117 +694,71 @@ def get_ph32icldsplassetsphdapsql(files_found, report_folder, seeker, wrap_text,
LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT
WHERE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE = 1
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54]))
-
- counter += 1
-
- description = 'Parses Assets in iCloud Shared Photo Library with contributor information from' \
- ' PhotoData-Photos.sqlite ZSHARE Table and supports iOS 18.' \
- ' Parses basic asset data and iCloud SPL and contributor information.' \
- ' If you are attempting to match SPL count with results please check' \
- ' hidden, trashed, and burst assets.'
- report = ArtifactHtmlReport('Ph32-iCld Shared Photo Lib Assets-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph32-iCld Shared Photo Lib Assets-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-Active Library Scope Participation State-1',
- 'zAsset-zPK-2',
- 'zAsset-Directory-Path-3',
- 'zAsset-Filename-4',
- 'zAddAssetAttr- Original Filename-5',
- 'zCldMast- Original Filename-6',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-7',
- 'zAsset-Syndication State-8',
- 'zAsset-Bundle Scope-9',
- 'zAddAssetAttr-Imported by-10',
- 'zExtAttr-Camera Make-11',
- 'zExtAttr-Camera Model-12',
- 'zAddAssetAttr- Imported by Bundle Identifier-13',
- 'zAddAssetAttr- Imported By Display Name-14',
- 'zAsset-Visibility State-15',
- 'zAsset-Is_Recently_Saved-iOS18-16',
- 'zAsset-Saved Asset Type-17',
- 'zAddAssetAttr-Share Type-18',
- 'zAsset- SortToken -CameraRoll-19',
- 'zAsset-Added Date-20',
- 'zCldMast-Creation Date-21',
- 'zAddAssetAttr-Time Zone Name-22',
- 'zAddAssetAttr-EXIF-String-23',
- 'zAsset-Modification Date-24',
- 'zAsset-Last Shared Date-25',
- 'zAsset-Is_Detected_Screenshot-iOS18-26',
- 'zAsset-Hidden-27',
- 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18-28',
- 'zAsset-Avalanche_Kind-iOS18-29',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-30',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-31',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-32',
- 'zAsset-Trashed Date-33',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-34',
- 'zAddAssetAttr-Share Type-35',
- 'zAddAssetAttr-zPK-36',
- 'zAsset-UUID = store.cloudphotodb-37',
- 'zAddAssetAttr-Original Stable Hash-iOS18-38',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-39',
- 'SPLzSharePartic-Is Current User-40',
- 'SPLzSharePartic-Role-41',
- 'zAsstContrib-Participant= zSharePartic-zPK-42',
- 'SPLzSharePartic-Email Address-43',
- 'SPLzSharePartic-Phone Number-44',
- 'SPLzShare-Title-SPL-45',
- 'SPLzShare-Share URL-SPL-46',
- 'SPLzShare-Scope ID-SPL-47',
- 'SPLzShare-Creation Date-SPL-48',
- 'SPLzShare-Expiry Date-SPL-49',
- 'SPLzShare-Cloud Photo Count-SPL-50',
- 'SPLzShare-Assets AddedByCamera SmartSharing-51',
- 'SPLzShare-Cloud Video Count-SPL-52',
- 'zExtAttr-Generative_AI_Type-iOS18-53',
- 'zExtAttr-Credit-iOS18-54')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph32-iCld Shared Photo Lib Assets-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph32-iCld Shared Photo Lib Assets-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No assets in iCloud Shared Photo Library found in PhotoData-Photos.sqlite ZSHARE table')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53]))
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-Active Library Scope Participation State-1',
+ 'zAsset-zPK-2',
+ 'zAsset-Directory-Path-3',
+ 'zAsset-Filename-4',
+ 'zAddAssetAttr- Original Filename-5',
+ 'zCldMast- Original Filename-6',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-7',
+ 'zAsset-Syndication State-8',
+ 'zAsset-Bundle Scope-9',
+ 'zAddAssetAttr-Imported by-10',
+ 'zExtAttr-Camera Make-11',
+ 'zExtAttr-Camera Model-12',
+ 'zAddAssetAttr- Imported by Bundle Identifier-13',
+ 'zAddAssetAttr- Imported By Display Name-14',
+ 'zAsset-Visibility State-15',
+ 'zAsset-Is_Recently_Saved-16',
+ 'zAsset-Saved Asset Type-17',
+ 'zAddAssetAttr-Share Type-18',
+ ('zAsset- SortToken -CameraRoll-19', 'datetime'),
+ ('zAsset-Added Date-20', 'datetime'),
+ ('zCldMast-Creation Date-21', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-22',
+ 'zAddAssetAttr-EXIF-String-23',
+ ('zAsset-Modification Date-24', 'datetime'),
+ ('zAsset-Last Shared Date-25', 'datetime'),
+ 'zAsset-Is_Detected_Screenshot-26',
+ 'zAsset-Hidden-27',
+ 'zAsset-Adjustments_State-Camera-Effects-Filters-28',
+ 'zAsset-Avalanche_Kind-29',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-30',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-31',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-32',
+ ('zAsset-Trashed Date-33', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-34',
+ 'zAddAssetAttr-zPK-35',
+ 'zAsset-UUID = store.cloudphotodb-36',
+ 'zAddAssetAttr-Original Stable Hash-37',
+ 'zAddAssetAttr.Adjusted Stable Hash-38',
+ 'SPLzSharePartic-Is Current User-39',
+ 'SPLzSharePartic-Role-40',
+ 'zAsstContrib-Participant= zSharePartic-zPK-41',
+ 'SPLzSharePartic-Email Address-42',
+ 'SPLzSharePartic-Phone Number-43',
+ 'SPLzShare-Title-SPL-44',
+ 'SPLzShare-Share URL-SPL-45',
+ 'SPLzShare-Scope ID-SPL-46',
+ ('SPLzShare-Creation Date-SPL-47', 'datetime'),
+ ('SPLzShare-Expiry Date-SPL-48', 'datetime'),
+ 'SPLzShare-Cloud Photo Count-SPL-49',
+ 'SPLzShare-Assets AddedByCamera SmartSharing-50',
+ 'SPLzShare-Cloud Video Count-SPL-51',
+ 'zExtAttr-Generative_AI_Type-52',
+ 'zExtAttr-Credit-53')
+ data_list = get_sqlite_db_records(source_path, query)
-__artifacts_v2__ = {
- 'Ph32-iCloud SPL Assets with Contributor-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite Ph32 iCld Shared Photo Library Assets with Contributor',
- 'description': 'Parses Assets in iCloud Shared Photo Library with contributor information from'
- ' PhotoData-Photos.sqlite ZSHARE Table and supports iOS 16-18.'
- ' Parses basic asset data and iCloud SPL and contributor information.'
- ' If you are attempting to match SPL count with results please check'
- ' hidden, trashed, and burst assets.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-13',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-F-Cloud_Shared_Methods',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph32icldsplassetsphdapsql'
- }
-}
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph33AssetsIniCldSPLfromOtherContrib.py b/scripts/artifacts/Ph33AssetsIniCldSPLfromOtherContrib.py
index abb5eb31..2db9347f 100644
--- a/scripts/artifacts/Ph33AssetsIniCldSPLfromOtherContrib.py
+++ b/scripts/artifacts/Ph33AssetsIniCldSPLfromOtherContrib.py
@@ -1,43 +1,50 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 2.0
-#
-# Description:
-# Parses Assets in iCloud Shared Photo Library from other contributors from PhotoData-Photos.sqlite ZSHARE Table
-# and supports iOS 16-18. Parses basic asset and iCloud SPL data for assets that were shared by other contributors.
-# If you are attempting to match SPL count with results please check hidden, trashed, and burst assets.
-# This parser is based on research and SQLite Queries written by Scott Koenig
-# This is very large query and script, I recommend opening the TSV generated report with Zimmerman's Tools
-# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results.
-# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347
-#
+__artifacts_v2__ = {
+ 'Ph33iCldSPLAssetsfromothercontribPhDaPsql': {
+ 'name': 'Ph33-iCld SPL Assets from other contrib-PhDaPsql',
+ 'description': 'Parses Assets in iCloud Shared Photo Library from other contributors'
+ ' from PhotoData-Photos.sqlite ZSHARE Table and supports iOS 16-17.'
+ ' Parses basic asset and iCloud SPL data for assets that were shared by other contributors.'
+ ' If you are attempting to match SPL count with results please check'
+ ' hidden, trashed, and burst assets.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-F-Cloud_Shared_Methods',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
+@artifact_processor
+def Ph33iCldSPLAssetsfromothercontribPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
-def get_ph33splassetsfromothercontribphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("15.8.2"):
- logfunc("Unsupported version for iCloud Shared Photo Library assets from PhotoData-Photos.sqlite"
- " from iOS " + iosversion)
+ logfunc("Unsupported version PhotoData-Photos.sqlite from iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE
@@ -150,11 +157,6 @@ def get_ph33splassetsfromothercontribphdapsql(files_found, report_folder, seeker
END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK',
- CASE zAddAssetAttr.ZSHARETYPE
- WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0'
- WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || ''
- END AS 'zAddAssetAttr-Share Type',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint',
@@ -189,101 +191,77 @@ def get_ph33splassetsfromothercontribphdapsql(files_found, report_folder, seeker
LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT
WHERE SPLzSharePartic.ZISCURRENTUSER = 0
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48]))
-
- counter += 1
-
- description = 'Parses Assets in iCloud Shared Photo Library from other contributors' \
- ' from PhotoData-Photos.sqlite ZSHARE Table and supports iOS 16-17.' \
- ' Parses basic asset and iCloud SPL data for assets that were shared by other contributors.' \
- ' If you are attempting to match SPL count with results please check' \
- ' hidden, trashed, and burst assets.'
- report = ArtifactHtmlReport('Ph33-iCld SPL Assets from other contrib-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph33-iCld SPL Assets from other contrib-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-Active Library Scope Participation State-1',
- 'zAsset-zPK-2',
- 'zAsset-Directory-Path-3',
- 'zAsset-Filename-4',
- 'zAddAssetAttr- Original Filename-5',
- 'zCldMast- Original Filename-6',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-7',
- 'zAsset-Syndication State-8',
- 'zAsset-Bundle Scope-9',
- 'zAddAssetAttr-Imported by-10',
- 'zExtAttr-Camera Make-11',
- 'zExtAttr-Camera Model-12',
- 'zAddAssetAttr.Imported by Bundle Identifier-13',
- 'zAddAssetAttr-Imported By Display Name-14',
- 'zAsset-Visibility State-15',
- 'zAsset-Saved Asset Type-16',
- 'zAddAssetAttr-Share Type-17',
- 'zAsset- SortToken -CameraRoll-18',
- 'zAsset-Added Date-19',
- 'zCldMast-Creation Date-20',
- 'zAddAssetAttr-Time Zone Name-21',
- 'zAddAssetAttr-EXIF-String-22',
- 'zAsset-Modification Date-23',
- 'zAsset-Last Shared Date-24',
- 'zAsset-Hidden-25',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-26',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-27',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-28',
- 'zAsset-Trashed Date-29',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-30',
- 'zAddAssetAttr-Share Type-31',
- 'zAddAssetAttr-zPK-32',
- 'zAsset-UUID = store.cloudphotodb-33',
- 'zAddAssetAttr-Master Fingerprint-34',
- 'zAddAssetAttr.Adjusted Fingerprint-35',
- 'SPLzSharePartic-Is Current User-36',
- 'SPLzSharePartic-Role-37',
- 'zAsstContrib-Participant= zSharePartic-zPK-38',
- 'SPLzSharePartic-Email Address-39',
- 'SPLzSharePartic-Phone Number-40',
- 'SPLzShare-Title-SPL-41',
- 'SPLzShare-Share URL-SPL-42',
- 'SPLzShare-Scope ID-SPL-43',
- 'SPLzShare-Creation Date-SPL-44',
- 'SPLzShare-Expiry Date-SPL-45',
- 'SPLzShare-Cloud Photo Count-SPL-46',
- 'SPLzShare-Assets AddedByCamera SmartSharing-47',
- 'SPLzShare-Cloud Video Count-SPL-48')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph33-iCld SPL Assets from other contrib-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph33-iCld SPL Assets from other contrib-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47]))
- else:
- logfunc('No iCloud SPL assets from other contributors found in PhotoData-Photos.sqlite ZSHARE table')
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-Active Library Scope Participation State-1',
+ 'zAsset-zPK-2',
+ 'zAsset-Directory-Path-3',
+ 'zAsset-Filename-4',
+ 'zAddAssetAttr- Original Filename-5',
+ 'zCldMast- Original Filename-6',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-7',
+ 'zAsset-Syndication State-8',
+ 'zAsset-Bundle Scope-9',
+ 'zAddAssetAttr-Imported by-10',
+ 'zExtAttr-Camera Make-11',
+ 'zExtAttr-Camera Model-12',
+ 'zAddAssetAttr.Imported by Bundle Identifier-13',
+ 'zAddAssetAttr-Imported By Display Name-14',
+ 'zAsset-Visibility State-15',
+ 'zAsset-Saved Asset Type-16',
+ 'zAddAssetAttr-Share Type-17',
+ ('zAsset- SortToken -CameraRoll-18', 'datetime'),
+ ('zAsset-Added Date-19', 'datetime'),
+ ('zCldMast-Creation Date-20', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-21',
+ 'zAddAssetAttr-EXIF-String-22',
+ ('zAsset-Modification Date-23', 'datetime'),
+ ('zAsset-Last Shared Date-24', 'datetime'),
+ 'zAsset-Hidden-25',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-26',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-27',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-28',
+ ('zAsset-Trashed Date-29', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-30',
+ 'zAddAssetAttr-zPK-31',
+ 'zAsset-UUID = store.cloudphotodb-32',
+ 'zAddAssetAttr-Master Fingerprint-33',
+ 'zAddAssetAttr.Adjusted Fingerprint-34',
+ 'SPLzSharePartic-Is Current User-35',
+ 'SPLzSharePartic-Role-36',
+ 'zAsstContrib-Participant= zSharePartic-zPK-37',
+ 'SPLzSharePartic-Email Address-38',
+ 'SPLzSharePartic-Phone Number-39',
+ 'SPLzShare-Title-SPL-40',
+ 'SPLzShare-Share URL-SPL-41',
+ 'SPLzShare-Scope ID-SPL-42',
+ ('SPLzShare-Creation Date-SPL-43', 'datetime'),
+ ('SPLzShare-Expiry Date-SPL-44', 'datetime'),
+ 'SPLzShare-Cloud Photo Count-SPL-45',
+ 'SPLzShare-Assets AddedByCamera SmartSharing-46',
+ 'SPLzShare-Cloud Video Count-SPL-47')
+ data_list = get_sqlite_db_records(source_path, query)
- db.close()
- return
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE
@@ -340,10 +318,10 @@ def get_ph33splassetsfromothercontribphdapsql(files_found, report_folder, seeker
ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || ''
END AS 'zAsset-Visibility State',
CASE zAsset.ZISRECENTLYSAVED
- WHEN 0 THEN '0-Not_Recently_Saved iOS18_Still_Testing-0'
- WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1'
+ WHEN 0 THEN '0-Not_Recently_Saved-0'
+ WHEN 1 THEN '1-Recently_Saved-1'
ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || ''
- END AS 'zAsset-Is_Recently_Saved-iOS18',
+ END AS 'zAsset-Is_Recently_Saved',
CASE zAsset.ZSAVEDASSETTYPE
WHEN 0 THEN '0-Saved-via-other-source-0'
WHEN 1 THEN '1-StillTesting-1'
@@ -370,10 +348,10 @@ def get_ph33splassetsfromothercontribphdapsql(files_found, report_folder, seeker
DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date',
CASE zAsset.ZISDETECTEDSCREENSHOT
- WHEN 0 THEN '0-Not_Detected_Screenshot iOS18_Still_Testing-0'
- WHEN 1 THEN '1-Detected_Screenshot iOS18_Still_Testing-1'
+ WHEN 0 THEN '0-Not_Screenshot-0'
+ WHEN 1 THEN '1-Screenshot-1'
ELSE 'Unknown-New-Value!: ' || zAsset.ZISDETECTEDSCREENSHOT || ''
- END AS 'zAsset-Is_Detected_Screenshot-iOS18',
+ END AS 'zAsset-Is_Detected_Screenshot',
CASE zAsset.ZHIDDEN
WHEN 0 THEN '0-Asset Not Hidden-0'
WHEN 1 THEN '1-Asset Hidden-1'
@@ -381,10 +359,10 @@ def get_ph33splassetsfromothercontribphdapsql(files_found, report_folder, seeker
END AS 'zAsset-Hidden',
CASE zAsset.ZADJUSTMENTSSTATE
WHEN 0 THEN '0-No-Adjustments-0'
- WHEN 2 THEN '2-Yes-Adjustments iOS18_needs_update_Decoding-2'
- WHEN 3 THEN '3-Yes-Adjustments iOS18_needs_update_Decoding-3'
+ WHEN 2 THEN '2-Adjusted-PhotosAppEdit-2'
+ WHEN 3 THEN '3-Adjusted-Camera-lens-3'
ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || ''
- END AS 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18',
+ END AS 'zAsset-Adjustments_State',
CASE zAsset.ZAVALANCHEKIND
WHEN 0 THEN '0-No_Avalanche iOS18_Still_Testing-0'
WHEN 1 THEN '1-Is_Avalanche iOS18_Still_Testing-1'
@@ -416,16 +394,11 @@ def get_ph33splassetsfromothercontribphdapsql(files_found, report_folder, seeker
ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || ''
END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
- zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK',
- CASE zAddAssetAttr.ZSHARETYPE
- WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0'
- WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || ''
- END AS 'zAddAssetAttr-Share Type',
+ zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18',
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash',
CASE SPLzSharePartic.ZISCURRENTUSER
WHEN 0 THEN '0-Participant-Not_This_User-0'
WHEN 1 THEN '1-Participant-Is_This_User-1'
@@ -447,11 +420,12 @@ def get_ph33splassetsfromothercontribphdapsql(files_found, report_folder, seeker
SPLzShare.ZCLOUDPHOTOCOUNT AS 'SPLzShare-Cloud Photo Count-SPL',
SPLzShare.ZCOUNTOFASSETSADDEDBYCAMERASMARTSHARING AS 'SPLzShare-Assets AddedByCamera SmartSharing',
SPLzShare.ZCLOUDVIDEOCOUNT AS 'SPLzShare-Cloud Video Count-SPL',
- CASE zExtAttr.ZGENERATIVEAITYPE
- WHEN 0 THEN '0-Not_Generative_AI iOS18_Still_Testing-0'
- ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || ''
- END AS 'zExtAttr-Generative_AI_Type-iOS18',
- zExtAttr.ZCREDIT AS 'zExtAttr-Credit-iOS18'
+ CASE zExtAttr.ZGENERATIVEAITYPE
+ WHEN 0 THEN '0-Gen_AI_Type_Not_Detected-0'
+ WHEN 2 THEN '2-CleanUp-SafetyFilter-2'
+ ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || ''
+ END AS 'zExtAttr-Generative_AI_Type',
+ zExtAttr.ZCREDIT AS 'zExtAttr-Credit'
FROM ZASSET zAsset
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES
@@ -461,117 +435,71 @@ def get_ph33splassetsfromothercontribphdapsql(files_found, report_folder, seeker
LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT
WHERE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE = 1
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54]))
-
- counter += 1
-
- description = 'Parses Assets in iCloud Shared Photo Library from other contributors' \
- ' from PhotoData-Photos.sqlite ZSHARE Table and supports iOS 18.' \
- ' Parses basic asset and iCloud SPL data for assets that were shared by other contributors.' \
- ' If you are attempting to match SPL count with results please check' \
- ' hidden, trashed, and burst assets.'
- report = ArtifactHtmlReport('Ph33-iCld SPL Assets from other contrib-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph33-iCld SPL Assets from other contrib-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-Active Library Scope Participation State-1',
- 'zAsset-zPK-2',
- 'zAsset-Directory-Path-3',
- 'zAsset-Filename-4',
- 'zAddAssetAttr- Original Filename-5',
- 'zCldMast- Original Filename-6',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-7',
- 'zAsset-Syndication State-8',
- 'zAsset-Bundle Scope-9',
- 'zAddAssetAttr-Imported by-10',
- 'zExtAttr-Camera Make-11',
- 'zExtAttr-Camera Model-12',
- 'zAddAssetAttr- Imported by Bundle Identifier-13',
- 'zAddAssetAttr- Imported By Display Name-14',
- 'zAsset-Visibility State-15',
- 'zAsset-Is_Recently_Saved-iOS18-16',
- 'zAsset-Saved Asset Type-17',
- 'zAddAssetAttr-Share Type-18',
- 'zAsset- SortToken -CameraRoll-19',
- 'zAsset-Added Date-20',
- 'zCldMast-Creation Date-21',
- 'zAddAssetAttr-Time Zone Name-22',
- 'zAddAssetAttr-EXIF-String-23',
- 'zAsset-Modification Date-24',
- 'zAsset-Last Shared Date-25',
- 'zAsset-Is_Detected_Screenshot-iOS18-26',
- 'zAsset-Hidden-27',
- 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18-28',
- 'zAsset-Avalanche_Kind-iOS18-29',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-30',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-31',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-32',
- 'zAsset-Trashed Date-33',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-34',
- 'zAddAssetAttr-Share Type-35',
- 'zAddAssetAttr-zPK-36',
- 'zAsset-UUID = store.cloudphotodb-37',
- 'zAddAssetAttr-Original Stable Hash-iOS18-38',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-39',
- 'SPLzSharePartic-Is Current User-40',
- 'SPLzSharePartic-Role-41',
- 'zAsstContrib-Participant= zSharePartic-zPK-42',
- 'SPLzSharePartic-Email Address-43',
- 'SPLzSharePartic-Phone Number-44',
- 'SPLzShare-Title-SPL-45',
- 'SPLzShare-Share URL-SPL-46',
- 'SPLzShare-Scope ID-SPL-47',
- 'SPLzShare-Creation Date-SPL-48',
- 'SPLzShare-Expiry Date-SPL-49',
- 'SPLzShare-Cloud Photo Count-SPL-50',
- 'SPLzShare-Assets AddedByCamera SmartSharing-51',
- 'SPLzShare-Cloud Video Count-SPL-52',
- 'zExtAttr-Generative_AI_Type-iOS18-53',
- 'zExtAttr-Credit-iOS18-54')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph33-iCld SPL Assets from other contrib-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph33-iCld SPL Assets from other contrib-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No iCloud SPL assets from other contributors found in PhotoData-Photos.sqlite ZSHARE table')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53]))
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-Active Library Scope Participation State-1',
+ 'zAsset-zPK-2',
+ 'zAsset-Directory-Path-3',
+ 'zAsset-Filename-4',
+ 'zAddAssetAttr- Original Filename-5',
+ 'zCldMast- Original Filename-6',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-7',
+ 'zAsset-Syndication State-8',
+ 'zAsset-Bundle Scope-9',
+ 'zAddAssetAttr-Imported by-10',
+ 'zExtAttr-Camera Make-11',
+ 'zExtAttr-Camera Model-12',
+ 'zAddAssetAttr- Imported by Bundle Identifier-13',
+ 'zAddAssetAttr- Imported By Display Name-14',
+ 'zAsset-Visibility State-15',
+ 'zAsset-Is_Recently_Saved-16',
+ 'zAsset-Saved Asset Type-17',
+ 'zAddAssetAttr-Share Type-18',
+ ('zAsset- SortToken -CameraRoll-19', 'datetime'),
+ ('zAsset-Added Date-20', 'datetime'),
+ ('zCldMast-Creation Date-21', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-22',
+ 'zAddAssetAttr-EXIF-String-23',
+ ('zAsset-Modification Date-24', 'datetime'),
+ ('zAsset-Last Shared Date-25', 'datetime'),
+ 'zAsset-Is_Detected_Screenshot-26',
+ 'zAsset-Hidden-27',
+ 'zAsset-Adjustments_State-Camera-Effects-Filters-28',
+ 'zAsset-Avalanche_Kind-29',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-30',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-31',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-32',
+ ('zAsset-Trashed Date-33', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-34',
+ 'zAddAssetAttr-zPK-35',
+ 'zAsset-UUID = store.cloudphotodb-36',
+ 'zAddAssetAttr-Original Stable Hash-37',
+ 'zAddAssetAttr.Adjusted Stable Hash-38',
+ 'SPLzSharePartic-Is Current User-39',
+ 'SPLzSharePartic-Role-40',
+ 'zAsstContrib-Participant= zSharePartic-zPK-41',
+ 'SPLzSharePartic-Email Address-42',
+ 'SPLzSharePartic-Phone Number-43',
+ 'SPLzShare-Title-SPL-44',
+ 'SPLzShare-Share URL-SPL-45',
+ 'SPLzShare-Scope ID-SPL-46',
+ ('SPLzShare-Creation Date-SPL-47', 'datetime'),
+ ('SPLzShare-Expiry Date-SPL-48', 'datetime'),
+ 'SPLzShare-Cloud Photo Count-SPL-49',
+ 'SPLzShare-Assets AddedByCamera SmartSharing-50',
+ 'SPLzShare-Cloud Video Count-SPL-51',
+ 'zExtAttr-Generative_AI_Type-52',
+ 'zExtAttr-Credit-53')
+ data_list = get_sqlite_db_records(source_path, query)
-__artifacts_v2__ = {
- 'Ph33-iCld SPL Assets from other contrib-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite Ph33 iCld Shared Photo Library Assets from other Contributors',
- 'description': 'Parses Assets in iCloud Shared Photo Library from other contributors'
- ' from PhotoData-Photos.sqlite ZSHARE Table and supports iOS 16-17.'
- ' Parses basic asset and iCloud SPL data for assets that were shared by other contributors.'
- ' If you are attempting to match SPL count with results please check'
- ' hidden, trashed, and burst assets.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-13',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-F-Cloud_Shared_Methods',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph33splassetsfromothercontribphdapsql'
- }
-}
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph34iCloudSharedLinksNAD.py b/scripts/artifacts/Ph34iCloudSharedLinksNAD.py
index 4acfdf9e..48457a1e 100644
--- a/scripts/artifacts/Ph34iCloudSharedLinksNAD.py
+++ b/scripts/artifacts/Ph34iCloudSharedLinksNAD.py
@@ -1,40 +1,47 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 2.0
-#
-# Description:
-# Parses iCloud Shared Link records from the PhotoData-Photos.sqlite ZSHARE Table
-# and supports iOS 14-18. Parses iCloud Shared Link records only no asset data being parsed.
-# This parser is based on research and SQLite Queries written by Scott Koenig
-# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347
-#
+__artifacts_v2__ = {
+ 'Ph34iCloudSharedLinkRecordswithNADPhDaPsql': {
+ 'name': 'Ph34-iCloud Shared Link Records with NAD-PhDaPsql',
+ 'description': 'Parses iCloud Shared Link records from the PhotoData-Photos.sqlite ZSHARE Table'
+ ' and supports iOS 14-18. Parses iCloud Shared Link records only no asset data being parsed.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-F-Cloud_Shared_Methods',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
-
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
-def get_ph34icldsharedlinksphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
+@artifact_processor
+def Ph34iCloudSharedLinkRecordswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("13.7"):
- logfunc("Unsupported version for PhotoData-Photos.sqlite zSHARE iCloud Shared Link records"
- " with no asset data from iOS " + iosversion)
+ logfunc("Unsupported version for PhotoData-Photos.sqlite from iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date',
DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date',
@@ -112,88 +119,67 @@ def get_ph34icldsharedlinksphdapsql(files_found, report_folder, seeker, wrap_tex
CASE zShare.Z_ENT
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || ''
END AS 'zShare-zENT'
FROM ZSHARE zShare
LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK
WHERE zShare.ZSCOPETYPE = 2
ORDER BY zShare.ZCREATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31]))
+
+ data_headers = (('zShare-Creation Date-0', 'datetime'),
+ ('zShare-Start Date-1', 'datetime'),
+ ('zShare-End Date-2', 'datetime'),
+ ('zShare-Expiry Date-3', 'datetime'),
+ 'zShare-UUID-4',
+ 'zShare-Originating Scope ID-5',
+ 'zShare-Status-6',
+ 'zShare-Scope Type-7',
+ 'zShare-Asset Count-CMM-8',
+ 'zShare-Force Sync Attempted-CMM-9',
+ 'zShare-Photos Count-CMM-10',
+ 'zShare-Uploaded Photos Count-CMM-11',
+ 'zShare-Videos Count-CMM-12',
+ 'zShare-Uploaded Videos Count-CMM-13',
+ 'zShare-Scope ID-14',
+ 'zShare-Title-SPL-15',
+ 'zShare-Share URL-16',
+ 'zShare-Local Publish State-17',
+ 'zShare-Public Permission-18',
+ 'zSharePartic-Acceptance Status-19',
+ 'zSharePartic-User ID-20',
+ 'zSharePartic-zPK-21',
+ 'zSharePartic-Email Address-22',
+ 'zSharePartic-Phone Number-23',
+ 'zSharePartic-Is Current User-24',
+ 'zSharePartic-Role-25',
+ 'zSharePartic-Premission-26',
+ 'zShare-Should Notify On Upload Completion-27',
+ 'zShare-Should Ignor Budgets-28',
+ 'zShare-Trashed State-29',
+ 'zShare-Cloud Delete State-30',
+ 'zShare-zENT-31')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
+ elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17.6")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31]))
- counter += 1
-
- description = 'Parses iCloud Shared Link records from the PhotoData-Photos.sqlite ZSHARE Table' \
- ' and supports iOS 14-15. Parses iCloud Shared Link records only no asset data being parsed.'
- report = ArtifactHtmlReport('Ph34-iCld Shared Link Records NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph34-iCld Shared Link Records NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zShare-Creation Date-0',
- 'zShare-Start Date-1',
- 'zShare-End Date-2',
- 'zShare-Expiry Date-3',
- 'zShare-UUID-4',
- 'zShare-Originating Scope ID-5',
- 'zShare-Status-6',
- 'zShare-Scope Type-7',
- 'zShare-Asset Count-CMM-8',
- 'zShare-Force Sync Attempted-CMM-9',
- 'zShare-Photos Count-CMM-10',
- 'zShare-Uploaded Photos Count-CMM-11',
- 'zShare-Videos Count-CMM-12',
- 'zShare-Uploaded Videos Count-CMM-13',
- 'zShare-Scope ID-14',
- 'zShare-Title-SPL-15',
- 'zShare-Share URL-16',
- 'zShare-Local Publish State-17',
- 'zShare-Public Permission-18',
- 'zSharePartic-Acceptance Status-19',
- 'zSharePartic-User ID-20',
- 'zSharePartic-zPK-21',
- 'zSharePartic-Email Address-22',
- 'zSharePartic-Phone Number-23',
- 'zSharePartic-Is Current User-24',
- 'zSharePartic-Role-25',
- 'zSharePartic-Premission-26',
- 'zShare-Should Notify On Upload Completion-27',
- 'zShare-Should Ignor Budgets-28',
- 'zShare-Trashed State-29',
- 'zShare-Cloud Delete State-30',
- 'zShare-zENT-31')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph34-iCld Shared Link Records NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph34-iCld Shared Link Records NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite ZSHARE iCloud Shared Link Records'
- ' with No Asset Data')
-
- db.close()
- return
-
- elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
-
- cursor.execute("""
+ query = '''
SELECT
DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date',
DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date',
@@ -204,8 +190,8 @@ def get_ph34icldsharedlinksphdapsql(files_found, report_folder, seeker, wrap_tex
CASE zSharePartic.Z54_SHARE
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
ELSE 'Unknown-New-Value!: ' || zSharePartic.Z54_SHARE || ''
END AS 'zSharePartic-z54SHARE',
CASE zShare.ZSTATUS
@@ -323,105 +309,84 @@ def get_ph34icldsharedlinksphdapsql(files_found, report_folder, seeker, wrap_tex
CASE zShare.Z_ENT
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || ''
END AS 'zShare-zENT'
FROM ZSHARE zShare
LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK
WHERE zShare.ZSCOPETYPE = 2
ORDER BY zShare.ZCREATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7],
+ row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16],
+ row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25],
+ row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34],
+ row[35], row[36], row[37], row[38], row[39], row[40], row[41], row[42], row[43],
+ row[44], row[45], row[46]))
+
+ data_headers = (('zShare-Creation Date-0', 'datetime'),
+ ('zShare-Start Date-1', 'datetime'),
+ ('zShare-End Date-2', 'datetime'),
+ ('zShare-Expiry Date-3', 'datetime'),
+ 'zShare-UUID-4',
+ 'zShare-Originating Scope ID-5',
+ 'zSharePartic-z54SHARE-6',
+ 'zShare-Status-7',
+ 'zShare-Scope Type-8',
+ 'zShare-Asset Count-CMM-9',
+ 'zShare-Force Sync Attempted-CMM-10',
+ 'zShare-Photos Count-CMM-11',
+ 'zShare-Uploaded Photos Count-CMM-12',
+ 'zShare-Videos Count-CMM-13',
+ 'zShare-Uploaded Videos Count-CMM-14',
+ 'zShare-Scope ID-15',
+ 'zShare-Title-SPL-16',
+ 'zShare-Share URL-17',
+ 'zShare-Local Publish State-18',
+ 'zShare-Public Permission-19',
+ 'zShare-Cloud Local State-20',
+ 'zShare-Scope Syncing State-21',
+ 'zShare-Auto Share Policy-22',
+ 'zSharePartic-Acceptance Status-23',
+ 'zSharePartic-User ID-24',
+ 'zSharePartic-zPK-25',
+ 'zSharePartic-Email Address-26',
+ 'zSharePartic-Phone Number-27',
+ 'zSharePartic-Participant ID-28',
+ 'zSharePartic-UUID-29',
+ 'zSharePartic-Is Current User-30',
+ 'zSharePartic-Role-31',
+ 'zSharePartic-Premission-32',
+ 'zShare-Participant Cloud Update State-33',
+ 'zSharePartic-Exit State-34',
+ 'zShare-Preview State-35',
+ 'zShare-Should Notify On Upload Completion-36',
+ 'zShare-Should Ignore Budgets-37',
+ 'zShare-Exit Source-38',
+ 'zShare-Exit State-39',
+ 'zShare-Exit Type-40',
+ 'zShare-Trashed State-41',
+ 'zShare-Cloud Delete State-42',
+ ('zShare-Trashed Date-43', 'datetime'),
+ ('zShare-LastParticipant Asset Trash Notification Date-44', 'datetime'),
+ ('zShare-Last Participant Asset Trash Notification View Date-45', 'datetime'),
+ 'zShare-zENT-46')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
+ elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7],
- row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16],
- row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25],
- row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34],
- row[35], row[36], row[37], row[38], row[39], row[40], row[41], row[42], row[43],
- row[44], row[45], row[46]))
-
- counter += 1
-
- description = 'Parses iCloud Shared Link records from the PhotoData-Photos.sqlite ZSHARE Table' \
- ' and supports iOS 16-17. Parses iCloud Shared Link records only no asset data being parsed.'
- report = ArtifactHtmlReport('Ph34-iCld Shared Link Records NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph34-iCld Shared Link Records NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zShare-Creation Date-0',
- 'zShare-Start Date-1',
- 'zShare-End Date-2',
- 'zShare-Expiry Date-3',
- 'zShare-UUID-4',
- 'zShare-Originating Scope ID-5',
- 'zSharePartic-z54SHARE-6',
- 'zShare-Status-7',
- 'zShare-Scope Type-8',
- 'zShare-Asset Count-CMM-9',
- 'zShare-Force Sync Attempted-CMM-10',
- 'zShare-Photos Count-CMM-11',
- 'zShare-Uploaded Photos Count-CMM-12',
- 'zShare-Videos Count-CMM-13',
- 'zShare-Uploaded Videos Count-CMM-14',
- 'zShare-Scope ID-15',
- 'zShare-Title-SPL-16',
- 'zShare-Share URL-17',
- 'zShare-Local Publish State-18',
- 'zShare-Public Permission-19',
- 'zShare-Cloud Local State-20',
- 'zShare-Scope Syncing State-21',
- 'zShare-Auto Share Policy-22',
- 'zSharePartic-Acceptance Status-23',
- 'zSharePartic-User ID-24',
- 'zSharePartic-zPK-25',
- 'zSharePartic-Email Address-26',
- 'zSharePartic-Phone Number-27',
- 'zSharePartic-Participant ID-28',
- 'zSharePartic-UUID-29',
- 'zSharePartic-Is Current User-30',
- 'zSharePartic-Role-31',
- 'zSharePartic-Premission-32',
- 'zShare-Participant Cloud Update State-33',
- 'zSharePartic-Exit State-34',
- 'zShare-Preview State-35',
- 'zShare-Should Notify On Upload Completion-36',
- 'zShare-Should Ignore Budgets-37',
- 'zShare-Exit Source-38',
- 'zShare-Exit State-39',
- 'zShare-Exit Type-40',
- 'zShare-Trashed State-41',
- 'zShare-Cloud Delete State-42',
- 'zShare-Trashed Date-43',
- 'zShare-LastParticipant Asset Trash Notification Date-44',
- 'zShare-Last Participant Asset Trash Notification View Date-45',
- 'zShare-zENT-46')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph34-iCld Shared Link Records NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
- tlactivity = 'Ph34-iCld Shared Link Records NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite ZSHARE iCloud Shared Link Records'
- ' with No Asset Data')
-
- db.close()
- return
-
- elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
-
- cursor.execute("""
+ query = '''
SELECT
DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date',
DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date',
@@ -429,13 +394,13 @@ def get_ph34icldsharedlinksphdapsql(files_found, report_folder, seeker, wrap_tex
DateTime(zShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Expiry Date',
zShare.ZUUID AS 'zShare-UUID',
zShare.ZORIGINATINGSCOPEIDENTIFIER AS 'zShare-Originating Scope ID',
- CASE zSharePartic.Z62_SHARE
+ CASE zSharePartic.Z55_SHARE
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
- ELSE 'Unknown-New-Value!: ' || zSharePartic.Z62_SHARE || ''
- END AS 'zSharePartic-z62SHARE',
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.Z55_SHARE || ''
+ END AS 'zSharePartic-z55SHARE',
CASE zShare.ZSTATUS
WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1'
WHEN 3 THEN '3-SPL-Actively-Sharing-3'
@@ -551,112 +516,279 @@ def get_ph34icldsharedlinksphdapsql(files_found, report_folder, seeker, wrap_tex
CASE zShare.Z_ENT
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || ''
END AS 'zShare-zENT'
FROM ZSHARE zShare
LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK
WHERE zShare.ZSCOPETYPE = 2
ORDER BY zShare.ZCREATIONDATE
- """)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7],
+ row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16],
+ row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25],
+ row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34],
+ row[35], row[36], row[37], row[38], row[39], row[40], row[41], row[42], row[43],
+ row[44], row[45], row[46]))
+
+ data_headers = (('zShare-Creation Date-0', 'datetime'),
+ ('zShare-Start Date-1', 'datetime'),
+ ('zShare-End Date-2', 'datetime'),
+ ('zShare-Expiry Date-3', 'datetime'),
+ 'zShare-UUID-4',
+ 'zShare-Originating Scope ID-5',
+ 'zSharePartic-z55SHARE-6',
+ 'zShare-Status-7',
+ 'zShare-Scope Type-8',
+ 'zShare-Asset Count-CMM-9',
+ 'zShare-Force Sync Attempted-CMM-10',
+ 'zShare-Photos Count-CMM-11',
+ 'zShare-Uploaded Photos Count-CMM-12',
+ 'zShare-Videos Count-CMM-13',
+ 'zShare-Uploaded Videos Count-CMM-14',
+ 'zShare-Scope ID-15',
+ 'zShare-Title-SPL-16',
+ 'zShare-Share URL-17',
+ 'zShare-Local Publish State-18',
+ 'zShare-Public Permission-19',
+ 'zShare-Cloud Local State-20',
+ 'zShare-Scope Syncing State-21',
+ 'zShare-Auto Share Policy-22',
+ 'zSharePartic-Acceptance Status-23',
+ 'zSharePartic-User ID-24',
+ 'zSharePartic-zPK-25',
+ 'zSharePartic-Email Address-26',
+ 'zSharePartic-Phone Number-27',
+ 'zSharePartic-Participant ID-28',
+ 'zSharePartic-UUID-29',
+ 'zSharePartic-Is Current User-30',
+ 'zSharePartic-Role-31',
+ 'zSharePartic-Premission-32',
+ 'zShare-Participant Cloud Update State-33',
+ 'zSharePartic-Exit State-34',
+ 'zShare-Preview State-35',
+ 'zShare-Should Notify On Upload Completion-36',
+ 'zShare-Should Ignore Budgets-37',
+ 'zShare-Exit Source-38',
+ 'zShare-Exit State-39',
+ 'zShare-Exit Type-40',
+ 'zShare-Trashed State-41',
+ 'zShare-Cloud Delete State-42',
+ ('zShare-Trashed Date-43', 'datetime'),
+ ('zShare-LastParticipant Asset Trash Notification Date-44', 'datetime'),
+ ('zShare-Last Participant Asset Trash Notification View Date-45', 'datetime'),
+ 'zShare-zENT-46')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
+ elif version.parse(iosversion) >= version.parse("18"):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7],
- row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16],
- row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25],
- row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34],
- row[35], row[36], row[37], row[38], row[39], row[40], row[41], row[42], row[43],
- row[44], row[45], row[46]))
-
- counter += 1
-
- description = 'Parses iCloud Shared Link records from the PhotoData-Photos.sqlite ZSHARE Table' \
- ' and supports iOS 16-17. Parses iCloud Shared Link records only no asset data being parsed.'
- report = ArtifactHtmlReport('Ph34-iCld Shared Link Records NAD-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph34-iCld Shared Link Records NAD-PhDaPsql', description)
- report.add_script()
- data_headers = ('zShare-Creation Date-0',
- 'zShare-Start Date-1',
- 'zShare-End Date-2',
- 'zShare-Expiry Date-3',
- 'zShare-UUID-4',
- 'zShare-Originating Scope ID-5',
- 'zSharePartic-z54SHARE-6',
- 'zShare-Status-7',
- 'zShare-Scope Type-8',
- 'zShare-Asset Count-CMM-9',
- 'zShare-Force Sync Attempted-CMM-10',
- 'zShare-Photos Count-CMM-11',
- 'zShare-Uploaded Photos Count-CMM-12',
- 'zShare-Videos Count-CMM-13',
- 'zShare-Uploaded Videos Count-CMM-14',
- 'zShare-Scope ID-15',
- 'zShare-Title-SPL-16',
- 'zShare-Share URL-17',
- 'zShare-Local Publish State-18',
- 'zShare-Public Permission-19',
- 'zShare-Cloud Local State-20',
- 'zShare-Scope Syncing State-21',
- 'zShare-Auto Share Policy-22',
- 'zSharePartic-Acceptance Status-23',
- 'zSharePartic-User ID-24',
- 'zSharePartic-zPK-25',
- 'zSharePartic-Email Address-26',
- 'zSharePartic-Phone Number-27',
- 'zSharePartic-Participant ID-28',
- 'zSharePartic-UUID-29',
- 'zSharePartic-Is Current User-30',
- 'zSharePartic-Role-31',
- 'zSharePartic-Premission-32',
- 'zShare-Participant Cloud Update State-33',
- 'zSharePartic-Exit State-34',
- 'zShare-Preview State-35',
- 'zShare-Should Notify On Upload Completion-36',
- 'zShare-Should Ignore Budgets-37',
- 'zShare-Exit Source-38',
- 'zShare-Exit State-39',
- 'zShare-Exit Type-40',
- 'zShare-Trashed State-41',
- 'zShare-Cloud Delete State-42',
- 'zShare-Trashed Date-43',
- 'zShare-LastParticipant Asset Trash Notification Date-44',
- 'zShare-Last Participant Asset Trash Notification View Date-45',
- 'zShare-zENT-46')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph34-iCld Shared Link Records NAD-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph34-iCld Shared Link Records NAD-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite ZSHARE iCloud Shared Link Records'
- ' with No Asset Data')
- db.close()
- return
-
-
-__artifacts_v2__ = {
- 'Ph34-iCloud Shared Link Records with NAD-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite Ph34 iCld Shared Link Records with No Asset Data',
- 'description': 'Parses iCloud Shared Link records from the PhotoData-Photos.sqlite ZSHARE Table'
- ' and supports iOS 14-18. Parses iCloud Shared Link records only no asset data being parsed.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-13',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-F-Cloud_Shared_Methods',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph34icldsharedlinksphdapsql'
- }
-}
+ query = '''
+ SELECT
+ DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date',
+ DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date',
+ DateTime(zShare.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-End Date',
+ DateTime(zShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Expiry Date',
+ zShare.ZUUID AS 'zShare-UUID',
+ zShare.ZORIGINATINGSCOPEIDENTIFIER AS 'zShare-Originating Scope ID',
+ CASE zSharePartic.Z61_SHARE
+ WHEN 55 THEN '55-SPL-Entity-55'
+ WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.Z61_SHARE || ''
+ END AS 'zSharePartic-z61SHARE',
+ CASE zShare.ZSTATUS
+ WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1'
+ WHEN 3 THEN '3-SPL-Actively-Sharing-3'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSTATUS || ''
+ END AS 'zShare-Status',
+ CASE zShare.ZSCOPETYPE
+ WHEN 2 THEN '2-iCloudLink-CMMoment-2'
+ WHEN 4 THEN '4-iCld-Shared-Photo-Library-SPL-4'
+ WHEN 5 THEN '5-SPL-Active-Participant-5'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPETYPE || ''
+ END AS 'zShare-Scope Type',
+ zShare.ZASSETCOUNT AS 'zShare-Asset Count-CMM',
+ zShare.ZFORCESYNCATTEMPTED AS 'zShare-Force Sync Attempted-CMM',
+ zShare.ZPHOTOSCOUNT AS 'zShare-Photos Count-CMM',
+ zShare.ZUPLOADEDPHOTOSCOUNT AS 'zShare-Uploaded Photos Count-CMM',
+ zShare.ZVIDEOSCOUNT AS 'zShare-Videos Count-CMM',
+ zShare.ZUPLOADEDVIDEOSCOUNT AS 'zShare-Uploaded Videos Count-CMM',
+ zShare.ZSCOPEIDENTIFIER AS 'zShare-Scope ID',
+ zShare.ZTITLE AS 'zShare-Title-SPL',
+ zShare.ZSHAREURL AS 'zShare-Share URL',
+ CASE zShare.ZLOCALPUBLISHSTATE
+ WHEN 2 THEN '2-Published-2'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZLOCALPUBLISHSTATE || ''
+ END AS 'zShare-Local Publish State',
+ CASE zShare.ZPUBLICPERMISSION
+ WHEN 1 THEN '1-Public_Premission_Denied-Private-1'
+ WHEN 2 THEN '2-Public_Premission_Granted-Public-2'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZPUBLICPERMISSION || ''
+ END AS 'zShare-Public Permission',
+ CASE zShare.ZCLOUDLOCALSTATE
+ WHEN 1 THEN '1-Local-and-Cloud-SPL-1'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDLOCALSTATE || ''
+ END AS 'zShare-Cloud Local State',
+ CASE zShare.ZSCOPESYNCINGSTATE
+ WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPESYNCINGSTATE || ''
+ END AS 'zShare-Scope Syncing State',
+ CASE zShare.ZAUTOSHAREPOLICY
+ WHEN 0 THEN '0-AutoShare-OFF_SPL_Test_NotAllAtSetup-0'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZAUTOSHAREPOLICY || ''
+ END AS 'zShare-Auto Share Policy',
+ CASE zSharePartic.ZACCEPTANCESTATUS
+ WHEN 1 THEN '1-Invite-Pending_or_Declined-1'
+ WHEN 2 THEN '2-Invite-Accepted-2'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZACCEPTANCESTATUS || ''
+ END AS 'zSharePartic-Acceptance Status',
+ zSharePartic.ZUSERIDENTIFIER AS 'zSharePartic-User ID',
+ zSharePartic.Z_PK AS 'zSharePartic-zPK',
+ zSharePartic.ZEMAILADDRESS AS 'zSharePartic-Email Address',
+ zSharePartic.ZPHONENUMBER AS 'zSharePartic-Phone Number',
+ zSharePartic.ZPARTICIPANTID AS 'zSharePartic-Participant ID',
+ zSharePartic.ZUUID AS 'zSharePartic-UUID',
+ CASE zSharePartic.ZISCURRENTUSER
+ WHEN 0 THEN '0-Participant-Not_CloudStorageOwner-0'
+ WHEN 1 THEN '1-Participant-Is_CloudStorageOwner-1'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || ''
+ END AS 'zSharePartic-Is Current User',
+ CASE zSharePartic.ZROLE
+ WHEN 1 THEN '1-Participant-is-Owner-Role-1'
+ WHEN 2 THEN '2-Participant-is-Invitee-Role-2'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZROLE || ''
+ END AS 'zSharePartic-Role',
+ CASE zSharePartic.ZPERMISSION
+ WHEN 3 THEN '3-Participant-has-Full-Premissions-3'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZPERMISSION || ''
+ END AS 'zSharePartic-Premission',
+ CASE zShare.ZPARTICIPANTCLOUDUPDATESTATE
+ WHEN 2 THEN '2-ParticipantAllowedToUpdate_SPL_StillTesting-2'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZPARTICIPANTCLOUDUPDATESTATE || ''
+ END AS 'zShare-Participant Cloud Update State',
+ CASE zSharePartic.ZEXITSTATE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZEXITSTATE || ''
+ END AS 'zSharePartic-Exit State',
+ CASE zShare.ZPREVIEWSTATE
+ WHEN 0 THEN '0-NotInPreviewState-StillTesting-SPL-0'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZPREVIEWSTATE || ''
+ END AS 'zShare-Preview State',
+ CASE zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION
+ WHEN 0 THEN '0-DoNotNotify-SPL-0'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION || ''
+ END AS 'zShare-Should Notify On Upload Completion',
+ CASE zShare.ZSHOULDIGNOREBUDGETS
+ WHEN 1 THEN '1-StillTesting-CMM-1'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDIGNOREBUDGETS || ''
+ END AS 'zShare-Should Ignore Budgets',
+ CASE zShare.ZEXITSOURCE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSOURCE || ''
+ END AS 'zShare-Exit Source',
+ CASE zShare.ZEXITSTATE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSTATE || ''
+ END AS 'zShare-Exit State',
+ CASE zShare.ZEXITTYPE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZEXITTYPE || ''
+ END AS 'zShare-Exit Type',
+ CASE zShare.ZTRASHEDSTATE
+ WHEN 0 THEN '0-Not_in_Trash-0'
+ WHEN 1 THEN '1-In_Trash-1'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZTRASHEDSTATE || ''
+ END AS 'zShare-Trashed State',
+ CASE zShare.ZCLOUDDELETESTATE
+ WHEN 0 THEN '0-Not Deleted-0'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDDELETESTATE || ''
+ END AS 'zShare-Cloud Delete State',
+ DateTime(zShare.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Trashed Date',
+ DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONDATE + 978307200, 'UNIXEPOCH') AS
+ 'zShare-LastParticipant Asset Trash Notification Date',
+ DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONVIEWEDDATE + 978307200, 'UNIXEPOCH') AS
+ 'zShare-Last Participant Asset Trash Notification View Date',
+ CASE zShare.Z_ENT
+ WHEN 55 THEN '55-SPL-Entity-55'
+ WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
+ ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || ''
+ END AS 'zShare-zENT'
+ FROM ZSHARE zShare
+ LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK
+ WHERE zShare.ZSCOPETYPE = 2
+ ORDER BY zShare.ZCREATIONDATE
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7],
+ row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16],
+ row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25],
+ row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34],
+ row[35], row[36], row[37], row[38], row[39], row[40], row[41], row[42], row[43],
+ row[44], row[45], row[46]))
+
+ data_headers = (('zShare-Creation Date-0', 'datetime'),
+ ('zShare-Start Date-1', 'datetime'),
+ ('zShare-End Date-2', 'datetime'),
+ ('zShare-Expiry Date-3', 'datetime'),
+ 'zShare-UUID-4',
+ 'zShare-Originating Scope ID-5',
+ 'zSharePartic-z61SHARE-6',
+ 'zShare-Status-7',
+ 'zShare-Scope Type-8',
+ 'zShare-Asset Count-CMM-9',
+ 'zShare-Force Sync Attempted-CMM-10',
+ 'zShare-Photos Count-CMM-11',
+ 'zShare-Uploaded Photos Count-CMM-12',
+ 'zShare-Videos Count-CMM-13',
+ 'zShare-Uploaded Videos Count-CMM-14',
+ 'zShare-Scope ID-15',
+ 'zShare-Title-SPL-16',
+ 'zShare-Share URL-17',
+ 'zShare-Local Publish State-18',
+ 'zShare-Public Permission-19',
+ 'zShare-Cloud Local State-20',
+ 'zShare-Scope Syncing State-21',
+ 'zShare-Auto Share Policy-22',
+ 'zSharePartic-Acceptance Status-23',
+ 'zSharePartic-User ID-24',
+ 'zSharePartic-zPK-25',
+ 'zSharePartic-Email Address-26',
+ 'zSharePartic-Phone Number-27',
+ 'zSharePartic-Participant ID-28',
+ 'zSharePartic-UUID-29',
+ 'zSharePartic-Is Current User-30',
+ 'zSharePartic-Role-31',
+ 'zSharePartic-Premission-32',
+ 'zShare-Participant Cloud Update State-33',
+ 'zSharePartic-Exit State-34',
+ 'zShare-Preview State-35',
+ 'zShare-Should Notify On Upload Completion-36',
+ 'zShare-Should Ignore Budgets-37',
+ 'zShare-Exit Source-38',
+ 'zShare-Exit State-39',
+ 'zShare-Exit Type-40',
+ 'zShare-Trashed State-41',
+ 'zShare-Cloud Delete State-42',
+ ('zShare-Trashed Date-43', 'datetime'),
+ ('zShare-LastParticipant Asset Trash Notification Date-44', 'datetime'),
+ ('zShare-Last Participant Asset Trash Notification View Date-45', 'datetime'),
+ 'zShare-zENT-46')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph35iCloudSharedLinkAssets.py b/scripts/artifacts/Ph35iCloudSharedLinkAssets.py
index 11a1526f..774acb90 100644
--- a/scripts/artifacts/Ph35iCloudSharedLinkAssets.py
+++ b/scripts/artifacts/Ph35iCloudSharedLinkAssets.py
@@ -1,41 +1,47 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 2.0
-#
-# Description:
-# Parses iCloud Shared Link records and related assets from the PhotoData-Photos.sqlite ZSHARE Table
-# and supports iOS 14-18.
-# This parser is based on research and SQLite Queries written by Scott Koenig
-# This is very large query and script, I recommend opening the TSV generated report with Zimmerman's Tools
-# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results.
-# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347
-#
+__artifacts_v2__ = {
+ 'Ph35iCloudSharedLinkAssetsPhDaPsql': {
+ 'name': 'Ph35-iCloud Shared Link Assets-PhDaPsql',
+ 'description': 'Parses iCloud Shared Link records and related assets from the'
+ ' PhotoData-Photos.sqlite ZSHARE Table and supports iOS 14-18.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-F-Cloud_Shared_Methods',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
+@artifact_processor
+def Ph35iCloudSharedLinkAssetsPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
-def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("13.7"):
- logfunc("Unsupported version for iCloud Shared Link Assets from PhotoData-Photos.sqlite from iOS " + iosversion)
+ logfunc("Unsupported version PhotoData-Photos.sqlite from iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date',
DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date',
@@ -155,8 +161,8 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra
CASE zShare.Z_ENT
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || ''
END AS 'zShare-zENT'
FROM ZASSET zAsset
@@ -167,103 +173,83 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra
LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK
WHERE zAsset.ZSAVEDASSETTYPE = 8
ORDER BY zShare.ZCREATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53]))
-
- counter += 1
-
- description = 'Parses iCloud Shared Link records and related assets from the' \
- ' PhotoData-Photos.sqlite ZSHARE Table and supports iOS 14.'
- report = ArtifactHtmlReport('Ph35-iCld Shared Link Assets-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph35-iCld Shared Link Assets-PhDaPsql', description)
- report.add_script()
- data_headers = ('zShare-Creation Date-0',
- 'zShare-Start Date-1',
- 'zShare-End Date-2',
- 'zShare-Expiry Date-3',
- 'zAsset-Date Created-4',
- 'zAsset-zPK-5',
- 'zAsset-Directory-Path-6',
- 'zAsset-Filename-7',
- 'zAddAssetAttr- Original Filename-8',
- 'zCldMast- Original Filename-9',
- 'zAddAssetAttr- Creator Bundle ID-10',
- 'zAddAssetAttr-Imported By Display Name-11',
- 'zAsset-Visibility State-12',
- 'zAsset-Saved Asset Type-13',
- 'zAddAssetAttr-Share Type-14',
- 'zAsset- SortToken -CameraRoll-15',
- 'zAsset-Added Date-16',
- 'zCldMast-Creation Date-17',
- 'zAddAssetAttr-Time Zone Name-18',
- 'zAddAssetAttr-EXIF-String-19',
- 'zAsset-Modification Date-20',
- 'zAsset-Last Shared Date-21',
- 'zAsset-Trashed Date-22',
- 'zAddAssetAttr-zPK-23',
- 'zAsset-UUID = store.cloudphotodb-24',
- 'zAddAssetAttr-Master Fingerprint-25',
- 'zShare-UUID-26',
- 'zShare-Originating Scope ID-27',
- 'zShare-Status-28',
- 'zShare-Scope Type-29',
- 'zShare-Asset Count-CMM-30',
- 'zShare-Force Sync Attempted-CMM-31',
- 'zShare-Photos Count-CMM-32',
- 'zShare-Uploaded Photos Count-CMM-33',
- 'zShare-Videos Count-CMM-34',
- 'zShare-Uploaded Videos Count-CMM-35',
- 'zShare-Scope ID-36',
- 'zShare-Title-SPL-37',
- 'zShare-Share URL-38',
- 'zShare-Local Publish State-39',
- 'zShare-Public Permission-40',
- 'zSharePartic-Acceptance Status-41',
- 'zSharePartic-User ID-42',
- 'zSharePartic-zPK-43',
- 'zSharePartic-Email Address-44',
- 'zSharePartic-Phone Number-45',
- 'zSharePartic-Is Current User-46',
- 'zSharePartic-Role-47',
- 'zSharePartic-Premission-48',
- 'zShare-Should Notify On Upload Completion-49',
- 'zShare-Should Ignor Budgets-50',
- 'zShare-Trashed State-51',
- 'zShare-Cloud Delete State-52',
- 'zShare-zENT-53')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph35-iCld Shared Link Assets-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph35-iCld Shared Link Assets-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53]))
- else:
- logfunc('No iCloud Shared Link Assets found in PhotoData-Photos.sqlite ZSHARE table')
+ data_headers = (('zShare-Creation Date-0', 'datetime'),
+ ('zShare-Start Date-1', 'datetime'),
+ ('zShare-End Date-2', 'datetime'),
+ ('zShare-Expiry Date-3', 'datetime'),
+ ('zAsset-Date Created-4', 'datetime'),
+ 'zAsset-zPK-5',
+ 'zAsset-Directory-Path-6',
+ 'zAsset-Filename-7',
+ 'zAddAssetAttr- Original Filename-8',
+ 'zCldMast- Original Filename-9',
+ 'zAddAssetAttr- Creator Bundle ID-10',
+ 'zAddAssetAttr-Imported By Display Name-11',
+ 'zAsset-Visibility State-12',
+ 'zAsset-Saved Asset Type-13',
+ 'zAddAssetAttr-Share Type-14',
+ ('zAsset- SortToken -CameraRoll-15', 'datetime'),
+ ('zAsset-Added Date-16', 'datetime'),
+ ('zCldMast-Creation Date-17', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-18',
+ 'zAddAssetAttr-EXIF-String-19',
+ ('zAsset-Modification Date-20', 'datetime'),
+ ('zAsset-Last Shared Date-21', 'datetime'),
+ ('zAsset-Trashed Date-22', 'datetime'),
+ 'zAddAssetAttr-zPK-23',
+ 'zAsset-UUID = store.cloudphotodb-24',
+ 'zAddAssetAttr-Master Fingerprint-25',
+ 'zShare-UUID-26',
+ 'zShare-Originating Scope ID-27',
+ 'zShare-Status-28',
+ 'zShare-Scope Type-29',
+ 'zShare-Asset Count-CMM-30',
+ 'zShare-Force Sync Attempted-CMM-31',
+ 'zShare-Photos Count-CMM-32',
+ 'zShare-Uploaded Photos Count-CMM-33',
+ 'zShare-Videos Count-CMM-34',
+ 'zShare-Uploaded Videos Count-CMM-35',
+ 'zShare-Scope ID-36',
+ 'zShare-Title-SPL-37',
+ 'zShare-Share URL-38',
+ 'zShare-Local Publish State-39',
+ 'zShare-Public Permission-40',
+ 'zSharePartic-Acceptance Status-41',
+ 'zSharePartic-User ID-42',
+ 'zSharePartic-zPK-43',
+ 'zSharePartic-Email Address-44',
+ 'zSharePartic-Phone Number-45',
+ 'zSharePartic-Is Current User-46',
+ 'zSharePartic-Role-47',
+ 'zSharePartic-Premission-48',
+ 'zShare-Should Notify On Upload Completion-49',
+ 'zShare-Should Ignor Budgets-50',
+ 'zShare-Trashed State-51',
+ 'zShare-Cloud Delete State-52',
+ 'zShare-zENT-53')
+ data_list = get_sqlite_db_records(source_path, query)
- db.close()
- return
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date',
DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date',
@@ -401,8 +387,8 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra
CASE zShare.Z_ENT
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || ''
END AS 'zShare-zENT'
FROM ZASSET zAsset
@@ -413,107 +399,87 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra
LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK
WHERE zAsset.ZSAVEDASSETTYPE = 8
ORDER BY zShare.ZCREATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56]))
-
- counter += 1
-
- description = 'Parses iCloud Shared Link records and related assets from the' \
- ' PhotoData-Photos.sqlite ZSHARE Table and supports iOS 15.'
- report = ArtifactHtmlReport('Ph35-iCld Shared Link Assets-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph35-iCld Shared Link Assets-PhDaPsql', description)
- report.add_script()
- data_headers = ('zShare-Creation Date-0',
- 'zShare-Start Date-1',
- 'zShare-End Date-2',
- 'zShare-Expiry Date-3',
- 'zAsset-Date Created-4',
- 'zAsset-zPK-5',
- 'zAsset-Directory-Path-6',
- 'zAsset-Filename-7',
- 'zAddAssetAttr- Original Filename-8',
- 'zCldMast- Original Filename-9',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-10',
- 'zAsset-Syndication State-11',
- 'zAsset-Bundle Scope-12',
- 'zAddAssetAttr- Imported by Bundle Identifier-13',
- 'zAddAssetAttr-Imported By Display Name-14',
- 'zAsset-Visibility State-15',
- 'zAsset-Saved Asset Type-16',
- 'zAddAssetAttr-Share Type-17',
- 'zAsset- SortToken -CameraRoll-18',
- 'zAsset-Added Date-19',
- 'zCldMast-Creation Date-20',
- 'zAddAssetAttr-Time Zone Name-21',
- 'zAddAssetAttr-EXIF-String-22',
- 'zAsset-Modification Date-23',
- 'zAsset-Last Shared Date-24',
- 'zAsset-Trashed Date-25',
- 'zAddAssetAttr-zPK-26',
- 'zAsset-UUID = store.cloudphotodb-27',
- 'zAddAssetAttr-Master Fingerprint-28',
- 'zShare-UUID-29',
- 'zShare-Originating Scope ID-30',
- 'zShare-Status-31',
- 'zShare-Scope Type-32',
- 'zShare-Asset Count-CMM-33',
- 'zShare-Force Sync Attempted-CMM-34',
- 'zShare-Photos Count-CMM-35',
- 'zShare-Uploaded Photos Count-CMM-36',
- 'zShare-Videos Count-CMM-37',
- 'zShare-Uploaded Videos Count-CMM-38',
- 'zShare-Scope ID-39',
- 'zShare-Title-SPL-40',
- 'zShare-Share URL-41',
- 'zShare-Local Publish State-42',
- 'zShare-Public Permission-43',
- 'zSharePartic-Acceptance Status-44',
- 'zSharePartic-User ID-45',
- 'zSharePartic-zPK-46',
- 'zSharePartic-Email Address-47',
- 'zSharePartic-Phone Number-48',
- 'zSharePartic-Is Current User-49',
- 'zSharePartic-Role-50',
- 'zSharePartic-Premission-51',
- 'zShare-Should Notify On Upload Completion-52',
- 'zShare-Should Ignor Budgets-53',
- 'zShare-Trashed State-54',
- 'zShare-Cloud Delete State-55',
- 'zShare-zENT-56')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph35-iCld Shared Link Assets-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph35-iCld Shared Link Assets-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56]))
- else:
- logfunc('No iCloud Shared Link Assets found in PhotoData-Photos.sqlite ZSHARE table')
+ data_headers = (('zShare-Creation Date-0', 'datetime'),
+ ('zShare-Start Date-1', 'datetime'),
+ ('zShare-End Date-2', 'datetime'),
+ ('zShare-Expiry Date-3', 'datetime'),
+ ('zAsset-Date Created-4', 'datetime'),
+ 'zAsset-zPK-5',
+ 'zAsset-Directory-Path-6',
+ 'zAsset-Filename-7',
+ 'zAddAssetAttr- Original Filename-8',
+ 'zCldMast- Original Filename-9',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-10',
+ 'zAsset-Syndication State-11',
+ 'zAsset-Bundle Scope-12',
+ 'zAddAssetAttr- Imported by Bundle Identifier-13',
+ 'zAddAssetAttr-Imported By Display Name-14',
+ 'zAsset-Visibility State-15',
+ 'zAsset-Saved Asset Type-16',
+ 'zAddAssetAttr-Share Type-17',
+ ('zAsset- SortToken -CameraRoll-18', 'datetime'),
+ ('zAsset-Added Date-19', 'datetime'),
+ ('zCldMast-Creation Date-20', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-21',
+ 'zAddAssetAttr-EXIF-String-22',
+ ('zAsset-Modification Date-23', 'datetime'),
+ ('zAsset-Last Shared Date-24', 'datetime'),
+ ('zAsset-Trashed Date-25', 'datetime'),
+ 'zAddAssetAttr-zPK-26',
+ 'zAsset-UUID = store.cloudphotodb-27',
+ 'zAddAssetAttr-Master Fingerprint-28',
+ 'zShare-UUID-29',
+ 'zShare-Originating Scope ID-30',
+ 'zShare-Status-31',
+ 'zShare-Scope Type-32',
+ 'zShare-Asset Count-CMM-33',
+ 'zShare-Force Sync Attempted-CMM-34',
+ 'zShare-Photos Count-CMM-35',
+ 'zShare-Uploaded Photos Count-CMM-36',
+ 'zShare-Videos Count-CMM-37',
+ 'zShare-Uploaded Videos Count-CMM-38',
+ 'zShare-Scope ID-39',
+ 'zShare-Title-SPL-40',
+ 'zShare-Share URL-41',
+ 'zShare-Local Publish State-42',
+ 'zShare-Public Permission-43',
+ 'zSharePartic-Acceptance Status-44',
+ 'zSharePartic-User ID-45',
+ 'zSharePartic-zPK-46',
+ 'zSharePartic-Email Address-47',
+ 'zSharePartic-Phone Number-48',
+ 'zSharePartic-Is Current User-49',
+ 'zSharePartic-Role-50',
+ 'zSharePartic-Premission-51',
+ 'zShare-Should Notify On Upload Completion-52',
+ 'zShare-Should Ignor Budgets-53',
+ 'zShare-Trashed State-54',
+ 'zShare-Cloud Delete State-55',
+ 'zShare-zENT-56')
+ data_list = get_sqlite_db_records(source_path, query)
- db.close()
- return
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date',
DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date',
@@ -634,8 +600,8 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra
CASE zSharePartic.Z54_SHARE
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
ELSE 'Unknown-New-Value!: ' || zSharePartic.Z54_SHARE || ''
END AS 'zSharePartic-z54SHARE',
CASE zShare.ZSTATUS
@@ -737,8 +703,8 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra
CASE zShare.Z_ENT
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || ''
END AS 'zShare-zENT'
FROM ZASSET zAsset
@@ -749,15 +715,370 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra
LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK
WHERE zAsset.ZSAVEDASSETTYPE = 8
ORDER BY zShare.ZCREATIONDATE
- """)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76]))
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
+ data_headers = (('zShare-Creation Date-0', 'datetime'),
+ ('zShare-Start Date-1', 'datetime'),
+ ('zShare-End Date-2', 'datetime'),
+ ('zShare-Expiry Date-3', 'datetime'),
+ ('zAsset-Date Created-4', 'datetime'),
+ 'zAsset-zPK-5',
+ 'zAsset-Directory-Path-6',
+ 'zAsset-Filename-7',
+ 'zAddAssetAttr- Original Filename-8',
+ 'zCldMast- Original Filename-9',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-10',
+ 'zAsset-Syndication State-11',
+ 'zAsset-Bundle Scope-12',
+ 'zAddAssetAttr-Imported by-13',
+ 'zExtAttr-Camera Make-14',
+ 'zExtAttr-Camera Model-15',
+ 'zAddAssetAttr- Imported by Bundle Identifier-16',
+ 'zAddAssetAttr- Imported By Display Name-17',
+ 'zAsset-Visibility State-18',
+ 'zAsset-Saved Asset Type-19',
+ 'zAddAssetAttr-Share Type-20',
+ ('zAsset- SortToken -CameraRoll-21', 'datetime'),
+ ('zAsset-Added Date-22', 'datetime'),
+ ('zCldMast-Creation Date-23', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-24',
+ 'zAddAssetAttr-EXIF-String-25',
+ ('zAsset-Modification Date-26', 'datetime'),
+ ('zAsset-Last Shared Date-27', 'datetime'),
+ 'zAsset-Hidden-28',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-29',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-30',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-31',
+ ('zAsset-Trashed Date-32', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-33',
+ 'zAddAssetAttr-zPK-34',
+ 'zAsset-UUID = store.cloudphotodb-35',
+ 'zAddAssetAttr-Master Fingerprint-36',
+ 'zAddAssetAttr.Adjusted Fingerprint-37',
+ 'zShare-UUID-38',
+ 'zShare-Originating Scope ID-39',
+ 'zSharePartic-z54SHARE-40',
+ 'zShare-Status-41',
+ 'zShare-Scope Type-42',
+ 'zShare-Asset Count-CMM-43',
+ 'zShare-Force Sync Attempted-CMM-44',
+ 'zShare-Photos Count-CMM-45',
+ 'zShare-Uploaded Photos Count-CMM-46',
+ 'zShare-Videos Count-CMM-47',
+ 'zShare-Uploaded Videos Count-CMM-48',
+ 'zShare-Scope ID-49',
+ 'zShare-Title-SPL-50',
+ 'zShare-Share URL-51',
+ 'zShare-Local Publish State-52',
+ 'zShare-Public Permission-53',
+ 'zShare-Cloud Local State-54',
+ 'zShare-Scope Syncing State-55',
+ 'zShare-Auto Share Policy-56',
+ 'zSharePartic-Acceptance Status-57',
+ 'zSharePartic-User ID-58',
+ 'zSharePartic-zPK-59',
+ 'zSharePartic-Email Address-60',
+ 'zSharePartic-Phone Number-61',
+ 'zSharePartic-Participant ID-62',
+ 'zSharePartic-UUID-63',
+ 'zSharePartic-Is Current User-64',
+ 'zSharePartic-Role-65',
+ 'zSharePartic-Premission-66',
+ 'zShare-Participant Cloud Update State-67',
+ 'zShare-Preview State-68',
+ 'zShare-Should Notify On Upload Completion-69',
+ 'zShare-Should Ignore Budgets-70',
+ 'zShare-Trashed State-71',
+ 'zShare-Cloud Delete State-72',
+ ('zShare-Trashed Date-73', 'datetime'),
+ ('zShare-LastParticipant Asset Trash Notification Date-74', 'datetime'),
+ ('zShare-Last Participant Asset Trash Notification View Date-75', 'datetime'),
+ 'zShare-zENT-76')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
+ elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("17.6")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+
+ query = '''
+ SELECT
+ DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date',
+ DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date',
+ DateTime(zShare.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-End Date',
+ DateTime(zShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Expiry Date',
+ DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
+ zAsset.Z_PK AS 'zAsset-zPK',
+ zAsset.ZDIRECTORY AS 'zAsset-Directory-Path',
+ zAsset.ZFILENAME AS 'zAsset-Filename',
+ zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename',
+ zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename',
+ zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files',
+ CASE zAsset.ZSYNDICATIONSTATE
+ WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0'
+ WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1'
+ WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2'
+ WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3'
+ WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8'
+ WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9'
+ WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || ''
+ END AS 'zAsset-Syndication State',
+ CASE zAsset.ZBUNDLESCOPE
+ WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0'
+ WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1'
+ WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2'
+ WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || ''
+ END AS 'zAsset-Bundle Scope',
+ CASE zAddAssetAttr.ZIMPORTEDBY
+ WHEN 0 THEN '0-Cloud-Other-0'
+ WHEN 1 THEN '1-Native-Back-Camera-1'
+ WHEN 2 THEN '2-Native-Front-Camera-2'
+ WHEN 3 THEN '3-Third-Party-App-3'
+ WHEN 4 THEN '4-StillTesting-4'
+ WHEN 5 THEN '5-PhotoBooth_PL-Asset-5'
+ WHEN 6 THEN '6-Third-Party-App-6'
+ WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7'
+ WHEN 8 THEN '8-System-Package-App-8'
+ WHEN 9 THEN '9-Native-App-9'
+ WHEN 10 THEN '10-StillTesting-10'
+ WHEN 11 THEN '11-StillTesting-11'
+ WHEN 12 THEN '12-SWY_Syndication_PL-12'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || ''
+ END AS 'zAddAssetAttr-Imported by',
+ zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make',
+ zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model',
+ zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr- Imported by Bundle Identifier',
+ zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr- Imported By Display Name',
+ CASE zAsset.ZVISIBILITYSTATE
+ WHEN 0 THEN '0-Visible-PL-CameraRoll-0'
+ WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || ''
+ END AS 'zAsset-Visibility State',
+ CASE zAsset.ZSAVEDASSETTYPE
+ WHEN 0 THEN '0-Saved-via-other-source-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ WHEN 2 THEN '2-StillTesting-2'
+ WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3'
+ WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4'
+ WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5'
+ WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6'
+ WHEN 7 THEN '7-StillTesting-7'
+ WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8'
+ WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || ''
+ END AS 'zAsset-Saved Asset Type',
+ CASE zAddAssetAttr.ZSHARETYPE
+ WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0'
+ WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || ''
+ END AS 'zAddAssetAttr-Share Type',
+ CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE
+ WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0'
+ WHEN 1 THEN '1-Asset-In-Active-SPL-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || ''
+ END AS 'zAsset-Active Library Scope Participation State',
+ DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
+ DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date',
+ DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date',
+ zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name',
+ zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String',
+ DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
+ DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date',
+ CASE zAsset.ZHIDDEN
+ WHEN 0 THEN '0-Asset Not Hidden-0'
+ WHEN 1 THEN '1-Asset Hidden-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZHIDDEN || ''
+ END AS 'zAsset-Hidden',
+ CASE zAsset.ZAVALANCHEPICKTYPE
+ WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT'
+ WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT'
+ WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT'
+ WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT'
+ WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT'
+ WHEN 32 THEN '32-StillTesting-32_RT'
+ WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEPICKTYPE || ''
+ END AS 'zAsset-Avalanche_Pick_Type-BurstAsset',
+ CASE zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE
+ WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT'
+ WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT'
+ WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT'
+ WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT'
+ WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT'
+ WHEN 32 THEN '32-StillTesting-32_RT'
+ WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE || ''
+ END AS 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset',
+ CASE zAsset.ZTRASHEDSTATE
+ WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0'
+ WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || ''
+ END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
+ DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
+ zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK',
+ zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
+ zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
+ zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint',
+ zAddAssetAttr.ZADJUSTEDFINGERPRINT AS 'zAddAssetAttr.Adjusted Fingerprint',
+ zShare.ZUUID AS 'zShare-UUID',
+ zShare.ZORIGINATINGSCOPEIDENTIFIER AS 'zShare-Originating Scope ID',
+ CASE zSharePartic.Z54_SHARE
+ WHEN 55 THEN '55-SPL-Entity-55'
+ WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.Z54_SHARE || ''
+ END AS 'zSharePartic-z54SHARE',
+ CASE zShare.ZSTATUS
+ WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1'
+ WHEN 3 THEN '3-SPL-Actively-Sharing-3'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSTATUS || ''
+ END AS 'zShare-Status',
+ CASE zShare.ZSCOPETYPE
+ WHEN 2 THEN '2-iCloudLink-CMMoment-2'
+ WHEN 4 THEN '4-iCld-Shared-Photo-Library-SPL-4'
+ WHEN 5 THEN '5-SPL-Active-Participant-5'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPETYPE || ''
+ END AS 'zShare-Scope Type',
+ zShare.ZASSETCOUNT AS 'zShare-Asset Count-CMM',
+ zShare.ZFORCESYNCATTEMPTED AS 'zShare-Force Sync Attempted-CMM',
+ zShare.ZPHOTOSCOUNT AS 'zShare-Photos Count-CMM',
+ zShare.ZUPLOADEDPHOTOSCOUNT AS 'zShare-Uploaded Photos Count-CMM',
+ zShare.ZVIDEOSCOUNT AS 'zShare-Videos Count-CMM',
+ zShare.ZUPLOADEDVIDEOSCOUNT AS 'zShare-Uploaded Videos Count-CMM',
+ zShare.ZSCOPEIDENTIFIER AS 'zShare-Scope ID',
+ zShare.ZTITLE AS 'zShare-Title-SPL',
+ zShare.ZSHAREURL AS 'zShare-Share URL',
+ CASE zShare.ZLOCALPUBLISHSTATE
+ WHEN 2 THEN '2-Published-2'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZLOCALPUBLISHSTATE || ''
+ END AS 'zShare-Local Publish State',
+ CASE zShare.ZPUBLICPERMISSION
+ WHEN 1 THEN '1-Public_Premission_Denied-Private-1'
+ WHEN 2 THEN '2-Public_Premission_Granted-Public-2'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZPUBLICPERMISSION || ''
+ END AS 'zShare-Public Permission',
+ CASE zShare.ZCLOUDLOCALSTATE
+ WHEN 1 THEN '1-LocalandCloud-SPL-1'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDLOCALSTATE || ''
+ END AS 'zShare-Cloud Local State',
+ CASE zShare.ZSCOPESYNCINGSTATE
+ WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPESYNCINGSTATE || ''
+ END AS 'zShare-Scope Syncing State',
+ CASE zShare.ZAUTOSHAREPOLICY
+ WHEN 0 THEN '0-AutoShare-OFF_SPL_Test_NotAllAtSetup-0'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZAUTOSHAREPOLICY || ''
+ END AS 'zShare-Auto Share Policy',
+ CASE zSharePartic.ZACCEPTANCESTATUS
+ WHEN 1 THEN '1-Invite-Pending_or_Declined-1'
+ WHEN 2 THEN '2-Invite-Accepted-2'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZACCEPTANCESTATUS || ''
+ END AS 'zSharePartic-Acceptance Status',
+ zSharePartic.ZUSERIDENTIFIER AS 'zSharePartic-User ID',
+ zSharePartic.Z_PK AS 'zSharePartic-zPK',
+ zSharePartic.ZEMAILADDRESS AS 'zSharePartic-Email Address',
+ zSharePartic.ZPHONENUMBER AS 'zSharePartic-Phone Number',
+ zSharePartic.ZPARTICIPANTID AS 'zSharePartic-Participant ID',
+ zSharePartic.ZUUID AS 'zSharePartic-UUID',
+ CASE zSharePartic.ZISCURRENTUSER
+ WHEN 0 THEN '0-Participant-Not_CloudStorageOwner-0'
+ WHEN 1 THEN '1-Participant-Is_CloudStorageOwner-1'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || ''
+ END AS 'zSharePartic-Is Current User',
+ CASE zSharePartic.ZROLE
+ WHEN 1 THEN '1-Participant-is-Owner-Role-1'
+ WHEN 2 THEN '2-Participant-is-Invitee-Role-2'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZROLE || ''
+ END AS 'zSharePartic-Role',
+ CASE zSharePartic.ZPERMISSION
+ WHEN 3 THEN '3-Participant-has-Full-Permissions-3'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZPERMISSION || ''
+ END AS 'zSharePartic-Premission',
+ CASE zShare.ZPARTICIPANTCLOUDUPDATESTATE
+ WHEN 2 THEN '2-ParticipantAllowedToUpdate_SPL_StillTesting-2'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZPARTICIPANTCLOUDUPDATESTATE || ''
+ END AS 'zShare-Participant Cloud Update State',
+ CASE zSharePartic.ZEXITSTATE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZEXITSTATE || ''
+ END AS 'zSharePartic-Exit State',
+ CASE zShare.ZPREVIEWSTATE
+ WHEN 0 THEN '0-NotInPreviewState-StillTesting-SPL-0'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZPREVIEWSTATE || ''
+ END AS 'zShare-Preview State',
+ CASE zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION
+ WHEN 0 THEN '0-DoNotNotify-SPL-0'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION || ''
+ END AS 'zShare-Should Notify On Upload Completion',
+ CASE zShare.ZSHOULDIGNOREBUDGETS
+ WHEN 1 THEN '1-StillTesting-CMM-1'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDIGNOREBUDGETS || ''
+ END AS 'zShare-Should Ignore Budgets',
+ CASE zShare.ZEXITSOURCE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSOURCE || ''
+ END AS 'zShare-Exit Source',
+ CASE zShare.ZEXITSTATE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSTATE || ''
+ END AS 'zShare-Exit State',
+ CASE zShare.ZEXITTYPE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZEXITTYPE || ''
+ END AS 'zShare-Exit Type',
+ CASE zShare.ZTRASHEDSTATE
+ WHEN 0 THEN '0-Not_in_Trash-0'
+ WHEN 1 THEN '1-In_Trash-1'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZTRASHEDSTATE || ''
+ END AS 'zShare-Trashed State',
+ CASE zShare.ZCLOUDDELETESTATE
+ WHEN 0 THEN '0-Not Deleted-0'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDDELETESTATE || ''
+ END AS 'zShare-Cloud Delete State',
+ DateTime(zShare.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Trashed Date',
+ DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONDATE + 978307200, 'UNIXEPOCH') AS
+ 'zShare-LastParticipant Asset Trash Notification Date',
+ DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONVIEWEDDATE + 978307200, 'UNIXEPOCH') AS
+ 'zShare-Last Participant Asset Trash Notification View Date',
+ CASE zShare.Z_ENT
+ WHEN 55 THEN '55-SPL-Entity-55'
+ WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
+ ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || ''
+ END AS 'zShare-zENT'
+ FROM ZASSET zAsset
+ LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
+ LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES
+ LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
+ LEFT JOIN ZSHARE zShare ON zShare.Z_PK = zAsset.ZMOMENTSHARE
+ LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK
+ WHERE zAsset.ZSAVEDASSETTYPE = 8
+ ORDER BY zShare.ZCREATIONDATE
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
@@ -765,113 +1086,102 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra
row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76]))
-
- counter += 1
-
- description = 'Parses iCloud Shared Link records and related assets from the' \
- ' PhotoData-Photos.sqlite ZSHARE Table and supports iOS 16.'
- report = ArtifactHtmlReport('Ph35-iCld Shared Link Assets-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph35-iCld Shared Link Assets-PhDaPsql', description)
- report.add_script()
- data_headers = ('zShare-Creation Date-0',
- 'zShare-Start Date-1',
- 'zShare-End Date-2',
- 'zShare-Expiry Date-3',
- 'zAsset-Date Created-4',
- 'zAsset-zPK-5',
- 'zAsset-Directory-Path-6',
- 'zAsset-Filename-7',
- 'zAddAssetAttr- Original Filename-8',
- 'zCldMast- Original Filename-9',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-10',
- 'zAsset-Syndication State-11',
- 'zAsset-Bundle Scope-12',
- 'zAddAssetAttr-Imported by-13',
- 'zExtAttr-Camera Make-14',
- 'zExtAttr-Camera Model-15',
- 'zAddAssetAttr- Imported by Bundle Identifier-16',
- 'zAddAssetAttr- Imported By Display Name-17',
- 'zAsset-Visibility State-18',
- 'zAsset-Saved Asset Type-19',
- 'zAddAssetAttr-Share Type-20',
- 'zAsset- SortToken -CameraRoll-21',
- 'zAsset-Added Date-22',
- 'zCldMast-Creation Date-23',
- 'zAddAssetAttr-Time Zone Name-24',
- 'zAddAssetAttr-EXIF-String-25',
- 'zAsset-Modification Date-26',
- 'zAsset-Last Shared Date-27',
- 'zAsset-Hidden-28',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-29',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-30',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-31',
- 'zAsset-Trashed Date-32',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-33',
- 'zAddAssetAttr-zPK-34',
- 'zAsset-UUID = store.cloudphotodb-35',
- 'zAddAssetAttr-Master Fingerprint-36',
- 'zAddAssetAttr.Adjusted Fingerprint-37',
- 'zShare-UUID-38',
- 'zShare-Originating Scope ID-39',
- 'zSharePartic-z54SHARE-40',
- 'zShare-Status-41',
- 'zShare-Scope Type-42',
- 'zShare-Asset Count-CMM-43',
- 'zShare-Force Sync Attempted-CMM-44',
- 'zShare-Photos Count-CMM-45',
- 'zShare-Uploaded Photos Count-CMM-46',
- 'zShare-Videos Count-CMM-47',
- 'zShare-Uploaded Videos Count-CMM-48',
- 'zShare-Scope ID-49',
- 'zShare-Title-SPL-50',
- 'zShare-Share URL-51',
- 'zShare-Local Publish State-52',
- 'zShare-Public Permission-53',
- 'zShare-Cloud Local State-54',
- 'zShare-Scope Syncing State-55',
- 'zShare-Auto Share Policy-56',
- 'zSharePartic-Acceptance Status-57',
- 'zSharePartic-User ID-58',
- 'zSharePartic-zPK-59',
- 'zSharePartic-Email Address-60',
- 'zSharePartic-Phone Number-61',
- 'zSharePartic-Participant ID-62',
- 'zSharePartic-UUID-63',
- 'zSharePartic-Is Current User-64',
- 'zSharePartic-Role-65',
- 'zSharePartic-Premission-66',
- 'zShare-Participant Cloud Update State-67',
- 'zShare-Preview State-68',
- 'zShare-Should Notify On Upload Completion-69',
- 'zShare-Should Ignore Budgets-70',
- 'zShare-Trashed State-71',
- 'zShare-Cloud Delete State-72',
- 'zShare-Trashed Date-73',
- 'zShare-LastParticipant Asset Trash Notification Date-74',
- 'zShare-Last Participant Asset Trash Notification View Date-75',
- 'zShare-zENT-76')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81]))
- tsvname = 'Ph35-iCld Shared Link Assets-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
+ data_headers = (('zShare-Creation Date-0', 'datetime'),
+ ('zShare-Start Date-1', 'datetime'),
+ ('zShare-End Date-2', 'datetime'),
+ ('zShare-Expiry Date-3', 'datetime'),
+ ('zAsset-Date Created-4', 'datetime'),
+ 'zAsset-zPK-5',
+ 'zAsset-Directory-Path-6',
+ 'zAsset-Filename-7',
+ 'zAddAssetAttr- Original Filename-8',
+ 'zCldMast- Original Filename-9',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-10',
+ 'zAsset-Syndication State-11',
+ 'zAsset-Bundle Scope-12',
+ 'zAddAssetAttr-Imported by-13',
+ 'zExtAttr-Camera Make-14',
+ 'zExtAttr-Camera Model-15',
+ 'zAddAssetAttr- Imported by Bundle Identifier-16',
+ 'zAddAssetAttr- Imported By Display Name-17',
+ 'zAsset-Visibility State-18',
+ 'zAsset-Saved Asset Type-19',
+ 'zAddAssetAttr-Share Type-20',
+ 'zAsset-Active Library Scope Participation State-21',
+ ('zAsset- SortToken -CameraRoll-22', 'datetime'),
+ ('zAsset-Added Date-23', 'datetime'),
+ ('zCldMast-Creation Date-24', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-25',
+ 'zAddAssetAttr-EXIF-String-26',
+ ('zAsset-Modification Date-27', 'datetime'),
+ ('zAsset-Last Shared Date-28', 'datetime'),
+ 'zAsset-Hidden-29',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-30',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-31',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-32',
+ ('zAsset-Trashed Date-33', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-34',
+ 'zAddAssetAttr-zPK-35',
+ 'zAsset-UUID = store.cloudphotodb-36',
+ 'zAddAssetAttr-Master Fingerprint-37',
+ 'zAddAssetAttr.Adjusted Fingerprint-38',
+ 'zShare-UUID-39',
+ 'zShare-Originating Scope ID-40',
+ 'zSharePartic-z54SHARE-41',
+ 'zShare-Status-42',
+ 'zShare-Scope Type-43',
+ 'zShare-Asset Count-CMM-44',
+ 'zShare-Force Sync Attempted-CMM-45',
+ 'zShare-Photos Count-CMM-46',
+ 'zShare-Uploaded Photos Count-CMM-47',
+ 'zShare-Videos Count-CMM-48',
+ 'zShare-Uploaded Videos Count-CMM-49',
+ 'zShare-Scope ID-50',
+ 'zShare-Title-SPL-51',
+ 'zShare-Share URL-52',
+ 'zShare-Local Publish State-53',
+ 'zShare-Public Permission-54',
+ 'zShare-Cloud Local State-55',
+ 'zShare-Scope Syncing State-56',
+ 'zShare-Auto Share Policy-57',
+ 'zSharePartic-Acceptance Status-58',
+ 'zSharePartic-User ID-59',
+ 'zSharePartic-zPK-60',
+ 'zSharePartic-Email Address-61',
+ 'zSharePartic-Phone Number-62',
+ 'zSharePartic-Participant ID-63',
+ 'zSharePartic-UUID-64',
+ 'zSharePartic-Is Current User-65',
+ 'zSharePartic-Role-66',
+ 'zSharePartic-Premission-67',
+ 'zShare-Participant Cloud Update State-68',
+ 'zSharePartic-Exit State-69',
+ 'zShare-Preview State-70',
+ 'zShare-Should Notify On Upload Completion-71',
+ 'zShare-Should Ignore Budgets-72',
+ 'zShare-Exit Source-73',
+ 'zShare-Exit State-74',
+ 'zShare-Exit Type-75',
+ 'zShare-Trashed State-76',
+ 'zShare-Cloud Delete State-77',
+ ('zShare-Trashed Date-78', 'datetime'),
+ ('zShare-LastParticipant Asset Trash Notification Date-79', 'datetime'),
+ ('zShare-Last Participant Asset Trash Notification View Date-80', 'datetime'),
+ 'zShare-zENT-81')
+ data_list = get_sqlite_db_records(source_path, query)
- tlactivity = 'Ph35-iCld Shared Link Assets-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No iCloud Shared Link Assets found in PhotoData-Photos.sqlite ZSHARE table')
-
- db.close()
- return
-
- elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ return data_headers, data_list, source_path
+
+ elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date',
DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date',
@@ -994,13 +1304,13 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra
zAddAssetAttr.ZADJUSTEDFINGERPRINT AS 'zAddAssetAttr.Adjusted Fingerprint',
zShare.ZUUID AS 'zShare-UUID',
zShare.ZORIGINATINGSCOPEIDENTIFIER AS 'zShare-Originating Scope ID',
- CASE zSharePartic.Z54_SHARE
+ CASE zSharePartic.Z55_SHARE
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
- ELSE 'Unknown-New-Value!: ' || zSharePartic.Z54_SHARE || ''
- END AS 'zSharePartic-z54SHARE',
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.Z55_SHARE || ''
+ END AS 'zSharePartic-z55SHARE',
CASE zShare.ZSTATUS
WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1'
WHEN 3 THEN '3-SPL-Actively-Sharing-3'
@@ -1116,8 +1426,8 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra
CASE zShare.Z_ENT
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || ''
END AS 'zShare-zENT'
FROM ZASSET zAsset
@@ -1128,134 +1438,114 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra
LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK
WHERE zAsset.ZSAVEDASSETTYPE = 8
ORDER BY zShare.ZCREATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81]))
-
- counter += 1
-
- description = 'Parses iCloud Shared Link records and related assets from the' \
- ' PhotoData-Photos.sqlite ZSHARE Table and supports iOS 16-17.'
- report = ArtifactHtmlReport('Ph35-iCld Shared Link Assets-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph35-iCld Shared Link Assets-PhDaPsql', description)
- report.add_script()
- data_headers = ('zShare-Creation Date-0',
- 'zShare-Start Date-1',
- 'zShare-End Date-2',
- 'zShare-Expiry Date-3',
- 'zAsset-Date Created-4',
- 'zAsset-zPK-5',
- 'zAsset-Directory-Path-6',
- 'zAsset-Filename-7',
- 'zAddAssetAttr- Original Filename-8',
- 'zCldMast- Original Filename-9',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-10',
- 'zAsset-Syndication State-11',
- 'zAsset-Bundle Scope-12',
- 'zAddAssetAttr-Imported by-13',
- 'zExtAttr-Camera Make-14',
- 'zExtAttr-Camera Model-15',
- 'zAddAssetAttr- Imported by Bundle Identifier-16',
- 'zAddAssetAttr- Imported By Display Name-17',
- 'zAsset-Visibility State-18',
- 'zAsset-Saved Asset Type-19',
- 'zAddAssetAttr-Share Type-20',
- 'zAsset-Active Library Scope Participation State-21',
- 'zAsset- SortToken -CameraRoll-22',
- 'zAsset-Added Date-23',
- 'zCldMast-Creation Date-24',
- 'zAddAssetAttr-Time Zone Name-25',
- 'zAddAssetAttr-EXIF-String-26',
- 'zAsset-Modification Date-27',
- 'zAsset-Last Shared Date-28',
- 'zAsset-Hidden-29',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-30',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-31',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-32',
- 'zAsset-Trashed Date-33',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-34',
- 'zAddAssetAttr-zPK-35',
- 'zAsset-UUID = store.cloudphotodb-36',
- 'zAddAssetAttr-Master Fingerprint-37',
- 'zAddAssetAttr.Adjusted Fingerprint-38',
- 'zShare-UUID-39',
- 'zShare-Originating Scope ID-40',
- 'zSharePartic-z54SHARE-41',
- 'zShare-Status-42',
- 'zShare-Scope Type-43',
- 'zShare-Asset Count-CMM-44',
- 'zShare-Force Sync Attempted-CMM-45',
- 'zShare-Photos Count-CMM-46',
- 'zShare-Uploaded Photos Count-CMM-47',
- 'zShare-Videos Count-CMM-48',
- 'zShare-Uploaded Videos Count-CMM-49',
- 'zShare-Scope ID-50',
- 'zShare-Title-SPL-51',
- 'zShare-Share URL-52',
- 'zShare-Local Publish State-53',
- 'zShare-Public Permission-54',
- 'zShare-Cloud Local State-55',
- 'zShare-Scope Syncing State-56',
- 'zShare-Auto Share Policy-57',
- 'zSharePartic-Acceptance Status-58',
- 'zSharePartic-User ID-59',
- 'zSharePartic-zPK-60',
- 'zSharePartic-Email Address-61',
- 'zSharePartic-Phone Number-62',
- 'zSharePartic-Participant ID-63',
- 'zSharePartic-UUID-64',
- 'zSharePartic-Is Current User-65',
- 'zSharePartic-Role-66',
- 'zSharePartic-Premission-67',
- 'zShare-Participant Cloud Update State-68',
- 'zSharePartic-Exit State-69',
- 'zShare-Preview State-70',
- 'zShare-Should Notify On Upload Completion-71',
- 'zShare-Should Ignore Budgets-72',
- 'zShare-Exit Source-73',
- 'zShare-Exit State-74',
- 'zShare-Exit Type-75',
- 'zShare-Trashed State-76',
- 'zShare-Cloud Delete State-77',
- 'zShare-Trashed Date-78',
- 'zShare-LastParticipant Asset Trash Notification Date-79',
- 'zShare-Last Participant Asset Trash Notification View Date-80',
- 'zShare-zENT-81')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph35-iCld Shared Link Assets-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph35-iCld Shared Link Assets-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81]))
- else:
- logfunc('No iCloud Shared Link Assets found in PhotoData-Photos.sqlite ZSHARE table')
+ data_headers = (('zShare-Creation Date-0', 'datetime'),
+ ('zShare-Start Date-1', 'datetime'),
+ ('zShare-End Date-2' 'datetime'),
+ ('zShare-Expiry Date-3', 'datetime'),
+ ('zAsset-Date Created-4', 'datetime'),
+ 'zAsset-zPK-5',
+ 'zAsset-Directory-Path-6',
+ 'zAsset-Filename-7',
+ 'zAddAssetAttr- Original Filename-8',
+ 'zCldMast- Original Filename-9',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-10',
+ 'zAsset-Syndication State-11',
+ 'zAsset-Bundle Scope-12',
+ 'zAddAssetAttr-Imported by-13',
+ 'zExtAttr-Camera Make-14',
+ 'zExtAttr-Camera Model-15',
+ 'zAddAssetAttr- Imported by Bundle Identifier-16',
+ 'zAddAssetAttr- Imported By Display Name-17',
+ 'zAsset-Visibility State-18',
+ 'zAsset-Saved Asset Type-19',
+ 'zAddAssetAttr-Share Type-20',
+ 'zAsset-Active Library Scope Participation State-21',
+ ('zAsset- SortToken -CameraRoll-22', 'datetime'),
+ ('zAsset-Added Date-23', 'datetime'),
+ ('zCldMast-Creation Date-24', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-25',
+ 'zAddAssetAttr-EXIF-String-26',
+ ('zAsset-Modification Date-27', 'datetime'),
+ ('zAsset-Last Shared Date-28', 'datetime'),
+ 'zAsset-Hidden-29',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-30',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-31',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-32',
+ ('zAsset-Trashed Date-33', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-34',
+ 'zAddAssetAttr-zPK-35',
+ 'zAsset-UUID = store.cloudphotodb-36',
+ 'zAddAssetAttr-Master Fingerprint-37',
+ 'zAddAssetAttr.Adjusted Fingerprint-38',
+ 'zShare-UUID-39',
+ 'zShare-Originating Scope ID-40',
+ 'zSharePartic-z55SHARE-41',
+ 'zShare-Status-42',
+ 'zShare-Scope Type-43',
+ 'zShare-Asset Count-CMM-44',
+ 'zShare-Force Sync Attempted-CMM-45',
+ 'zShare-Photos Count-CMM-46',
+ 'zShare-Uploaded Photos Count-CMM-47',
+ 'zShare-Videos Count-CMM-48',
+ 'zShare-Uploaded Videos Count-CMM-49',
+ 'zShare-Scope ID-50',
+ 'zShare-Title-SPL-51',
+ 'zShare-Share URL-52',
+ 'zShare-Local Publish State-53',
+ 'zShare-Public Permission-54',
+ 'zShare-Cloud Local State-55',
+ 'zShare-Scope Syncing State-56',
+ 'zShare-Auto Share Policy-57',
+ 'zSharePartic-Acceptance Status-58',
+ 'zSharePartic-User ID-59',
+ 'zSharePartic-zPK-60',
+ 'zSharePartic-Email Address-61',
+ 'zSharePartic-Phone Number-62',
+ 'zSharePartic-Participant ID-63',
+ 'zSharePartic-UUID-64',
+ 'zSharePartic-Is Current User-65',
+ 'zSharePartic-Role-66',
+ 'zSharePartic-Premission-67',
+ 'zShare-Participant Cloud Update State-68',
+ 'zSharePartic-Exit State-69',
+ 'zShare-Preview State-70',
+ 'zShare-Should Notify On Upload Completion-71',
+ 'zShare-Should Ignore Budgets-72',
+ 'zShare-Exit Source-73',
+ 'zShare-Exit State-74',
+ 'zShare-Exit Type-75',
+ 'zShare-Trashed State-76',
+ 'zShare-Cloud Delete State-77',
+ ('zShare-Trashed Date-78', 'datetime'),
+ ('zShare-LastParticipant Asset Trash Notification Date-79', 'datetime'),
+ ('zShare-Last Participant Asset Trash Notification View Date-80', 'datetime'),
+ 'zShare-zENT-81')
+ data_list = get_sqlite_db_records(source_path, query)
- db.close()
- return
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date',
DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date',
@@ -1374,17 +1664,17 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra
zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18',
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash',
zShare.ZUUID AS 'zShare-UUID',
zShare.ZORIGINATINGSCOPEIDENTIFIER AS 'zShare-Originating Scope ID',
- CASE zSharePartic.Z62_SHARE
+ CASE zSharePartic.Z61_SHARE
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
- ELSE 'Unknown-New-Value!: ' || zSharePartic.Z62_SHARE || ''
- END AS 'zSharePartic-z62SHARE',
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.Z61_SHARE || ''
+ END AS 'zSharePartic-z61SHARE',
CASE zShare.ZSTATUS
WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1'
WHEN 3 THEN '3-SPL-Actively-Sharing-3'
@@ -1500,8 +1790,8 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra
CASE zShare.Z_ENT
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || ''
END AS 'zShare-zENT'
FROM ZASSET zAsset
@@ -1512,141 +1802,102 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra
LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK
WHERE zAsset.ZSAVEDASSETTYPE = 8
ORDER BY zShare.ZCREATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81]))
-
- counter += 1
-
- description = 'Parses iCloud Shared Link records and related assets from the' \
- ' PhotoData-Photos.sqlite ZSHARE Table and supports iOS 18.'
- report = ArtifactHtmlReport('Ph35-iCld Shared Link Assets-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph35-iCld Shared Link Assets-PhDaPsql', description)
- report.add_script()
- data_headers = ('zShare-Creation Date-0',
- 'zShare-Start Date-1',
- 'zShare-End Date-2',
- 'zShare-Expiry Date-3',
- 'zAsset-Date Created-4',
- 'zAsset-zPK-5',
- 'zAsset-Directory-Path-6',
- 'zAsset-Filename-7',
- 'zAddAssetAttr- Original Filename-8',
- 'zCldMast- Original Filename-9',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-10',
- 'zAsset-Syndication State-11',
- 'zAsset-Bundle Scope-12',
- 'zAddAssetAttr-Imported by-13',
- 'zExtAttr-Camera Make-14',
- 'zExtAttr-Camera Model-15',
- 'zAddAssetAttr- Imported by Bundle Identifier-16',
- 'zAddAssetAttr- Imported By Display Name-17',
- 'zAsset-Visibility State-18',
- 'zAsset-Saved Asset Type-19',
- 'zAddAssetAttr-Share Type-20',
- 'zAsset-Active Library Scope Participation State-21',
- 'zAsset- SortToken -CameraRoll-22',
- 'zAsset-Added Date-23',
- 'zCldMast-Creation Date-24',
- 'zAddAssetAttr-Time Zone Name-25',
- 'zAddAssetAttr-EXIF-String-26',
- 'zAsset-Modification Date-27',
- 'zAsset-Last Shared Date-28',
- 'zAsset-Hidden-29',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-30',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-31',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-32',
- 'zAsset-Trashed Date-33',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-34',
- 'zAddAssetAttr-zPK-35',
- 'zAsset-UUID = store.cloudphotodb-36',
- 'zAddAssetAttr-Original Stable Hash-iOS18-37',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-38',
- 'zShare-UUID-39',
- 'zShare-Originating Scope ID-40',
- 'zSharePartic-z62SHARE-41',
- 'zShare-Status-42',
- 'zShare-Scope Type-43',
- 'zShare-Asset Count-CMM-44',
- 'zShare-Force Sync Attempted-CMM-45',
- 'zShare-Photos Count-CMM-46',
- 'zShare-Uploaded Photos Count-CMM-47',
- 'zShare-Videos Count-CMM-48',
- 'zShare-Uploaded Videos Count-CMM-49',
- 'zShare-Scope ID-50',
- 'zShare-Title-SPL-51',
- 'zShare-Share URL-52',
- 'zShare-Local Publish State-53',
- 'zShare-Public Permission-54',
- 'zShare-Cloud Local State-55',
- 'zShare-Scope Syncing State-56',
- 'zShare-Auto Share Policy-57',
- 'zSharePartic-Acceptance Status-58',
- 'zSharePartic-User ID-59',
- 'zSharePartic-zPK-60',
- 'zSharePartic-Email Address-61',
- 'zSharePartic-Phone Number-62',
- 'zSharePartic-Participant ID-63',
- 'zSharePartic-UUID-64',
- 'zSharePartic-Is Current User-65',
- 'zSharePartic-Role-66',
- 'zSharePartic-Premission-67',
- 'zShare-Participant Cloud Update State-68',
- 'zSharePartic-Exit State-69',
- 'zShare-Preview State-70',
- 'zShare-Should Notify On Upload Completion-71',
- 'zShare-Should Ignore Budgets-72',
- 'zShare-Exit Source-73',
- 'zShare-Exit State-74',
- 'zShare-Exit Type-75',
- 'zShare-Trashed State-76',
- 'zShare-Cloud Delete State-77',
- 'zShare-Trashed Date-78',
- 'zShare-LastParticipant Asset Trash Notification Date-79',
- 'zShare-Last Participant Asset Trash Notification View Date-80',
- 'zShare-zENT-81')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph35-iCld Shared Link Assets-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph35-iCld Shared Link Assets-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No iCloud Shared Link Assets found in PhotoData-Photos.sqlite ZSHARE table')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81]))
+ data_headers = (('zShare-Creation Date-0', 'datetime'),
+ ('zShare-Start Date-1', 'datetime'),
+ ('zShare-End Date-2', 'datetime'),
+ ('zShare-Expiry Date-3', 'datetime'),
+ ('zAsset-Date Created-4', 'datetime'),
+ 'zAsset-zPK-5',
+ 'zAsset-Directory-Path-6',
+ 'zAsset-Filename-7',
+ 'zAddAssetAttr- Original Filename-8',
+ 'zCldMast- Original Filename-9',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-10',
+ 'zAsset-Syndication State-11',
+ 'zAsset-Bundle Scope-12',
+ 'zAddAssetAttr-Imported by-13',
+ 'zExtAttr-Camera Make-14',
+ 'zExtAttr-Camera Model-15',
+ 'zAddAssetAttr- Imported by Bundle Identifier-16',
+ 'zAddAssetAttr- Imported By Display Name-17',
+ 'zAsset-Visibility State-18',
+ 'zAsset-Saved Asset Type-19',
+ 'zAddAssetAttr-Share Type-20',
+ 'zAsset-Active Library Scope Participation State-21',
+ ('zAsset- SortToken -CameraRoll-22', 'datetime'),
+ ('zAsset-Added Date-23', 'datetime'),
+ ('zCldMast-Creation Date-24', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-25',
+ 'zAddAssetAttr-EXIF-String-26',
+ ('zAsset-Modification Date-27', 'datetime'),
+ ('zAsset-Last Shared Date-28', 'datetime'),
+ 'zAsset-Hidden-29',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-30',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-31',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-32',
+ ('zAsset-Trashed Date-33', 'datetime'),
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-34',
+ 'zAddAssetAttr-zPK-35',
+ 'zAsset-UUID = store.cloudphotodb-36',
+ 'zAddAssetAttr-Original Stable Hash-37',
+ 'zAddAssetAttr.Adjusted Stable Hash-38',
+ 'zShare-UUID-39',
+ 'zShare-Originating Scope ID-40',
+ 'zSharePartic-z61SHARE-41',
+ 'zShare-Status-42',
+ 'zShare-Scope Type-43',
+ 'zShare-Asset Count-CMM-44',
+ 'zShare-Force Sync Attempted-CMM-45',
+ 'zShare-Photos Count-CMM-46',
+ 'zShare-Uploaded Photos Count-CMM-47',
+ 'zShare-Videos Count-CMM-48',
+ 'zShare-Uploaded Videos Count-CMM-49',
+ 'zShare-Scope ID-50',
+ 'zShare-Title-SPL-51',
+ 'zShare-Share URL-52',
+ 'zShare-Local Publish State-53',
+ 'zShare-Public Permission-54',
+ 'zShare-Cloud Local State-55',
+ 'zShare-Scope Syncing State-56',
+ 'zShare-Auto Share Policy-57',
+ 'zSharePartic-Acceptance Status-58',
+ 'zSharePartic-User ID-59',
+ 'zSharePartic-zPK-60',
+ 'zSharePartic-Email Address-61',
+ 'zSharePartic-Phone Number-62',
+ 'zSharePartic-Participant ID-63',
+ 'zSharePartic-UUID-64',
+ 'zSharePartic-Is Current User-65',
+ 'zSharePartic-Role-66',
+ 'zSharePartic-Premission-67',
+ 'zShare-Participant Cloud Update State-68',
+ 'zSharePartic-Exit State-69',
+ 'zShare-Preview State-70',
+ 'zShare-Should Notify On Upload Completion-71',
+ 'zShare-Should Ignore Budgets-72',
+ 'zShare-Exit Source-73',
+ 'zShare-Exit State-74',
+ 'zShare-Exit Type-75',
+ 'zShare-Trashed State-76',
+ 'zShare-Cloud Delete State-77',
+ ('zShare-Trashed Date-78', 'datetime'),
+ ('zShare-LastParticipant Asset Trash Notification Date-79', 'datetime'),
+ ('zShare-Last Participant Asset Trash Notification View Date-80', 'datetime'),
+ 'zShare-zENT-81')
+ data_list = get_sqlite_db_records(source_path, query)
-__artifacts_v2__ = {
- 'Ph35-iCloud Shared Link Assets-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite Ph35 iCld Shared Link Assets',
- 'description': 'Parses iCloud Shared Link records and related assets from the'
- ' PhotoData-Photos.sqlite ZSHARE Table and supports iOS 14-18.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-14',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-F-Cloud_Shared_Methods',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph35icldsharedlinkassetsphdapsql'
- }
-}
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph3TrashedRemovedfromCamRoll.py b/scripts/artifacts/Ph3TrashedRemovedfromCamRoll.py
index 54f91c5a..74202af8 100644
--- a/scripts/artifacts/Ph3TrashedRemovedfromCamRoll.py
+++ b/scripts/artifacts/Ph3TrashedRemovedfromCamRoll.py
@@ -1,42 +1,63 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 2.0
-#
-# Description:
-# Parses basic asset record data from PhotoData-Photos.sqlite for recently deleted-trashed assets
-# and supports iOS 11-18. SyndPL Parser parses basic asset record data from
-# Syndication.photoslibrary-database-Photos.sqlite for indicators of assets removed from the camera roll
-# and supports iOS 15-18. The results for these scripts will contain one record per ZASSET table Z_PK value.
-# This parser is based on research and SQLite queries written by Scott Koenig
-# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347
-#
+__artifacts_v2__ = {
+ 'Ph3_1TrashedRecentlyDeletedPhDaPsql': {
+ 'name': 'Ph3.1-Trashed Recently Deleted-PhDaPsql',
+ 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite for trashed-recently deleted'
+ ' assets and supports iOS 11-17. The results for this script will contain one row'
+ ' per ZASSET table Z_PK value.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-B-Interaction_Artifacts',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ },
+ 'Ph3_2RemovedfromCameraRollSyndPL': {
+ 'name': 'Ph3.2-Removed from Camera Roll-SyndPL',
+ 'description': 'Parses basic asset row data from Syndication.photoslibrary-database-Photos.sqlite'
+ ' for syndication PL asserts remvoed from camera roll and supports iOS 15-17.'
+ ' These assets may have been displayed in the camera roll, then deleted from'
+ ' the camera roll view. The results for this script will contain one row per asset.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite',
+ 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts',
+ 'notes': '',
+ 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
-
-def get_ph3trashedphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
+@artifact_processor
+def Ph3_1TrashedRecentlyDeletedPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("10.3.4"):
- logfunc("Unsupported version for PhotoData-Photos.sqlite recently deleted or"
- " trashed assets from iOS " + iosversion)
+ logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("14")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
CASE zAsset.ZTRASHEDSTATE
@@ -58,57 +79,36 @@ def get_ph3trashedphdapsql(files_found, report_folder, seeker, wrap_text, timezo
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE zAsset.ZTRASHEDSTATE = 1
ORDER BY zAsset.ZTRASHEDSTATE
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10]))
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \
- ' trashed-recently deleted assets and supports iOS 11-13.' \
- ' The results for this script will contain one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph3.1-Trashed Recently Deleted-PhDaPsq')
- report.start_artifact_report(report_folder, 'Ph3.1-Trashed Recently Deleted-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Trashed Date',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
- 'zAsset-Directory-Path',
- 'zAsset-Filename',
- 'zAddAssetAttr- Original Filename',
- 'zCldMast- Original Filename',
- 'zCldMast-Import Session ID- AirDrop-StillTesting',
- 'zAsset-zPK',
- 'zAddAssetAttr-zPK',
- 'zAsset-UUID = store.cloudphotodb',
- 'zAddAssetAttr-Master Fingerprint')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph3.1-Trashed Recently Deleted-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph3.1-Trashed Recently Deleted-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Trashed Recently Deleted Assets')
-
- db.close()
- return
+ data_headers = (('zAsset-Trashed Date-0', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-6',
+ 'zAsset-zPK-7',
+ 'zAddAssetAttr-zPK-8',
+ 'zAsset-UUID = store.cloudphotodb-9',
+ 'zAddAssetAttr-Master Fingerprint-10')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
CASE zAsset.ZTRASHEDSTATE
@@ -130,57 +130,36 @@ def get_ph3trashedphdapsql(files_found, report_folder, seeker, wrap_text, timezo
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE zAsset.ZTRASHEDSTATE = 1
ORDER BY zAsset.ZTRASHEDSTATE
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10]))
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \
- ' trashed-recently deleted assets and supports iOS 14.' \
- ' The results for this script will contain one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph3.1-Trashed Recently Deleted-PhDaPsq')
- report.start_artifact_report(report_folder, 'Ph3.1-Trashed Recently Deleted-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Trashed Date',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
- 'zAsset-Directory-Path',
- 'zAsset-Filename',
- 'zAddAssetAttr- Original Filename',
- 'zCldMast- Original Filename',
- 'zCldMast-Import Session ID- AirDrop-StillTesting',
- 'zAsset-zPK',
- 'zAddAssetAttr-zPK',
- 'zAsset-UUID = store.cloudphotodb',
- 'zAddAssetAttr-Master Fingerprint')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph3.1-Trashed Recently Deleted-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph3.1-Trashed Recently Deleted-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Trashed Recently Deleted Assets')
-
- db.close()
- return
+ data_headers = (('zAsset-Trashed Date-0', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-6',
+ 'zAsset-zPK-7',
+ 'zAddAssetAttr-zPK-8',
+ 'zAsset-UUID = store.cloudphotodb-9',
+ 'zAddAssetAttr-Master Fingerprint-10')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
CASE zAsset.ZTRASHEDSTATE
@@ -213,59 +192,38 @@ def get_ph3trashedphdapsql(files_found, report_folder, seeker, wrap_text, timezo
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE zAsset.ZTRASHEDSTATE = 1
ORDER BY zAsset.ZTRASHEDSTATE
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12]))
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \
- ' trashed-recently deleted assets and supports iOS 15.' \
- ' The results for this script will contain one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph3.1-Trashed Recently Deleted-PhDaPsq')
- report.start_artifact_report(report_folder, 'Ph3.1-Trashed Recently Deleted-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Trashed Date',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
- 'zAsset-Directory-Path',
- 'zAsset-Filename',
- 'zAddAssetAttr- Original Filename',
- 'zCldMast- Original Filename',
- 'zCldMast-Import Session ID- AirDrop-StillTesting',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files',
- 'zAsset-Syndication State',
- 'zAsset-zPK',
- 'zAddAssetAttr-zPK',
- 'zAsset-UUID = store.cloudphotodb',
- 'zAddAssetAttr-Master Fingerprint')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph3.1-Trashed Recently Deleted-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph3.1-Trashed Recently Deleted-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Trashed Recently Deleted Assets')
-
- db.close()
- return
+ data_headers = (('zAsset-Trashed Date-0', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-6',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-7',
+ 'zAsset-Syndication State-8',
+ 'zAsset-zPK-9',
+ 'zAddAssetAttr-zPK-10',
+ 'zAsset-UUID = store.cloudphotodb-11',
+ 'zAddAssetAttr-Master Fingerprint-12')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
CASE zAsset.ZTRASHEDSTATE
@@ -305,63 +263,42 @@ def get_ph3trashedphdapsql(files_found, report_folder, seeker, wrap_text, timezo
LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT
WHERE zAsset.ZTRASHEDSTATE = 1
ORDER BY zAsset.ZTRASHEDSTATE
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16]))
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \
- ' trashed-recently deleted assets and supports iOS 16-17.' \
- ' The results for this script will contain one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph3.1-Trashed Recently Deleted-PhDaPsq')
- report.start_artifact_report(report_folder, 'Ph3.1-Trashed Recently Deleted-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Trashed Date-0',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-1',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-2',
- 'SPLzSharePartic-zPK= TrashedByParticipant-3',
- 'SPLzSharePartic-Email Address-4',
- 'SPLzSharePartic-Phone Number-5',
- 'zAsset-Directory-Path-6',
- 'zAsset-Filename-7',
- 'zAddAssetAttr- Original Filename-8',
- 'zCldMast- Original Filename-9',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-10',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
- 'zAsset-Syndication State-12',
- 'zAsset-zPK-13',
- 'zAddAssetAttr-zPK-14',
- 'zAsset-UUID = store.cloudphotodb-15',
- 'zAddAssetAttr-Master Fingerprint-16')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph3.1-Trashed Recently Deleted-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph3.1-Trashed Recently Deleted-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Trashed Recently Deleted Assets')
-
- db.close()
- return
+ data_headers = (('zAsset-Trashed Date-0', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-1',
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-2',
+ 'SPLzSharePartic-zPK= TrashedByParticipant-3',
+ 'SPLzSharePartic-Email Address-4',
+ 'SPLzSharePartic-Phone Number-5',
+ 'zAsset-Directory-Path-6',
+ 'zAsset-Filename-7',
+ 'zAddAssetAttr- Original Filename-8',
+ 'zCldMast- Original Filename-9',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-10',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
+ 'zAsset-Syndication State-12',
+ 'zAsset-zPK-13',
+ 'zAddAssetAttr-zPK-14',
+ 'zAsset-UUID = store.cloudphotodb-15',
+ 'zAddAssetAttr-Master Fingerprint-16')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
CASE zAsset.ZTRASHEDSTATE
@@ -392,8 +329,8 @@ def get_ph3trashedphdapsql(files_found, report_folder, seeker, wrap_text, timezo
zAsset.Z_PK AS 'zAsset-zPK',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18'
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash'
FROM ZASSET zAsset
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
@@ -402,392 +339,267 @@ def get_ph3trashedphdapsql(files_found, report_folder, seeker, wrap_text, timezo
LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT
WHERE zAsset.ZTRASHEDSTATE = 1
ORDER BY zAsset.ZTRASHEDSTATE
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17]))
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \
- ' trashed-recently deleted assets and supports iOS 18.' \
- ' The results for this script will contain one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph3.1-Trashed Recently Deleted-PhDaPsq')
- report.start_artifact_report(report_folder, 'Ph3.1-Trashed Recently Deleted-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Trashed Date-0',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-1',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-2',
- 'SPLzSharePartic-zPK= TrashedByParticipant-3',
- 'SPLzSharePartic-Email Address-4',
- 'SPLzSharePartic-Phone Number-5',
- 'zAsset-Directory-Path-6',
- 'zAsset-Filename-7',
- 'zAddAssetAttr- Original Filename-8',
- 'zCldMast- Original Filename-9',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-10',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
- 'zAsset-Syndication State-12',
- 'zAsset-zPK-13',
- 'zAddAssetAttr-zPK-14',
- 'zAsset-UUID = store.cloudphotodb-15',
- 'zAddAssetAttr-Original Stable Hash-iOS18-16',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-17')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph3.1-Trashed Recently Deleted-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph3.1-Trashed Recently Deleted-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Trashed Recently Deleted Assets')
-
- db.close()
- return
-
-
-def get_ph3removedfromcamerarollsyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
- break
-
- if report_folder.endswith('/') or report_folder.endswith('\\'):
- report_folder = report_folder[:-1]
- iosversion = scripts.artifacts.artGlobals.versionf
- if version.parse(iosversion) <= version.parse("14.8.1"):
- logfunc("Unsupported version for Syndication.photoslibrary-database-Photos.sqlite"
- " Syndication PL assets removed from camera roll iOS " + iosversion)
- if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
-
- cursor.execute("""
- SELECT
- DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files',
- CASE zAsset.ZSYNDICATIONSTATE
- WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0'
- WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1'
- WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2'
- WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3'
- WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8'
- WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9'
- WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || ''
- END AS 'zAsset-Syndication State',
- zAsset.ZDIRECTORY AS 'zAsset-Directory-Path',
- zAsset.ZFILENAME AS 'zAsset-Filename',
- zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename',
- zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename',
- zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting',
- zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files',
- DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
- CASE zAsset.ZTRASHEDSTATE
- WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0'
- WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || ''
- END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
- zAsset.Z_PK AS 'zAsset-zPK',
- zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
- zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint'
- FROM ZASSET zAsset
- LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
- LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
- WHERE zAsset.ZSYNDICATIONSTATE IN (8, 10)
- ORDER BY zAddAssetAttr.ZLASTUPLOADATTEMPTDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ data_headers = (('zAsset-Trashed Date-0', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-1',
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-2',
+ 'SPLzSharePartic-zPK= TrashedByParticipant-3',
+ 'SPLzSharePartic-Email Address-4',
+ 'SPLzSharePartic-Phone Number-5',
+ 'zAsset-Directory-Path-6',
+ 'zAsset-Filename-7',
+ 'zAddAssetAttr- Original Filename-8',
+ 'zCldMast- Original Filename-9',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-10',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
+ 'zAsset-Syndication State-12',
+ 'zAsset-zPK-13',
+ 'zAddAssetAttr-zPK-14',
+ 'zAsset-UUID = store.cloudphotodb-15',
+ 'zAddAssetAttr-Original Stable Hash-16',
+ 'zAddAssetAttr.Adjusted Stable Hash-17')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
+@artifact_processor
+def Ph3_2RemovedfromCameraRollSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
+
+ if source_path.endswith('.sqlite'):
+ break
+
+ if report_folder.endswith('/') or report_folder.endswith('\\'):
+ report_folder = report_folder[:-1]
+ iosversion = scripts.artifacts.artGlobals.versionf
+ if version.parse(iosversion) <= version.parse("14.8.1"):
+ logfunc("Unsupported version for Syndication.photoslibrary iOS " + iosversion)
+ return (), [], source_path
+ if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
+
+ query = '''
+ SELECT
+ DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS
+ 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files',
+ CASE zAsset.ZSYNDICATIONSTATE
+ WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0'
+ WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1'
+ WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2'
+ WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3'
+ WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8'
+ WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9'
+ WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || ''
+ END AS 'zAsset-Syndication State',
+ zAsset.ZDIRECTORY AS 'zAsset-Directory-Path',
+ zAsset.ZFILENAME AS 'zAsset-Filename',
+ zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename',
+ zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename',
+ zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting',
+ zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files',
+ DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
+ CASE zAsset.ZTRASHEDSTATE
+ WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0'
+ WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || ''
+ END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
+ zAsset.Z_PK AS 'zAsset-zPK',
+ zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
+ zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
+ zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint'
+ FROM ZASSET zAsset
+ LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
+ LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
+ WHERE zAsset.ZSYNDICATIONSTATE IN (8, 10)
+ ORDER BY zAddAssetAttr.ZLASTUPLOADATTEMPTDATE
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13]))
- counter += 1
-
- description = 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite' \
- ' for syndication PL asserts remvoed from camera roll and supports iOS 15.' \
- ' These assets may have been displayed in the camera roll, then deleted from' \
- ' the camera roll view. The results for this script will contain one record per asset.'
- report = ArtifactHtmlReport('Ph3.2-Removed from camera roll-SyndPL')
- report.start_artifact_report(report_folder, 'Ph3.2-Removed from camera roll-SyndPL', description)
- report.add_script()
- data_headers = ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files',
- 'zAsset-Syndication State',
- 'zAsset-Directory-Path',
- 'zAsset-Filename',
- 'zAddAssetAttr- Original Filename',
- 'zCldMast- Original Filename',
- 'zCldMast-Import Session ID- AirDrop-StillTesting',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files',
- 'zAsset-Trashed Date',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
- 'zAsset-zPK',
- 'zAddAssetAttr-zPK',
- 'zAsset-UUID = store.cloudphotodb',
- 'zAddAssetAttr-Master Fingerprint')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph3.2-Removed from camera roll-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph3.2-Removed from camera roll-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite'
- ' possible deleted or removed from camera roll SyndPL assets')
-
- db.close()
- return
-
- elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
-
- cursor.execute("""
- SELECT
- DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files',
- CASE zAsset.ZSYNDICATIONSTATE
- WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0'
- WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1'
- WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2'
- WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3'
- WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8'
- WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9'
- WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || ''
- END AS 'zAsset-Syndication State',
- zAsset.ZDIRECTORY AS 'zAsset-Directory-Path',
- zAsset.ZFILENAME AS 'zAsset-Filename',
- zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename',
- zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename',
- zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting',
- zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files',
- DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
- CASE zAsset.ZTRASHEDSTATE
- WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0'
- WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || ''
- END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
- zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK',
- SPLzSharePartic.Z_PK AS 'SPLzSharePartic-zPK= TrashedByParticipant',
- SPLzSharePartic.ZEMAILADDRESS AS 'SPLzSharePartic-Email Address',
- SPLzSharePartic.ZPHONENUMBER AS 'SPLzSharePartic-Phone Number',
- zAsset.Z_PK AS 'zAsset-zPK',
- zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
- zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint'
- FROM ZASSET zAsset
- LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
- LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
- LEFT JOIN ZSHARE SPLzShare ON SPLzShare.Z_PK = zAsset.ZLIBRARYSCOPE
- LEFT JOIN ZASSETCONTRIBUTOR zAssetContrib ON zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS = zAsset.Z_PK
- LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT
- WHERE zAsset.ZSYNDICATIONSTATE IN (8, 10)
- ORDER BY zAddAssetAttr.ZLASTUPLOADATTEMPTDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17]))
+ data_headers = (('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-0', 'datetime'),
+ 'zAsset-Syndication State-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-6',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-7',
+ ('zAsset-Trashed Date-8', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-9',
+ 'zAsset-zPK-10',
+ 'zAddAssetAttr-zPK-11',
+ 'zAsset-UUID = store.cloudphotodb-12',
+ 'zAddAssetAttr-Master Fingerprint-13')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
+ elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- counter += 1
-
- description = 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite' \
- ' for syndication PL asserts removed from camera roll and supports iOS 16-17.' \
- ' These assets may have been displayed in the camera roll, then deleted from' \
- ' the camera roll view. The results for this script will contain one record per asset.'
- report = ArtifactHtmlReport('Ph3.2-Removed from camera roll-SyndPL')
- report.start_artifact_report(report_folder, 'Ph3.2-Removed from camera roll-SyndPL', description)
- report.add_script()
- data_headers = ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files',
- 'zAsset-Syndication State',
- 'zAsset-Directory-Path',
- 'zAsset-Filename',
- 'zAddAssetAttr- Original Filename',
- 'zCldMast- Original Filename',
- 'zCldMast-Import Session ID- AirDrop-StillTesting',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files',
- 'zAsset-Trashed Date',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK',
- 'SPLzSharePartic-zPK= TrashedByParticipant',
- 'SPLzSharePartic-Email Address',
- 'SPLzSharePartic-Phone Number',
- 'zAsset-zPK',
- 'zAddAssetAttr-zPK',
- 'zAsset-UUID = store.cloudphotodb',
- 'zAddAssetAttr-Master Fingerprint')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph3.2-Removed from camera roll-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph3.2-Removed from camera roll-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite'
- ' possible deleted or removed from camera roll SyndPL assets')
-
- db.close()
- return
-
- elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
-
- cursor.execute("""
- SELECT
- DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
- CASE zAsset.ZTRASHEDSTATE
- WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0'
- WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || ''
- END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
- zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK',
- SPLzSharePartic.Z_PK AS 'SPLzSharePartic-zPK= TrashedByParticipant',
- SPLzSharePartic.ZEMAILADDRESS AS 'SPLzSharePartic-Email Address',
- SPLzSharePartic.ZPHONENUMBER AS 'SPLzSharePartic-Phone Number',
- zAsset.ZDIRECTORY AS 'zAsset-Directory-Path',
- zAsset.ZFILENAME AS 'zAsset-Filename',
- zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename',
- zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename',
- zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting',
- zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files',
- CASE zAsset.ZSYNDICATIONSTATE
- WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0'
- WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1'
- WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2'
- WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3'
- WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8'
- WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9'
- WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || ''
- END AS 'zAsset-Syndication State',
- zAsset.Z_PK AS 'zAsset-zPK',
- zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
- zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18'
- FROM ZASSET zAsset
- LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
- LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
- LEFT JOIN ZSHARE SPLzShare ON SPLzShare.Z_PK = zAsset.ZLIBRARYSCOPE
- LEFT JOIN ZASSETCONTRIBUTOR zAssetContrib ON zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS = zAsset.Z_PK
- LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT
- WHERE zAsset.ZTRASHEDSTATE = 1
- ORDER BY zAsset.ZTRASHEDSTATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ query = '''
+ SELECT
+ DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS
+ 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files',
+ CASE zAsset.ZSYNDICATIONSTATE
+ WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0'
+ WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1'
+ WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2'
+ WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3'
+ WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8'
+ WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9'
+ WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || ''
+ END AS 'zAsset-Syndication State',
+ zAsset.ZDIRECTORY AS 'zAsset-Directory-Path',
+ zAsset.ZFILENAME AS 'zAsset-Filename',
+ zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename',
+ zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename',
+ zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting',
+ zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files',
+ DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
+ CASE zAsset.ZTRASHEDSTATE
+ WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0'
+ WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || ''
+ END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
+ zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK',
+ SPLzSharePartic.Z_PK AS 'SPLzSharePartic-zPK= TrashedByParticipant',
+ SPLzSharePartic.ZEMAILADDRESS AS 'SPLzSharePartic-Email Address',
+ SPLzSharePartic.ZPHONENUMBER AS 'SPLzSharePartic-Phone Number',
+ zAsset.Z_PK AS 'zAsset-zPK',
+ zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
+ zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
+ zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint'
+ FROM ZASSET zAsset
+ LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
+ LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
+ LEFT JOIN ZSHARE SPLzShare ON SPLzShare.Z_PK = zAsset.ZLIBRARYSCOPE
+ LEFT JOIN ZASSETCONTRIBUTOR zAssetContrib ON zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS = zAsset.Z_PK
+ LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT
+ WHERE zAsset.ZSYNDICATIONSTATE IN (8, 10)
+ ORDER BY zAddAssetAttr.ZLASTUPLOADATTEMPTDATE
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17]))
- counter += 1
-
- description = 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite' \
- ' for syndication PL asserts removed from camera roll and supports iOS 18.' \
- ' These assets may have been displayed in the camera roll, then deleted from' \
- ' the camera roll view. The results for this script will contain one record per asset.'
- report = ArtifactHtmlReport('Ph3.2-Removed from camera roll-SyndPL')
- report.start_artifact_report(report_folder, 'Ph3.2-Removed from camera roll-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Trashed Date-0',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-1',
- 'zAsset-Trashed by Participant= zShareParticipant_zPK-2',
- 'SPLzSharePartic-zPK= TrashedByParticipant-3',
- 'SPLzSharePartic-Email Address-4',
- 'SPLzSharePartic-Phone Number-5',
- 'zAsset-Directory-Path-6',
- 'zAsset-Filename-7',
- 'zAddAssetAttr- Original Filename-8',
- 'zCldMast- Original Filename-9',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-10',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
- 'zAsset-Syndication State-12',
- 'zAsset-zPK-13',
- 'zAddAssetAttr-zPK-14',
- 'zAsset-UUID = store.cloudphotodb-15',
- 'zAddAssetAttr-Original Stable Hash-iOS18-16',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-17')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph3.2-Removed from camera roll-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph3.2-Removed from camera roll-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite'
- ' possible deleted or removed from camera roll SyndPL assets')
-
- db.close()
- return
+ data_headers = (('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-0', 'datetime'),
+ 'zAsset-Syndication State-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-6',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-7',
+ ('zAsset-Trashed Date-8', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-9',
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-10',
+ 'SPLzSharePartic-zPK= TrashedByParticipant-11',
+ 'SPLzSharePartic-Email Address-12',
+ 'SPLzSharePartic-Phone Number-13',
+ 'zAsset-zPK-14',
+ 'zAddAssetAttr-zPK-15',
+ 'zAsset-UUID = store.cloudphotodb-16',
+ 'zAddAssetAttr-Master Fingerprint-17')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+ elif version.parse(iosversion) >= version.parse("18"):
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
-__artifacts_v2__ = {
- 'Ph3-1-Recently Deleted Trashed-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite 3.1 Trashed Recently Deleted',
- 'description': 'Parses basic asset record data from PhotoData-Photos.sqlite for trashed-recently deleted'
- ' assets and supports iOS 11-17. The results for this script will contain one record'
- ' per ZASSET table Z_PK value.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-12',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-B-Interaction_Artifacts',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph3trashedphdapsql'
- },
- 'Ph3-2-Removed from Camera Roll-SyndPL': {
- 'name': 'SyndPL Photos.sqlite 3.2 Removed from camera roll',
- 'description': 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite'
- ' for syndication PL asserts remvoed from camera roll and supports iOS 15-17.'
- ' These assets may have been displayed in the camera roll, then deleted from'
- ' the camera roll view. The results for this script will contain one record per asset.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-12',
- 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite',
- 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts',
- 'notes': '',
- 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',
- 'function': 'get_ph3removedfromcamerarollsyndpl'
- }
-}
+ query = '''
+ SELECT
+ DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
+ CASE zAsset.ZTRASHEDSTATE
+ WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0'
+ WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || ''
+ END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
+ zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK',
+ SPLzSharePartic.Z_PK AS 'SPLzSharePartic-zPK= TrashedByParticipant',
+ SPLzSharePartic.ZEMAILADDRESS AS 'SPLzSharePartic-Email Address',
+ SPLzSharePartic.ZPHONENUMBER AS 'SPLzSharePartic-Phone Number',
+ zAsset.ZDIRECTORY AS 'zAsset-Directory-Path',
+ zAsset.ZFILENAME AS 'zAsset-Filename',
+ zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename',
+ zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename',
+ zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting',
+ zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files',
+ CASE zAsset.ZSYNDICATIONSTATE
+ WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0'
+ WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1'
+ WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2'
+ WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3'
+ WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8'
+ WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9'
+ WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || ''
+ END AS 'zAsset-Syndication State',
+ zAsset.Z_PK AS 'zAsset-zPK',
+ zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
+ zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash'
+ FROM ZASSET zAsset
+ LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
+ LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
+ LEFT JOIN ZSHARE SPLzShare ON SPLzShare.Z_PK = zAsset.ZLIBRARYSCOPE
+ LEFT JOIN ZASSETCONTRIBUTOR zAssetContrib ON zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS = zAsset.Z_PK
+ LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT
+ WHERE zAsset.ZTRASHEDSTATE = 1
+ ORDER BY zAsset.ZTRASHEDSTATE
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17]))
+
+ data_headers = (('zAsset-Trashed Date-0', 'datetime'),
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-1',
+ 'zAsset-Trashed by Participant= zShareParticipant_zPK-2',
+ 'SPLzSharePartic-zPK= TrashedByParticipant-3',
+ 'SPLzSharePartic-Email Address-4',
+ 'SPLzSharePartic-Phone Number-5',
+ 'zAsset-Directory-Path-6',
+ 'zAsset-Filename-7',
+ 'zAddAssetAttr- Original Filename-8',
+ 'zCldMast- Original Filename-9',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-10',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
+ 'zAsset-Syndication State-12',
+ 'zAsset-zPK-13',
+ 'zAddAssetAttr-zPK-14',
+ 'zAsset-UUID = store.cloudphotodb-15',
+ 'zAddAssetAttr-Original Stable Hash-16',
+ 'zAddAssetAttr.Adjusted Stable Hash-17')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph4Hidden.py b/scripts/artifacts/Ph4Hidden.py
index ecdac369..6baccea2 100644
--- a/scripts/artifacts/Ph4Hidden.py
+++ b/scripts/artifacts/Ph4Hidden.py
@@ -1,39 +1,48 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 2.0
-#
-# Description:
-# Parses basic asset record data from Photos.sqlite for hidden assets and supports iOS 11-18.
-# The results for this script will contain one record per ZASSET table Z_PK value.
-# This parser is based on research and SQLite queries written by Scott Koenig
-# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347
-#
+__artifacts_v2__ = {
+ 'Ph4HiddenPhDaPsql': {
+ 'name': 'Ph4-Hidden-PhDaPsql',
+ 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite for hidden assets'
+ ' and supports iOS 11-18. The results for this script will contain'
+ ' one row per ZASSET table Z_PK value.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-B-Interaction_Artifacts',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
-
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
-def get_ph4hiddenphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
+@artifact_processor
+def Ph4HiddenPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("10.3.4"):
- logfunc("Unsupported version for PhotoData-Photos.sqlite hidden assets from iOS " + iosversion)
+ logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("14")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], None
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
CASE zAsset.ZHIDDEN
@@ -55,57 +64,36 @@ def get_ph4hiddenphdapsql(files_found, report_folder, seeker, wrap_text, timezon
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE zAsset.ZHIDDEN = 1
ORDER BY zAsset.ZMODIFICATIONDATE
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10]))
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for hidden assets' \
- ' and supports iOS 11-13. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph4-Hidden-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph4-Hidden-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Modification Date',
- 'zAsset-Hidden',
- 'zAsset-Directory-Path',
- 'zAsset-Filename',
- 'zAddAssetAttr- Original Filename',
- 'zCldMast- Original Filename',
- 'zCldMast-Import Session ID- AirDrop-StillTesting',
- 'zAsset-zPK',
- 'zAddAssetAttr-zPK',
- 'zAsset-UUID = store.cloudphotodb',
- 'zAddAssetAttr-Master Fingerprint')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph4-Hidden-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph4-Hidden-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Hidden Assets')
-
- db.close()
- return
+ data_headers = (('zAsset-Modification Date-0', 'datetime'),
+ 'zAsset-Hidden-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-6',
+ 'zAsset-zPK-7',
+ 'zAddAssetAttr-zPK-8',
+ 'zAsset-UUID = store.cloudphotodb-9',
+ 'zAddAssetAttr-Master Fingerprint-10')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], None
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
CASE zAsset.ZHIDDEN
@@ -127,57 +115,36 @@ def get_ph4hiddenphdapsql(files_found, report_folder, seeker, wrap_text, timezon
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE zAsset.ZHIDDEN = 1
ORDER BY zAsset.ZMODIFICATIONDATE
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10]))
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for hidden assets' \
- ' and supports iOS 14. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph4-Hidden-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph4-Hidden-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Modification Date',
- 'zAsset-Hidden',
- 'zAsset-Directory-Path',
- 'zAsset-Filename',
- 'zAddAssetAttr- Original Filename',
- 'zCldMast- Original Filename',
- 'zCldMast-Import Session ID- AirDrop-StillTesting',
- 'zAsset-zPK',
- 'zAddAssetAttr-zPK',
- 'zAsset-UUID = store.cloudphotodb',
- 'zAddAssetAttr-Master Fingerprint')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph4-Hidden-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph4-Hidden-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Hidden Assets')
-
- db.close()
- return
+ data_headers = (('zAsset-Modification Date-0', 'datetime'),
+ 'zAsset-Hidden-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-6',
+ 'zAsset-zPK-7',
+ 'zAddAssetAttr-zPK-8',
+ 'zAsset-UUID = store.cloudphotodb-9',
+ 'zAddAssetAttr-Master Fingerprint-10')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], None
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
CASE zAsset.ZHIDDEN
@@ -200,58 +167,37 @@ def get_ph4hiddenphdapsql(files_found, report_folder, seeker, wrap_text, timezon
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE zAsset.ZHIDDEN = 1
ORDER BY zAsset.ZMODIFICATIONDATE
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11]))
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for hidden assets' \
- ' and supports iOS 15-17. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph4-Hidden-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph4-Hidden-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Modification Date-0',
- 'zAsset-Hidden-1',
- 'zAsset-Directory-Path-2',
- 'zAsset-Filename-3',
- 'zAddAssetAttr- Original Filename-4',
- 'zCldMast- Original Filename-5',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-6',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-7',
- 'zAsset-zPK-8',
- 'zAddAssetAttr-zPK-9',
- 'zAsset-UUID = store.cloudphotodb-10',
- 'zAddAssetAttr-Master Fingerprint-11')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph4-Hidden-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph4-Hidden-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Hidden Assets')
-
- db.close()
- return
+ data_headers = (('zAsset-Modification Date-0', 'datetime'),
+ 'zAsset-Hidden-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-6',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-7',
+ 'zAsset-zPK-8',
+ 'zAddAssetAttr-zPK-9',
+ 'zAsset-UUID = store.cloudphotodb-10',
+ 'zAddAssetAttr-Master Fingerprint-11')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], None
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
CASE zAsset.ZHIDDEN
@@ -268,74 +214,33 @@ def get_ph4hiddenphdapsql(files_found, report_folder, seeker, wrap_text, timezon
zAsset.Z_PK AS 'zAsset-zPK',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18'
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash'
FROM ZASSET zAsset
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE zAsset.ZHIDDEN = 1
ORDER BY zAsset.ZMODIFICATIONDATE
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
row[10], row[11], row[12]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for hidden assets' \
- ' and supports iOS 18. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph4-Hidden-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph4-Hidden-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Modification Date-0',
- 'zAsset-Hidden-1',
- 'zAsset-Directory-Path-2',
- 'zAsset-Filename-3',
- 'zAddAssetAttr- Original Filename-4',
- 'zCldMast- Original Filename-5',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-6',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-7',
- 'zAsset-zPK-8',
- 'zAddAssetAttr-zPK-9',
- 'zAsset-UUID = store.cloudphotodb-10',
- 'zAddAssetAttr-Original Stable Hash-iOS18-11',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-12')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph4-Hidden-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph4-Hidden-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Hidden Assets')
-
- db.close()
- return
-
-
-__artifacts_v2__ = {
- 'Ph4-Hidden-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite 4 Hidden Assets',
- 'description': 'Parses basic asset record data from PhotoData-Photos.sqlite for hidden assets'
- ' and supports iOS 11-18. The results for this script will contain'
- ' one record per ZASSET table Z_PK value.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-12',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-B-Interaction_Artifacts',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph4hiddenphdapsql'
- }
-}
+
+ data_headers = (('zAsset-Modification Date-0', 'datetime'),
+ 'zAsset-Hidden-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-6',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-7',
+ 'zAsset-zPK-8',
+ 'zAddAssetAttr-zPK-9',
+ 'zAsset-UUID = store.cloudphotodb-10',
+ 'zAddAssetAttr-Original Stable Hash-11',
+ 'zAddAssetAttr.Adjusted Stable Hash-12')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph50AssetIntResouData.py b/scripts/artifacts/Ph50AssetIntResouData.py
index 1a90a347..2e602f06 100644
--- a/scripts/artifacts/Ph50AssetIntResouData.py
+++ b/scripts/artifacts/Ph50AssetIntResouData.py
@@ -1,42 +1,70 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 2.0
-#
-# Description:
-# Parses iOS 14-18 asset records from PhotoData-Photos.sqlite ZINTERNALRESOURCE and other tables.
-# This and other related parsers should provide data for investigative analysis of assets being stored locally
-# on the device verses assets being stored in iCloud Photos as the result of optimization.
-# This is very large query and script, I recommend opening the TSV generated report with Zimmerman's Tools
-# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results.
-# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347
-#
+__artifacts_v2__ = {
+ 'Ph50_1AssetIntResouPhDaPsql': {
+ 'name': 'Ph50.1-Asset_IntResou-PhDaPsql',
+ 'description': 'Parses iOS 14-18 asset records from PhotoData-Photos.sqlite ZINTERNALRESOURCE and'
+ ' other tables. This and other related parsers should provide data for investigative'
+ ' analysis of assets being stored locally on the device verses assets being stored in'
+ ' iCloud Photos as the result of optimization. This is very large query and script,'
+ ' I recommend opening the TSV generated report with Zimmermans Tools'
+ ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,'
+ ' and filter the results.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-I-Asset_IntResou-Optimization',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ },
+ 'Ph50_2AssetIntResouSyndPL': {
+ 'name': 'Ph50.2-Asset_IntResou-SyndPL',
+ 'description': 'Parses iOS 14-18 asset records from Syndication.photos.library-database-Photos.sqlite'
+ ' ZINTERNALRESOURCE and and other tables. This and other related parsers should'
+ ' provide data for investigative analysis of assets being stored locally on the'
+ ' device verses assets being stored in iCloud Photos as the result of optimization.'
+ ' This is very large query and script, I recommend opening the TSV generated report'
+ ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer'
+ ' to view, search, and filter the results.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite',
+ 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
-
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
-def get_ph50intresouoptimzdataphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+@artifact_processor
+def Ph50_1AssetIntResouPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("13.7"):
- logfunc("Unsupported version for PhotoData-Photos.sqlite ZINTERNALRESOURCE table data from iOS " + iosversion)
+ logfunc("Unsupported version for PhotoData-Photos.sqlite from iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found, "Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart',
zAsset.Z_PK AS 'zAsset-zPK',
@@ -754,316 +782,291 @@ def get_ph50intresouoptimzdataphdapsql(files_found, report_folder, seeker, wrap_
LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK
ORDER BY zAsset.ZDATECREATED
- """)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
+ row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
+ row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
+ row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
+ row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
+ row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
+ row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
+ row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
+ row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
+ row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
+ row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
+ row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
+ row[236], row[237], row[238]))
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
- row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
- row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
- row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
- row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
- row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
- row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
- row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
- row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
- row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
- row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
- row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
- row[236], row[237], row[238]))
+ data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'),
+ 'zAsset-zPK-7',
+ 'zAddAssetAttr-zPK-8',
+ 'zAsset-UUID = store.cloudphotodb-9',
+ 'zAddAssetAttr-Master Fingerprint-10',
+ 'zIntResou-Fingerprint-11',
+ 'zIntResou-Local Availability-4QueryStart-1',
+ 'zIntResou-Remote Availability-4QueryStart-2',
+ 'zIntResou-Resource Type-4QueryStart-3',
+ 'zIntResou-Datastore Sub-Type-4QueryStart-4',
+ 'zIntResou-Recipe ID-4QueryStart-5',
+ 'zAsset Complete-6',
+ 'zAsset-Cloud is My Asset-12',
+ 'zAsset-Cloud is deletable-Asset-13',
+ 'zAsset-Cloud_Local_State-14',
+ 'zAsset-Visibility State-15',
+ 'zExtAttr-Camera Make-16',
+ 'zExtAttr-Camera Model-17',
+ 'zExtAttr-Lens Model-18',
+ 'zExtAttr-Flash Fired-19',
+ 'zExtAttr-Focal Lenght-20',
+ 'zAsset-Derived Camera Capture Device-21',
+ 'zAddAssetAttr-Camera Captured Device-22',
+ 'zAddAssetAttr-Imported by-23',
+ 'zCldMast-Imported By-24',
+ 'zAddAssetAttr-Creator Bundle ID-25',
+ 'zAddAssetAttr-Imported By Display Name-26',
+ 'zCldMast-Imported by Bundle ID-27',
+ 'zCldMast-Imported by Display Name-28',
+ 'zAsset-Saved Asset Type-29',
+ 'zAsset-Directory-Path-30',
+ 'zAsset-Filename-31',
+ 'zAddAssetAttr- Original Filename-32',
+ 'zCldMast- Original Filename-33',
+ ('zAsset-Added Date-34', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-35', 'datetime'),
+ ('zAsset-Date Created-36', 'datetime'),
+ ('zCldMast-Creation Date-37', 'datetime'),
+ ('zIntResou-CldMst Date Created-38', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-39',
+ 'zAddAssetAttr-Time Zone Offset-40',
+ 'zAddAssetAttr-Inferred Time Zone Offset-41',
+ 'zAddAssetAttr-EXIF-String-42',
+ ('zAsset-Modification Date-43', 'datetime'),
+ ('zAsset-Last Shared Date-44', 'datetime'),
+ 'zCldMast-Cloud Local State-45',
+ ('zCldMast-Import Date-46', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-47', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-48',
+ ('zAddAssetAttr-Alt Import Image Date-49', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-50',
+ ('zAsset-Cloud Batch Publish Date-51', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-52', 'datetime'),
+ 'zAsset-Cloud Download Requests-53',
+ 'zAsset-Cloud Batch ID-54',
+ 'zAddAssetAttr-Upload Attempts-55',
+ 'zAsset-Latitude-56',
+ 'zExtAttr-Latitude-57',
+ 'zAsset-Longitude-58',
+ 'zExtAttr-Longitude-59',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-60',
+ 'zAddAssetAttr-Location Hash-61',
+ 'zAddAssetAttr-Shifted Location Valid-62',
+ 'zAddAssetAttr-Shifted Location Data-63',
+ 'zAddAssetAttr-Reverse Location Is Valid-64',
+ 'zAddAssetAttr-Reverse Location Data-65',
+ 'AAAzCldMastMedData-zOPT-66',
+ 'zAddAssetAttr-Media Metadata Type-67',
+ 'AAAzCldMastMedData-Data-68',
+ 'CldMasterzCldMastMedData-zOPT-69',
+ 'zCldMast-Media Metadata Type-70',
+ 'CMzCldMastMedData-Data-71',
+ 'zAsset-Orientation-72',
+ 'zAddAssetAttr-Original Orientation-73',
+ 'zAsset-Kind-74',
+ 'zAsset-Kind-Sub-Type-75',
+ 'zAddAssetAttr-Cloud Kind Sub Type-76',
+ 'zAsset-Playback Style-77',
+ 'zAsset-Playback Variation-78',
+ 'zAsset-Video Duration-79',
+ 'zExtAttr-Duration-80',
+ 'zAsset-Video CP Duration-81',
+ 'zAddAssetAttr-Video CP Duration Time Scale-82',
+ 'zAsset-Video CP Visibility State-83',
+ 'zAddAssetAttr-Video CP Display Value-84',
+ 'zAddAssetAttr-Video CP Display Time Scale-85',
+ 'zIntResou-Datastore Class ID-86',
+ 'zAsset-Cloud Placeholder Kind-87',
+ 'zIntResou-Local Availability-88',
+ 'zIntResou-Local Availability Target-89',
+ 'zIntResou-Cloud Local State-90',
+ 'zIntResou-Remote Availability-91',
+ 'zIntResou-Remote Availability Target-92',
+ 'zIntResou-Transient Cloud Master-93',
+ 'zIntResou-Side Car Index-94',
+ 'zIntResou- File ID-95',
+ 'zIntResou-Version-96',
+ 'zAddAssetAttr- Original-File-Size-97',
+ 'zIntResou-Resource Type-98',
+ 'zIntResou-Datastore Sub-Type-99',
+ 'zIntResou-Cloud Source Type-100',
+ 'zIntResou-Data Length-101',
+ 'zIntResou-Recipe ID-102',
+ ('zIntResou-Cloud Last Prefetch Date-103', 'datetime'),
+ 'zIntResou-Cloud Prefetch Count-104',
+ ('zIntResou- Cloud-Last-OnDemand Download-Date-105', 'datetime'),
+ 'zAsset-Uniform Type ID-106',
+ 'zAsset-Original Color Space-107',
+ 'zCldMast-Uniform_Type_ID-108',
+ 'zCldMast-Full Size JPEG Source-109',
+ 'zAsset-HDR Gain-110',
+ 'zExtAttr-Codec-111',
+ 'zCldMast-Codec Name-112',
+ 'zCldMast-Video Frame Rate-113',
+ 'zCldMast-Placeholder State-114',
+ 'zAsset-Depth_Type-115',
+ 'zAsset-Avalanche UUID-116',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-117',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-118',
+ 'zAddAssetAttr-Cloud Recovery State-119',
+ 'zAddAssetAttr-Cloud State Recovery Attempts Count-120',
+ 'zAsset-Deferred Processing Needed-121',
+ 'zAddAssetAttr-Deferred Photo Identifier-122',
+ 'zAddAssetAttr-Deferred Processing Candidate Options-123',
+ 'zAsset-Has Adjustments-Camera-Effects-Filters-124',
+ ('zAsset-Adjustment Timestamp-125', 'datetime'),
+ 'zAddAssetAttr-Editor Bundle ID-126',
+ 'zAddAssetAttr-Montage-127',
+ 'zAsset-Favorite-128',
+ 'zAsset-Hidden-129',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-130',
+ ('zAsset-Trashed Date-131', 'datetime'),
+ 'zIntResou-Trash State-132',
+ ('zIntResou-Trashed Date-133', 'datetime'),
+ 'zAsset-Cloud Delete State-134',
+ 'zIntResou-Cloud Delete State-135',
+ 'zAddAssetAttr-PTP Trashed State-136',
+ 'zIntResou-PTP Trashed State-137',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-138',
+ ('zMedAnlyAstAttr-Media Analysis Timestamp-139', 'datetime'),
+ ('zAsset-Analysis State Modificaion Date-140', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-141',
+ 'zAddAssetAttr- View Count-142',
+ 'zAddAssetAttr- Pending Play Count-143',
+ 'zAddAssetAttr- Play Count-144',
+ 'zAddAssetAttr- Pending Share Count-145',
+ 'zAddAssetAttr- Share Count-146',
+ 'zAddAssetAttr-Allowed for Analysis-147',
+ 'zAddAssetAttr-Scene Analysis Version-148',
+ ('zAddAssetAttr-Scene Analysis Timestamp-149', 'datetime'),
+ 'zAddAssetAttr-Destination Asset Copy State-150',
+ 'zAddAssetAttr-Variation Suggestions States-151',
+ 'zAsset-High Frame Rate State-152',
+ 'zAsset-Video Key Frame Time Scale-153',
+ 'zAsset-Video Key Frame Value-154',
+ 'zExtAttr-ISO-155',
+ 'zExtAttr-Metering Mode-156',
+ 'zExtAttr-Sample Rate-157',
+ 'zExtAttr-Track Format-158',
+ 'zExtAttr-White Balance-159',
+ 'zExtAttr-Aperture-160',
+ 'zExtAttr-BitRate-161',
+ 'zExtAttr-Exposure Bias-162',
+ 'zExtAttr-Frames Per Second-163',
+ 'zExtAttr-Shutter Speed-164',
+ 'zAsset-Height-165',
+ 'zAddAssetAttr-Original Height-166',
+ 'zIntResou-Unoriented Height-167',
+ 'zAsset-Width-168',
+ 'zAddAssetAttr-Original Width-169',
+ 'zIntResou-Unoriented Width-170',
+ 'zAsset-Thumbnail Index-171',
+ 'zAddAssetAttr-Embedded Thumbnail Height-172',
+ 'zAddAssetAttr-Embedded Thumbnail Length-173',
+ 'zAddAssetAttr-Embedded Thumbnail Offset-174',
+ 'zAddAssetAttr-Embedded Thumbnail Width-175',
+ 'zAsset-Packed Acceptable Crop Rect-176',
+ 'zAsset-Packed Badge Attributes-177',
+ 'zAsset-Packed Preferred Crop Rect-178',
+ 'zAsset-Curation Score-179',
+ 'zAsset-Camera Processing Adjustment State-180',
+ 'zAsset-Depth Type-181',
+ 'zAddAssetAttr-Orig Resource Choice-182',
+ 'zAddAssetAttr-Spatial Over Capture Group ID-183',
+ 'zAddAssetAttr-Place Annotation Data-184',
+ 'zAddAssetAttr-Distance Identity-HEX-185',
+ 'zAddAssetAttr-Edited IPTC Attributes-186',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-187',
+ 'zAddAssetAttr-Accessibility Description-188',
+ 'zAddAssetAttr-Photo Stream Tag ID-189',
+ 'zAddAssetAttr-Share Type-190',
+ 'zAsset-Overall Aesthetic Score-191',
+ 'zAsset-zENT-192',
+ 'zAsset-zOPT-193',
+ 'zAsset-Master= zCldMast-zPK-194',
+ 'zAsset-Extended Attributes= zExtAttr-zPK-195',
+ 'zAsset-Import Session Key-196',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-197',
+ 'zAsset-Computed Attributes Asset Key-198',
+ 'zAsset-Promotion Score-199',
+ 'zAsset-Media Analysis Attributes Key-200',
+ 'zAsset-Media Group UUID-201',
+ 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-202',
+ 'zAsset.Cloud Collection GUID-203',
+ 'zAddAssetAttr-zENT-204',
+ 'ZAddAssetAttr-zOPT-205',
+ 'zAddAssetAttr-zAsset= zAsset_zPK-206',
+ 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-207',
+ 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-208',
+ 'zAddAssetAttr-Public Global UUID-209',
+ 'zAddAssetAttr-Original Assets UUID-210',
+ 'zAddAssetAttr-Originating Asset Identifier-211',
+ 'zAddAssetAttr.Adjusted Fingerprint-212',
+ 'zCldMast-zPK= zAsset-Master-213',
+ 'zCldMast-zENT-214',
+ 'zCldMast-zOPT-215',
+ 'zCldMast-Moment Share Key= zShare-zPK-216',
+ 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-217',
+ 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-218',
+ 'zCldMast-Originating Asset ID-219',
+ 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-220',
+ 'CMzCldMastMedData-zENT-221',
+ 'CMzCldMastMedData-CldMast= zCldMast-zPK-222',
+ 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-223',
+ 'AAAzCldMastMedData-zENT-224',
+ 'AAAzCldMastMedData-CldMast key-225',
+ 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-226',
+ 'zExtAttr-zPK= zAsset-zExtendedAttributes-227',
+ 'zExtAttr-zENT-228',
+ 'zExtAttr-zOPT-229',
+ 'zExtAttr-Asset Key-230',
+ 'zIntResou-zPK-231',
+ 'zIntResou-zENT-232',
+ 'zIntResou-zOPT-233',
+ 'zIntResou-Asset= zAsset_zPK-234',
+ 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-235',
+ 'zMedAnlyAstAttr-zEnt-236',
+ 'zMedAnlyAstAttr-zOpt-237',
+ 'zMedAnlyAstAttr-Asset= zAsset-zPK-238')
+ data_list = get_sqlite_db_records(source_path, query)
- counter += 1
-
- description = 'Parses iOS 14 asset records from PhotoData-Photos.sqlite ZINTERNALRESOURCE and' \
- ' other tables. This and other related parsers should provide data for investigative' \
- ' analysis of assets being stored locally on the device verses assets being stored in' \
- ' iCloud Photos as the result of optimization. This is very large query and script I' \
- ' recommend opening the TSV generated report with Zimmermans Tools' \
- ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \
- ' and filter the results.'
- report = ArtifactHtmlReport('Ph50.1-Asset_IntResou-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph50.1-Asset_IntResou-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-4QueryStart-0',
- 'zAsset-zPK-7',
- 'zAddAssetAttr-zPK-8',
- 'zAsset-UUID = store.cloudphotodb-9',
- 'zAddAssetAttr-Master Fingerprint-10',
- 'zIntResou-Fingerprint-11',
- 'zIntResou-Local Availability-4QueryStart-1',
- 'zIntResou-Remote Availability-4QueryStart-2',
- 'zIntResou-Resource Type-4QueryStart-3',
- 'zIntResou-Datastore Sub-Type-4QueryStart-4',
- 'zIntResou-Recipe ID-4QueryStart-5',
- 'zAsset Complete-6',
- 'zAsset-Cloud is My Asset-12',
- 'zAsset-Cloud is deletable-Asset-13',
- 'zAsset-Cloud_Local_State-14',
- 'zAsset-Visibility State-15',
- 'zExtAttr-Camera Make-16',
- 'zExtAttr-Camera Model-17',
- 'zExtAttr-Lens Model-18',
- 'zExtAttr-Flash Fired-19',
- 'zExtAttr-Focal Lenght-20',
- 'zAsset-Derived Camera Capture Device-21',
- 'zAddAssetAttr-Camera Captured Device-22',
- 'zAddAssetAttr-Imported by-23',
- 'zCldMast-Imported By-24',
- 'zAddAssetAttr-Creator Bundle ID-25',
- 'zAddAssetAttr-Imported By Display Name-26',
- 'zCldMast-Imported by Bundle ID-27',
- 'zCldMast-Imported by Display Name-28',
- 'zAsset-Saved Asset Type-29',
- 'zAsset-Directory-Path-30',
- 'zAsset-Filename-31',
- 'zAddAssetAttr- Original Filename-32',
- 'zCldMast- Original Filename-33',
- 'zAsset-Added Date-34',
- 'zAsset- SortToken -CameraRoll-35',
- 'zAsset-Date Created-36',
- 'zCldMast-Creation Date-37',
- 'zIntResou-CldMst Date Created-38',
- 'zAddAssetAttr-Time Zone Name-39',
- 'zAddAssetAttr-Time Zone Offset-40',
- 'zAddAssetAttr-Inferred Time Zone Offset-41',
- 'zAddAssetAttr-EXIF-String-42',
- 'zAsset-Modification Date-43',
- 'zAsset-Last Shared Date-44',
- 'zCldMast-Cloud Local State-45',
- 'zCldMast-Import Date-46',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-47',
- 'zAddAssetAttr-Import Session ID-48',
- 'zAddAssetAttr-Alt Import Image Date-49',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-50',
- 'zAsset-Cloud Batch Publish Date-51',
- 'zAsset-Cloud Server Publish Date-52',
- 'zAsset-Cloud Download Requests-53',
- 'zAsset-Cloud Batch ID-54',
- 'zAddAssetAttr-Upload Attempts-55',
- 'zAsset-Latitude-56',
- 'zExtAttr-Latitude-57',
- 'zAsset-Longitude-58',
- 'zExtAttr-Longitude-59',
- 'zAddAssetAttr-GPS Horizontal Accuracy-60',
- 'zAddAssetAttr-Location Hash-61',
- 'zAddAssetAttr-Shifted Location Valid-62',
- 'zAddAssetAttr-Shifted Location Data-63',
- 'zAddAssetAttr-Reverse Location Is Valid-64',
- 'zAddAssetAttr-Reverse Location Data-65',
- 'AAAzCldMastMedData-zOPT-66',
- 'zAddAssetAttr-Media Metadata Type-67',
- 'AAAzCldMastMedData-Data-68',
- 'CldMasterzCldMastMedData-zOPT-69',
- 'zCldMast-Media Metadata Type-70',
- 'CMzCldMastMedData-Data-71',
- 'zAsset-Orientation-72',
- 'zAddAssetAttr-Original Orientation-73',
- 'zAsset-Kind-74',
- 'zAsset-Kind-Sub-Type-75',
- 'zAddAssetAttr-Cloud Kind Sub Type-76',
- 'zAsset-Playback Style-77',
- 'zAsset-Playback Variation-78',
- 'zAsset-Video Duration-79',
- 'zExtAttr-Duration-80',
- 'zAsset-Video CP Duration-81',
- 'zAddAssetAttr-Video CP Duration Time Scale-82',
- 'zAsset-Video CP Visibility State-83',
- 'zAddAssetAttr-Video CP Display Value-84',
- 'zAddAssetAttr-Video CP Display Time Scale-85',
- 'zIntResou-Datastore Class ID-86',
- 'zAsset-Cloud Placeholder Kind-87',
- 'zIntResou-Local Availability-88',
- 'zIntResou-Local Availability Target-89',
- 'zIntResou-Cloud Local State-90',
- 'zIntResou-Remote Availability-91',
- 'zIntResou-Remote Availability Target-92',
- 'zIntResou-Transient Cloud Master-93',
- 'zIntResou-Side Car Index-94',
- 'zIntResou- File ID-95',
- 'zIntResou-Version-96',
- 'zAddAssetAttr- Original-File-Size-97',
- 'zIntResou-Resource Type-98',
- 'zIntResou-Datastore Sub-Type-99',
- 'zIntResou-Cloud Source Type-100',
- 'zIntResou-Data Length-101',
- 'zIntResou-Recipe ID-102',
- 'zIntResou-Cloud Last Prefetch Date-103',
- 'zIntResou-Cloud Prefetch Count-104',
- 'zIntResou- Cloud-Last-OnDemand Download-Date-105',
- 'zAsset-Uniform Type ID-106',
- 'zAsset-Original Color Space-107',
- 'zCldMast-Uniform_Type_ID-108',
- 'zCldMast-Full Size JPEG Source-109',
- 'zAsset-HDR Gain-110',
- 'zExtAttr-Codec-111',
- 'zCldMast-Codec Name-112',
- 'zCldMast-Video Frame Rate-113',
- 'zCldMast-Placeholder State-114',
- 'zAsset-Depth_Type-115',
- 'zAsset-Avalanche UUID-116',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-117',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-118',
- 'zAddAssetAttr-Cloud Recovery State-119',
- 'zAddAssetAttr-Cloud State Recovery Attempts Count-120',
- 'zAsset-Deferred Processing Needed-121',
- 'zAddAssetAttr-Deferred Photo Identifier-122',
- 'zAddAssetAttr-Deferred Processing Candidate Options-123',
- 'zAsset-Has Adjustments-Camera-Effects-Filters-124',
- 'zAsset-Adjustment Timestamp-125',
- 'zAddAssetAttr-Editor Bundle ID-126',
- 'zAddAssetAttr-Montage-127',
- 'zAsset-Favorite-128',
- 'zAsset-Hidden-129',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-130',
- 'zAsset-Trashed Date-131',
- 'zIntResou-Trash State-132',
- 'zIntResou-Trashed Date-133',
- 'zAsset-Cloud Delete State-134',
- 'zIntResou-Cloud Delete State-135',
- 'zAddAssetAttr-PTP Trashed State-136',
- 'zIntResou-PTP Trashed State-137',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-138',
- 'zMedAnlyAstAttr-Media Analysis Timestamp-139',
- 'zAsset-Analysis State Modificaion Date-140',
- 'zAddAssetAttr- Pending View Count-141',
- 'zAddAssetAttr- View Count-142',
- 'zAddAssetAttr- Pending Play Count-143',
- 'zAddAssetAttr- Play Count-144',
- 'zAddAssetAttr- Pending Share Count-145',
- 'zAddAssetAttr- Share Count-146',
- 'zAddAssetAttr-Allowed for Analysis-147',
- 'zAddAssetAttr-Scene Analysis Version-148',
- 'zAddAssetAttr-Scene Analysis Timestamp-149',
- 'zAddAssetAttr-Destination Asset Copy State-150',
- 'zAddAssetAttr-Variation Suggestions States-151',
- 'zAsset-High Frame Rate State-152',
- 'zAsset-Video Key Frame Time Scale-153',
- 'zAsset-Video Key Frame Value-154',
- 'zExtAttr-ISO-155',
- 'zExtAttr-Metering Mode-156',
- 'zExtAttr-Sample Rate-157',
- 'zExtAttr-Track Format-158',
- 'zExtAttr-White Balance-159',
- 'zExtAttr-Aperture-160',
- 'zExtAttr-BitRate-161',
- 'zExtAttr-Exposure Bias-162',
- 'zExtAttr-Frames Per Second-163',
- 'zExtAttr-Shutter Speed-164',
- 'zAsset-Height-165',
- 'zAddAssetAttr-Original Height-166',
- 'zIntResou-Unoriented Height-167',
- 'zAsset-Width-168',
- 'zAddAssetAttr-Original Width-169',
- 'zIntResou-Unoriented Width-170',
- 'zAsset-Thumbnail Index-171',
- 'zAddAssetAttr-Embedded Thumbnail Height-172',
- 'zAddAssetAttr-Embedded Thumbnail Length-173',
- 'zAddAssetAttr-Embedded Thumbnail Offset-174',
- 'zAddAssetAttr-Embedded Thumbnail Width-175',
- 'zAsset-Packed Acceptable Crop Rect-176',
- 'zAsset-Packed Badge Attributes-177',
- 'zAsset-Packed Preferred Crop Rect-178',
- 'zAsset-Curation Score-179',
- 'zAsset-Camera Processing Adjustment State-180',
- 'zAsset-Depth Type-181',
- 'zAddAssetAttr-Orig Resource Choice-182',
- 'zAddAssetAttr-Spatial Over Capture Group ID-183',
- 'zAddAssetAttr-Place Annotation Data-184',
- 'zAddAssetAttr-Distance Identity-HEX-185',
- 'zAddAssetAttr-Edited IPTC Attributes-186',
- 'zAddAssetAttr-Title-Comments via Cloud Website-187',
- 'zAddAssetAttr-Accessibility Description-188',
- 'zAddAssetAttr-Photo Stream Tag ID-189',
- 'zAddAssetAttr-Share Type-190',
- 'zAsset-Overall Aesthetic Score-191',
- 'zAsset-zENT-192',
- 'zAsset-zOPT-193',
- 'zAsset-Master= zCldMast-zPK-194',
- 'zAsset-Extended Attributes= zExtAttr-zPK-195',
- 'zAsset-Import Session Key-196',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-197',
- 'zAsset-Computed Attributes Asset Key-198',
- 'zAsset-Promotion Score-199',
- 'zAsset-Media Analysis Attributes Key-200',
- 'zAsset-Media Group UUID-201',
- 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-202',
- 'zAsset.Cloud Collection GUID-203',
- 'zAddAssetAttr-zENT-204',
- 'ZAddAssetAttr-zOPT-205',
- 'zAddAssetAttr-zAsset= zAsset_zPK-206',
- 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-207',
- 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-208',
- 'zAddAssetAttr-Public Global UUID-209',
- 'zAddAssetAttr-Original Assets UUID-210',
- 'zAddAssetAttr-Originating Asset Identifier-211',
- 'zAddAssetAttr.Adjusted Fingerprint-212',
- 'zCldMast-zPK= zAsset-Master-213',
- 'zCldMast-zENT-214',
- 'zCldMast-zOPT-215',
- 'zCldMast-Moment Share Key= zShare-zPK-216',
- 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-217',
- 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-218',
- 'zCldMast-Originating Asset ID-219',
- 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-220',
- 'CMzCldMastMedData-zENT-221',
- 'CMzCldMastMedData-CldMast= zCldMast-zPK-222',
- 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-223',
- 'AAAzCldMastMedData-zENT-224',
- 'AAAzCldMastMedData-CldMast key-225',
- 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-226',
- 'zExtAttr-zPK= zAsset-zExtendedAttributes-227',
- 'zExtAttr-zENT-228',
- 'zExtAttr-zOPT-229',
- 'zExtAttr-Asset Key-230',
- 'zIntResou-zPK-231',
- 'zIntResou-zENT-232',
- 'zIntResou-zOPT-233',
- 'zIntResou-Asset= zAsset_zPK-234',
- 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-235',
- 'zMedAnlyAstAttr-zEnt-236',
- 'zMedAnlyAstAttr-zOpt-237',
- 'zMedAnlyAstAttr-Asset= zAsset-zPK-238')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph50.1-Asset_IntResou-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph50.1-Asset_IntResou-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No Internal Resource data available for iOS 14 PhotoData-Photos.sqlite')
-
- db.close()
- return
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found, "Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart',
zAsset.Z_PK AS 'zAsset-zPK',
@@ -1863,342 +1866,318 @@ def get_ph50intresouoptimzdataphdapsql(files_found, report_folder, seeker, wrap_
LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
- row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
- row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
- row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
- row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
- row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
- row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
- row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
- row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
- row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
- row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
- row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
- row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
- row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
- row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
- row[260], row[261], row[262]))
-
- counter += 1
-
- description = 'Parses iOS 15 asset records from PhotoData-Photos.sqlite ZINTERNALRESOURCE and' \
- ' other tables. This and other related parsers should provide data for investigative' \
- ' analysis of assets being stored locally on the device verses assets being stored in' \
- ' iCloud Photos as the result of optimization. This is very large query and script,' \
- ' I recommend opening the TSV generated report with Zimmermans Tools' \
- ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search, and filter the results.'
- report = ArtifactHtmlReport('Ph50.1-Asset_IntResou-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph50.1-Asset_IntResou-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-4QueryStart-0',
- 'zAsset-zPK-7',
- 'zAddAssetAttr-zPK-8',
- 'zAsset-UUID = store.cloudphotodb-9',
- 'zAddAssetAttr-Master Fingerprint-10',
- 'zIntResou-Fingerprint-11',
- 'zIntResou-Local Availability-4QueryStart-1',
- 'zIntResou-Remote Availability-4QueryStart-2',
- 'zIntResou-Resource Type-4QueryStart-3',
- 'zIntResou-Datastore Sub-Type-4QueryStart-4',
- 'zIntResou-Recipe ID-4QueryStart-5',
- 'zAsset Complete-6',
- 'zAsset-Bundle Scope-12',
- 'zAsset-Syndication State-13',
- 'zAsset-Cloud is My Asset-14',
- 'zAsset-Cloud is deletable-Asset-15',
- 'zAsset-Cloud_Local_State-16',
- 'zAsset-Visibility State-17',
- 'zExtAttr-Camera Make-18',
- 'zExtAttr-Camera Model-19',
- 'zExtAttr-Lens Model-20',
- 'zExtAttr-Flash Fired-21',
- 'zExtAttr-Focal Lenght-22',
- 'zExtAttr-Focal Lenth in 35MM-23',
- 'zExtAttr-Digital Zoom Ratio-24',
- 'zAsset-Derived Camera Capture Device-25',
- 'zAddAssetAttr-Camera Captured Device-26',
- 'zAddAssetAttr-Imported by-27',
- 'zCldMast-Imported By-28',
- 'zAddAssetAttr.Imported by Bundle Identifier-29',
- 'zAddAssetAttr-Imported By Display Name-30',
- 'zCldMast-Imported by Bundle ID-31',
- 'zCldMast-Imported by Display Name-32',
- 'zAsset-Saved Asset Type-33',
- 'zAsset-Directory-Path-34',
- 'zAsset-Filename-35',
- 'zAddAssetAttr- Original Filename-36',
- 'zCldMast- Original Filename-37',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-38',
- 'zAsset-Added Date-39',
- 'zAsset- SortToken -CameraRoll-40',
- 'zAddAssetAttr-Date Created Source-41',
- 'zAsset-Date Created-42',
- 'zCldMast-Creation Date-43',
- 'zIntResou-CldMst Date Created-44',
- 'zAddAssetAttr-Time Zone Name-45',
- 'zAddAssetAttr-Time Zone Offset-46',
- 'zAddAssetAttr-Inferred Time Zone Offset-47',
- 'zAddAssetAttr-EXIF-String-48',
- 'zAsset-Modification Date-49',
- 'zAsset-Last Shared Date-50',
- 'zCldMast-Cloud Local State-51',
- 'zCldMast-Import Date-52',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-53',
- 'zAddAssetAttr-Import Session ID-54',
- 'zAddAssetAttr-Alt Import Image Date-55',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-56',
- 'zAsset-Cloud Batch Publish Date-57',
- 'zAsset-Cloud Server Publish Date-58',
- 'zAsset-Cloud Download Requests-59',
- 'zAsset-Cloud Batch ID-60',
- 'zAddAssetAttr-Upload Attempts-61',
- 'zAsset-Latitude-62',
- 'zExtAttr-Latitude-63',
- 'zAsset-Longitude-64',
- 'zExtAttr-Longitude-65',
- 'zAddAssetAttr-GPS Horizontal Accuracy-66',
- 'zAddAssetAttr-Location Hash-67',
- 'zAddAssetAttr-Shifted Location Valid-68',
- 'zAddAssetAttr-Shifted Location Data-69',
- 'zAddAssetAttr-Reverse Location Is Valid-70',
- 'zAddAssetAttr-Reverse Location Data-71',
- 'AAAzCldMastMedData-zOPT-72',
- 'zAddAssetAttr-Media Metadata Type-73',
- 'AAAzCldMastMedData-Data-74',
- 'CldMasterzCldMastMedData-zOPT-75',
- 'zCldMast-Media Metadata Type-76',
- 'CMzCldMastMedData-Data-77',
- 'zAddAssetAttr-Syndication History-78',
- 'zMedAnlyAstAttr-Syndication Processing Version-79',
- 'zMedAnlyAstAttr-Syndication Processing Value-80',
- 'zAsset-Orientation-81',
- 'zAddAssetAttr-Original Orientation-82',
- 'zAsset-Kind-83',
- 'zAsset-Kind-Sub-Type-84',
- 'zAddAssetAttr-Cloud Kind Sub Type-85',
- 'zAsset-Playback Style-86',
- 'zAsset-Playback Variation-87',
- 'zAsset-Video Duration-88',
- 'zExtAttr-Duration-89',
- 'zAsset-Video CP Duration-90',
- 'zAddAssetAttr-Video CP Duration Time Scale-91',
- 'zAsset-Video CP Visibility State-92',
- 'zAddAssetAttr-Video CP Display Value-93',
- 'zAddAssetAttr-Video CP Display Time Scale-94',
- 'zIntResou-Datastore Class ID-95',
- 'zAsset-Cloud Placeholder Kind-96',
- 'zIntResou-Local Availability-97',
- 'zIntResou-Local Availability Target-98',
- 'zIntResou-Cloud Local State-99',
- 'zIntResou-Remote Availability-100',
- 'zIntResou-Remote Availability Target-101',
- 'zIntResou-Transient Cloud Master-102',
- 'zIntResou-Side Car Index-103',
- 'zIntResou- File ID-104',
- 'zIntResou-Version-105',
- 'zAddAssetAttr- Original-File-Size-106',
- 'zIntResou-Resource Type-107',
- 'zIntResou-Datastore Sub-Type-108',
- 'zIntResou-Cloud Source Type-109',
- 'zIntResou-Data Length-110',
- 'zIntResou-Recipe ID-111',
- 'zIntResou-Cloud Last Prefetch Date-112',
- 'zIntResou-Cloud Prefetch Count-113',
- 'zIntResou- Cloud-Last-OnDemand Download-Date-114',
- 'zIntResou-UniformTypeID_UTI_Conformance_Hint-115',
- 'zIntResou-Compact-UTI-116',
- 'zAsset-Uniform Type ID-117',
- 'zAsset-Original Color Space-118',
- 'zCldMast-Uniform_Type_ID-119',
- 'zCldMast-Full Size JPEG Source-120',
- 'zAsset-HDR Gain-121',
- 'zAsset-zHDR_Type-122',
- 'zExtAttr-Codec-123',
- 'zIntResou-Codec Four Char Code Name-124',
- 'zCldMast-Codec Name-125',
- 'zCldMast-Video Frame Rate-126',
- 'zCldMast-Placeholder State-127',
- 'zAsset-Depth_Type-128',
- 'zAsset-Avalanche UUID-129',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-130',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-131',
- 'zAddAssetAttr-Cloud Recovery State-132',
- 'zAddAssetAttr-Cloud State Recovery Attempts Count-133',
- 'zAsset-Deferred Processing Needed-134',
- 'zAsset-Video Deferred Processing Needed-135',
- 'zAddAssetAttr-Deferred Photo Identifier-136',
- 'zAddAssetAttr-Deferred Processing Candidate Options-137',
- 'zAsset-Has Adjustments-Camera-Effects-Filters-138',
- 'zAsset-Adjustment Timestamp-139',
- 'zAddAssetAttr-Editor Bundle ID-140',
- 'zAddAssetAttr-Montage-141',
- 'zAsset-Favorite-142',
- 'zAsset-Hidden-143',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-144',
- 'zAsset-Trashed Date-145',
- 'zIntResou-Trash State-146',
- 'zIntResou-Trashed Date-147',
- 'zAsset-Cloud Delete State-148',
- 'zIntResou-Cloud Delete State-149',
- 'zAddAssetAttr-PTP Trashed State-150',
- 'zIntResou-PTP Trashed State-151',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-152',
- 'zMedAnlyAstAttr-Media Analysis Timestamp-153',
- 'zAsset-Analysis State Modificaion Date-154',
- 'zAddAssetAttr- Pending View Count-155',
- 'zAddAssetAttr- View Count-156',
- 'zAddAssetAttr- Pending Play Count-157',
- 'zAddAssetAttr- Play Count-158',
- 'zAddAssetAttr- Pending Share Count-159',
- 'zAddAssetAttr- Share Count-160',
- 'zAddAssetAttr-Allowed for Analysis-161',
- 'zAddAssetAttr-Scene Analysis Version-162',
- 'zAddAssetAttr-Scene Analysis is From Preview-163',
- 'zAddAssetAttr-Scene Analysis Timestamp-164',
- 'zAddAssetAttr-Destination Asset Copy State-165',
- 'zAddAssetAttr-Source Asset for Duplication Scope ID-166',
- 'zCldMast-Source Master For Duplication Scope ID-167',
- 'zAddAssetAttr-Source Asset For Duplication ID-168',
- 'zCldMast-Source Master for Duplication ID-169',
- 'zAddAssetAttr-Variation Suggestions States-170',
- 'zAsset-High Frame Rate State-171',
- 'zAsset-Video Key Frame Time Scale-172',
- 'zAsset-Video Key Frame Value-173',
- 'zExtAttr-ISO-174',
- 'zExtAttr-Metering Mode-175',
- 'zExtAttr-Sample Rate-176',
- 'zExtAttr-Track Format-177',
- 'zExtAttr-White Balance-178',
- 'zExtAttr-Aperture-179',
- 'zExtAttr-BitRate-180',
- 'zExtAttr-Exposure Bias-181',
- 'zExtAttr-Frames Per Second-182',
- 'zExtAttr-Shutter Speed-183',
- 'zExtAttr-Slush Scene Bias-184',
- 'zExtAttr-Slush Version-185',
- 'zExtAttr-Slush Preset-186',
- 'zExtAttr-Slush Warm Bias-187',
- 'zAsset-Height-188',
- 'zAddAssetAttr-Original Height-189',
- 'zIntResou-Unoriented Height-190',
- 'zAsset-Width-191',
- 'zAddAssetAttr-Original Width-192',
- 'zIntResou-Unoriented Width-193',
- 'zAsset-Thumbnail Index-194',
- 'zAddAssetAttr-Embedded Thumbnail Height-195',
- 'zAddAssetAttr-Embedded Thumbnail Length-196',
- 'zAddAssetAttr-Embedded Thumbnail Offset-197',
- 'zAddAssetAttr-Embedded Thumbnail Width-198',
- 'zAsset-Packed Acceptable Crop Rect-199',
- 'zAsset-Packed Badge Attributes-200',
- 'zAsset-Packed Preferred Crop Rect-201',
- 'zAsset-Curation Score-202',
- 'zAsset-Camera Processing Adjustment State-203',
- 'zAsset-Depth Type-204',
- 'zAsset-Is Magic Carpet-QuicktimeMOVfile-205',
- 'zAddAssetAttr-Orig Resource Choice-206',
- 'zAddAssetAttr-Spatial Over Capture Group ID-207',
- 'zAddAssetAttr-Place Annotation Data-208',
- 'zAddAssetAttr-Distance Identity-HEX-209',
- 'zAddAssetAttr-Edited IPTC Attributes-210',
- 'zAddAssetAttr-Title-Comments via Cloud Website-211',
- 'zAddAssetAttr-Accessibility Description-212',
- 'zAddAssetAttr-Photo Stream Tag ID-213',
- 'zAddAssetAttr-Share Type-214',
- 'zAsset-Overall Aesthetic Score-215',
- 'zAsset-zENT-216',
- 'zAsset-zOPT-217',
- 'zAsset-Master= zCldMast-zPK-218',
- 'zAsset-Extended Attributes= zExtAttr-zPK-219',
- 'zAsset-Import Session Key-220',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-221',
- 'zAsset-Computed Attributes Asset Key-222',
- 'zAsset-Promotion Score-223',
- 'zAsset-Media Analysis Attributes Key-224',
- 'zAsset-Media Group UUID-225',
- 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-226',
- 'zAsset.Cloud Collection GUID-227',
- 'zAddAssetAttr-zENT-228',
- 'ZAddAssetAttr-zOPT-229',
- 'zAddAssetAttr-zAsset= zAsset_zPK-230',
- 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-231',
- 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-232',
- 'zAddAssetAttr-Public Global UUID-233',
- 'zAddAssetAttr-Original Assets UUID-234',
- 'zAddAssetAttr-Originating Asset Identifier-235',
- 'zAddAssetAttr.Adjusted Fingerprint-236',
- 'zCldMast-zPK= zAsset-Master-237',
- 'zCldMast-zENT-238',
- 'zCldMast-zOPT-239',
- 'zCldMast-Moment Share Key= zShare-zPK-240',
- 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-241',
- 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-242',
- 'zCldMast-Originating Asset ID-243',
- 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-244',
- 'CMzCldMastMedData-zENT-245',
- 'CMzCldMastMedData-CldMast= zCldMast-zPK-246',
- 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-247',
- 'AAAzCldMastMedData-zENT-248',
- 'AAAzCldMastMedData-CldMast key-249',
- 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-250',
- 'zExtAttr-zPK= zAsset-zExtendedAttributes-251',
- 'zExtAttr-zENT-252',
- 'zExtAttr-zOPT-253',
- 'zExtAttr-Asset Key-254',
- 'zIntResou-zPK-255',
- 'zIntResou-zENT-256',
- 'zIntResou-zOPT-257',
- 'zIntResou-Asset= zAsset_zPK-258',
- 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-259',
- 'zMedAnlyAstAttr-zEnt-260',
- 'zMedAnlyAstAttr-zOpt-261',
- 'zMedAnlyAstAttr-Asset= zAsset-zPK-262')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph50.1-Asset_IntResou-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
+ row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
+ row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
+ row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
+ row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
+ row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
+ row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
+ row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
+ row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
+ row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
+ row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
+ row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
+ row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
+ row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
+ row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
+ row[260], row[261], row[262]))
- tlactivity = 'Ph50.1-Asset_IntResou-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'),
+ 'zAsset-zPK-7',
+ 'zAddAssetAttr-zPK-8',
+ 'zAsset-UUID = store.cloudphotodb-9',
+ 'zAddAssetAttr-Master Fingerprint-10',
+ 'zIntResou-Fingerprint-11',
+ 'zIntResou-Local Availability-4QueryStart-1',
+ 'zIntResou-Remote Availability-4QueryStart-2',
+ 'zIntResou-Resource Type-4QueryStart-3',
+ 'zIntResou-Datastore Sub-Type-4QueryStart-4',
+ 'zIntResou-Recipe ID-4QueryStart-5',
+ 'zAsset Complete-6',
+ 'zAsset-Bundle Scope-12',
+ 'zAsset-Syndication State-13',
+ 'zAsset-Cloud is My Asset-14',
+ 'zAsset-Cloud is deletable-Asset-15',
+ 'zAsset-Cloud_Local_State-16',
+ 'zAsset-Visibility State-17',
+ 'zExtAttr-Camera Make-18',
+ 'zExtAttr-Camera Model-19',
+ 'zExtAttr-Lens Model-20',
+ 'zExtAttr-Flash Fired-21',
+ 'zExtAttr-Focal Lenght-22',
+ 'zExtAttr-Focal Lenth in 35MM-23',
+ 'zExtAttr-Digital Zoom Ratio-24',
+ 'zAsset-Derived Camera Capture Device-25',
+ 'zAddAssetAttr-Camera Captured Device-26',
+ 'zAddAssetAttr-Imported by-27',
+ 'zCldMast-Imported By-28',
+ 'zAddAssetAttr.Imported by Bundle Identifier-29',
+ 'zAddAssetAttr-Imported By Display Name-30',
+ 'zCldMast-Imported by Bundle ID-31',
+ 'zCldMast-Imported by Display Name-32',
+ 'zAsset-Saved Asset Type-33',
+ 'zAsset-Directory-Path-34',
+ 'zAsset-Filename-35',
+ 'zAddAssetAttr- Original Filename-36',
+ 'zCldMast- Original Filename-37',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-38',
+ ('zAsset-Added Date-39', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-40', 'datetime'),
+ ('zAddAssetAttr-Date Created Source-41', 'datetime'),
+ ('zAsset-Date Created-42', 'datetime'),
+ ('zCldMast-Creation Date-43', 'datetime'),
+ ('zIntResou-CldMst Date Created-44', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-45',
+ 'zAddAssetAttr-Time Zone Offset-46',
+ 'zAddAssetAttr-Inferred Time Zone Offset-47',
+ 'zAddAssetAttr-EXIF-String-48',
+ ('zAsset-Modification Date-49', 'datetime'),
+ ('zAsset-Last Shared Date-50', 'datetime'),
+ 'zCldMast-Cloud Local State-51',
+ ('zCldMast-Import Date-52', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-53', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-54',
+ ('zAddAssetAttr-Alt Import Image Date-55', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-56',
+ ('zAsset-Cloud Batch Publish Date-57', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-58', 'datetime'),
+ 'zAsset-Cloud Download Requests-59',
+ 'zAsset-Cloud Batch ID-60',
+ 'zAddAssetAttr-Upload Attempts-61',
+ 'zAsset-Latitude-62',
+ 'zExtAttr-Latitude-63',
+ 'zAsset-Longitude-64',
+ 'zExtAttr-Longitude-65',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-66',
+ 'zAddAssetAttr-Location Hash-67',
+ 'zAddAssetAttr-Shifted Location Valid-68',
+ 'zAddAssetAttr-Shifted Location Data-69',
+ 'zAddAssetAttr-Reverse Location Is Valid-70',
+ 'zAddAssetAttr-Reverse Location Data-71',
+ 'AAAzCldMastMedData-zOPT-72',
+ 'zAddAssetAttr-Media Metadata Type-73',
+ 'AAAzCldMastMedData-Data-74',
+ 'CldMasterzCldMastMedData-zOPT-75',
+ 'zCldMast-Media Metadata Type-76',
+ 'CMzCldMastMedData-Data-77',
+ 'zAddAssetAttr-Syndication History-78',
+ 'zMedAnlyAstAttr-Syndication Processing Version-79',
+ 'zMedAnlyAstAttr-Syndication Processing Value-80',
+ 'zAsset-Orientation-81',
+ 'zAddAssetAttr-Original Orientation-82',
+ 'zAsset-Kind-83',
+ 'zAsset-Kind-Sub-Type-84',
+ 'zAddAssetAttr-Cloud Kind Sub Type-85',
+ 'zAsset-Playback Style-86',
+ 'zAsset-Playback Variation-87',
+ 'zAsset-Video Duration-88',
+ 'zExtAttr-Duration-89',
+ 'zAsset-Video CP Duration-90',
+ 'zAddAssetAttr-Video CP Duration Time Scale-91',
+ 'zAsset-Video CP Visibility State-92',
+ 'zAddAssetAttr-Video CP Display Value-93',
+ 'zAddAssetAttr-Video CP Display Time Scale-94',
+ 'zIntResou-Datastore Class ID-95',
+ 'zAsset-Cloud Placeholder Kind-96',
+ 'zIntResou-Local Availability-97',
+ 'zIntResou-Local Availability Target-98',
+ 'zIntResou-Cloud Local State-99',
+ 'zIntResou-Remote Availability-100',
+ 'zIntResou-Remote Availability Target-101',
+ 'zIntResou-Transient Cloud Master-102',
+ 'zIntResou-Side Car Index-103',
+ 'zIntResou- File ID-104',
+ 'zIntResou-Version-105',
+ 'zAddAssetAttr- Original-File-Size-106',
+ 'zIntResou-Resource Type-107',
+ 'zIntResou-Datastore Sub-Type-108',
+ 'zIntResou-Cloud Source Type-109',
+ 'zIntResou-Data Length-110',
+ 'zIntResou-Recipe ID-111',
+ ('zIntResou-Cloud Last Prefetch Date-112', 'datetime'),
+ 'zIntResou-Cloud Prefetch Count-113',
+ ('zIntResou- Cloud-Last-OnDemand Download-Date-114', 'datetime'),
+ 'zIntResou-UniformTypeID_UTI_Conformance_Hint-115',
+ 'zIntResou-Compact-UTI-116',
+ 'zAsset-Uniform Type ID-117',
+ 'zAsset-Original Color Space-118',
+ 'zCldMast-Uniform_Type_ID-119',
+ 'zCldMast-Full Size JPEG Source-120',
+ 'zAsset-HDR Gain-121',
+ 'zAsset-zHDR_Type-122',
+ 'zExtAttr-Codec-123',
+ 'zIntResou-Codec Four Char Code Name-124',
+ 'zCldMast-Codec Name-125',
+ 'zCldMast-Video Frame Rate-126',
+ 'zCldMast-Placeholder State-127',
+ 'zAsset-Depth_Type-128',
+ 'zAsset-Avalanche UUID-129',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-130',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-131',
+ 'zAddAssetAttr-Cloud Recovery State-132',
+ 'zAddAssetAttr-Cloud State Recovery Attempts Count-133',
+ 'zAsset-Deferred Processing Needed-134',
+ 'zAsset-Video Deferred Processing Needed-135',
+ 'zAddAssetAttr-Deferred Photo Identifier-136',
+ 'zAddAssetAttr-Deferred Processing Candidate Options-137',
+ 'zAsset-Has Adjustments-Camera-Effects-Filters-138',
+ ('zAsset-Adjustment Timestamp-139', 'datetime'),
+ 'zAddAssetAttr-Editor Bundle ID-140',
+ 'zAddAssetAttr-Montage-141',
+ 'zAsset-Favorite-142',
+ 'zAsset-Hidden-143',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-144',
+ ('zAsset-Trashed Date-145', 'datetime'),
+ 'zIntResou-Trash State-146',
+ ('zIntResou-Trashed Date-147', 'datetime'),
+ 'zAsset-Cloud Delete State-148',
+ 'zIntResou-Cloud Delete State-149',
+ 'zAddAssetAttr-PTP Trashed State-150',
+ 'zIntResou-PTP Trashed State-151',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-152',
+ ('zMedAnlyAstAttr-Media Analysis Timestamp-153', 'datetime'),
+ ('zAsset-Analysis State Modification Date-154', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-155',
+ 'zAddAssetAttr- View Count-156',
+ 'zAddAssetAttr- Pending Play Count-157',
+ 'zAddAssetAttr- Play Count-158',
+ 'zAddAssetAttr- Pending Share Count-159',
+ 'zAddAssetAttr- Share Count-160',
+ 'zAddAssetAttr-Allowed for Analysis-161',
+ 'zAddAssetAttr-Scene Analysis Version-162',
+ 'zAddAssetAttr-Scene Analysis is From Preview-163',
+ ('zAddAssetAttr-Scene Analysis Timestamp-164', 'datetime'),
+ 'zAddAssetAttr-Destination Asset Copy State-165',
+ 'zAddAssetAttr-Source Asset for Duplication Scope ID-166',
+ 'zCldMast-Source Master For Duplication Scope ID-167',
+ 'zAddAssetAttr-Source Asset For Duplication ID-168',
+ 'zCldMast-Source Master for Duplication ID-169',
+ 'zAddAssetAttr-Variation Suggestions States-170',
+ 'zAsset-High Frame Rate State-171',
+ 'zAsset-Video Key Frame Time Scale-172',
+ 'zAsset-Video Key Frame Value-173',
+ 'zExtAttr-ISO-174',
+ 'zExtAttr-Metering Mode-175',
+ 'zExtAttr-Sample Rate-176',
+ 'zExtAttr-Track Format-177',
+ 'zExtAttr-White Balance-178',
+ 'zExtAttr-Aperture-179',
+ 'zExtAttr-BitRate-180',
+ 'zExtAttr-Exposure Bias-181',
+ 'zExtAttr-Frames Per Second-182',
+ 'zExtAttr-Shutter Speed-183',
+ 'zExtAttr-Slush Scene Bias-184',
+ 'zExtAttr-Slush Version-185',
+ 'zExtAttr-Slush Preset-186',
+ 'zExtAttr-Slush Warm Bias-187',
+ 'zAsset-Height-188',
+ 'zAddAssetAttr-Original Height-189',
+ 'zIntResou-Unoriented Height-190',
+ 'zAsset-Width-191',
+ 'zAddAssetAttr-Original Width-192',
+ 'zIntResou-Unoriented Width-193',
+ 'zAsset-Thumbnail Index-194',
+ 'zAddAssetAttr-Embedded Thumbnail Height-195',
+ 'zAddAssetAttr-Embedded Thumbnail Length-196',
+ 'zAddAssetAttr-Embedded Thumbnail Offset-197',
+ 'zAddAssetAttr-Embedded Thumbnail Width-198',
+ 'zAsset-Packed Acceptable Crop Rect-199',
+ 'zAsset-Packed Badge Attributes-200',
+ 'zAsset-Packed Preferred Crop Rect-201',
+ 'zAsset-Curation Score-202',
+ 'zAsset-Camera Processing Adjustment State-203',
+ 'zAsset-Depth Type-204',
+ 'zAsset-Is Magic Carpet-QuicktimeMOVfile-205',
+ 'zAddAssetAttr-Orig Resource Choice-206',
+ 'zAddAssetAttr-Spatial Over Capture Group ID-207',
+ 'zAddAssetAttr-Place Annotation Data-208',
+ 'zAddAssetAttr-Distance Identity-HEX-209',
+ 'zAddAssetAttr-Edited IPTC Attributes-210',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-211',
+ 'zAddAssetAttr-Accessibility Description-212',
+ 'zAddAssetAttr-Photo Stream Tag ID-213',
+ 'zAddAssetAttr-Share Type-214',
+ 'zAsset-Overall Aesthetic Score-215',
+ 'zAsset-zENT-216',
+ 'zAsset-zOPT-217',
+ 'zAsset-Master= zCldMast-zPK-218',
+ 'zAsset-Extended Attributes= zExtAttr-zPK-219',
+ 'zAsset-Import Session Key-220',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-221',
+ 'zAsset-Computed Attributes Asset Key-222',
+ 'zAsset-Promotion Score-223',
+ 'zAsset-Media Analysis Attributes Key-224',
+ 'zAsset-Media Group UUID-225',
+ 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-226',
+ 'zAsset.Cloud Collection GUID-227',
+ 'zAddAssetAttr-zENT-228',
+ 'ZAddAssetAttr-zOPT-229',
+ 'zAddAssetAttr-zAsset= zAsset_zPK-230',
+ 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-231',
+ 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-232',
+ 'zAddAssetAttr-Public Global UUID-233',
+ 'zAddAssetAttr-Original Assets UUID-234',
+ 'zAddAssetAttr-Originating Asset Identifier-235',
+ 'zAddAssetAttr.Adjusted Fingerprint-236',
+ 'zCldMast-zPK= zAsset-Master-237',
+ 'zCldMast-zENT-238',
+ 'zCldMast-zOPT-239',
+ 'zCldMast-Moment Share Key= zShare-zPK-240',
+ 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-241',
+ 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-242',
+ 'zCldMast-Originating Asset ID-243',
+ 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-244',
+ 'CMzCldMastMedData-zENT-245',
+ 'CMzCldMastMedData-CldMast= zCldMast-zPK-246',
+ 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-247',
+ 'AAAzCldMastMedData-zENT-248',
+ 'AAAzCldMastMedData-CldMast key-249',
+ 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-250',
+ 'zExtAttr-zPK= zAsset-zExtendedAttributes-251',
+ 'zExtAttr-zENT-252',
+ 'zExtAttr-zOPT-253',
+ 'zExtAttr-Asset Key-254',
+ 'zIntResou-zPK-255',
+ 'zIntResou-zENT-256',
+ 'zIntResou-zOPT-257',
+ 'zIntResou-Asset= zAsset_zPK-258',
+ 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-259',
+ 'zMedAnlyAstAttr-zEnt-260',
+ 'zMedAnlyAstAttr-zOpt-261',
+ 'zMedAnlyAstAttr-Asset= zAsset-zPK-262')
+ data_list = get_sqlite_db_records(source_path, query)
- else:
- logfunc('No Internal Resource data available for iOS 15 PhotoData-Photos.sqlite')
-
- db.close()
- return
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found, "Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart',
zAsset.Z_PK AS 'zAsset-zPK',
@@ -3032,353 +3011,328 @@ def get_ph50intresouoptimzdataphdapsql(files_found, report_folder, seeker, wrap_
LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK
ORDER BY zAsset.ZDATECREATED
- """)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
+ row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
+ row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
+ row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
+ row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
+ row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
+ row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
+ row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
+ row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
+ row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
+ row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
+ row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
+ row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
+ row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
+ row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
+ row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
+ row[268], row[269], row[270], row[271]))
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
- row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
- row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
- row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
- row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
- row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
- row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
- row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
- row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
- row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
- row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
- row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
- row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
- row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
- row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
- row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
- row[268], row[269], row[270], row[271]))
+ data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'),
+ 'zAsset-zPK-7',
+ 'zAddAssetAttr-zPK-8',
+ 'zAsset-UUID = store.cloudphotodb-9',
+ 'zAddAssetAttr-Master Fingerprint-10',
+ 'zIntResou-Fingerprint-11',
+ 'zIntResou-Local Availability-4QueryStart-1',
+ 'zIntResou-Remote Availability-4QueryStart-2',
+ 'zIntResou-Resource Type-4QueryStart-3',
+ 'zIntResou-Datastore Sub-Type-4QueryStart-4',
+ 'zIntResou-Recipe ID-4QueryStart-5',
+ 'zAsset Complete-6',
+ 'zAsset-Bundle Scope-12',
+ 'zAsset-Syndication State-13',
+ 'zAsset-Cloud is My Asset-14',
+ 'zAsset-Cloud is deletable-Asset-15',
+ 'zAsset-Cloud_Local_State-16',
+ 'zAsset-Visibility State-17',
+ 'zExtAttr-Camera Make-18',
+ 'zExtAttr-Camera Model-19',
+ 'zExtAttr-Lens Model-20',
+ 'zExtAttr-Flash Fired-21',
+ 'zExtAttr-Focal Lenght-22',
+ 'zExtAttr-Focal Lenth in 35MM-23',
+ 'zExtAttr-Digital Zoom Ratio-24',
+ 'zAsset-Derived Camera Capture Device-25',
+ 'zAddAssetAttr-Camera Captured Device-26',
+ 'zAddAssetAttr-Imported by-27',
+ 'zCldMast-Imported By-28',
+ 'zAddAssetAttr.Imported by Bundle Identifier-29',
+ 'zAddAssetAttr-Imported By Display Name-30',
+ 'zCldMast-Imported by Bundle ID-31',
+ 'zCldMast-Imported by Display Name-32',
+ 'zAsset-Saved Asset Type-33',
+ 'zAsset-Directory-Path-34',
+ 'zAsset-Filename-35',
+ 'zAddAssetAttr- Original Filename-36',
+ 'zCldMast- Original Filename-37',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-38',
+ 'zAsset-Active Library Scope Participation State-39',
+ 'zAsset-Library Scope Share State- StillTesting-40',
+ ('zAsset-Added Date-41', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-42', 'datetime'),
+ ('zAddAssetAttr-Date Created Source-43', 'datetime'),
+ ('zAsset-Date Created-44', 'datetime'),
+ ('zCldMast-Creation Date-45', 'datetime'),
+ ('zIntResou-CldMst Date Created-46', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-47',
+ 'zAddAssetAttr-Time Zone Offset-48',
+ 'zAddAssetAttr-Inferred Time Zone Offset-49',
+ 'zAddAssetAttr-EXIF-String-50',
+ ('zAsset-Modification Date-51', 'datetime'),
+ ('zAsset-Last Shared Date-52', 'datetime'),
+ 'zCldMast-Cloud Local State-53',
+ ('zCldMast-Import Date-54', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-55', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-56',
+ ('zAddAssetAttr-Alt Import Image Date-57', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-58',
+ ('zAsset-Cloud Batch Publish Date-59', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-60', 'datetime'),
+ 'zAsset-Cloud Download Requests-61',
+ 'zAsset-Cloud Batch ID-62',
+ 'zAddAssetAttr-Upload Attempts-63',
+ 'zAsset-Latitude-64',
+ 'zExtAttr-Latitude-65',
+ 'zAsset-Longitude-66',
+ 'zExtAttr-Longitude-67',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-68',
+ 'zAddAssetAttr-Location Hash-69',
+ 'zAddAssetAttr-Shifted Location Valid-70',
+ 'zAddAssetAttr-Shifted Location Data-71',
+ 'zAddAssetAttr-Reverse Location Is Valid-72',
+ 'zAddAssetAttr-Reverse Location Data-73',
+ 'AAAzCldMastMedData-zOPT-74',
+ 'zAddAssetAttr-Media Metadata Type-75',
+ 'AAAzCldMastMedData-Data-76',
+ 'CldMasterzCldMastMedData-zOPT-77',
+ 'zCldMast-Media Metadata Type-78',
+ 'CMzCldMastMedData-Data-79',
+ 'zAsset-Search Index Rebuild State-80',
+ 'zAddAssetAttr-Syndication History-81',
+ 'zMedAnlyAstAttr-Syndication Processing Version-82',
+ 'zMedAnlyAstAttr-Syndication Processing Value-83',
+ 'zAsset-Orientation-84',
+ 'zAddAssetAttr-Original Orientation-85',
+ 'zAsset-Kind-86',
+ 'zAsset-Kind-Sub-Type-87',
+ 'zAddAssetAttr-Cloud Kind Sub Type-88',
+ 'zAsset-Playback Style-89',
+ 'zAsset-Playback Variation-90',
+ 'zAsset-Video Duration-91',
+ 'zExtAttr-Duration-92',
+ 'zAsset-Video CP Duration-93',
+ 'zAddAssetAttr-Video CP Duration Time Scale-94',
+ 'zAsset-Video CP Visibility State-95',
+ 'zAddAssetAttr-Video CP Display Value-96',
+ 'zAddAssetAttr-Video CP Display Time Scale-97',
+ 'zIntResou-Datastore Class ID-98',
+ 'zAsset-Cloud Placeholder Kind-99',
+ 'zIntResou-Local Availability-100',
+ 'zIntResou-Local Availability Target-101',
+ 'zIntResou-Cloud Local State-102',
+ 'zIntResou-Remote Availability-103',
+ 'zIntResou-Remote Availability Target-104',
+ 'zIntResou-Transient Cloud Master-105',
+ 'zIntResou-Side Car Index-106',
+ 'zIntResou- File ID-107',
+ 'zIntResou-Version-108',
+ 'zAddAssetAttr- Original-File-Size-109',
+ 'zIntResou-Resource Type-110',
+ 'zIntResou-Datastore Sub-Type-111',
+ 'zIntResou-Cloud Source Type-112',
+ 'zIntResou-Data Length-113',
+ 'zIntResou-Recipe ID-114',
+ ('zIntResou-Cloud Last Prefetch Date-115', 'datetime'),
+ 'zIntResou-Cloud Prefetch Count-116',
+ ('zIntResou- Cloud-Last-OnDemand Download-Date-117', 'datetime'),
+ 'zIntResou-UniformTypeID_UTI_Conformance_Hint-118',
+ 'zIntResou-Compact-UTI-119',
+ 'zAsset-Uniform Type ID-120',
+ 'zAsset-Original Color Space-121',
+ 'zCldMast-Uniform_Type_ID-122',
+ 'zCldMast-Full Size JPEG Source-123',
+ 'zAsset-HDR Gain-124',
+ 'zAsset-zHDR_Type-125',
+ 'zExtAttr-Codec-126',
+ 'zIntResou-Codec Four Char Code Name-127',
+ 'zCldMast-Codec Name-128',
+ 'zCldMast-Video Frame Rate-129',
+ 'zCldMast-Placeholder State-130',
+ 'zAsset-Depth_Type-131',
+ 'zAsset-Avalanche UUID-132',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-133',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-134',
+ 'zAddAssetAttr-Cloud Recovery State-135',
+ 'zAddAssetAttr-Cloud State Recovery Attempts Count-136',
+ 'zAsset-Deferred Processing Needed-137',
+ 'zAsset-Video Deferred Processing Needed-138',
+ 'zAddAssetAttr-Deferred Photo Identifier-139',
+ 'zAddAssetAttr-Deferred Processing Candidate Options-140',
+ 'zAsset-Has Adjustments-Camera-Effects-Filters-141',
+ ('zAsset-Adjustment Timestamp-142', 'datetime'),
+ 'zAddAssetAttr-Editor Bundle ID-143',
+ 'zAddAssetAttr-Montage-144',
+ 'zAsset-Favorite-145',
+ 'zAsset-Hidden-146',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-147',
+ ('zAsset-Trashed Date-148', 'datetime'),
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-149',
+ 'zAsset-Delete-Reason-150',
+ 'zIntResou-Trash State-151',
+ ('zIntResou-Trashed Date-152', 'datetime'),
+ 'zAsset-Cloud Delete State-153',
+ 'zIntResou-Cloud Delete State-154',
+ 'zAddAssetAttr-PTP Trashed State-155',
+ 'zIntResou-PTP Trashed State-156',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-157',
+ ('zMedAnlyAstAttr-Media Analysis Timestamp-158', 'datetime'),
+ ('zAsset-Analysis State Modification Date-159', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-160',
+ 'zAddAssetAttr- View Count-161',
+ 'zAddAssetAttr- Pending Play Count-162',
+ 'zAddAssetAttr- Play Count-163',
+ 'zAddAssetAttr- Pending Share Count-164',
+ 'zAddAssetAttr- Share Count-165',
+ 'zAddAssetAttr-Allowed for Analysis-166',
+ 'zAddAssetAttr-Scene Analysis Version-167',
+ 'zAddAssetAttr-Scene Analysis is From Preview-168',
+ ('zAddAssetAttr-Scene Analysis Timestamp-169', 'datetime'),
+ 'zAsset-Duplication Asset Visibility State-170',
+ 'zAddAssetAttr-Destination Asset Copy State-171',
+ 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-172',
+ 'zAddAssetAttr-Source Asset for Duplication Scope ID-173',
+ 'zCldMast-Source Master For Duplication Scope ID-174',
+ 'zAddAssetAttr-Source Asset For Duplication ID-175',
+ 'zCldMast-Source Master for Duplication ID-176',
+ 'zAddAssetAttr-Variation Suggestions States-177',
+ 'zAsset-High Frame Rate State-178',
+ 'zAsset-Video Key Frame Time Scale-179',
+ 'zAsset-Video Key Frame Value-180',
+ 'zExtAttr-ISO-181',
+ 'zExtAttr-Metering Mode-182',
+ 'zExtAttr-Sample Rate-183',
+ 'zExtAttr-Track Format-184',
+ 'zExtAttr-White Balance-185',
+ 'zExtAttr-Aperture-186',
+ 'zExtAttr-BitRate-187',
+ 'zExtAttr-Exposure Bias-188',
+ 'zExtAttr-Frames Per Second-189',
+ 'zExtAttr-Shutter Speed-190',
+ 'zExtAttr-Slush Scene Bias-191',
+ 'zExtAttr-Slush Version-192',
+ 'zExtAttr-Slush Preset-193',
+ 'zExtAttr-Slush Warm Bias-194',
+ 'zAsset-Height-195',
+ 'zAddAssetAttr-Original Height-196',
+ 'zIntResou-Unoriented Height-197',
+ 'zAsset-Width-198',
+ 'zAddAssetAttr-Original Width-199',
+ 'zIntResou-Unoriented Width-200',
+ 'zAsset-Thumbnail Index-201',
+ 'zAddAssetAttr-Embedded Thumbnail Height-202',
+ 'zAddAssetAttr-Embedded Thumbnail Length-203',
+ 'zAddAssetAttr-Embedded Thumbnail Offset-204',
+ 'zAddAssetAttr-Embedded Thumbnail Width-205',
+ 'zAsset-Packed Acceptable Crop Rect-206',
+ 'zAsset-Packed Badge Attributes-207',
+ 'zAsset-Packed Preferred Crop Rect-208',
+ 'zAsset-Curation Score-209',
+ 'zAsset-Camera Processing Adjustment State-210',
+ 'zAsset-Depth Type-211',
+ 'zAsset-Is Magic Carpet-QuicktimeMOVfile-212',
+ 'zAddAssetAttr-Orig Resource Choice-213',
+ 'zAddAssetAttr-Spatial Over Capture Group ID-214',
+ 'zAddAssetAttr-Place Annotation Data-215',
+ 'zAddAssetAttr-Distance Identity-HEX-216',
+ 'zAddAssetAttr-Edited IPTC Attributes-217',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-218',
+ 'zAddAssetAttr-Accessibility Description-219',
+ 'zAddAssetAttr-Photo Stream Tag ID-220',
+ 'zAddAssetAttr-Share Type-221',
+ 'zAddAssetAttr-Library Scope Asset Contributors To Update-222',
+ 'zAsset-Overall Aesthetic Score-223',
+ 'zAsset-zENT-224',
+ 'zAsset-zOPT-225',
+ 'zAsset-Master= zCldMast-zPK-226',
+ 'zAsset-Extended Attributes= zExtAttr-zPK-227',
+ 'zAsset-Import Session Key-228',
+ 'zAsset-Photo Analysis Attributes Key-229',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-230',
+ 'zAsset-Computed Attributes Asset Key-231',
+ 'zAsset-Promotion Score-232',
+ 'zAsset-Media Analysis Attributes Key-233',
+ 'zAsset-Media Group UUID-234',
+ 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-235',
+ 'zAsset.Cloud Collection GUID-236',
+ 'zAddAssetAttr-zENT-237',
+ 'ZAddAssetAttr-zOPT-238',
+ 'zAddAssetAttr-zAsset= zAsset_zPK-239',
+ 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-240',
+ 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-241',
+ 'zAddAssetAttr-Public Global UUID-242',
+ 'zAddAssetAttr-Original Assets UUID-243',
+ 'zAddAssetAttr-Originating Asset Identifier-244',
+ 'zAddAssetAttr.Adjusted Fingerprint-245',
+ 'zCldMast-zPK= zAsset-Master-246',
+ 'zCldMast-zENT-247',
+ 'zCldMast-zOPT-248',
+ 'zCldMast-Moment Share Key= zShare-zPK-249',
+ 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-250',
+ 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-251',
+ 'zCldMast-Originating Asset ID-252',
+ 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-253',
+ 'CMzCldMastMedData-zENT-254',
+ 'CMzCldMastMedData-CldMast= zCldMast-zPK-255',
+ 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-256',
+ 'AAAzCldMastMedData-zENT-257',
+ 'AAAzCldMastMedData-CldMast key-258',
+ 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-259',
+ 'zExtAttr-zPK= zAsset-zExtendedAttributes-260',
+ 'zExtAttr-zENT-261',
+ 'zExtAttr-zOPT-262',
+ 'zExtAttr-Asset Key-263',
+ 'zIntResou-zPK-264',
+ 'zIntResou-zENT-265',
+ 'zIntResou-zOPT-266',
+ 'zIntResou-Asset= zAsset_zPK-267',
+ 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-268',
+ 'zMedAnlyAstAttr-zEnt-269',
+ 'zMedAnlyAstAttr-zOpt-270',
+ 'zMedAnlyAstAttr-Asset= zAsset-zPK-271')
+ data_list = get_sqlite_db_records(source_path, query)
- counter += 1
-
- description = 'Parses iOS 16 asset records from PhotoData-Photos.sqlite ZINTERNALRESOURCE and' \
- ' other tables. This and other related parsers should provide data for investigative' \
- ' analysis of assets being stored locally on the device verses assets being stored in' \
- ' iCloud Photos as the result of optimization. This is very large query and script,' \
- ' I recommend opening the TSV generated report with Zimmermans Tools' \
- ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \
- ' and filter the results.'
- report = ArtifactHtmlReport('Ph50.1-Asset_IntResou-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph50.1-Asset_IntResou-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-4QueryStart-0',
- 'zAsset-zPK-7',
- 'zAddAssetAttr-zPK-8',
- 'zAsset-UUID = store.cloudphotodb-9',
- 'zAddAssetAttr-Master Fingerprint-10',
- 'zIntResou-Fingerprint-11',
- 'zIntResou-Local Availability-4QueryStart-1',
- 'zIntResou-Remote Availability-4QueryStart-2',
- 'zIntResou-Resource Type-4QueryStart-3',
- 'zIntResou-Datastore Sub-Type-4QueryStart-4',
- 'zIntResou-Recipe ID-4QueryStart-5',
- 'zAsset Complete-6',
- 'zAsset-Bundle Scope-12',
- 'zAsset-Syndication State-13',
- 'zAsset-Cloud is My Asset-14',
- 'zAsset-Cloud is deletable-Asset-15',
- 'zAsset-Cloud_Local_State-16',
- 'zAsset-Visibility State-17',
- 'zExtAttr-Camera Make-18',
- 'zExtAttr-Camera Model-19',
- 'zExtAttr-Lens Model-20',
- 'zExtAttr-Flash Fired-21',
- 'zExtAttr-Focal Lenght-22',
- 'zExtAttr-Focal Lenth in 35MM-23',
- 'zExtAttr-Digital Zoom Ratio-24',
- 'zAsset-Derived Camera Capture Device-25',
- 'zAddAssetAttr-Camera Captured Device-26',
- 'zAddAssetAttr-Imported by-27',
- 'zCldMast-Imported By-28',
- 'zAddAssetAttr.Imported by Bundle Identifier-29',
- 'zAddAssetAttr-Imported By Display Name-30',
- 'zCldMast-Imported by Bundle ID-31',
- 'zCldMast-Imported by Display Name-32',
- 'zAsset-Saved Asset Type-33',
- 'zAsset-Directory-Path-34',
- 'zAsset-Filename-35',
- 'zAddAssetAttr- Original Filename-36',
- 'zCldMast- Original Filename-37',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-38',
- 'zAsset-Active Library Scope Participation State-39',
- 'zAsset-Library Scope Share State- StillTesting-40',
- 'zAsset-Added Date-41',
- 'zAsset- SortToken -CameraRoll-42',
- 'zAddAssetAttr-Date Created Source-43',
- 'zAsset-Date Created-44',
- 'zCldMast-Creation Date-45',
- 'zIntResou-CldMst Date Created-46',
- 'zAddAssetAttr-Time Zone Name-47',
- 'zAddAssetAttr-Time Zone Offset-48',
- 'zAddAssetAttr-Inferred Time Zone Offset-49',
- 'zAddAssetAttr-EXIF-String-50',
- 'zAsset-Modification Date-51',
- 'zAsset-Last Shared Date-52',
- 'zCldMast-Cloud Local State-53',
- 'zCldMast-Import Date-54',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-55',
- 'zAddAssetAttr-Import Session ID-56',
- 'zAddAssetAttr-Alt Import Image Date-57',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-58',
- 'zAsset-Cloud Batch Publish Date-59',
- 'zAsset-Cloud Server Publish Date-60',
- 'zAsset-Cloud Download Requests-61',
- 'zAsset-Cloud Batch ID-62',
- 'zAddAssetAttr-Upload Attempts-63',
- 'zAsset-Latitude-64',
- 'zExtAttr-Latitude-65',
- 'zAsset-Longitude-66',
- 'zExtAttr-Longitude-67',
- 'zAddAssetAttr-GPS Horizontal Accuracy-68',
- 'zAddAssetAttr-Location Hash-69',
- 'zAddAssetAttr-Shifted Location Valid-70',
- 'zAddAssetAttr-Shifted Location Data-71',
- 'zAddAssetAttr-Reverse Location Is Valid-72',
- 'zAddAssetAttr-Reverse Location Data-73',
- 'AAAzCldMastMedData-zOPT-74',
- 'zAddAssetAttr-Media Metadata Type-75',
- 'AAAzCldMastMedData-Data-76',
- 'CldMasterzCldMastMedData-zOPT-77',
- 'zCldMast-Media Metadata Type-78',
- 'CMzCldMastMedData-Data-79',
- 'zAsset-Search Index Rebuild State-80',
- 'zAddAssetAttr-Syndication History-81',
- 'zMedAnlyAstAttr-Syndication Processing Version-82',
- 'zMedAnlyAstAttr-Syndication Processing Value-83',
- 'zAsset-Orientation-84',
- 'zAddAssetAttr-Original Orientation-85',
- 'zAsset-Kind-86',
- 'zAsset-Kind-Sub-Type-87',
- 'zAddAssetAttr-Cloud Kind Sub Type-88',
- 'zAsset-Playback Style-89',
- 'zAsset-Playback Variation-90',
- 'zAsset-Video Duration-91',
- 'zExtAttr-Duration-92',
- 'zAsset-Video CP Duration-93',
- 'zAddAssetAttr-Video CP Duration Time Scale-94',
- 'zAsset-Video CP Visibility State-95',
- 'zAddAssetAttr-Video CP Display Value-96',
- 'zAddAssetAttr-Video CP Display Time Scale-97',
- 'zIntResou-Datastore Class ID-98',
- 'zAsset-Cloud Placeholder Kind-99',
- 'zIntResou-Local Availability-100',
- 'zIntResou-Local Availability Target-101',
- 'zIntResou-Cloud Local State-102',
- 'zIntResou-Remote Availability-103',
- 'zIntResou-Remote Availability Target-104',
- 'zIntResou-Transient Cloud Master-105',
- 'zIntResou-Side Car Index-106',
- 'zIntResou- File ID-107',
- 'zIntResou-Version-108',
- 'zAddAssetAttr- Original-File-Size-109',
- 'zIntResou-Resource Type-110',
- 'zIntResou-Datastore Sub-Type-111',
- 'zIntResou-Cloud Source Type-112',
- 'zIntResou-Data Length-113',
- 'zIntResou-Recipe ID-114',
- 'zIntResou-Cloud Last Prefetch Date-115',
- 'zIntResou-Cloud Prefetch Count-116',
- 'zIntResou- Cloud-Last-OnDemand Download-Date-117',
- 'zIntResou-UniformTypeID_UTI_Conformance_Hint-118',
- 'zIntResou-Compact-UTI-119',
- 'zAsset-Uniform Type ID-120',
- 'zAsset-Original Color Space-121',
- 'zCldMast-Uniform_Type_ID-122',
- 'zCldMast-Full Size JPEG Source-123',
- 'zAsset-HDR Gain-124',
- 'zAsset-zHDR_Type-125',
- 'zExtAttr-Codec-126',
- 'zIntResou-Codec Four Char Code Name-127',
- 'zCldMast-Codec Name-128',
- 'zCldMast-Video Frame Rate-129',
- 'zCldMast-Placeholder State-130',
- 'zAsset-Depth_Type-131',
- 'zAsset-Avalanche UUID-132',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-133',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-134',
- 'zAddAssetAttr-Cloud Recovery State-135',
- 'zAddAssetAttr-Cloud State Recovery Attempts Count-136',
- 'zAsset-Deferred Processing Needed-137',
- 'zAsset-Video Deferred Processing Needed-138',
- 'zAddAssetAttr-Deferred Photo Identifier-139',
- 'zAddAssetAttr-Deferred Processing Candidate Options-140',
- 'zAsset-Has Adjustments-Camera-Effects-Filters-141',
- 'zAsset-Adjustment Timestamp-142',
- 'zAddAssetAttr-Editor Bundle ID-143',
- 'zAddAssetAttr-Montage-144',
- 'zAsset-Favorite-145',
- 'zAsset-Hidden-146',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-147',
- 'zAsset-Trashed Date-148',
- 'zAsset-Trashed by Participant= zSharePartic_zPK-149',
- 'zAsset-Delete-Reason-150',
- 'zIntResou-Trash State-151',
- 'zIntResou-Trashed Date-152',
- 'zAsset-Cloud Delete State-153',
- 'zIntResou-Cloud Delete State-154',
- 'zAddAssetAttr-PTP Trashed State-155',
- 'zIntResou-PTP Trashed State-156',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-157',
- 'zMedAnlyAstAttr-Media Analysis Timestamp-158',
- 'zAsset-Analysis State Modificaion Date-159',
- 'zAddAssetAttr- Pending View Count-160',
- 'zAddAssetAttr- View Count-161',
- 'zAddAssetAttr- Pending Play Count-162',
- 'zAddAssetAttr- Play Count-163',
- 'zAddAssetAttr- Pending Share Count-164',
- 'zAddAssetAttr- Share Count-165',
- 'zAddAssetAttr-Allowed for Analysis-166',
- 'zAddAssetAttr-Scene Analysis Version-167',
- 'zAddAssetAttr-Scene Analysis is From Preview-168',
- 'zAddAssetAttr-Scene Analysis Timestamp-169',
- 'zAsset-Duplication Asset Visibility State-170',
- 'zAddAssetAttr-Destination Asset Copy State-171',
- 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-172',
- 'zAddAssetAttr-Source Asset for Duplication Scope ID-173',
- 'zCldMast-Source Master For Duplication Scope ID-174',
- 'zAddAssetAttr-Source Asset For Duplication ID-175',
- 'zCldMast-Source Master for Duplication ID-176',
- 'zAddAssetAttr-Variation Suggestions States-177',
- 'zAsset-High Frame Rate State-178',
- 'zAsset-Video Key Frame Time Scale-179',
- 'zAsset-Video Key Frame Value-180',
- 'zExtAttr-ISO-181',
- 'zExtAttr-Metering Mode-182',
- 'zExtAttr-Sample Rate-183',
- 'zExtAttr-Track Format-184',
- 'zExtAttr-White Balance-185',
- 'zExtAttr-Aperture-186',
- 'zExtAttr-BitRate-187',
- 'zExtAttr-Exposure Bias-188',
- 'zExtAttr-Frames Per Second-189',
- 'zExtAttr-Shutter Speed-190',
- 'zExtAttr-Slush Scene Bias-191',
- 'zExtAttr-Slush Version-192',
- 'zExtAttr-Slush Preset-193',
- 'zExtAttr-Slush Warm Bias-194',
- 'zAsset-Height-195',
- 'zAddAssetAttr-Original Height-196',
- 'zIntResou-Unoriented Height-197',
- 'zAsset-Width-198',
- 'zAddAssetAttr-Original Width-199',
- 'zIntResou-Unoriented Width-200',
- 'zAsset-Thumbnail Index-201',
- 'zAddAssetAttr-Embedded Thumbnail Height-202',
- 'zAddAssetAttr-Embedded Thumbnail Length-203',
- 'zAddAssetAttr-Embedded Thumbnail Offset-204',
- 'zAddAssetAttr-Embedded Thumbnail Width-205',
- 'zAsset-Packed Acceptable Crop Rect-206',
- 'zAsset-Packed Badge Attributes-207',
- 'zAsset-Packed Preferred Crop Rect-208',
- 'zAsset-Curation Score-209',
- 'zAsset-Camera Processing Adjustment State-210',
- 'zAsset-Depth Type-211',
- 'zAsset-Is Magic Carpet-QuicktimeMOVfile-212',
- 'zAddAssetAttr-Orig Resource Choice-213',
- 'zAddAssetAttr-Spatial Over Capture Group ID-214',
- 'zAddAssetAttr-Place Annotation Data-215',
- 'zAddAssetAttr-Distance Identity-HEX-216',
- 'zAddAssetAttr-Edited IPTC Attributes-217',
- 'zAddAssetAttr-Title-Comments via Cloud Website-218',
- 'zAddAssetAttr-Accessibility Description-219',
- 'zAddAssetAttr-Photo Stream Tag ID-220',
- 'zAddAssetAttr-Share Type-221',
- 'zAddAssetAttr-Library Scope Asset Contributors To Update-222',
- 'zAsset-Overall Aesthetic Score-223',
- 'zAsset-zENT-224',
- 'zAsset-zOPT-225',
- 'zAsset-Master= zCldMast-zPK-226',
- 'zAsset-Extended Attributes= zExtAttr-zPK-227',
- 'zAsset-Import Session Key-228',
- 'zAsset-Photo Analysis Attributes Key-229',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-230',
- 'zAsset-Computed Attributes Asset Key-231',
- 'zAsset-Promotion Score-232',
- 'zAsset-Media Analysis Attributes Key-233',
- 'zAsset-Media Group UUID-234',
- 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-235',
- 'zAsset.Cloud Collection GUID-236',
- 'zAddAssetAttr-zENT-237',
- 'ZAddAssetAttr-zOPT-238',
- 'zAddAssetAttr-zAsset= zAsset_zPK-239',
- 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-240',
- 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-241',
- 'zAddAssetAttr-Public Global UUID-242',
- 'zAddAssetAttr-Original Assets UUID-243',
- 'zAddAssetAttr-Originating Asset Identifier-244',
- 'zAddAssetAttr.Adjusted Fingerprint-245',
- 'zCldMast-zPK= zAsset-Master-246',
- 'zCldMast-zENT-247',
- 'zCldMast-zOPT-248',
- 'zCldMast-Moment Share Key= zShare-zPK-249',
- 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-250',
- 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-251',
- 'zCldMast-Originating Asset ID-252',
- 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-253',
- 'CMzCldMastMedData-zENT-254',
- 'CMzCldMastMedData-CldMast= zCldMast-zPK-255',
- 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-256',
- 'AAAzCldMastMedData-zENT-257',
- 'AAAzCldMastMedData-CldMast key-258',
- 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-259',
- 'zExtAttr-zPK= zAsset-zExtendedAttributes-260',
- 'zExtAttr-zENT-261',
- 'zExtAttr-zOPT-262',
- 'zExtAttr-Asset Key-263',
- 'zIntResou-zPK-264',
- 'zIntResou-zENT-265',
- 'zIntResou-zOPT-266',
- 'zIntResou-Asset= zAsset_zPK-267',
- 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-268',
- 'zMedAnlyAstAttr-zEnt-269',
- 'zMedAnlyAstAttr-zOpt-270',
- 'zMedAnlyAstAttr-Asset= zAsset-zPK-271')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph50.1-Asset_IntResou-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph50.1-Asset_IntResou-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No Internal Resource data available for iOS 16 PhotoData-Photos.sqlite')
-
- db.close()
- return
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found, "Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart',
zAsset.Z_PK AS 'zAsset-zPK',
@@ -4218,366 +4172,341 @@ def get_ph50intresouoptimzdataphdapsql(files_found, report_folder, seeker, wrap_
LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
- row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
- row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
- row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
- row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
- row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
- row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
- row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
- row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
- row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
- row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
- row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
- row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
- row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
- row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
- row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
- row[268], row[269], row[270], row[271], row[272], row[273], row[274]))
-
- counter += 1
+ '''
- description = 'Parses iOS 17 asset records from PhotoData-Photos.sqlite ZINTERNALRESOURCE' \
- ' and other tables. This and other related parsers should provide data for investigative' \
- ' analysis of assets being stored locally on the device verses assets being stored in' \
- ' iCloud Photos as the result of optimization. This is very large query and script,' \
- ' I recommend opening the TSV generated report with Zimmermans Tools' \
- ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \
- ' and filter the results.'
- report = ArtifactHtmlReport('Ph50.1-Asset_IntResou-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph50.1-Asset_IntResou-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-4QueryStart-0',
- 'zAsset-zPK-1',
- 'zAddAssetAttr-zPK-2',
- 'zAsset-UUID = store.cloudphotodb-3',
- 'zAddAssetAttr-Master Fingerprint-4',
- 'zAddAssetAttr.Adjusted Fingerprint-5',
- 'zIntResou-Fingerprint-6',
- 'zIntResou-Local Availability-4QueryStart-7',
- 'zIntResou-Remote Availability-4QueryStart-8',
- 'zIntResou-Resource Type-4QueryStart-9',
- 'zIntResou-Datastore Sub-Type-4QueryStart-10',
- 'zIntResou-Recipe ID-4QueryStart-11',
- 'zAsset Complete-12',
- 'zAsset-Bundle Scope-13',
- 'zAsset-Syndication State-14',
- 'zAsset-Cloud is My Asset-15',
- 'zAsset-Cloud is deletable-Asset-16',
- 'zAsset-Cloud_Local_State-17',
- 'zAsset-Visibility State-18',
- 'zExtAttr-Camera Make-19',
- 'zExtAttr-Camera Model-20',
- 'zExtAttr-Lens Model-21',
- 'zExtAttr-Flash Fired-22',
- 'zExtAttr-Focal Lenght-23',
- 'zExtAttr-Focal Length in 35MM-24',
- 'zExtAttr-Digital Zoom Ratio-25',
- 'zAsset-Derived Camera Capture Device-26',
- 'zAddAssetAttr-Camera Captured Device-27',
- 'zAddAssetAttr-Imported by-28',
- 'zCldMast-Imported By-29',
- 'zAddAssetAttr.Imported by Bundle Identifier-30',
- 'zAddAssetAttr-Imported By Display Name-31',
- 'zCldMast-Imported by Bundle ID-32',
- 'zCldMast-Imported by Display Name-33',
- 'zAsset-Saved Asset Type-34',
- 'zAsset-Directory-Path-35',
- 'zAsset-Filename-36',
- 'zAddAssetAttr- Original Filename-37',
- 'zCldMast- Original Filename-38',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-39',
- 'zAsset-Active Library Scope Participation State-40',
- 'zAsset-Library Scope Share State- StillTesting-41',
- 'zAsset-Added Date-42',
- 'zAsset- SortToken -CameraRoll-43',
- 'zAddAssetAttr-Date Created Source-44',
- 'zAsset-Date Created-45',
- 'zCldMast-Creation Date-46',
- 'zIntResou-CldMst Date Created-47',
- 'zAddAssetAttr-Time Zone Name-48',
- 'zAddAssetAttr-Time Zone Offset-49',
- 'zAddAssetAttr-Inferred Time Zone Offset-50',
- 'zAddAssetAttr-EXIF-String-51',
- 'zAsset-Modification Date-52',
- 'zAsset-Last Shared Date-53',
- 'zCldMast-Cloud Local State-54',
- 'zCldMast-Import Date-55',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-56',
- 'zAddAssetAttr-Import Session ID-57',
- 'zAddAssetAttr-Alt Import Image Date-58',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-59',
- 'zAsset-Cloud Batch Publish Date-60',
- 'zAsset-Cloud Server Publish Date-61',
- 'zAsset-Cloud Download Requests-62',
- 'zAsset-Cloud Batch ID-63',
- 'zAddAssetAttr-Upload Attempts-64',
- 'zAsset-Latitude-65',
- 'zExtAttr-Latitude-66',
- 'zAsset-Longitude-67',
- 'zExtAttr-Longitude-68',
- 'zAddAssetAttr-GPS Horizontal Accuracy-69',
- 'zAddAssetAttr-Location Hash-70',
- 'zAddAssetAttr-Shifted Location Valid-71',
- 'zAddAssetAttr-Shifted Location Data-72',
- 'zAddAssetAttr-Reverse Location Is Valid-73',
- 'zAddAssetAttr-Reverse Location Data-74',
- 'AAAzCldMastMedData-zOPT-75',
- 'zAddAssetAttr-Media Metadata Type-76',
- 'AAAzCldMastMedData-Data-77',
- 'CldMasterzCldMastMedData-zOPT-78',
- 'zCldMast-Media Metadata Type-79',
- 'CMzCldMastMedData-Data-80',
- 'zAsset-Search Index Rebuild State-81',
- 'zAddAssetAttr-Syndication History-82',
- 'zMedAnlyAstAttr-Syndication Processing Version-83',
- 'zMedAnlyAstAttr-Syndication Processing Value-84',
- 'zAsset-Orientation-85',
- 'zAddAssetAttr-Original Orientation-86',
- 'zAsset-Kind-87',
- 'zAsset-Kind-Sub-Type-88',
- 'zAddAssetAttr-Cloud Kind Sub Type-89',
- 'zAsset-Playback Style-90',
- 'zAsset-Playback Variation-91',
- 'zAsset-Video Duration-92',
- 'zExtAttr-Duration-93',
- 'zAsset-Video CP Duration-94',
- 'zAddAssetAttr-Video CP Duration Time Scale-95',
- 'zAsset-Video CP Visibility State-96',
- 'zAddAssetAttr-Video CP Display Value-97',
- 'zAddAssetAttr-Video CP Display Time Scale-98',
- 'zIntResou-Datastore Class ID-99',
- 'zAsset-Cloud Placeholder Kind-100',
- 'zIntResou-Local Availability-101',
- 'zIntResou-Local Availability Target-102',
- 'zIntResou-Cloud Local State-103',
- 'zIntResou-Remote Availability-104',
- 'zIntResou-Remote Availability Target-105',
- 'zIntResou-Transient Cloud Master-106',
- 'zIntResou-Side Car Index-107',
- 'zIntResou- File ID-108',
- 'zIntResou-Version-109',
- 'zAddAssetAttr- Original-File-Size-110',
- 'zIntResou-Resource Type-111',
- 'zIntResou-Datastore Sub-Type-112',
- 'zIntResou-Cloud Source Type-113',
- 'zIntResou-Data Length-114',
- 'zIntResou-Recipe ID-115',
- 'zIntResou-Cloud Last Prefetch Date-116',
- 'zIntResou-Cloud Prefetch Count-117',
- 'zIntResou- Cloud-Last-OnDemand Download-Date-118',
- 'zIntResou-UniformTypeID_UTI_Conformance_Hint-119',
- 'zIntResou-Compact-UTI-120',
- 'zAsset-Uniform Type ID-121',
- 'zAsset-Original Color Space-122',
- 'zCldMast-Uniform_Type_ID-123',
- 'zCldMast-Full Size JPEG Source-124',
- 'zAsset-HDR Gain-125',
- 'zAsset-zHDR_Type-126',
- 'zExtAttr-Codec-127',
- 'zIntResou-Codec Four Char Code Name-128',
- 'zCldMast-Codec Name-129',
- 'zCldMast-Video Frame Rate-130',
- 'zCldMast-Placeholder State-131',
- 'zAsset-Depth_Type-132',
- 'zAsset-Avalanche UUID-133',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-134',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-135',
- 'zAddAssetAttr-Cloud Recovery State-136',
- 'zAddAssetAttr-Cloud State Recovery Attempts Count-137',
- 'zAsset-Deferred Processing Needed-138',
- 'zAsset-Video Deferred Processing Needed-139',
- 'zAddAssetAttr-Deferred Photo Identifier-140',
- 'zAddAssetAttr-Deferred Processing Candidate Options-141',
- 'zAsset-Has Adjustments-Camera-Effects-Filters-142',
- 'zAsset-Adjustment Timestamp-143',
- 'zAddAssetAttr-Editor Bundle ID-144',
- 'zAddAssetAttr-Montage-145',
- 'zAsset-Favorite-146',
- 'zAsset-Hidden-147',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-148',
- 'zAsset-Trashed Date-149',
- 'zAsset-Trashed by Participant= zSharePartic_zPK-150',
- 'zAsset-Delete-Reason-151',
- 'zIntResou-Trash State-152',
- 'zIntResou-Trashed Date-153',
- 'zAsset-Cloud Delete State-154',
- 'zIntResou-Cloud Delete State-155',
- 'zAddAssetAttr-PTP Trashed State-156',
- 'zIntResou-PTP Trashed State-157',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-158',
- 'zMedAnlyAstAttr-Media Analysis Timestamp-159',
- 'zAsset-Analysis State Modification Date-160',
- 'zAddAssetAttr- Pending View Count-161',
- 'zAddAssetAttr- View Count-162',
- 'zAddAssetAttr- Pending Play Count-163',
- 'zAddAssetAttr- Play Count-164',
- 'zAddAssetAttr- Pending Share Count-165',
- 'zAddAssetAttr- Share Count-166',
- 'zAddAssetAttr-Allowed for Analysis-167',
- 'zAddAssetAttr-Scene Analysis Version-168',
- 'zAddAssetAttr-Scene Analysis is From Preview-169',
- 'zAddAssetAttr-Scene Analysis Timestamp-170',
- 'zAsset-Duplication Asset Visibility State-171',
- 'zAddAssetAttr-Destination Asset Copy State-172',
- 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-173',
- 'zAddAssetAttr-Source Asset for Duplication Scope ID-174',
- 'zCldMast-Source Master For Duplication Scope ID-175',
- 'zAddAssetAttr-Source Asset For Duplication ID-176',
- 'zCldMast-Source Master for Duplication ID-177',
- 'zAddAssetAttr-Variation Suggestions States-178',
- 'zAsset-High Frame Rate State-179',
- 'zAsset-Video Key Frame Time Scale-180',
- 'zAsset-Video Key Frame Value-181',
- 'zExtAttr-ISO-182',
- 'zExtAttr-Metering Mode-183',
- 'zExtAttr-Sample Rate-184',
- 'zExtAttr-Track Format-185',
- 'zExtAttr-White Balance-186',
- 'zExtAttr-Aperture-187',
- 'zExtAttr-BitRate-188',
- 'zExtAttr-Exposure Bias-189',
- 'zExtAttr-Frames Per Second-190',
- 'zExtAttr-Shutter Speed-191',
- 'zExtAttr-Slush Scene Bias-192',
- 'zExtAttr-Slush Version-193',
- 'zExtAttr-Slush Preset-194',
- 'zExtAttr-Slush Warm Bias-195',
- 'zAsset-Height-196',
- 'zAddAssetAttr-Original Height-197',
- 'zIntResou-UnOriented Height-198',
- 'zAsset-Width-199',
- 'zAddAssetAttr-Original Width-200',
- 'zIntResou-UnOriented Width-201',
- 'zAsset-Thumbnail Index-202',
- 'zAddAssetAttr-Embedded Thumbnail Height-203',
- 'zAddAssetAttr-Embedded Thumbnail Length-204',
- 'zAddAssetAttr-Embedded Thumbnail Offset-205',
- 'zAddAssetAttr-Embedded Thumbnail Width-206',
- 'zAsset-Packed Acceptable Crop Rect-207',
- 'zAsset-Packed Badge Attributes-208',
- 'zAsset-Packed Preferred Crop Rect-209',
- 'zAsset-Curation Score-210',
- 'zAsset-Camera Processing Adjustment State-211',
- 'zAsset-Depth Type-212',
- 'zAsset-Is Magic Carpet-Quicktime_MOV-file-213',
- 'zAddAssetAttr-Orig Resource Choice-214',
- 'zAsset-Spatial Type-215',
- 'zAddAssetAttr-Spatial Over Capture Group ID-216',
- 'zAddAssetAttr-Place Annotation Data-217',
- 'zAddAssetAttr-Distance Identity-HEX-218',
- 'zAddAssetAttr-Edited IPTC Attributes-219',
- 'zAddAssetAttr-Title-Comments via Cloud Website-220',
- 'zAddAssetAttr-Accessibility Description-221',
- 'zAddAssetAttr-Photo Stream Tag ID-222',
- 'zAddAssetAttr-Share Type-223',
- 'zAddAssetAttr-Library Scope Asset Contributors To Update-224',
- 'zAsset-Overall Aesthetic Score-225',
- 'zAsset-zENT-226',
- 'zAsset-zOPT-227',
- 'zAsset-Master= zCldMast-zPK-228',
- 'zAsset-Extended Attributes= zExtAttr-zPK-229',
- 'zAsset-Import Session Key-230',
- 'zAsset-Photo Analysis Attributes Key-231',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-232',
- 'zAsset-Computed Attributes Asset Key-233',
- 'zAsset-Promotion Score-234',
- 'zAsset-Iconic Score-235',
- 'zAsset-Media Analysis Attributes Key-236',
- 'zAsset-Media Group UUID-237',
- 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-238',
- 'zAsset.Cloud Collection GUID-239',
- 'zAddAssetAttr-zENT-240',
- 'ZAddAssetAttr-zOPT-241',
- 'zAddAssetAttr-zAsset= zAsset_zPK-242',
- 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-243',
- 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-244',
- 'zAddAssetAttr-Public Global UUID-245',
- 'zAddAssetAttr-Original Assets UUID-246',
- 'zAddAssetAttr-Originating Asset Identifier-247',
- 'zAddAssetAttr.Adjusted Fingerprint-248',
- 'zCldMast-zPK= zAsset-Master-249',
- 'zCldMast-zENT-250',
- 'zCldMast-zOPT-251',
- 'zCldMast-Moment Share Key= zShare-zPK-252',
- 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-253',
- 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-254',
- 'zCldMast-Originating Asset ID-255',
- 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-256',
- 'CMzCldMastMedData-zENT-257',
- 'CMzCldMastMedData-CldMast= zCldMast-zPK-258',
- 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-259',
- 'AAAzCldMastMedData-zENT-260',
- 'AAAzCldMastMedData-CldMast key-261',
- 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-262',
- 'zExtAttr-zPK= zAsset-zExtendedAttributes-263',
- 'zExtAttr-zENT-264',
- 'zExtAttr-zOPT-265',
- 'zExtAttr-Asset Key-266',
- 'zIntResou-zPK-267',
- 'zIntResou-zENT-268',
- 'zIntResou-zOPT-269',
- 'zIntResou-Asset= zAsset_zPK-270',
- 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-271',
- 'zMedAnlyAstAttr-zEnt-272',
- 'zMedAnlyAstAttr-zOpt-273',
- 'zMedAnlyAstAttr-Asset= zAsset-zPK-274')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
+ row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
+ row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
+ row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
+ row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
+ row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
+ row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
+ row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
+ row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
+ row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
+ row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
+ row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
+ row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
+ row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
+ row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
+ row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
+ row[268], row[269], row[270], row[271], row[272], row[273], row[274]))
- tsvname = 'Ph50.1-Asset_IntResou-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
+ data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'),
+ 'zAsset-zPK-1',
+ 'zAddAssetAttr-zPK-2',
+ 'zAsset-UUID = store.cloudphotodb-3',
+ 'zAddAssetAttr-Master Fingerprint-4',
+ 'zAddAssetAttr.Adjusted Fingerprint-5',
+ 'zIntResou-Fingerprint-6',
+ 'zIntResou-Local Availability-4QueryStart-7',
+ 'zIntResou-Remote Availability-4QueryStart-8',
+ 'zIntResou-Resource Type-4QueryStart-9',
+ 'zIntResou-Datastore Sub-Type-4QueryStart-10',
+ 'zIntResou-Recipe ID-4QueryStart-11',
+ 'zAsset Complete-12',
+ 'zAsset-Bundle Scope-13',
+ 'zAsset-Syndication State-14',
+ 'zAsset-Cloud is My Asset-15',
+ 'zAsset-Cloud is deletable-Asset-16',
+ 'zAsset-Cloud_Local_State-17',
+ 'zAsset-Visibility State-18',
+ 'zExtAttr-Camera Make-19',
+ 'zExtAttr-Camera Model-20',
+ 'zExtAttr-Lens Model-21',
+ 'zExtAttr-Flash Fired-22',
+ 'zExtAttr-Focal Lenght-23',
+ 'zExtAttr-Focal Length in 35MM-24',
+ 'zExtAttr-Digital Zoom Ratio-25',
+ 'zAsset-Derived Camera Capture Device-26',
+ 'zAddAssetAttr-Camera Captured Device-27',
+ 'zAddAssetAttr-Imported by-28',
+ 'zCldMast-Imported By-29',
+ 'zAddAssetAttr.Imported by Bundle Identifier-30',
+ 'zAddAssetAttr-Imported By Display Name-31',
+ 'zCldMast-Imported by Bundle ID-32',
+ 'zCldMast-Imported by Display Name-33',
+ 'zAsset-Saved Asset Type-34',
+ 'zAsset-Directory-Path-35',
+ 'zAsset-Filename-36',
+ 'zAddAssetAttr- Original Filename-37',
+ 'zCldMast- Original Filename-38',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-39',
+ 'zAsset-Active Library Scope Participation State-40',
+ 'zAsset-Library Scope Share State- StillTesting-41',
+ ('zAsset-Added Date-42', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-43', 'datetime'),
+ ('zAddAssetAttr-Date Created Source-44', 'datetime'),
+ ('zAsset-Date Created-45', 'datetime'),
+ ('zCldMast-Creation Date-46', 'datetime'),
+ ('zIntResou-CldMst Date Created-47', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-48',
+ 'zAddAssetAttr-Time Zone Offset-49',
+ 'zAddAssetAttr-Inferred Time Zone Offset-50',
+ 'zAddAssetAttr-EXIF-String-51',
+ ('zAsset-Modification Date-52', 'datetime'),
+ ('zAsset-Last Shared Date-53', 'datetime'),
+ 'zCldMast-Cloud Local State-54',
+ ('zCldMast-Import Date-55', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-56', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-57',
+ ('zAddAssetAttr-Alt Import Image Date-58', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-59',
+ ('zAsset-Cloud Batch Publish Date-60', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-61', 'datetime'),
+ 'zAsset-Cloud Download Requests-62',
+ 'zAsset-Cloud Batch ID-63',
+ 'zAddAssetAttr-Upload Attempts-64',
+ 'zAsset-Latitude-65',
+ 'zExtAttr-Latitude-66',
+ 'zAsset-Longitude-67',
+ 'zExtAttr-Longitude-68',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-69',
+ 'zAddAssetAttr-Location Hash-70',
+ 'zAddAssetAttr-Shifted Location Valid-71',
+ 'zAddAssetAttr-Shifted Location Data-72',
+ 'zAddAssetAttr-Reverse Location Is Valid-73',
+ 'zAddAssetAttr-Reverse Location Data-74',
+ 'AAAzCldMastMedData-zOPT-75',
+ 'zAddAssetAttr-Media Metadata Type-76',
+ 'AAAzCldMastMedData-Data-77',
+ 'CldMasterzCldMastMedData-zOPT-78',
+ 'zCldMast-Media Metadata Type-79',
+ 'CMzCldMastMedData-Data-80',
+ 'zAsset-Search Index Rebuild State-81',
+ 'zAddAssetAttr-Syndication History-82',
+ 'zMedAnlyAstAttr-Syndication Processing Version-83',
+ 'zMedAnlyAstAttr-Syndication Processing Value-84',
+ 'zAsset-Orientation-85',
+ 'zAddAssetAttr-Original Orientation-86',
+ 'zAsset-Kind-87',
+ 'zAsset-Kind-Sub-Type-88',
+ 'zAddAssetAttr-Cloud Kind Sub Type-89',
+ 'zAsset-Playback Style-90',
+ 'zAsset-Playback Variation-91',
+ 'zAsset-Video Duration-92',
+ 'zExtAttr-Duration-93',
+ 'zAsset-Video CP Duration-94',
+ 'zAddAssetAttr-Video CP Duration Time Scale-95',
+ 'zAsset-Video CP Visibility State-96',
+ 'zAddAssetAttr-Video CP Display Value-97',
+ 'zAddAssetAttr-Video CP Display Time Scale-98',
+ 'zIntResou-Datastore Class ID-99',
+ 'zAsset-Cloud Placeholder Kind-100',
+ 'zIntResou-Local Availability-101',
+ 'zIntResou-Local Availability Target-102',
+ 'zIntResou-Cloud Local State-103',
+ 'zIntResou-Remote Availability-104',
+ 'zIntResou-Remote Availability Target-105',
+ 'zIntResou-Transient Cloud Master-106',
+ 'zIntResou-Side Car Index-107',
+ 'zIntResou- File ID-108',
+ 'zIntResou-Version-109',
+ 'zAddAssetAttr- Original-File-Size-110',
+ 'zIntResou-Resource Type-111',
+ 'zIntResou-Datastore Sub-Type-112',
+ 'zIntResou-Cloud Source Type-113',
+ 'zIntResou-Data Length-114',
+ 'zIntResou-Recipe ID-115',
+ ('zIntResou-Cloud Last Prefetch Date-116', 'datetime'),
+ 'zIntResou-Cloud Prefetch Count-117',
+ ('zIntResou- Cloud-Last-OnDemand Download-Date-118', 'datetime'),
+ 'zIntResou-UniformTypeID_UTI_Conformance_Hint-119',
+ 'zIntResou-Compact-UTI-120',
+ 'zAsset-Uniform Type ID-121',
+ 'zAsset-Original Color Space-122',
+ 'zCldMast-Uniform_Type_ID-123',
+ 'zCldMast-Full Size JPEG Source-124',
+ 'zAsset-HDR Gain-125',
+ 'zAsset-zHDR_Type-126',
+ 'zExtAttr-Codec-127',
+ 'zIntResou-Codec Four Char Code Name-128',
+ 'zCldMast-Codec Name-129',
+ 'zCldMast-Video Frame Rate-130',
+ 'zCldMast-Placeholder State-131',
+ 'zAsset-Depth_Type-132',
+ 'zAsset-Avalanche UUID-133',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-134',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-135',
+ 'zAddAssetAttr-Cloud Recovery State-136',
+ 'zAddAssetAttr-Cloud State Recovery Attempts Count-137',
+ 'zAsset-Deferred Processing Needed-138',
+ 'zAsset-Video Deferred Processing Needed-139',
+ 'zAddAssetAttr-Deferred Photo Identifier-140',
+ 'zAddAssetAttr-Deferred Processing Candidate Options-141',
+ 'zAsset-Has Adjustments-Camera-Effects-Filters-142',
+ ('zAsset-Adjustment Timestamp-143', 'datetime'),
+ 'zAddAssetAttr-Editor Bundle ID-144',
+ 'zAddAssetAttr-Montage-145',
+ 'zAsset-Favorite-146',
+ 'zAsset-Hidden-147',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-148',
+ ('zAsset-Trashed Date-149', 'datetime'),
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-150',
+ 'zAsset-Delete-Reason-151',
+ 'zIntResou-Trash State-152',
+ ('zIntResou-Trashed Date-153', 'datetime'),
+ 'zAsset-Cloud Delete State-154',
+ 'zIntResou-Cloud Delete State-155',
+ 'zAddAssetAttr-PTP Trashed State-156',
+ 'zIntResou-PTP Trashed State-157',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-158',
+ ('zMedAnlyAstAttr-Media Analysis Timestamp-159', 'datetime'),
+ ('zAsset-Analysis State Modification Date-160', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-161',
+ 'zAddAssetAttr- View Count-162',
+ 'zAddAssetAttr- Pending Play Count-163',
+ 'zAddAssetAttr- Play Count-164',
+ 'zAddAssetAttr- Pending Share Count-165',
+ 'zAddAssetAttr- Share Count-166',
+ 'zAddAssetAttr-Allowed for Analysis-167',
+ 'zAddAssetAttr-Scene Analysis Version-168',
+ 'zAddAssetAttr-Scene Analysis is From Preview-169',
+ ('zAddAssetAttr-Scene Analysis Timestamp-170', 'datetime'),
+ 'zAsset-Duplication Asset Visibility State-171',
+ 'zAddAssetAttr-Destination Asset Copy State-172',
+ 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-173',
+ 'zAddAssetAttr-Source Asset for Duplication Scope ID-174',
+ 'zCldMast-Source Master For Duplication Scope ID-175',
+ 'zAddAssetAttr-Source Asset For Duplication ID-176',
+ 'zCldMast-Source Master for Duplication ID-177',
+ 'zAddAssetAttr-Variation Suggestions States-178',
+ 'zAsset-High Frame Rate State-179',
+ 'zAsset-Video Key Frame Time Scale-180',
+ 'zAsset-Video Key Frame Value-181',
+ 'zExtAttr-ISO-182',
+ 'zExtAttr-Metering Mode-183',
+ 'zExtAttr-Sample Rate-184',
+ 'zExtAttr-Track Format-185',
+ 'zExtAttr-White Balance-186',
+ 'zExtAttr-Aperture-187',
+ 'zExtAttr-BitRate-188',
+ 'zExtAttr-Exposure Bias-189',
+ 'zExtAttr-Frames Per Second-190',
+ 'zExtAttr-Shutter Speed-191',
+ 'zExtAttr-Slush Scene Bias-192',
+ 'zExtAttr-Slush Version-193',
+ 'zExtAttr-Slush Preset-194',
+ 'zExtAttr-Slush Warm Bias-195',
+ 'zAsset-Height-196',
+ 'zAddAssetAttr-Original Height-197',
+ 'zIntResou-UnOriented Height-198',
+ 'zAsset-Width-199',
+ 'zAddAssetAttr-Original Width-200',
+ 'zIntResou-UnOriented Width-201',
+ 'zAsset-Thumbnail Index-202',
+ 'zAddAssetAttr-Embedded Thumbnail Height-203',
+ 'zAddAssetAttr-Embedded Thumbnail Length-204',
+ 'zAddAssetAttr-Embedded Thumbnail Offset-205',
+ 'zAddAssetAttr-Embedded Thumbnail Width-206',
+ 'zAsset-Packed Acceptable Crop Rect-207',
+ 'zAsset-Packed Badge Attributes-208',
+ 'zAsset-Packed Preferred Crop Rect-209',
+ 'zAsset-Curation Score-210',
+ 'zAsset-Camera Processing Adjustment State-211',
+ 'zAsset-Depth Type-212',
+ 'zAsset-Is Magic Carpet-Quicktime_MOV-file-213',
+ 'zAddAssetAttr-Orig Resource Choice-214',
+ 'zAsset-Spatial Type-215',
+ 'zAddAssetAttr-Spatial Over Capture Group ID-216',
+ 'zAddAssetAttr-Place Annotation Data-217',
+ 'zAddAssetAttr-Distance Identity-HEX-218',
+ 'zAddAssetAttr-Edited IPTC Attributes-219',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-220',
+ 'zAddAssetAttr-Accessibility Description-221',
+ 'zAddAssetAttr-Photo Stream Tag ID-222',
+ 'zAddAssetAttr-Share Type-223',
+ 'zAddAssetAttr-Library Scope Asset Contributors To Update-224',
+ 'zAsset-Overall Aesthetic Score-225',
+ 'zAsset-zENT-226',
+ 'zAsset-zOPT-227',
+ 'zAsset-Master= zCldMast-zPK-228',
+ 'zAsset-Extended Attributes= zExtAttr-zPK-229',
+ 'zAsset-Import Session Key-230',
+ 'zAsset-Photo Analysis Attributes Key-231',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-232',
+ 'zAsset-Computed Attributes Asset Key-233',
+ 'zAsset-Promotion Score-234',
+ 'zAsset-Iconic Score-235',
+ 'zAsset-Media Analysis Attributes Key-236',
+ 'zAsset-Media Group UUID-237',
+ 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-238',
+ 'zAsset.Cloud Collection GUID-239',
+ 'zAddAssetAttr-zENT-240',
+ 'ZAddAssetAttr-zOPT-241',
+ 'zAddAssetAttr-zAsset= zAsset_zPK-242',
+ 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-243',
+ 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-244',
+ 'zAddAssetAttr-Public Global UUID-245',
+ 'zAddAssetAttr-Original Assets UUID-246',
+ 'zAddAssetAttr-Originating Asset Identifier-247',
+ 'zAddAssetAttr.Adjusted Fingerprint-248',
+ 'zCldMast-zPK= zAsset-Master-249',
+ 'zCldMast-zENT-250',
+ 'zCldMast-zOPT-251',
+ 'zCldMast-Moment Share Key= zShare-zPK-252',
+ 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-253',
+ 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-254',
+ 'zCldMast-Originating Asset ID-255',
+ 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-256',
+ 'CMzCldMastMedData-zENT-257',
+ 'CMzCldMastMedData-CldMast= zCldMast-zPK-258',
+ 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-259',
+ 'AAAzCldMastMedData-zENT-260',
+ 'AAAzCldMastMedData-CldMast key-261',
+ 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-262',
+ 'zExtAttr-zPK= zAsset-zExtendedAttributes-263',
+ 'zExtAttr-zENT-264',
+ 'zExtAttr-zOPT-265',
+ 'zExtAttr-Asset Key-266',
+ 'zIntResou-zPK-267',
+ 'zIntResou-zENT-268',
+ 'zIntResou-zOPT-269',
+ 'zIntResou-Asset= zAsset_zPK-270',
+ 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-271',
+ 'zMedAnlyAstAttr-zEnt-272',
+ 'zMedAnlyAstAttr-zOpt-273',
+ 'zMedAnlyAstAttr-Asset= zAsset-zPK-274')
+ data_list = get_sqlite_db_records(source_path, query)
- tlactivity = 'Ph50.1-Asset_IntResou-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No Internal Resource data available for iOS 17 PhotoData-Photos.sqlite')
-
- db.close()
- return
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found, "Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart',
zAsset.Z_PK AS 'zAsset-zPK',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18',
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash',
zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18',
- zCompSyncAttr.ZCLOUDCOMPUTESTATEADJUSTMENTFINGERPRINT AS 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18',
- zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-iOS18',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash',
+ zCompSyncAttr.ZCLOUDCOMPUTESTATEADJUSTMENTFINGERPRINT AS 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint',
+ zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash',
CASE zIntResou.ZLOCALAVAILABILITY
WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)'
WHEN 1 THEN '1-IR_Asset_Avail_Locally-1'
@@ -4703,11 +4632,12 @@ def get_ph50intresouoptimzdataphdapsql(files_found, report_folder, seeker, wrap_
zExtAttr.ZFOCALLENGTH AS 'zExtAttr-Focal Length',
zExtAttr.ZFOCALLENGTHIN35MM AS 'zExtAttr-Focal Length in 35MM',
zExtAttr.ZDIGITALZOOMRATIO AS 'zExtAttr-Digital Zoom Ratio',
- CASE zExtAttr.ZGENERATIVEAITYPE
- WHEN 0 THEN '0-Not_Generative_AI iOS18_Still_Testing-0'
+ CASE zExtAttr.ZGENERATIVEAITYPE
+ WHEN 0 THEN '0-Gen_AI_Type_Not_Detected-0'
+ WHEN 2 THEN '2-CleanUp-SafetyFilter-2'
ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || ''
- END AS 'zExtAttr-Generative_AI_Type-iOS18',
- zExtAttr.ZCREDIT AS 'zExtAttr-Credit-iOS18',
+ END AS 'zExtAttr-Generative_AI_Type',
+ zExtAttr.ZCREDIT AS 'zExtAttr-Credit',
CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE
WHEN 0 THEN '0-Back-Camera-Other-0'
WHEN 1 THEN '1-Front-Camera-1'
@@ -4718,7 +4648,7 @@ def get_ph50intresouoptimzdataphdapsql(files_found, report_folder, seeker, wrap_
WHEN 1 THEN '1-Front-Camera-1'
ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || ''
END AS 'zAddAssetAttr-Camera Captured Device',
- zAsset.ZCAPTURESESSIONIDENTIFIER AS 'zAsset-Capture_Session_Identifier-iOS18',
+ zAsset.ZCAPTURESESSIONIDENTIFIER AS 'zAsset-Capture_Session_Identifier',
CASE zAddAssetAttr.ZIMPORTEDBY
WHEN 0 THEN '0-Cloud-Other-0'
WHEN 1 THEN '1-Native-Back-Camera-1'
@@ -4756,10 +4686,10 @@ def get_ph50intresouoptimzdataphdapsql(files_found, report_folder, seeker, wrap_
zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID',
zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name',
CASE zAsset.ZISRECENTLYSAVED
- WHEN 0 THEN '0-Not_Recently_Saved iOS18_Still_Testing-0'
- WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1'
+ WHEN 0 THEN '0-Not_Recently_Saved-0'
+ WHEN 1 THEN '1-Recently_Saved-1'
ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || ''
- END AS 'zAsset-Is_Recently_Saved-iOS18',
+ END AS 'zAsset-Is_Recently_Saved',
CASE zAsset.ZSAVEDASSETTYPE
WHEN 0 THEN '0-Saved-via-other-source-0'
WHEN 1 THEN '1-StillTesting-1'
@@ -4924,10 +4854,10 @@ def get_ph50intresouoptimzdataphdapsql(files_found, report_folder, seeker, wrap_
WHEN 1 THEN '1-Video-1'
END AS 'zAsset-Kind',
CASE zAsset.ZISDETECTEDSCREENSHOT
- WHEN 0 THEN '0-Not_Detected_Screenshot iOS18_Still_Testing-0'
- WHEN 1 THEN '1-Detected_Screenshot iOS18_Still_Testing-1'
+ WHEN 0 THEN '0-Not_Screenshot-0'
+ WHEN 1 THEN '1-Screenshot-1'
ELSE 'Unknown-New-Value!: ' || zAsset.ZISDETECTEDSCREENSHOT || ''
- END AS 'zAsset-Is_Detected_Screenshot-iOS18',
+ END AS 'zAsset-Is_Detected_Screenshot',
CASE zAsset.ZKINDSUBTYPE
WHEN 0 THEN '0-Still-Photo-0'
WHEN 1 THEN '1-Panorama-1'
@@ -5221,10 +5151,10 @@ def get_ph50intresouoptimzdataphdapsql(files_found, report_folder, seeker, wrap_
zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options',
CASE zAsset.ZADJUSTMENTSSTATE
WHEN 0 THEN '0-No-Adjustments-0'
- WHEN 2 THEN '2-Yes-Adjustments iOS18_needs_update_Decoding-2'
- WHEN 3 THEN '3-Yes-Adjustments iOS18_needs_update_Decoding-3'
+ WHEN 2 THEN '2-Adjusted-PhotosAppEdit-2'
+ WHEN 3 THEN '3-Adjusted-Camera-lens-3'
ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || ''
- END AS 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18',
+ END AS 'zAsset-Adjustments_State',
DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp',
DateTime(zCompSyncAttr.ZCLOUDCOMPUTESTATELASTUPDATEDDATE + 978307200, 'UNIXEPOCH') AS 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18',
zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID',
@@ -5370,11 +5300,6 @@ def get_ph50intresouoptimzdataphdapsql(files_found, report_folder, seeker, wrap_
zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length',
zAddAssetAttr.ZEMBEDDEDTHUMBNAILOFFSET AS 'zAddAssetAttr-Embedded Thumbnail Offset',
zAddAssetAttr.ZEMBEDDEDTHUMBNAILWIDTH AS 'zAddAssetAttr-Embedded Thumbnail Width',
- CASE zAddAssetAttr.ZIMAGEEMBEDDINGVERSION
- WHEN 0 THEN '0-Obs_in_iOS18 still_testing-0'
- WHEN 1 THEN '1-Obs_in_iOS18 still_testing-1'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMAGEEMBEDDINGVERSION || ''
- END AS 'zAddAssetAttr-Image Embedding Version-iOS18',
zAsset.ZPACKEDACCEPTABLECROPRECT AS 'zAsset-Packed Acceptable Crop Rect',
zAsset.ZPACKEDBADGEATTRIBUTES AS 'zAsset-Packed Badge Attributes',
zAsset.ZPACKEDPREFERREDCROPRECT AS 'zAsset-Packed Preferred Crop Rect',
@@ -5408,19 +5333,7 @@ def get_ph50intresouoptimzdataphdapsql(files_found, report_folder, seeker, wrap_
zMedAnlyAstAttr.ZMEDIAANALYSISIMAGEVERSION AS 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18',
zMedAnlyAstAttr.ZIMAGECAPTIONVERSION AS 'zMedAnlyAstAttr-Image_Caption_Version-iOS18',
zMedAnlyAstAttr.ZVIDEOCAPTIONVERSION AS 'zMedAnlyAstAttr-Video_Caption_Version-iOS18',
- zMedAnlyAstAttr.ZVALOCATIONANALYSISVERSION AS 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18',
- zGenAsstDesc.ZASSET AS 'zGenAsstDesc-zAsset= zAsset-zPK-iOS18',
- zAsset.ZGENERATEDASSETDESCRIPTION AS 'zAsset-Generated_Asset_Description= zGenAsstDesc-zPK-iOS18',
- zGenAsstDesc.Z_PK AS 'zGenAsstDesc-zPK= zAsset-GenAsstDesc-iOS18',
- zGenAsstDesc.Z_ENT AS 'zGenAsstDesc-zENT-iOS18',
- zGenAsstDesc.Z_OPT AS 'zGenAsstDesc-zOPT-iOS18',
- DateTime(zGenAsstDesc.ZANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zGenAsstDesc-Analysis_Timestamp-iOS18',
- CASE zGenAsstDesc.ZANALYSISSOURCETYPE
- WHEN 0 THEN '0-NotYetObs iOS18_Still_Testing-0'
- ELSE 'Unknown-New-Value!: ' || zGenAsstDesc.ZANALYSISSOURCETYPE || ''
- END AS 'zGenAsstDesc-Analysis_Source_Type-iOS18',
- zGenAsstDesc.ZANALYSISVERSION AS 'zGenAsstDesc-Analysis Version-iOS18',
- zGenAsstDesc.ZDESCRIPTIONTEXT AS 'zGenAsstDesc-Description_Text-iOS18',
+ zMedAnlyAstAttr.ZVALOCATIONANALYSISVERSION AS 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18',
zAsset.Z_ENT AS 'zAsset-zENT',
zAsset.Z_OPT AS 'zAsset-zOPT',
zAsset.ZMASTER AS 'zAsset-Master= zCldMast-zPK',
@@ -5486,415 +5399,378 @@ def get_ph50intresouoptimzdataphdapsql(files_found, report_folder, seeker, wrap_
LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK
LEFT JOIN ZCOMPUTESYNCATTRIBUTES zCompSyncAttr ON zCompSyncAttr.Z_PK = zAsset.ZCOMPUTESYNCATTRIBUTES
- LEFT JOIN ZGENERATEDASSETDESCRIPTION zGenAsstDesc ON zGenAsstDesc.Z_PK = zAsset.ZGENERATEDASSETDESCRIPTION
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
- row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
- row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
- row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
- row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
- row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
- row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
- row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
- row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
- row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
- row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
- row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
- row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
- row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
- row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
- row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
- row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
- row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
- row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
- row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
- row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307],
- row[308], row[309], row[310], row[311], row[312]))
-
- counter += 1
-
- description = 'Parses iOS 18 asset records from PhotoData-Photos.sqlite ZINTERNALRESOURCE' \
- ' and other tables. This and other related parsers should provide data for investigative' \
- ' analysis of assets being stored locally on the device verses assets being stored in' \
- ' iCloud Photos as the result of optimization. This is very large query and script,' \
- ' I recommend opening the TSV generated report with Zimmermans Tools' \
- ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \
- ' and filter the results.'
- report = ArtifactHtmlReport('Ph50.1-Asset_IntResou-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph50.1-Asset_IntResou-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-4QueryStart-0',
- 'zAsset-zPK-1',
- 'zAddAssetAttr-zPK-2',
- 'zAsset-UUID = store.cloudphotodb-3',
- 'zAddAssetAttr-Original Stable Hash-iOS18-4',
- 'zIntResou-Fingerprint-5',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-6',
- 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18-7',
- 'zIntResou-Stable Hash-iOS18-8',
- 'zIntResou-Local Availability-4QueryStart-9',
- 'zIntResou-Remote Availability-4QueryStart-10',
- 'zIntResou-Resource Type-4QueryStart-11',
- 'zIntResou-Datastore Sub-Type-4QueryStart-12',
- 'zIntResou-Recipe ID-4QueryStart-13',
- 'zAsset Complete-14',
- 'zAsset-Bundle Scope-15',
- 'zAsset-Syndication State-16',
- 'zAsset-Cloud is My Asset-17',
- 'zAsset-Cloud is deletable-Asset-18',
- 'zAsset-Cloud_Local_State-19',
- 'zAsset-Visibility State-20',
- 'zExtAttr-Camera Make-21',
- 'zExtAttr-Camera Model-22',
- 'zExtAttr-Lens Model-23',
- 'zExtAttr-Flash Fired-24',
- 'zExtAttr-Focal Length-25',
- 'zExtAttr-Focal Length in 35MM-26',
- 'zExtAttr-Digital Zoom Ratio-27',
- 'zExtAttr-Generative_AI_Type-iOS18-28',
- 'zExtAttr-Credit-iOS18-29',
- 'zAsset-Derived Camera Capture Device-30',
- 'zAddAssetAttr-Camera Captured Device-31',
- 'zAsset-Capture_Session_Identifier-iOS18-32',
- 'zAddAssetAttr-Imported by-33',
- 'zCldMast-Imported By-34',
- 'zAddAssetAttr.Imported by Bundle Identifier-35',
- 'zAddAssetAttr-Imported By Display Name-36',
- 'zCldMast-Imported by Bundle ID-37',
- 'zCldMast-Imported by Display Name-38',
- 'zAsset-Is_Recently_Saved-iOS18-39',
- 'zAsset-Saved Asset Type-40',
- 'zAsset-Directory-Path-41',
- 'zAsset-Filename-42',
- 'zAddAssetAttr- Original Filename-43',
- 'zCldMast- Original Filename-44',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-45',
- 'zAsset-Active Library Scope Participation State-46',
- 'zAsset-Library Scope Share State- StillTesting-47',
- 'zAsset-Added Date-48',
- 'zAsset- SortToken -CameraRoll-49',
- 'zAddAssetAttr-Date Created Source-50',
- 'zAsset-Date Created-51',
- 'zCldMast-Creation Date-52',
- 'zIntResou-CldMst Date Created-53',
- 'zAddAssetAttr-Time Zone Name-54',
- 'zAddAssetAttr-Time Zone Offset-55',
- 'zAddAssetAttr-Inferred Time Zone Offset-56',
- 'zAddAssetAttr-EXIF-String-57',
- 'zAsset-Modification Date-58',
- 'zAsset-Last Shared Date-59',
- 'zCldMast-Cloud Local State-60',
- 'zCldMast-Import Date-61',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-62',
- 'zAddAssetAttr-Import Session ID-63',
- 'zAddAssetAttr-Alt Import Image Date-64',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-65',
- 'zAsset-Cloud Batch Publish Date-66',
- 'zAsset-Cloud Server Publish Date-67',
- 'zAsset-Cloud Download Requests-68',
- 'zAsset-Cloud Batch ID-69',
- 'zAddAssetAttr-Upload Attempts-70',
- 'zAsset-Latitude-71',
- 'zExtAttr-Latitude-72',
- 'zAsset-Longitude-73',
- 'zExtAttr-Longitude-74',
- 'zAddAssetAttr-GPS Horizontal Accuracy-75',
- 'zAddAssetAttr-Location Hash-76',
- 'zAddAssetAttr-Shifted Location Valid-77',
- 'zAddAssetAttr-Shifted Location Data-78',
- 'zAddAssetAttr-Reverse Location Is Valid-79',
- 'zAddAssetAttr-Reverse Location Data-80',
- 'AAAzCldMastMedData-zOPT-81',
- 'zAddAssetAttr-Media Metadata Type-82',
- 'AAAzCldMastMedData-Data-83',
- 'CldMasterzCldMastMedData-zOPT-84',
- 'zCldMast-Media Metadata Type-85',
- 'CMzCldMastMedData-Data-86',
- 'zAsset-Search Index Rebuild State-87',
- 'zAddAssetAttr-Syndication History-88',
- 'zMedAnlyAstAttr-Syndication Processing Version-89',
- 'zMedAnlyAstAttr-Syndication Processing Value-90',
- 'zAsset-Orientation-91',
- 'zAddAssetAttr-Original Orientation-92',
- 'zAsset-Kind-93',
- 'zAsset-Is_Detected_Screenshot-iOS18-94',
- 'zAsset-Kind-Sub-Type-95',
- 'zAddAssetAttr-Cloud Kind Sub Type-96',
- 'zAsset-Playback Style-97',
- 'zAsset-Playback Variation-98',
- 'zAddAssetAttr-View_Presentation-iOS18-99',
- 'zAsset-Video Duration-100',
- 'zExtAttr-Duration-101',
- 'zAsset-Video CP Duration-102',
- 'zAddAssetAttr-Video CP Duration Time Scale-103',
- 'zAsset-Video CP Visibility State-104',
- 'zAddAssetAttr-Video CP Display Value-105',
- 'zAddAssetAttr-Video CP Display Time Scale-106',
- 'zIntResou-Datastore Class ID-107',
- 'zAsset-Cloud Placeholder Kind-108',
- 'zIntResou-Local Availability-109',
- 'zIntResou-Local Availability Target-110',
- 'zIntResou-Cloud Local State-111',
- 'zIntResou-Remote Availability-112',
- 'zIntResou-Remote Availability Target-113',
- 'zIntResou-Transient Cloud Master-114',
- 'zIntResou-Side Car Index-115',
- 'zIntResou- File ID-116',
- 'zIntResou-Version-117',
- 'zAddAssetAttr- Original-File-Size-118',
- 'zIntResou-Resource Type-119',
- 'zIntResou-Datastore Sub-Type-120',
- 'zIntResou-Cloud Source Type-121',
- 'zIntResou-Data Length-122',
- 'zIntResou-Recipe ID-123',
- 'zIntResou-Cloud Last Prefetch Date-124',
- 'zIntResou-Cloud Prefetch Count-125',
- 'zIntResou- Cloud-Last-OnDemand Download-Date-126',
- 'zIntResou-UniformTypeID_UTI_Conformance_Hint-127',
- 'zIntResou-Compact-UTI-128',
- 'zAsset-Uniform Type ID-129',
- 'zAsset-Original Color Space-130',
- 'zCldMast-Uniform_Type_ID-131',
- 'zCldMast-Full Size JPEG Source-132',
- 'zAsset-HDR Gain-133',
- 'zAsset-zHDR_Type-134',
- 'zExtAttr-Codec-135',
- 'zIntResou-Codec Four Char Code Name-136',
- 'zCldMast-Codec Name-137',
- 'zCldMast-Video Frame Rate-138',
- 'zCldMast-Placeholder State-139',
- 'zAsset-Depth_Type-140',
- 'zAsset-Avalanche UUID-141',
- 'zAsset-Avalanche_Kind-iOS18-142',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-143',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-144',
- 'zAddAssetAttr-Cloud Recovery State-145',
- 'zAddAssetAttr-Cloud State Recovery Attempts Count-146',
- 'zAsset-Deferred Processing Needed-147',
- 'zAsset-Video Deferred Processing Needed-148',
- 'zAddAssetAttr-Deferred Photo Identifier-149',
- 'zAddAssetAttr-Deferred Processing Candidate Options-150',
- 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18-151',
- 'zAsset-Adjustment Timestamp-152',
- 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18-153',
- 'zAddAssetAttr-Editor Bundle ID-154',
- 'zAddAssetAttr-Montage-155',
- 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18-156',
- 'zAsset-Favorite-157',
- 'zAsset-Hidden-158',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-159',
- 'zAsset-Trashed Date-160',
- 'zAsset-Trashed by Participant= zSharePartic_zPK-161',
- 'zAsset-Delete-Reason-162',
- 'zIntResou-Trash State-163',
- 'zIntResou-Trashed Date-164',
- 'zAsset-Cloud Delete State-165',
- 'zIntResou-Cloud Delete State-166',
- 'zAddAssetAttr-PTP Trashed State-167',
- 'zIntResou-PTP Trashed State-168',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-169',
- 'zMedAnlyAstAttr-Media Analysis Timestamp-170',
- 'zAsset-Analysis State Modification Date-171',
- 'zAddAssetAttr- Pending View Count-172',
- 'zAddAssetAttr- View Count-173',
- 'zAddAssetAttr- Pending Play Count-174',
- 'zAddAssetAttr- Play Count-175',
- 'zAddAssetAttr- Pending Share Count-176',
- 'zAddAssetAttr- Share Count-177',
- 'zAddAssetAttr-Allowed for Analysis-178',
- 'zAddAssetAttr-Scene Analysis Version-179',
- 'zAddAssetAttr-Scene Analysis is From Preview-180',
- 'zAddAssetAttr-Scene Analysis Timestamp-181',
- 'zAsset-Duplication Asset Visibility State-182',
- 'zAddAssetAttr-Destination Asset Copy State-183',
- 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-184',
- 'zAddAssetAttr-Source Asset for Duplication Scope ID-185',
- 'zCldMast-Source Master For Duplication Scope ID-186',
- 'zAddAssetAttr-Source Asset For Duplication ID-187',
- 'zCldMast-Source Master for Duplication ID-188',
- 'zAddAssetAttr-Variation Suggestions States-189',
- 'zAsset-High Frame Rate State-190',
- 'zAsset-Video Key Frame Time Scale-191',
- 'zAsset-Video Key Frame Value-192',
- 'zAsset-Current_Sleet_Cast-iOS18-193',
- 'zAddAssetAttr.Sleet_Is_Reversible-iOS18-194',
- 'zExtAttr-Sleet_Rendering_Version-iOS18-195',
- 'zExtAttr-Sleet_Intensity-iOS18-196',
- 'zExtAttr-Sleet_Tone_Bias-iOS18-197',
- 'zExtAttr-Sleet_Color_Bias-iOS18-198',
- 'zExtAttr-Sleet_Cast-iOS18-199',
- 'zExtAttr-ISO-200',
- 'zExtAttr-Metering Mode-201',
- 'zExtAttr-Sample Rate-202',
- 'zExtAttr-Track Format-203',
- 'zExtAttr-White Balance-204',
- 'zExtAttr-Aperture-205',
- 'zExtAttr-BitRate-206',
- 'zExtAttr-Exposure Bias-207',
- 'zExtAttr-Frames Per Second-208',
- 'zExtAttr-Shutter Speed-209',
- 'zExtAttr-Slush Scene Bias-210',
- 'zExtAttr-Slush Version-211',
- 'zExtAttr-Slush Preset-212',
- 'zExtAttr-Slush Warm Bias-213',
- 'zAsset-Height-214',
- 'zAddAssetAttr-Original Height-215',
- 'zIntResou-UnOriented Height-216',
- 'zAsset-Width-217',
- 'zAddAssetAttr-Original Width-218',
- 'zIntResou-UnOriented Width-219',
- 'zAsset-Thumbnail Index-220',
- 'zAddAssetAttr-Embedded Thumbnail Height-221',
- 'zAddAssetAttr-Embedded Thumbnail Length-222',
- 'zAddAssetAttr-Embedded Thumbnail Offset-223',
- 'zAddAssetAttr-Embedded Thumbnail Width-224',
- 'zAddAssetAttr-Image Embedding Version-iOS18-225',
- 'zAsset-Packed Acceptable Crop Rect-226',
- 'zAsset-Packed Badge Attributes-227',
- 'zAsset-Packed Preferred Crop Rect-228',
- 'zAsset-Curation Score-229',
- 'zAsset-Camera Processing Adjustment State-230',
- 'zAsset-Depth Type-231',
- 'zAsset-Is Magic Carpet-Quicktime_MOV-file-232',
- 'zAddAssetAttr-Orig Resource Choice-233',
- 'zAsset-Spatial Type-234',
- 'zAddAssetAttr-Spatial Over Capture Group ID-235',
- 'zAddAssetAttr-Place Annotation Data-236',
- 'zAddAssetAttr-Distance Identity-HEX-237',
- 'zAddAssetAttr-Edited IPTC Attributes-238',
- 'zAddAssetAttr-Title-Comments via Cloud Website-239',
- 'zAddAssetAttr-Accessibility Description-240',
- 'zAddAssetAttr-Photo Stream Tag ID-241',
- 'zAddAssetAttr-Share Type-242',
- 'zAddAssetAttr-Library Scope Asset Contributors To Update-243',
- 'zAsset-Overall Aesthetic Score-244',
- 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18-245',
- 'zMedAnlyAstAttr-Image_Caption_Version-iOS18-246',
- 'zMedAnlyAstAttr-Video_Caption_Version-iOS18-247',
- 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18-248',
- 'zGenAsstDesc-zAsset= zAsset-zPK-iOS18-249',
- 'zAsset-Generated_Asset_Description= zGenAsstDesc-zPK-iOS18-250',
- 'zGenAsstDesc-zPK= zAsset-GenAsstDesc-iOS18-251',
- 'zGenAsstDesc-zENT-iOS18-252',
- 'zGenAsstDesc-zOPT-iOS18-253',
- 'zGenAsstDesc-Analysis_Timestamp-iOS18-254',
- 'zGenAsstDesc-Analysis_Source_Type-iOS18-255',
- 'zGenAsstDesc-Analysis Version-iOS18-256',
- 'zGenAsstDesc-Description_Text-iOS18-257',
- 'zAsset-zENT-258',
- 'zAsset-zOPT-259',
- 'zAsset-Master= zCldMast-zPK-260',
- 'zAsset-Extended Attributes= zExtAttr-zPK-261',
- 'zAsset-Import Session Key-262',
- 'zAsset-Photo Analysis Attributes Key-263',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-264',
- 'zAsset-Computed Attributes Asset Key-265',
- 'zAsset-Promotion Score-266',
- 'zAsset-Iconic Score-267',
- 'zAsset-Media Analysis Attributes Key-268',
- 'zAsset-Media Group UUID-269',
- 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-270',
- 'zAsset.Cloud Collection GUID-271',
- 'zAddAssetAttr-zENT-272',
- 'ZAddAssetAttr-zOPT-273',
- 'zAddAssetAttr-zAsset= zAsset_zPK-274',
- 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-275',
- 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-276',
- 'zAddAssetAttr-Public Global UUID-277',
- 'zAddAssetAttr-Original Assets UUID-278',
- 'zAddAssetAttr-Originating Asset Identifier-279',
- 'zCldMast-zPK= zAsset-Master-280',
- 'zCldMast-zENT-281',
- 'zCldMast-zOPT-282',
- 'zCldMast-Moment Share Key= zShare-zPK-283',
- 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-284',
- 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-285',
- 'zCldMast-Originating Asset ID-286',
- 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-287',
- 'CMzCldMastMedData-zENT-288',
- 'CMzCldMastMedData-CldMast= zCldMast-zPK-289',
- 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-290',
- 'AAAzCldMastMedData-zENT-291',
- 'AAAzCldMastMedData-CldMast key-292',
- 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-293',
- 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-iOS18-294',
- 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18-295',
- 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18-296',
- 'zCompSyncAttr-zENT-iOS18-297',
- 'zCompSyncAttr-zOPT-iOS18-298',
- 'zCompSyncAttr-Local_Analysis_Stage-iOS18-299',
- 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18-300',
- 'zExtAttr-zPK= zAsset-zExtendedAttributes-301',
- 'zExtAttr-zENT-302',
- 'zExtAttr-zOPT-303',
- 'zExtAttr-Asset Key-304',
- 'zIntResou-zPK-305',
- 'zIntResou-zENT-306',
- 'zIntResou-zOPT-307',
- 'zIntResou-Asset= zAsset_zPK-308',
- 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-309',
- 'zMedAnlyAstAttr-zEnt-310',
- 'zMedAnlyAstAttr-zOpt-311',
- 'zMedAnlyAstAttr-Asset= zAsset-zPK-312')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph50.1-Asset_IntResou-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
+ '''
- tlactivity = 'Ph50.1-Asset_IntResou-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No Internal Resource data available for iOS 18 PhotoData-Photos.sqlite')
-
- db.close()
- return
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
+ row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
+ row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
+ row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
+ row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
+ row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
+ row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
+ row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
+ row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
+ row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
+ row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
+ row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
+ row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
+ row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
+ row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
+ row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
+ row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
+ row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
+ row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
+ row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
+ row[300], row[301], row[302]))
+ data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'),
+ 'zAsset-zPK-1',
+ 'zAddAssetAttr-zPK-2',
+ 'zAsset-UUID = store.cloudphotodb-3',
+ 'zAddAssetAttr-Original Stable Hash-iOS18-4',
+ 'zIntResou-Fingerprint-5',
+ 'zAddAssetAttr.Adjusted Stable Hash-iOS18-6',
+ 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18-7',
+ 'zIntResou-Stable Hash-iOS18-8',
+ 'zIntResou-Local Availability-4QueryStart-9',
+ 'zIntResou-Remote Availability-4QueryStart-10',
+ 'zIntResou-Resource Type-4QueryStart-11',
+ 'zIntResou-Datastore Sub-Type-4QueryStart-12',
+ 'zIntResou-Recipe ID-4QueryStart-13',
+ 'zAsset Complete-14',
+ 'zAsset-Bundle Scope-15',
+ 'zAsset-Syndication State-16',
+ 'zAsset-Cloud is My Asset-17',
+ 'zAsset-Cloud is deletable-Asset-18',
+ 'zAsset-Cloud_Local_State-19',
+ 'zAsset-Visibility State-20',
+ 'zExtAttr-Camera Make-21',
+ 'zExtAttr-Camera Model-22',
+ 'zExtAttr-Lens Model-23',
+ 'zExtAttr-Flash Fired-24',
+ 'zExtAttr-Focal Length-25',
+ 'zExtAttr-Focal Length in 35MM-26',
+ 'zExtAttr-Digital Zoom Ratio-27',
+ 'zExtAttr-Generative_AI_Type-iOS18-28',
+ 'zExtAttr-Credit-iOS18-29',
+ 'zAsset-Derived Camera Capture Device-30',
+ 'zAddAssetAttr-Camera Captured Device-31',
+ 'zAsset-Capture_Session_Identifier-iOS18-32',
+ 'zAddAssetAttr-Imported by-33',
+ 'zCldMast-Imported By-34',
+ 'zAddAssetAttr.Imported by Bundle Identifier-35',
+ 'zAddAssetAttr-Imported By Display Name-36',
+ 'zCldMast-Imported by Bundle ID-37',
+ 'zCldMast-Imported by Display Name-38',
+ 'zAsset-Is_Recently_Saved-iOS18-39',
+ 'zAsset-Saved Asset Type-40',
+ 'zAsset-Directory-Path-41',
+ 'zAsset-Filename-42',
+ 'zAddAssetAttr- Original Filename-43',
+ 'zCldMast- Original Filename-44',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-45',
+ 'zAsset-Active Library Scope Participation State-46',
+ 'zAsset-Library Scope Share State- StillTesting-47',
+ ('zAsset-Added Date-48', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-49', 'datetime'),
+ ('zAddAssetAttr-Date Created Source-50', 'datetime'),
+ ('zAsset-Date Created-51', 'datetime'),
+ ('zCldMast-Creation Date-52', 'datetime'),
+ ('zIntResou-CldMst Date Created-53', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-54',
+ 'zAddAssetAttr-Time Zone Offset-55',
+ 'zAddAssetAttr-Inferred Time Zone Offset-56',
+ 'zAddAssetAttr-EXIF-String-57',
+ ('zAsset-Modification Date-58', 'datetime'),
+ ('zAsset-Last Shared Date-59', 'datetime'),
+ 'zCldMast-Cloud Local State-60',
+ ('zCldMast-Import Date-61', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-62', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-63',
+ ('zAddAssetAttr-Alt Import Image Date-64', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-65',
+ ('zAsset-Cloud Batch Publish Date-66', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-67', 'datetime'),
+ 'zAsset-Cloud Download Requests-68',
+ 'zAsset-Cloud Batch ID-69',
+ 'zAddAssetAttr-Upload Attempts-70',
+ 'zAsset-Latitude-71',
+ 'zExtAttr-Latitude-72',
+ 'zAsset-Longitude-73',
+ 'zExtAttr-Longitude-74',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-75',
+ 'zAddAssetAttr-Location Hash-76',
+ 'zAddAssetAttr-Shifted Location Valid-77',
+ 'zAddAssetAttr-Shifted Location Data-78',
+ 'zAddAssetAttr-Reverse Location Is Valid-79',
+ 'zAddAssetAttr-Reverse Location Data-80',
+ 'AAAzCldMastMedData-zOPT-81',
+ 'zAddAssetAttr-Media Metadata Type-82',
+ 'AAAzCldMastMedData-Data-83',
+ 'CldMasterzCldMastMedData-zOPT-84',
+ 'zCldMast-Media Metadata Type-85',
+ 'CMzCldMastMedData-Data-86',
+ 'zAsset-Search Index Rebuild State-87',
+ 'zAddAssetAttr-Syndication History-88',
+ 'zMedAnlyAstAttr-Syndication Processing Version-89',
+ 'zMedAnlyAstAttr-Syndication Processing Value-90',
+ 'zAsset-Orientation-91',
+ 'zAddAssetAttr-Original Orientation-92',
+ 'zAsset-Kind-93',
+ 'zAsset-Is_Detected_Screenshot-iOS18-94',
+ 'zAsset-Kind-Sub-Type-95',
+ 'zAddAssetAttr-Cloud Kind Sub Type-96',
+ 'zAsset-Playback Style-97',
+ 'zAsset-Playback Variation-98',
+ 'zAddAssetAttr-View_Presentation-iOS18-99',
+ 'zAsset-Video Duration-100',
+ 'zExtAttr-Duration-101',
+ 'zAsset-Video CP Duration-102',
+ 'zAddAssetAttr-Video CP Duration Time Scale-103',
+ 'zAsset-Video CP Visibility State-104',
+ 'zAddAssetAttr-Video CP Display Value-105',
+ 'zAddAssetAttr-Video CP Display Time Scale-106',
+ 'zIntResou-Datastore Class ID-107',
+ 'zAsset-Cloud Placeholder Kind-108',
+ 'zIntResou-Local Availability-109',
+ 'zIntResou-Local Availability Target-110',
+ 'zIntResou-Cloud Local State-111',
+ 'zIntResou-Remote Availability-112',
+ 'zIntResou-Remote Availability Target-113',
+ 'zIntResou-Transient Cloud Master-114',
+ 'zIntResou-Side Car Index-115',
+ 'zIntResou- File ID-116',
+ 'zIntResou-Version-117',
+ 'zAddAssetAttr- Original-File-Size-118',
+ 'zIntResou-Resource Type-119',
+ 'zIntResou-Datastore Sub-Type-120',
+ 'zIntResou-Cloud Source Type-121',
+ 'zIntResou-Data Length-122',
+ 'zIntResou-Recipe ID-123',
+ ('zIntResou-Cloud Last Prefetch Date-124', 'datetime'),
+ 'zIntResou-Cloud Prefetch Count-125',
+ ('zIntResou- Cloud-Last-OnDemand Download-Date-126', 'datetime'),
+ 'zIntResou-UniformTypeID_UTI_Conformance_Hint-127',
+ 'zIntResou-Compact-UTI-128',
+ 'zAsset-Uniform Type ID-129',
+ 'zAsset-Original Color Space-130',
+ 'zCldMast-Uniform_Type_ID-131',
+ 'zCldMast-Full Size JPEG Source-132',
+ 'zAsset-HDR Gain-133',
+ 'zAsset-zHDR_Type-134',
+ 'zExtAttr-Codec-135',
+ 'zIntResou-Codec Four Char Code Name-136',
+ 'zCldMast-Codec Name-137',
+ 'zCldMast-Video Frame Rate-138',
+ 'zCldMast-Placeholder State-139',
+ 'zAsset-Depth_Type-140',
+ 'zAsset-Avalanche UUID-141',
+ 'zAsset-Avalanche_Kind-iOS18-142',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-143',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-144',
+ 'zAddAssetAttr-Cloud Recovery State-145',
+ 'zAddAssetAttr-Cloud State Recovery Attempts Count-146',
+ 'zAsset-Deferred Processing Needed-147',
+ 'zAsset-Video Deferred Processing Needed-148',
+ 'zAddAssetAttr-Deferred Photo Identifier-149',
+ 'zAddAssetAttr-Deferred Processing Candidate Options-150',
+ 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18-151',
+ ('zAsset-Adjustment Timestamp-152', 'datetime'),
+ 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18-153',
+ 'zAddAssetAttr-Editor Bundle ID-154',
+ 'zAddAssetAttr-Montage-155',
+ 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18-156',
+ 'zAsset-Favorite-157',
+ 'zAsset-Hidden-158',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-159',
+ ('zAsset-Trashed Date-160', 'datetime'),
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-161',
+ 'zAsset-Delete-Reason-162',
+ 'zIntResou-Trash State-163',
+ ('zIntResou-Trashed Date-164', 'datetime'),
+ 'zAsset-Cloud Delete State-165',
+ 'zIntResou-Cloud Delete State-166',
+ 'zAddAssetAttr-PTP Trashed State-167',
+ 'zIntResou-PTP Trashed State-168',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-169',
+ ('zMedAnlyAstAttr-Media Analysis Timestamp-170', 'datetime'),
+ ('zAsset-Analysis State Modification Date-171', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-172',
+ 'zAddAssetAttr- View Count-173',
+ 'zAddAssetAttr- Pending Play Count-174',
+ 'zAddAssetAttr- Play Count-175',
+ 'zAddAssetAttr- Pending Share Count-176',
+ 'zAddAssetAttr- Share Count-177',
+ 'zAddAssetAttr-Allowed for Analysis-178',
+ 'zAddAssetAttr-Scene Analysis Version-179',
+ 'zAddAssetAttr-Scene Analysis is From Preview-180',
+ ('zAddAssetAttr-Scene Analysis Timestamp-181', 'datetime'),
+ 'zAsset-Duplication Asset Visibility State-182',
+ 'zAddAssetAttr-Destination Asset Copy State-183',
+ 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-184',
+ 'zAddAssetAttr-Source Asset for Duplication Scope ID-185',
+ 'zCldMast-Source Master For Duplication Scope ID-186',
+ 'zAddAssetAttr-Source Asset For Duplication ID-187',
+ 'zCldMast-Source Master for Duplication ID-188',
+ 'zAddAssetAttr-Variation Suggestions States-189',
+ 'zAsset-High Frame Rate State-190',
+ 'zAsset-Video Key Frame Time Scale-191',
+ 'zAsset-Video Key Frame Value-192',
+ 'zAsset-Current_Sleet_Cast-iOS18-193',
+ 'zAddAssetAttr.Sleet_Is_Reversible-iOS18-194',
+ 'zExtAttr-Sleet_Rendering_Version-iOS18-195',
+ 'zExtAttr-Sleet_Intensity-iOS18-196',
+ 'zExtAttr-Sleet_Tone_Bias-iOS18-197',
+ 'zExtAttr-Sleet_Color_Bias-iOS18-198',
+ 'zExtAttr-Sleet_Cast-iOS18-199',
+ 'zExtAttr-ISO-200',
+ 'zExtAttr-Metering Mode-201',
+ 'zExtAttr-Sample Rate-202',
+ 'zExtAttr-Track Format-203',
+ 'zExtAttr-White Balance-204',
+ 'zExtAttr-Aperture-205',
+ 'zExtAttr-BitRate-206',
+ 'zExtAttr-Exposure Bias-207',
+ 'zExtAttr-Frames Per Second-208',
+ 'zExtAttr-Shutter Speed-209',
+ 'zExtAttr-Slush Scene Bias-210',
+ 'zExtAttr-Slush Version-211',
+ 'zExtAttr-Slush Preset-212',
+ 'zExtAttr-Slush Warm Bias-213',
+ 'zAsset-Height-214',
+ 'zAddAssetAttr-Original Height-215',
+ 'zIntResou-UnOriented Height-216',
+ 'zAsset-Width-217',
+ 'zAddAssetAttr-Original Width-218',
+ 'zIntResou-UnOriented Width-219',
+ 'zAsset-Thumbnail Index-220',
+ 'zAddAssetAttr-Embedded Thumbnail Height-221',
+ 'zAddAssetAttr-Embedded Thumbnail Length-222',
+ 'zAddAssetAttr-Embedded Thumbnail Offset-223',
+ 'zAddAssetAttr-Embedded Thumbnail Width-224',
+ 'zAsset-Packed Acceptable Crop Rect-226',
+ 'zAsset-Packed Badge Attributes-227',
+ 'zAsset-Packed Preferred Crop Rect-228',
+ 'zAsset-Curation Score-229',
+ 'zAsset-Camera Processing Adjustment State-230',
+ 'zAsset-Depth Type-231',
+ 'zAsset-Is Magic Carpet-Quicktime_MOV-file-232',
+ 'zAddAssetAttr-Orig Resource Choice-233',
+ 'zAsset-Spatial Type-234',
+ 'zAddAssetAttr-Spatial Over Capture Group ID-235',
+ 'zAddAssetAttr-Place Annotation Data-236',
+ 'zAddAssetAttr-Distance Identity-HEX-237',
+ 'zAddAssetAttr-Edited IPTC Attributes-238',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-239',
+ 'zAddAssetAttr-Accessibility Description-240',
+ 'zAddAssetAttr-Photo Stream Tag ID-241',
+ 'zAddAssetAttr-Share Type-242',
+ 'zAddAssetAttr-Library Scope Asset Contributors To Update-243',
+ 'zAsset-Overall Aesthetic Score-244',
+ 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18-245',
+ 'zMedAnlyAstAttr-Image_Caption_Version-iOS18-246',
+ 'zMedAnlyAstAttr-Video_Caption_Version-iOS18-247',
+ 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18-248',
+ 'zAsset-zENT-249',
+ 'zAsset-zOPT-250',
+ 'zAsset-Master= zCldMast-zPK-251',
+ 'zAsset-Extended Attributes= zExtAttr-zPK-252',
+ 'zAsset-Import Session Key-253',
+ 'zAsset-Photo Analysis Attributes Key-254',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-255',
+ 'zAsset-Computed Attributes Asset Key-256',
+ 'zAsset-Promotion Score-257',
+ 'zAsset-Iconic Score-258',
+ 'zAsset-Media Analysis Attributes Key-259',
+ 'zAsset-Media Group UUID-260',
+ 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-261',
+ 'zAsset.Cloud Collection GUID-262',
+ 'zAddAssetAttr-zENT-263',
+ 'ZAddAssetAttr-zOPT-264',
+ 'zAddAssetAttr-zAsset= zAsset_zPK-265',
+ 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-266',
+ 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-267',
+ 'zAddAssetAttr-Public Global UUID-268',
+ 'zAddAssetAttr-Original Assets UUID-269',
+ 'zAddAssetAttr-Originating Asset Identifier-270',
+ 'zCldMast-zPK= zAsset-Master-271',
+ 'zCldMast-zENT-272',
+ 'zCldMast-zOPT-273',
+ 'zCldMast-Moment Share Key= zShare-zPK-274',
+ 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-275',
+ 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-276',
+ 'zCldMast-Originating Asset ID-277',
+ 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-278',
+ 'CMzCldMastMedData-zENT-279',
+ 'CMzCldMastMedData-CldMast= zCldMast-zPK-280',
+ 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-281',
+ 'AAAzCldMastMedData-zENT-282',
+ 'AAAzCldMastMedData-CldMast key-283',
+ 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-284',
+ 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-285',
+ 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18-286',
+ 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18-287',
+ 'zCompSyncAttr-zENT-iOS18-288',
+ 'zCompSyncAttr-zOPT-iOS18-289',
+ 'zCompSyncAttr-Local_Analysis_Stage-iOS18-290',
+ 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18-291',
+ 'zExtAttr-zPK= zAsset-zExtendedAttributes-292',
+ 'zExtAttr-zENT-293',
+ 'zExtAttr-zOPT-294',
+ 'zExtAttr-Asset Key-295',
+ 'zIntResou-zPK-296',
+ 'zIntResou-zENT-297',
+ 'zIntResou-zOPT-298',
+ 'zIntResou-Asset= zAsset_zPK-299',
+ 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-300',
+ 'zMedAnlyAstAttr-zEnt-301',
+ 'zMedAnlyAstAttr-zOpt-302',
+ 'zMedAnlyAstAttr-Asset= zAsset-Zpk-303')
+ data_list = get_sqlite_db_records(source_path, query)
-def get_ph50intresouoptimzdatasyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ return data_headers, data_list, source_path
- for file_found in files_found:
- file_found = str(file_found)
+@artifact_processor
+def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("13.7"):
- logfunc("Unsupported version for SyndicationPL-Photos.sqlite ZINTERNALRESOURCE table data from iOS " + iosversion)
+ logfunc("Unsupported version for SyndicationPL-Photos.sqlite from iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found, "Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart',
zAsset.Z_PK AS 'zAsset-zPK',
@@ -6612,316 +6488,291 @@ def get_ph50intresouoptimzdatasyndpl(files_found, report_folder, seeker, wrap_te
LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
- row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
- row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
- row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
- row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
- row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
- row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
- row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
- row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
- row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
- row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
- row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
- row[236], row[237], row[238]))
-
- counter += 1
+ '''
- description = 'Parses iOS 14 asset records from Syndication.photos.library-database-Photos.sqlite' \
- ' ZINTERNALRESOURCE and other tables. This and other related parsers should provide' \
- ' data for investigative analysis of assets being stored locally on the device verses' \
- ' assets being stored in iCloud Photos as the result of optimization. This is very' \
- ' large query and script, I recommend opening the TSV generated report with Zimmermans Tools' \
- ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \
- ' and filter the results.'
- report = ArtifactHtmlReport('Ph50.2-Asset_IntResou-SyndPL')
- report.start_artifact_report(report_folder, 'Ph50.2-Asset_IntResou-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-4QueryStart-0',
- 'zAsset-zPK-7',
- 'zAddAssetAttr-zPK-8',
- 'zAsset-UUID = store.cloudphotodb-9',
- 'zAddAssetAttr-Master Fingerprint-10',
- 'zIntResou-Fingerprint-11',
- 'zIntResou-Local Availability-4QueryStart-1',
- 'zIntResou-Remote Availability-4QueryStart-2',
- 'zIntResou-Resource Type-4QueryStart-3',
- 'zIntResou-Datastore Sub-Type-4QueryStart-4',
- 'zIntResou-Recipe ID-4QueryStart-5',
- 'zAsset Complete-6',
- 'zAsset-Cloud is My Asset-12',
- 'zAsset-Cloud is deletable-Asset-13',
- 'zAsset-Cloud_Local_State-14',
- 'zAsset-Visibility State-15',
- 'zExtAttr-Camera Make-16',
- 'zExtAttr-Camera Model-17',
- 'zExtAttr-Lens Model-18',
- 'zExtAttr-Flash Fired-19',
- 'zExtAttr-Focal Lenght-20',
- 'zAsset-Derived Camera Capture Device-21',
- 'zAddAssetAttr-Camera Captured Device-22',
- 'zAddAssetAttr-Imported by-23',
- 'zCldMast-Imported By-24',
- 'zAddAssetAttr-Creator Bundle ID-25',
- 'zAddAssetAttr-Imported By Display Name-26',
- 'zCldMast-Imported by Bundle ID-27',
- 'zCldMast-Imported by Display Name-28',
- 'zAsset-Saved Asset Type-29',
- 'zAsset-Directory-Path-30',
- 'zAsset-Filename-31',
- 'zAddAssetAttr- Original Filename-32',
- 'zCldMast- Original Filename-33',
- 'zAsset-Added Date-34',
- 'zAsset- SortToken -CameraRoll-35',
- 'zAsset-Date Created-36',
- 'zCldMast-Creation Date-37',
- 'zIntResou-CldMst Date Created-38',
- 'zAddAssetAttr-Time Zone Name-39',
- 'zAddAssetAttr-Time Zone Offset-40',
- 'zAddAssetAttr-Inferred Time Zone Offset-41',
- 'zAddAssetAttr-EXIF-String-42',
- 'zAsset-Modification Date-43',
- 'zAsset-Last Shared Date-44',
- 'zCldMast-Cloud Local State-45',
- 'zCldMast-Import Date-46',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-47',
- 'zAddAssetAttr-Import Session ID-48',
- 'zAddAssetAttr-Alt Import Image Date-49',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-50',
- 'zAsset-Cloud Batch Publish Date-51',
- 'zAsset-Cloud Server Publish Date-52',
- 'zAsset-Cloud Download Requests-53',
- 'zAsset-Cloud Batch ID-54',
- 'zAddAssetAttr-Upload Attempts-55',
- 'zAsset-Latitude-56',
- 'zExtAttr-Latitude-57',
- 'zAsset-Longitude-58',
- 'zExtAttr-Longitude-59',
- 'zAddAssetAttr-GPS Horizontal Accuracy-60',
- 'zAddAssetAttr-Location Hash-61',
- 'zAddAssetAttr-Shifted Location Valid-62',
- 'zAddAssetAttr-Shifted Location Data-63',
- 'zAddAssetAttr-Reverse Location Is Valid-64',
- 'zAddAssetAttr-Reverse Location Data-65',
- 'AAAzCldMastMedData-zOPT-66',
- 'zAddAssetAttr-Media Metadata Type-67',
- 'AAAzCldMastMedData-Data-68',
- 'CldMasterzCldMastMedData-zOPT-69',
- 'zCldMast-Media Metadata Type-70',
- 'CMzCldMastMedData-Data-71',
- 'zAsset-Orientation-72',
- 'zAddAssetAttr-Original Orientation-73',
- 'zAsset-Kind-74',
- 'zAsset-Kind-Sub-Type-75',
- 'zAddAssetAttr-Cloud Kind Sub Type-76',
- 'zAsset-Playback Style-77',
- 'zAsset-Playback Variation-78',
- 'zAsset-Video Duration-79',
- 'zExtAttr-Duration-80',
- 'zAsset-Video CP Duration-81',
- 'zAddAssetAttr-Video CP Duration Time Scale-82',
- 'zAsset-Video CP Visibility State-83',
- 'zAddAssetAttr-Video CP Display Value-84',
- 'zAddAssetAttr-Video CP Display Time Scale-85',
- 'zIntResou-Datastore Class ID-86',
- 'zAsset-Cloud Placeholder Kind-87',
- 'zIntResou-Local Availability-88',
- 'zIntResou-Local Availability Target-89',
- 'zIntResou-Cloud Local State-90',
- 'zIntResou-Remote Availability-91',
- 'zIntResou-Remote Availability Target-92',
- 'zIntResou-Transient Cloud Master-93',
- 'zIntResou-Side Car Index-94',
- 'zIntResou- File ID-95',
- 'zIntResou-Version-96',
- 'zAddAssetAttr- Original-File-Size-97',
- 'zIntResou-Resource Type-98',
- 'zIntResou-Datastore Sub-Type-99',
- 'zIntResou-Cloud Source Type-100',
- 'zIntResou-Data Length-101',
- 'zIntResou-Recipe ID-102',
- 'zIntResou-Cloud Last Prefetch Date-103',
- 'zIntResou-Cloud Prefetch Count-104',
- 'zIntResou- Cloud-Last-OnDemand Download-Date-105',
- 'zAsset-Uniform Type ID-106',
- 'zAsset-Original Color Space-107',
- 'zCldMast-Uniform_Type_ID-108',
- 'zCldMast-Full Size JPEG Source-109',
- 'zAsset-HDR Gain-110',
- 'zExtAttr-Codec-111',
- 'zCldMast-Codec Name-112',
- 'zCldMast-Video Frame Rate-113',
- 'zCldMast-Placeholder State-114',
- 'zAsset-Depth_Type-115',
- 'zAsset-Avalanche UUID-116',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-117',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-118',
- 'zAddAssetAttr-Cloud Recovery State-119',
- 'zAddAssetAttr-Cloud State Recovery Attempts Count-120',
- 'zAsset-Deferred Processing Needed-121',
- 'zAddAssetAttr-Deferred Photo Identifier-122',
- 'zAddAssetAttr-Deferred Processing Candidate Options-123',
- 'zAsset-Has Adjustments-Camera-Effects-Filters-124',
- 'zAsset-Adjustment Timestamp-125',
- 'zAddAssetAttr-Editor Bundle ID-126',
- 'zAddAssetAttr-Montage-127',
- 'zAsset-Favorite-128',
- 'zAsset-Hidden-129',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-130',
- 'zAsset-Trashed Date-131',
- 'zIntResou-Trash State-132',
- 'zIntResou-Trashed Date-133',
- 'zAsset-Cloud Delete State-134',
- 'zIntResou-Cloud Delete State-135',
- 'zAddAssetAttr-PTP Trashed State-136',
- 'zIntResou-PTP Trashed State-137',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-138',
- 'zMedAnlyAstAttr-Media Analysis Timestamp-139',
- 'zAsset-Analysis State Modificaion Date-140',
- 'zAddAssetAttr- Pending View Count-141',
- 'zAddAssetAttr- View Count-142',
- 'zAddAssetAttr- Pending Play Count-143',
- 'zAddAssetAttr- Play Count-144',
- 'zAddAssetAttr- Pending Share Count-145',
- 'zAddAssetAttr- Share Count-146',
- 'zAddAssetAttr-Allowed for Analysis-147',
- 'zAddAssetAttr-Scene Analysis Version-148',
- 'zAddAssetAttr-Scene Analysis Timestamp-149',
- 'zAddAssetAttr-Destination Asset Copy State-150',
- 'zAddAssetAttr-Variation Suggestions States-151',
- 'zAsset-High Frame Rate State-152',
- 'zAsset-Video Key Frame Time Scale-153',
- 'zAsset-Video Key Frame Value-154',
- 'zExtAttr-ISO-155',
- 'zExtAttr-Metering Mode-156',
- 'zExtAttr-Sample Rate-157',
- 'zExtAttr-Track Format-158',
- 'zExtAttr-White Balance-159',
- 'zExtAttr-Aperture-160',
- 'zExtAttr-BitRate-161',
- 'zExtAttr-Exposure Bias-162',
- 'zExtAttr-Frames Per Second-163',
- 'zExtAttr-Shutter Speed-164',
- 'zAsset-Height-165',
- 'zAddAssetAttr-Original Height-166',
- 'zIntResou-Unoriented Height-167',
- 'zAsset-Width-168',
- 'zAddAssetAttr-Original Width-169',
- 'zIntResou-Unoriented Width-170',
- 'zAsset-Thumbnail Index-171',
- 'zAddAssetAttr-Embedded Thumbnail Height-172',
- 'zAddAssetAttr-Embedded Thumbnail Length-173',
- 'zAddAssetAttr-Embedded Thumbnail Offset-174',
- 'zAddAssetAttr-Embedded Thumbnail Width-175',
- 'zAsset-Packed Acceptable Crop Rect-176',
- 'zAsset-Packed Badge Attributes-177',
- 'zAsset-Packed Preferred Crop Rect-178',
- 'zAsset-Curation Score-179',
- 'zAsset-Camera Processing Adjustment State-180',
- 'zAsset-Depth Type-181',
- 'zAddAssetAttr-Orig Resource Choice-182',
- 'zAddAssetAttr-Spatial Over Capture Group ID-183',
- 'zAddAssetAttr-Place Annotation Data-184',
- 'zAddAssetAttr-Distance Identity-HEX-185',
- 'zAddAssetAttr-Edited IPTC Attributes-186',
- 'zAddAssetAttr-Title-Comments via Cloud Website-187',
- 'zAddAssetAttr-Accessibility Description-188',
- 'zAddAssetAttr-Photo Stream Tag ID-189',
- 'zAddAssetAttr-Share Type-190',
- 'zAsset-Overall Aesthetic Score-191',
- 'zAsset-zENT-192',
- 'zAsset-zOPT-193',
- 'zAsset-Master= zCldMast-zPK-194',
- 'zAsset-Extended Attributes= zExtAttr-zPK-195',
- 'zAsset-Import Session Key-196',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-197',
- 'zAsset-Computed Attributes Asset Key-198',
- 'zAsset-Promotion Score-199',
- 'zAsset-Media Analysis Attributes Key-200',
- 'zAsset-Media Group UUID-201',
- 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-202',
- 'zAsset.Cloud Collection GUID-203',
- 'zAddAssetAttr-zENT-204',
- 'ZAddAssetAttr-zOPT-205',
- 'zAddAssetAttr-zAsset= zAsset_zPK-206',
- 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-207',
- 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-208',
- 'zAddAssetAttr-Public Global UUID-209',
- 'zAddAssetAttr-Original Assets UUID-210',
- 'zAddAssetAttr-Originating Asset Identifier-211',
- 'zAddAssetAttr.Adjusted Fingerprint-212',
- 'zCldMast-zPK= zAsset-Master-213',
- 'zCldMast-zENT-214',
- 'zCldMast-zOPT-215',
- 'zCldMast-Moment Share Key= zShare-zPK-216',
- 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-217',
- 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-218',
- 'zCldMast-Originating Asset ID-219',
- 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-220',
- 'CMzCldMastMedData-zENT-221',
- 'CMzCldMastMedData-CldMast= zCldMast-zPK-222',
- 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-223',
- 'AAAzCldMastMedData-zENT-224',
- 'AAAzCldMastMedData-CldMast key-225',
- 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-226',
- 'zExtAttr-zPK= zAsset-zExtendedAttributes-227',
- 'zExtAttr-zENT-228',
- 'zExtAttr-zOPT-229',
- 'zExtAttr-Asset Key-230',
- 'zIntResou-zPK-231',
- 'zIntResou-zENT-232',
- 'zIntResou-zOPT-233',
- 'zIntResou-Asset= zAsset_zPK-234',
- 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-235',
- 'zMedAnlyAstAttr-zEnt-236',
- 'zMedAnlyAstAttr-zOpt-237',
- 'zMedAnlyAstAttr-Asset= zAsset-zPK-238')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
+ row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
+ row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
+ row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
+ row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
+ row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
+ row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
+ row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
+ row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
+ row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
+ row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
+ row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
+ row[236], row[237], row[238]))
- tsvname = 'Ph50.2-Asset_IntResou-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
+ data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'),
+ 'zAsset-zPK-7',
+ 'zAddAssetAttr-zPK-8',
+ 'zAsset-UUID = store.cloudphotodb-9',
+ 'zAddAssetAttr-Master Fingerprint-10',
+ 'zIntResou-Fingerprint-11',
+ 'zIntResou-Local Availability-4QueryStart-1',
+ 'zIntResou-Remote Availability-4QueryStart-2',
+ 'zIntResou-Resource Type-4QueryStart-3',
+ 'zIntResou-Datastore Sub-Type-4QueryStart-4',
+ 'zIntResou-Recipe ID-4QueryStart-5',
+ 'zAsset Complete-6',
+ 'zAsset-Cloud is My Asset-12',
+ 'zAsset-Cloud is deletable-Asset-13',
+ 'zAsset-Cloud_Local_State-14',
+ 'zAsset-Visibility State-15',
+ 'zExtAttr-Camera Make-16',
+ 'zExtAttr-Camera Model-17',
+ 'zExtAttr-Lens Model-18',
+ 'zExtAttr-Flash Fired-19',
+ 'zExtAttr-Focal Lenght-20',
+ 'zAsset-Derived Camera Capture Device-21',
+ 'zAddAssetAttr-Camera Captured Device-22',
+ 'zAddAssetAttr-Imported by-23',
+ 'zCldMast-Imported By-24',
+ 'zAddAssetAttr-Creator Bundle ID-25',
+ 'zAddAssetAttr-Imported By Display Name-26',
+ 'zCldMast-Imported by Bundle ID-27',
+ 'zCldMast-Imported by Display Name-28',
+ 'zAsset-Saved Asset Type-29',
+ 'zAsset-Directory-Path-30',
+ 'zAsset-Filename-31',
+ 'zAddAssetAttr- Original Filename-32',
+ 'zCldMast- Original Filename-33',
+ ('zAsset-Added Date-34', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-35', 'datetime'),
+ ('zAsset-Date Created-36', 'datetime'),
+ ('zCldMast-Creation Date-37', 'datetime'),
+ ('zIntResou-CldMst Date Created-38', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-39',
+ 'zAddAssetAttr-Time Zone Offset-40',
+ 'zAddAssetAttr-Inferred Time Zone Offset-41',
+ 'zAddAssetAttr-EXIF-String-42',
+ ('zAsset-Modification Date-43', 'datetime'),
+ ('zAsset-Last Shared Date-44', 'datetime'),
+ 'zCldMast-Cloud Local State-45',
+ ('zCldMast-Import Date-46', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-47', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-48',
+ ('zAddAssetAttr-Alt Import Image Date-49', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-50',
+ ('zAsset-Cloud Batch Publish Date-51', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-52', 'datetime'),
+ 'zAsset-Cloud Download Requests-53',
+ 'zAsset-Cloud Batch ID-54',
+ 'zAddAssetAttr-Upload Attempts-55',
+ 'zAsset-Latitude-56',
+ 'zExtAttr-Latitude-57',
+ 'zAsset-Longitude-58',
+ 'zExtAttr-Longitude-59',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-60',
+ 'zAddAssetAttr-Location Hash-61',
+ 'zAddAssetAttr-Shifted Location Valid-62',
+ 'zAddAssetAttr-Shifted Location Data-63',
+ 'zAddAssetAttr-Reverse Location Is Valid-64',
+ 'zAddAssetAttr-Reverse Location Data-65',
+ 'AAAzCldMastMedData-zOPT-66',
+ 'zAddAssetAttr-Media Metadata Type-67',
+ 'AAAzCldMastMedData-Data-68',
+ 'CldMasterzCldMastMedData-zOPT-69',
+ 'zCldMast-Media Metadata Type-70',
+ 'CMzCldMastMedData-Data-71',
+ 'zAsset-Orientation-72',
+ 'zAddAssetAttr-Original Orientation-73',
+ 'zAsset-Kind-74',
+ 'zAsset-Kind-Sub-Type-75',
+ 'zAddAssetAttr-Cloud Kind Sub Type-76',
+ 'zAsset-Playback Style-77',
+ 'zAsset-Playback Variation-78',
+ 'zAsset-Video Duration-79',
+ 'zExtAttr-Duration-80',
+ 'zAsset-Video CP Duration-81',
+ 'zAddAssetAttr-Video CP Duration Time Scale-82',
+ 'zAsset-Video CP Visibility State-83',
+ 'zAddAssetAttr-Video CP Display Value-84',
+ 'zAddAssetAttr-Video CP Display Time Scale-85',
+ 'zIntResou-Datastore Class ID-86',
+ 'zAsset-Cloud Placeholder Kind-87',
+ 'zIntResou-Local Availability-88',
+ 'zIntResou-Local Availability Target-89',
+ 'zIntResou-Cloud Local State-90',
+ 'zIntResou-Remote Availability-91',
+ 'zIntResou-Remote Availability Target-92',
+ 'zIntResou-Transient Cloud Master-93',
+ 'zIntResou-Side Car Index-94',
+ 'zIntResou- File ID-95',
+ 'zIntResou-Version-96',
+ 'zAddAssetAttr- Original-File-Size-97',
+ 'zIntResou-Resource Type-98',
+ 'zIntResou-Datastore Sub-Type-99',
+ 'zIntResou-Cloud Source Type-100',
+ 'zIntResou-Data Length-101',
+ 'zIntResou-Recipe ID-102',
+ ('zIntResou-Cloud Last Prefetch Date-103', 'datetime'),
+ 'zIntResou-Cloud Prefetch Count-104',
+ ('zIntResou- Cloud-Last-OnDemand Download-Date-105', 'datetime'),
+ 'zAsset-Uniform Type ID-106',
+ 'zAsset-Original Color Space-107',
+ 'zCldMast-Uniform_Type_ID-108',
+ 'zCldMast-Full Size JPEG Source-109',
+ 'zAsset-HDR Gain-110',
+ 'zExtAttr-Codec-111',
+ 'zCldMast-Codec Name-112',
+ 'zCldMast-Video Frame Rate-113',
+ 'zCldMast-Placeholder State-114',
+ 'zAsset-Depth_Type-115',
+ 'zAsset-Avalanche UUID-116',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-117',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-118',
+ 'zAddAssetAttr-Cloud Recovery State-119',
+ 'zAddAssetAttr-Cloud State Recovery Attempts Count-120',
+ 'zAsset-Deferred Processing Needed-121',
+ 'zAddAssetAttr-Deferred Photo Identifier-122',
+ 'zAddAssetAttr-Deferred Processing Candidate Options-123',
+ 'zAsset-Has Adjustments-Camera-Effects-Filters-124',
+ ('zAsset-Adjustment Timestamp-125', 'datetime'),
+ 'zAddAssetAttr-Editor Bundle ID-126',
+ 'zAddAssetAttr-Montage-127',
+ 'zAsset-Favorite-128',
+ 'zAsset-Hidden-129',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-130',
+ ('zAsset-Trashed Date-131', 'datetime'),
+ 'zIntResou-Trash State-132',
+ ('zIntResou-Trashed Date-133', 'datetime'),
+ 'zAsset-Cloud Delete State-134',
+ 'zIntResou-Cloud Delete State-135',
+ 'zAddAssetAttr-PTP Trashed State-136',
+ 'zIntResou-PTP Trashed State-137',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-138',
+ ('zMedAnlyAstAttr-Media Analysis Timestamp-139', 'datetime'),
+ ('zAsset-Analysis State Modification Date-140', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-141',
+ 'zAddAssetAttr- View Count-142',
+ 'zAddAssetAttr- Pending Play Count-143',
+ 'zAddAssetAttr- Play Count-144',
+ 'zAddAssetAttr- Pending Share Count-145',
+ 'zAddAssetAttr- Share Count-146',
+ 'zAddAssetAttr-Allowed for Analysis-147',
+ 'zAddAssetAttr-Scene Analysis Version-148',
+ ('zAddAssetAttr-Scene Analysis Timestamp-149', 'datetime'),
+ 'zAddAssetAttr-Destination Asset Copy State-150',
+ 'zAddAssetAttr-Variation Suggestions States-151',
+ 'zAsset-High Frame Rate State-152',
+ 'zAsset-Video Key Frame Time Scale-153',
+ 'zAsset-Video Key Frame Value-154',
+ 'zExtAttr-ISO-155',
+ 'zExtAttr-Metering Mode-156',
+ 'zExtAttr-Sample Rate-157',
+ 'zExtAttr-Track Format-158',
+ 'zExtAttr-White Balance-159',
+ 'zExtAttr-Aperture-160',
+ 'zExtAttr-BitRate-161',
+ 'zExtAttr-Exposure Bias-162',
+ 'zExtAttr-Frames Per Second-163',
+ 'zExtAttr-Shutter Speed-164',
+ 'zAsset-Height-165',
+ 'zAddAssetAttr-Original Height-166',
+ 'zIntResou-Unoriented Height-167',
+ 'zAsset-Width-168',
+ 'zAddAssetAttr-Original Width-169',
+ 'zIntResou-Unoriented Width-170',
+ 'zAsset-Thumbnail Index-171',
+ 'zAddAssetAttr-Embedded Thumbnail Height-172',
+ 'zAddAssetAttr-Embedded Thumbnail Length-173',
+ 'zAddAssetAttr-Embedded Thumbnail Offset-174',
+ 'zAddAssetAttr-Embedded Thumbnail Width-175',
+ 'zAsset-Packed Acceptable Crop Rect-176',
+ 'zAsset-Packed Badge Attributes-177',
+ 'zAsset-Packed Preferred Crop Rect-178',
+ 'zAsset-Curation Score-179',
+ 'zAsset-Camera Processing Adjustment State-180',
+ 'zAsset-Depth Type-181',
+ 'zAddAssetAttr-Orig Resource Choice-182',
+ 'zAddAssetAttr-Spatial Over Capture Group ID-183',
+ 'zAddAssetAttr-Place Annotation Data-184',
+ 'zAddAssetAttr-Distance Identity-HEX-185',
+ 'zAddAssetAttr-Edited IPTC Attributes-186',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-187',
+ 'zAddAssetAttr-Accessibility Description-188',
+ 'zAddAssetAttr-Photo Stream Tag ID-189',
+ 'zAddAssetAttr-Share Type-190',
+ 'zAsset-Overall Aesthetic Score-191',
+ 'zAsset-zENT-192',
+ 'zAsset-zOPT-193',
+ 'zAsset-Master= zCldMast-zPK-194',
+ 'zAsset-Extended Attributes= zExtAttr-zPK-195',
+ 'zAsset-Import Session Key-196',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-197',
+ 'zAsset-Computed Attributes Asset Key-198',
+ 'zAsset-Promotion Score-199',
+ 'zAsset-Media Analysis Attributes Key-200',
+ 'zAsset-Media Group UUID-201',
+ 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-202',
+ 'zAsset.Cloud Collection GUID-203',
+ 'zAddAssetAttr-zENT-204',
+ 'ZAddAssetAttr-zOPT-205',
+ 'zAddAssetAttr-zAsset= zAsset_zPK-206',
+ 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-207',
+ 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-208',
+ 'zAddAssetAttr-Public Global UUID-209',
+ 'zAddAssetAttr-Original Assets UUID-210',
+ 'zAddAssetAttr-Originating Asset Identifier-211',
+ 'zAddAssetAttr.Adjusted Fingerprint-212',
+ 'zCldMast-zPK= zAsset-Master-213',
+ 'zCldMast-zENT-214',
+ 'zCldMast-zOPT-215',
+ 'zCldMast-Moment Share Key= zShare-zPK-216',
+ 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-217',
+ 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-218',
+ 'zCldMast-Originating Asset ID-219',
+ 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-220',
+ 'CMzCldMastMedData-zENT-221',
+ 'CMzCldMastMedData-CldMast= zCldMast-zPK-222',
+ 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-223',
+ 'AAAzCldMastMedData-zENT-224',
+ 'AAAzCldMastMedData-CldMast key-225',
+ 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-226',
+ 'zExtAttr-zPK= zAsset-zExtendedAttributes-227',
+ 'zExtAttr-zENT-228',
+ 'zExtAttr-zOPT-229',
+ 'zExtAttr-Asset Key-230',
+ 'zIntResou-zPK-231',
+ 'zIntResou-zENT-232',
+ 'zIntResou-zOPT-233',
+ 'zIntResou-Asset= zAsset_zPK-234',
+ 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-235',
+ 'zMedAnlyAstAttr-zEnt-236',
+ 'zMedAnlyAstAttr-zOpt-237',
+ 'zMedAnlyAstAttr-Asset= zAsset-zPK-238')
+ data_list = get_sqlite_db_records(source_path, query)
- tlactivity = 'Ph50.2-Asset_IntResou-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No Internal Resource data available for iOS 14 Syndication Photos Library Photos.sqlite')
-
- db.close()
- return
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found, "Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart',
zAsset.Z_PK AS 'zAsset-zPK',
@@ -7721,343 +7572,318 @@ def get_ph50intresouoptimzdatasyndpl(files_found, report_folder, seeker, wrap_te
LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
- row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
- row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
- row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
- row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
- row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
- row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
- row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
- row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
- row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
- row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
- row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
- row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
- row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
- row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
- row[260], row[261], row[262]))
-
- counter += 1
-
- description = 'Parses iOS 15 asset records from Syndication.photos.library-database-Photos.sqlite' \
- ' ZINTERNALRESOURCE and other tables. This and other related parsers should provide' \
- ' data for investigative analysis of assets being stored locally on the device verses' \
- ' assets being stored in iCloud Photos as the result of optimization. This is very large' \
- ' query and script, I recommend opening the TSV generated report with Zimmermans Tools' \
- ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \
- ' and filter the results.'
- report = ArtifactHtmlReport('Ph50.2-Asset_IntResou-SyndPL')
- report.start_artifact_report(report_folder, 'Ph50.2-Asset_IntResou-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-4QueryStart-0',
- 'zAsset-zPK-7',
- 'zAddAssetAttr-zPK-8',
- 'zAsset-UUID = store.cloudphotodb-9',
- 'zAddAssetAttr-Master Fingerprint-10',
- 'zIntResou-Fingerprint-11',
- 'zIntResou-Local Availability-4QueryStart-1',
- 'zIntResou-Remote Availability-4QueryStart-2',
- 'zIntResou-Resource Type-4QueryStart-3',
- 'zIntResou-Datastore Sub-Type-4QueryStart-4',
- 'zIntResou-Recipe ID-4QueryStart-5',
- 'zAsset Complete-6',
- 'zAsset-Bundle Scope-12',
- 'zAsset-Syndication State-13',
- 'zAsset-Cloud is My Asset-14',
- 'zAsset-Cloud is deletable-Asset-15',
- 'zAsset-Cloud_Local_State-16',
- 'zAsset-Visibility State-17',
- 'zExtAttr-Camera Make-18',
- 'zExtAttr-Camera Model-19',
- 'zExtAttr-Lens Model-20',
- 'zExtAttr-Flash Fired-21',
- 'zExtAttr-Focal Lenght-22',
- 'zExtAttr-Focal Lenth in 35MM-23',
- 'zExtAttr-Digital Zoom Ratio-24',
- 'zAsset-Derived Camera Capture Device-25',
- 'zAddAssetAttr-Camera Captured Device-26',
- 'zAddAssetAttr-Imported by-27',
- 'zCldMast-Imported By-28',
- 'zAddAssetAttr.Imported by Bundle Identifier-29',
- 'zAddAssetAttr-Imported By Display Name-30',
- 'zCldMast-Imported by Bundle ID-31',
- 'zCldMast-Imported by Display Name-32',
- 'zAsset-Saved Asset Type-33',
- 'zAsset-Directory-Path-34',
- 'zAsset-Filename-35',
- 'zAddAssetAttr- Original Filename-36',
- 'zCldMast- Original Filename-37',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-38',
- 'zAsset-Added Date-39',
- 'zAsset- SortToken -CameraRoll-40',
- 'zAddAssetAttr-Date Created Source-41',
- 'zAsset-Date Created-42',
- 'zCldMast-Creation Date-43',
- 'zIntResou-CldMst Date Created-44',
- 'zAddAssetAttr-Time Zone Name-45',
- 'zAddAssetAttr-Time Zone Offset-46',
- 'zAddAssetAttr-Inferred Time Zone Offset-47',
- 'zAddAssetAttr-EXIF-String-48',
- 'zAsset-Modification Date-49',
- 'zAsset-Last Shared Date-50',
- 'zCldMast-Cloud Local State-51',
- 'zCldMast-Import Date-52',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-53',
- 'zAddAssetAttr-Import Session ID-54',
- 'zAddAssetAttr-Alt Import Image Date-55',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-56',
- 'zAsset-Cloud Batch Publish Date-57',
- 'zAsset-Cloud Server Publish Date-58',
- 'zAsset-Cloud Download Requests-59',
- 'zAsset-Cloud Batch ID-60',
- 'zAddAssetAttr-Upload Attempts-61',
- 'zAsset-Latitude-62',
- 'zExtAttr-Latitude-63',
- 'zAsset-Longitude-64',
- 'zExtAttr-Longitude-65',
- 'zAddAssetAttr-GPS Horizontal Accuracy-66',
- 'zAddAssetAttr-Location Hash-67',
- 'zAddAssetAttr-Shifted Location Valid-68',
- 'zAddAssetAttr-Shifted Location Data-69',
- 'zAddAssetAttr-Reverse Location Is Valid-70',
- 'zAddAssetAttr-Reverse Location Data-71',
- 'AAAzCldMastMedData-zOPT-72',
- 'zAddAssetAttr-Media Metadata Type-73',
- 'AAAzCldMastMedData-Data-74',
- 'CldMasterzCldMastMedData-zOPT-75',
- 'zCldMast-Media Metadata Type-76',
- 'CMzCldMastMedData-Data-77',
- 'zAddAssetAttr-Syndication History-78',
- 'zMedAnlyAstAttr-Syndication Processing Version-79',
- 'zMedAnlyAstAttr-Syndication Processing Value-80',
- 'zAsset-Orientation-81',
- 'zAddAssetAttr-Original Orientation-82',
- 'zAsset-Kind-83',
- 'zAsset-Kind-Sub-Type-84',
- 'zAddAssetAttr-Cloud Kind Sub Type-85',
- 'zAsset-Playback Style-86',
- 'zAsset-Playback Variation-87',
- 'zAsset-Video Duration-88',
- 'zExtAttr-Duration-89',
- 'zAsset-Video CP Duration-90',
- 'zAddAssetAttr-Video CP Duration Time Scale-91',
- 'zAsset-Video CP Visibility State-92',
- 'zAddAssetAttr-Video CP Display Value-93',
- 'zAddAssetAttr-Video CP Display Time Scale-94',
- 'zIntResou-Datastore Class ID-95',
- 'zAsset-Cloud Placeholder Kind-96',
- 'zIntResou-Local Availability-97',
- 'zIntResou-Local Availability Target-98',
- 'zIntResou-Cloud Local State-99',
- 'zIntResou-Remote Availability-100',
- 'zIntResou-Remote Availability Target-101',
- 'zIntResou-Transient Cloud Master-102',
- 'zIntResou-Side Car Index-103',
- 'zIntResou- File ID-104',
- 'zIntResou-Version-105',
- 'zAddAssetAttr- Original-File-Size-106',
- 'zIntResou-Resource Type-107',
- 'zIntResou-Datastore Sub-Type-108',
- 'zIntResou-Cloud Source Type-109',
- 'zIntResou-Data Length-110',
- 'zIntResou-Recipe ID-111',
- 'zIntResou-Cloud Last Prefetch Date-112',
- 'zIntResou-Cloud Prefetch Count-113',
- 'zIntResou- Cloud-Last-OnDemand Download-Date-114',
- 'zIntResou-UniformTypeID_UTI_Conformance_Hint-115',
- 'zIntResou-Compact-UTI-116',
- 'zAsset-Uniform Type ID-117',
- 'zAsset-Original Color Space-118',
- 'zCldMast-Uniform_Type_ID-119',
- 'zCldMast-Full Size JPEG Source-120',
- 'zAsset-HDR Gain-121',
- 'zAsset-zHDR_Type-122',
- 'zExtAttr-Codec-123',
- 'zIntResou-Codec Four Char Code Name-124',
- 'zCldMast-Codec Name-125',
- 'zCldMast-Video Frame Rate-126',
- 'zCldMast-Placeholder State-127',
- 'zAsset-Depth_Type-128',
- 'zAsset-Avalanche UUID-129',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-130',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-131',
- 'zAddAssetAttr-Cloud Recovery State-132',
- 'zAddAssetAttr-Cloud State Recovery Attempts Count-133',
- 'zAsset-Deferred Processing Needed-134',
- 'zAsset-Video Deferred Processing Needed-135',
- 'zAddAssetAttr-Deferred Photo Identifier-136',
- 'zAddAssetAttr-Deferred Processing Candidate Options-137',
- 'zAsset-Has Adjustments-Camera-Effects-Filters-138',
- 'zAsset-Adjustment Timestamp-139',
- 'zAddAssetAttr-Editor Bundle ID-140',
- 'zAddAssetAttr-Montage-141',
- 'zAsset-Favorite-142',
- 'zAsset-Hidden-143',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-144',
- 'zAsset-Trashed Date-145',
- 'zIntResou-Trash State-146',
- 'zIntResou-Trashed Date-147',
- 'zAsset-Cloud Delete State-148',
- 'zIntResou-Cloud Delete State-149',
- 'zAddAssetAttr-PTP Trashed State-150',
- 'zIntResou-PTP Trashed State-151',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-152',
- 'zMedAnlyAstAttr-Media Analysis Timestamp-153',
- 'zAsset-Analysis State Modificaion Date-154',
- 'zAddAssetAttr- Pending View Count-155',
- 'zAddAssetAttr- View Count-156',
- 'zAddAssetAttr- Pending Play Count-157',
- 'zAddAssetAttr- Play Count-158',
- 'zAddAssetAttr- Pending Share Count-159',
- 'zAddAssetAttr- Share Count-160',
- 'zAddAssetAttr-Allowed for Analysis-161',
- 'zAddAssetAttr-Scene Analysis Version-162',
- 'zAddAssetAttr-Scene Analysis is From Preview-163',
- 'zAddAssetAttr-Scene Analysis Timestamp-164',
- 'zAddAssetAttr-Destination Asset Copy State-165',
- 'zAddAssetAttr-Source Asset for Duplication Scope ID-166',
- 'zCldMast-Source Master For Duplication Scope ID-167',
- 'zAddAssetAttr-Source Asset For Duplication ID-168',
- 'zCldMast-Source Master for Duplication ID-169',
- 'zAddAssetAttr-Variation Suggestions States-170',
- 'zAsset-High Frame Rate State-171',
- 'zAsset-Video Key Frame Time Scale-172',
- 'zAsset-Video Key Frame Value-173',
- 'zExtAttr-ISO-174',
- 'zExtAttr-Metering Mode-175',
- 'zExtAttr-Sample Rate-176',
- 'zExtAttr-Track Format-177',
- 'zExtAttr-White Balance-178',
- 'zExtAttr-Aperture-179',
- 'zExtAttr-BitRate-180',
- 'zExtAttr-Exposure Bias-181',
- 'zExtAttr-Frames Per Second-182',
- 'zExtAttr-Shutter Speed-183',
- 'zExtAttr-Slush Scene Bias-184',
- 'zExtAttr-Slush Version-185',
- 'zExtAttr-Slush Preset-186',
- 'zExtAttr-Slush Warm Bias-187',
- 'zAsset-Height-188',
- 'zAddAssetAttr-Original Height-189',
- 'zIntResou-Unoriented Height-190',
- 'zAsset-Width-191',
- 'zAddAssetAttr-Original Width-192',
- 'zIntResou-Unoriented Width-193',
- 'zAsset-Thumbnail Index-194',
- 'zAddAssetAttr-Embedded Thumbnail Height-195',
- 'zAddAssetAttr-Embedded Thumbnail Length-196',
- 'zAddAssetAttr-Embedded Thumbnail Offset-197',
- 'zAddAssetAttr-Embedded Thumbnail Width-198',
- 'zAsset-Packed Acceptable Crop Rect-199',
- 'zAsset-Packed Badge Attributes-200',
- 'zAsset-Packed Preferred Crop Rect-201',
- 'zAsset-Curation Score-202',
- 'zAsset-Camera Processing Adjustment State-203',
- 'zAsset-Depth Type-204',
- 'zAsset-Is Magic Carpet-QuicktimeMOVfile-205',
- 'zAddAssetAttr-Orig Resource Choice-206',
- 'zAddAssetAttr-Spatial Over Capture Group ID-207',
- 'zAddAssetAttr-Place Annotation Data-208',
- 'zAddAssetAttr-Distance Identity-HEX-209',
- 'zAddAssetAttr-Edited IPTC Attributes-210',
- 'zAddAssetAttr-Title-Comments via Cloud Website-211',
- 'zAddAssetAttr-Accessibility Description-212',
- 'zAddAssetAttr-Photo Stream Tag ID-213',
- 'zAddAssetAttr-Share Type-214',
- 'zAsset-Overall Aesthetic Score-215',
- 'zAsset-zENT-216',
- 'zAsset-zOPT-217',
- 'zAsset-Master= zCldMast-zPK-218',
- 'zAsset-Extended Attributes= zExtAttr-zPK-219',
- 'zAsset-Import Session Key-220',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-221',
- 'zAsset-Computed Attributes Asset Key-222',
- 'zAsset-Promotion Score-223',
- 'zAsset-Media Analysis Attributes Key-224',
- 'zAsset-Media Group UUID-225',
- 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-226',
- 'zAsset.Cloud Collection GUID-227',
- 'zAddAssetAttr-zENT-228',
- 'ZAddAssetAttr-zOPT-229',
- 'zAddAssetAttr-zAsset= zAsset_zPK-230',
- 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-231',
- 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-232',
- 'zAddAssetAttr-Public Global UUID-233',
- 'zAddAssetAttr-Original Assets UUID-234',
- 'zAddAssetAttr-Originating Asset Identifier-235',
- 'zAddAssetAttr.Adjusted Fingerprint-236',
- 'zCldMast-zPK= zAsset-Master-237',
- 'zCldMast-zENT-238',
- 'zCldMast-zOPT-239',
- 'zCldMast-Moment Share Key= zShare-zPK-240',
- 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-241',
- 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-242',
- 'zCldMast-Originating Asset ID-243',
- 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-244',
- 'CMzCldMastMedData-zENT-245',
- 'CMzCldMastMedData-CldMast= zCldMast-zPK-246',
- 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-247',
- 'AAAzCldMastMedData-zENT-248',
- 'AAAzCldMastMedData-CldMast key-249',
- 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-250',
- 'zExtAttr-zPK= zAsset-zExtendedAttributes-251',
- 'zExtAttr-zENT-252',
- 'zExtAttr-zOPT-253',
- 'zExtAttr-Asset Key-254',
- 'zIntResou-zPK-255',
- 'zIntResou-zENT-256',
- 'zIntResou-zOPT-257',
- 'zIntResou-Asset= zAsset_zPK-258',
- 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-259',
- 'zMedAnlyAstAttr-zEnt-260',
- 'zMedAnlyAstAttr-zOpt-261',
- 'zMedAnlyAstAttr-Asset= zAsset-zPK-262')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
+ '''
- tsvname = 'Ph50.2-Asset_IntResou-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
+ row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
+ row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
+ row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
+ row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
+ row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
+ row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
+ row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
+ row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
+ row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
+ row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
+ row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
+ row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
+ row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
+ row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
+ row[260], row[261], row[262]))
- tlactivity = 'Ph50.2-Asset_IntResou-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'),
+ 'zAsset-zPK-7',
+ 'zAddAssetAttr-zPK-8',
+ 'zAsset-UUID = store.cloudphotodb-9',
+ 'zAddAssetAttr-Master Fingerprint-10',
+ 'zIntResou-Fingerprint-11',
+ 'zIntResou-Local Availability-4QueryStart-1',
+ 'zIntResou-Remote Availability-4QueryStart-2',
+ 'zIntResou-Resource Type-4QueryStart-3',
+ 'zIntResou-Datastore Sub-Type-4QueryStart-4',
+ 'zIntResou-Recipe ID-4QueryStart-5',
+ 'zAsset Complete-6',
+ 'zAsset-Bundle Scope-12',
+ 'zAsset-Syndication State-13',
+ 'zAsset-Cloud is My Asset-14',
+ 'zAsset-Cloud is deletable-Asset-15',
+ 'zAsset-Cloud_Local_State-16',
+ 'zAsset-Visibility State-17',
+ 'zExtAttr-Camera Make-18',
+ 'zExtAttr-Camera Model-19',
+ 'zExtAttr-Lens Model-20',
+ 'zExtAttr-Flash Fired-21',
+ 'zExtAttr-Focal Lenght-22',
+ 'zExtAttr-Focal Lenth in 35MM-23',
+ 'zExtAttr-Digital Zoom Ratio-24',
+ 'zAsset-Derived Camera Capture Device-25',
+ 'zAddAssetAttr-Camera Captured Device-26',
+ 'zAddAssetAttr-Imported by-27',
+ 'zCldMast-Imported By-28',
+ 'zAddAssetAttr.Imported by Bundle Identifier-29',
+ 'zAddAssetAttr-Imported By Display Name-30',
+ 'zCldMast-Imported by Bundle ID-31',
+ 'zCldMast-Imported by Display Name-32',
+ 'zAsset-Saved Asset Type-33',
+ 'zAsset-Directory-Path-34',
+ 'zAsset-Filename-35',
+ 'zAddAssetAttr- Original Filename-36',
+ 'zCldMast- Original Filename-37',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-38',
+ ('zAsset-Added Date-39', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-40', 'datetime'),
+ ('zAddAssetAttr-Date Created Source-41', 'datetime'),
+ ('zAsset-Date Created-42', 'datetime'),
+ ('zCldMast-Creation Date-43', 'datetime'),
+ ('zIntResou-CldMst Date Created-44', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-45',
+ 'zAddAssetAttr-Time Zone Offset-46',
+ 'zAddAssetAttr-Inferred Time Zone Offset-47',
+ 'zAddAssetAttr-EXIF-String-48',
+ ('zAsset-Modification Date-49', 'datetime'),
+ ('zAsset-Last Shared Date-50', 'datetime'),
+ 'zCldMast-Cloud Local State-51',
+ ('zCldMast-Import Date-52', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-53', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-54',
+ ('zAddAssetAttr-Alt Import Image Date-55', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-56',
+ ('zAsset-Cloud Batch Publish Date-57', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-58', 'datetime'),
+ 'zAsset-Cloud Download Requests-59',
+ 'zAsset-Cloud Batch ID-60',
+ 'zAddAssetAttr-Upload Attempts-61',
+ 'zAsset-Latitude-62',
+ 'zExtAttr-Latitude-63',
+ 'zAsset-Longitude-64',
+ 'zExtAttr-Longitude-65',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-66',
+ 'zAddAssetAttr-Location Hash-67',
+ 'zAddAssetAttr-Shifted Location Valid-68',
+ 'zAddAssetAttr-Shifted Location Data-69',
+ 'zAddAssetAttr-Reverse Location Is Valid-70',
+ 'zAddAssetAttr-Reverse Location Data-71',
+ 'AAAzCldMastMedData-zOPT-72',
+ 'zAddAssetAttr-Media Metadata Type-73',
+ 'AAAzCldMastMedData-Data-74',
+ 'CldMasterzCldMastMedData-zOPT-75',
+ 'zCldMast-Media Metadata Type-76',
+ 'CMzCldMastMedData-Data-77',
+ 'zAddAssetAttr-Syndication History-78',
+ 'zMedAnlyAstAttr-Syndication Processing Version-79',
+ 'zMedAnlyAstAttr-Syndication Processing Value-80',
+ 'zAsset-Orientation-81',
+ 'zAddAssetAttr-Original Orientation-82',
+ 'zAsset-Kind-83',
+ 'zAsset-Kind-Sub-Type-84',
+ 'zAddAssetAttr-Cloud Kind Sub Type-85',
+ 'zAsset-Playback Style-86',
+ 'zAsset-Playback Variation-87',
+ 'zAsset-Video Duration-88',
+ 'zExtAttr-Duration-89',
+ 'zAsset-Video CP Duration-90',
+ 'zAddAssetAttr-Video CP Duration Time Scale-91',
+ 'zAsset-Video CP Visibility State-92',
+ 'zAddAssetAttr-Video CP Display Value-93',
+ 'zAddAssetAttr-Video CP Display Time Scale-94',
+ 'zIntResou-Datastore Class ID-95',
+ 'zAsset-Cloud Placeholder Kind-96',
+ 'zIntResou-Local Availability-97',
+ 'zIntResou-Local Availability Target-98',
+ 'zIntResou-Cloud Local State-99',
+ 'zIntResou-Remote Availability-100',
+ 'zIntResou-Remote Availability Target-101',
+ 'zIntResou-Transient Cloud Master-102',
+ 'zIntResou-Side Car Index-103',
+ 'zIntResou- File ID-104',
+ 'zIntResou-Version-105',
+ 'zAddAssetAttr- Original-File-Size-106',
+ 'zIntResou-Resource Type-107',
+ 'zIntResou-Datastore Sub-Type-108',
+ 'zIntResou-Cloud Source Type-109',
+ 'zIntResou-Data Length-110',
+ 'zIntResou-Recipe ID-111',
+ ('zIntResou-Cloud Last Prefetch Date-112', 'datetime'),
+ 'zIntResou-Cloud Prefetch Count-113',
+ ('zIntResou- Cloud-Last-OnDemand Download-Date-114', 'datetime'),
+ 'zIntResou-UniformTypeID_UTI_Conformance_Hint-115',
+ 'zIntResou-Compact-UTI-116',
+ 'zAsset-Uniform Type ID-117',
+ 'zAsset-Original Color Space-118',
+ 'zCldMast-Uniform_Type_ID-119',
+ 'zCldMast-Full Size JPEG Source-120',
+ 'zAsset-HDR Gain-121',
+ 'zAsset-zHDR_Type-122',
+ 'zExtAttr-Codec-123',
+ 'zIntResou-Codec Four Char Code Name-124',
+ 'zCldMast-Codec Name-125',
+ 'zCldMast-Video Frame Rate-126',
+ 'zCldMast-Placeholder State-127',
+ 'zAsset-Depth_Type-128',
+ 'zAsset-Avalanche UUID-129',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-130',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-131',
+ 'zAddAssetAttr-Cloud Recovery State-132',
+ 'zAddAssetAttr-Cloud State Recovery Attempts Count-133',
+ 'zAsset-Deferred Processing Needed-134',
+ 'zAsset-Video Deferred Processing Needed-135',
+ 'zAddAssetAttr-Deferred Photo Identifier-136',
+ 'zAddAssetAttr-Deferred Processing Candidate Options-137',
+ 'zAsset-Has Adjustments-Camera-Effects-Filters-138',
+ ('zAsset-Adjustment Timestamp-139', 'datetime'),
+ 'zAddAssetAttr-Editor Bundle ID-140',
+ 'zAddAssetAttr-Montage-141',
+ 'zAsset-Favorite-142',
+ 'zAsset-Hidden-143',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-144',
+ ('zAsset-Trashed Date-145', 'datetime'),
+ 'zIntResou-Trash State-146',
+ ('zIntResou-Trashed Date-147', 'datetime'),
+ 'zAsset-Cloud Delete State-148',
+ 'zIntResou-Cloud Delete State-149',
+ 'zAddAssetAttr-PTP Trashed State-150',
+ 'zIntResou-PTP Trashed State-151',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-152',
+ ('zMedAnlyAstAttr-Media Analysis Timestamp-153', 'datetime'),
+ ('zAsset-Analysis State Modification Date-154', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-155',
+ 'zAddAssetAttr- View Count-156',
+ 'zAddAssetAttr- Pending Play Count-157',
+ 'zAddAssetAttr- Play Count-158',
+ 'zAddAssetAttr- Pending Share Count-159',
+ 'zAddAssetAttr- Share Count-160',
+ 'zAddAssetAttr-Allowed for Analysis-161',
+ 'zAddAssetAttr-Scene Analysis Version-162',
+ 'zAddAssetAttr-Scene Analysis is From Preview-163',
+ ('zAddAssetAttr-Scene Analysis Timestamp-164', 'datetime'),
+ 'zAddAssetAttr-Destination Asset Copy State-165',
+ 'zAddAssetAttr-Source Asset for Duplication Scope ID-166',
+ 'zCldMast-Source Master For Duplication Scope ID-167',
+ 'zAddAssetAttr-Source Asset For Duplication ID-168',
+ 'zCldMast-Source Master for Duplication ID-169',
+ 'zAddAssetAttr-Variation Suggestions States-170',
+ 'zAsset-High Frame Rate State-171',
+ 'zAsset-Video Key Frame Time Scale-172',
+ 'zAsset-Video Key Frame Value-173',
+ 'zExtAttr-ISO-174',
+ 'zExtAttr-Metering Mode-175',
+ 'zExtAttr-Sample Rate-176',
+ 'zExtAttr-Track Format-177',
+ 'zExtAttr-White Balance-178',
+ 'zExtAttr-Aperture-179',
+ 'zExtAttr-BitRate-180',
+ 'zExtAttr-Exposure Bias-181',
+ 'zExtAttr-Frames Per Second-182',
+ 'zExtAttr-Shutter Speed-183',
+ 'zExtAttr-Slush Scene Bias-184',
+ 'zExtAttr-Slush Version-185',
+ 'zExtAttr-Slush Preset-186',
+ 'zExtAttr-Slush Warm Bias-187',
+ 'zAsset-Height-188',
+ 'zAddAssetAttr-Original Height-189',
+ 'zIntResou-Unoriented Height-190',
+ 'zAsset-Width-191',
+ 'zAddAssetAttr-Original Width-192',
+ 'zIntResou-Unoriented Width-193',
+ 'zAsset-Thumbnail Index-194',
+ 'zAddAssetAttr-Embedded Thumbnail Height-195',
+ 'zAddAssetAttr-Embedded Thumbnail Length-196',
+ 'zAddAssetAttr-Embedded Thumbnail Offset-197',
+ 'zAddAssetAttr-Embedded Thumbnail Width-198',
+ 'zAsset-Packed Acceptable Crop Rect-199',
+ 'zAsset-Packed Badge Attributes-200',
+ 'zAsset-Packed Preferred Crop Rect-201',
+ 'zAsset-Curation Score-202',
+ 'zAsset-Camera Processing Adjustment State-203',
+ 'zAsset-Depth Type-204',
+ 'zAsset-Is Magic Carpet-QuicktimeMOVfile-205',
+ 'zAddAssetAttr-Orig Resource Choice-206',
+ 'zAddAssetAttr-Spatial Over Capture Group ID-207',
+ 'zAddAssetAttr-Place Annotation Data-208',
+ 'zAddAssetAttr-Distance Identity-HEX-209',
+ 'zAddAssetAttr-Edited IPTC Attributes-210',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-211',
+ 'zAddAssetAttr-Accessibility Description-212',
+ 'zAddAssetAttr-Photo Stream Tag ID-213',
+ 'zAddAssetAttr-Share Type-214',
+ 'zAsset-Overall Aesthetic Score-215',
+ 'zAsset-zENT-216',
+ 'zAsset-zOPT-217',
+ 'zAsset-Master= zCldMast-zPK-218',
+ 'zAsset-Extended Attributes= zExtAttr-zPK-219',
+ 'zAsset-Import Session Key-220',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-221',
+ 'zAsset-Computed Attributes Asset Key-222',
+ 'zAsset-Promotion Score-223',
+ 'zAsset-Media Analysis Attributes Key-224',
+ 'zAsset-Media Group UUID-225',
+ 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-226',
+ 'zAsset.Cloud Collection GUID-227',
+ 'zAddAssetAttr-zENT-228',
+ 'ZAddAssetAttr-zOPT-229',
+ 'zAddAssetAttr-zAsset= zAsset_zPK-230',
+ 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-231',
+ 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-232',
+ 'zAddAssetAttr-Public Global UUID-233',
+ 'zAddAssetAttr-Original Assets UUID-234',
+ 'zAddAssetAttr-Originating Asset Identifier-235',
+ 'zAddAssetAttr.Adjusted Fingerprint-236',
+ 'zCldMast-zPK= zAsset-Master-237',
+ 'zCldMast-zENT-238',
+ 'zCldMast-zOPT-239',
+ 'zCldMast-Moment Share Key= zShare-zPK-240',
+ 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-241',
+ 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-242',
+ 'zCldMast-Originating Asset ID-243',
+ 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-244',
+ 'CMzCldMastMedData-zENT-245',
+ 'CMzCldMastMedData-CldMast= zCldMast-zPK-246',
+ 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-247',
+ 'AAAzCldMastMedData-zENT-248',
+ 'AAAzCldMastMedData-CldMast key-249',
+ 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-250',
+ 'zExtAttr-zPK= zAsset-zExtendedAttributes-251',
+ 'zExtAttr-zENT-252',
+ 'zExtAttr-zOPT-253',
+ 'zExtAttr-Asset Key-254',
+ 'zIntResou-zPK-255',
+ 'zIntResou-zENT-256',
+ 'zIntResou-zOPT-257',
+ 'zIntResou-Asset= zAsset_zPK-258',
+ 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-259',
+ 'zMedAnlyAstAttr-zEnt-260',
+ 'zMedAnlyAstAttr-zOpt-261',
+ 'zMedAnlyAstAttr-Asset= zAsset-zPK-262')
+ data_list = get_sqlite_db_records(source_path, query)
- else:
- logfunc('No Internal Resource data available for iOS 15 Syndication Photos Library Photos.sqlite')
-
- db.close()
- return
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found, "Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart',
zAsset.Z_PK AS 'zAsset-zPK',
@@ -8891,353 +8717,328 @@ def get_ph50intresouoptimzdatasyndpl(files_found, report_folder, seeker, wrap_te
LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
- row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
- row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
- row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
- row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
- row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
- row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
- row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
- row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
- row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
- row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
- row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
- row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
- row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
- row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
- row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
- row[268], row[269], row[270], row[271]))
-
- counter += 1
-
- description = 'Parses iOS 16 asset records from Syndication.photos.library-database-Photos.sqlite' \
- ' ZINTERNALRESOURCE and other tables. This and other related parsers should provide' \
- ' data for investigative analysis of assets being stored locally on the device verses' \
- ' assets being stored in iCloud Photos as the result of optimization. This is very large' \
- ' query and script, I recommend opening the TSV generated report with Zimmermans Tools' \
- ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \
- ' and filter the results.'
- report = ArtifactHtmlReport('Ph50.2-Asset_IntResou-SyndPL')
- report.start_artifact_report(report_folder, 'Ph50.2-Asset_IntResou-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-4QueryStart-0',
- 'zAsset-zPK-7',
- 'zAddAssetAttr-zPK-8',
- 'zAsset-UUID = store.cloudphotodb-9',
- 'zAddAssetAttr-Master Fingerprint-10',
- 'zIntResou-Fingerprint-11',
- 'zIntResou-Local Availability-4QueryStart-1',
- 'zIntResou-Remote Availability-4QueryStart-2',
- 'zIntResou-Resource Type-4QueryStart-3',
- 'zIntResou-Datastore Sub-Type-4QueryStart-4',
- 'zIntResou-Recipe ID-4QueryStart-5',
- 'zAsset Complete-6',
- 'zAsset-Bundle Scope-12',
- 'zAsset-Syndication State-13',
- 'zAsset-Cloud is My Asset-14',
- 'zAsset-Cloud is deletable-Asset-15',
- 'zAsset-Cloud_Local_State-16',
- 'zAsset-Visibility State-17',
- 'zExtAttr-Camera Make-18',
- 'zExtAttr-Camera Model-19',
- 'zExtAttr-Lens Model-20',
- 'zExtAttr-Flash Fired-21',
- 'zExtAttr-Focal Lenght-22',
- 'zExtAttr-Focal Lenth in 35MM-23',
- 'zExtAttr-Digital Zoom Ratio-24',
- 'zAsset-Derived Camera Capture Device-25',
- 'zAddAssetAttr-Camera Captured Device-26',
- 'zAddAssetAttr-Imported by-27',
- 'zCldMast-Imported By-28',
- 'zAddAssetAttr.Imported by Bundle Identifier-29',
- 'zAddAssetAttr-Imported By Display Name-30',
- 'zCldMast-Imported by Bundle ID-31',
- 'zCldMast-Imported by Display Name-32',
- 'zAsset-Saved Asset Type-33',
- 'zAsset-Directory-Path-34',
- 'zAsset-Filename-35',
- 'zAddAssetAttr- Original Filename-36',
- 'zCldMast- Original Filename-37',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-38',
- 'zAsset-Active Library Scope Participation State-39',
- 'zAsset-Library Scope Share State- StillTesting-40',
- 'zAsset-Added Date-41',
- 'zAsset- SortToken -CameraRoll-42',
- 'zAddAssetAttr-Date Created Source-43',
- 'zAsset-Date Created-44',
- 'zCldMast-Creation Date-45',
- 'zIntResou-CldMst Date Created-46',
- 'zAddAssetAttr-Time Zone Name-47',
- 'zAddAssetAttr-Time Zone Offset-48',
- 'zAddAssetAttr-Inferred Time Zone Offset-49',
- 'zAddAssetAttr-EXIF-String-50',
- 'zAsset-Modification Date-51',
- 'zAsset-Last Shared Date-52',
- 'zCldMast-Cloud Local State-53',
- 'zCldMast-Import Date-54',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-55',
- 'zAddAssetAttr-Import Session ID-56',
- 'zAddAssetAttr-Alt Import Image Date-57',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-58',
- 'zAsset-Cloud Batch Publish Date-59',
- 'zAsset-Cloud Server Publish Date-60',
- 'zAsset-Cloud Download Requests-61',
- 'zAsset-Cloud Batch ID-62',
- 'zAddAssetAttr-Upload Attempts-63',
- 'zAsset-Latitude-64',
- 'zExtAttr-Latitude-65',
- 'zAsset-Longitude-66',
- 'zExtAttr-Longitude-67',
- 'zAddAssetAttr-GPS Horizontal Accuracy-68',
- 'zAddAssetAttr-Location Hash-69',
- 'zAddAssetAttr-Shifted Location Valid-70',
- 'zAddAssetAttr-Shifted Location Data-71',
- 'zAddAssetAttr-Reverse Location Is Valid-72',
- 'zAddAssetAttr-Reverse Location Data-73',
- 'AAAzCldMastMedData-zOPT-74',
- 'zAddAssetAttr-Media Metadata Type-75',
- 'AAAzCldMastMedData-Data-76',
- 'CldMasterzCldMastMedData-zOPT-77',
- 'zCldMast-Media Metadata Type-78',
- 'CMzCldMastMedData-Data-79',
- 'zAsset-Search Index Rebuild State-80',
- 'zAddAssetAttr-Syndication History-81',
- 'zMedAnlyAstAttr-Syndication Processing Version-82',
- 'zMedAnlyAstAttr-Syndication Processing Value-83',
- 'zAsset-Orientation-84',
- 'zAddAssetAttr-Original Orientation-85',
- 'zAsset-Kind-86',
- 'zAsset-Kind-Sub-Type-87',
- 'zAddAssetAttr-Cloud Kind Sub Type-88',
- 'zAsset-Playback Style-89',
- 'zAsset-Playback Variation-90',
- 'zAsset-Video Duration-91',
- 'zExtAttr-Duration-92',
- 'zAsset-Video CP Duration-93',
- 'zAddAssetAttr-Video CP Duration Time Scale-94',
- 'zAsset-Video CP Visibility State-95',
- 'zAddAssetAttr-Video CP Display Value-96',
- 'zAddAssetAttr-Video CP Display Time Scale-97',
- 'zIntResou-Datastore Class ID-98',
- 'zAsset-Cloud Placeholder Kind-99',
- 'zIntResou-Local Availability-100',
- 'zIntResou-Local Availability Target-101',
- 'zIntResou-Cloud Local State-102',
- 'zIntResou-Remote Availability-103',
- 'zIntResou-Remote Availability Target-104',
- 'zIntResou-Transient Cloud Master-105',
- 'zIntResou-Side Car Index-106',
- 'zIntResou- File ID-107',
- 'zIntResou-Version-108',
- 'zAddAssetAttr- Original-File-Size-109',
- 'zIntResou-Resource Type-110',
- 'zIntResou-Datastore Sub-Type-111',
- 'zIntResou-Cloud Source Type-112',
- 'zIntResou-Data Length-113',
- 'zIntResou-Recipe ID-114',
- 'zIntResou-Cloud Last Prefetch Date-115',
- 'zIntResou-Cloud Prefetch Count-116',
- 'zIntResou- Cloud-Last-OnDemand Download-Date-117',
- 'zIntResou-UniformTypeID_UTI_Conformance_Hint-118',
- 'zIntResou-Compact-UTI-119',
- 'zAsset-Uniform Type ID-120',
- 'zAsset-Original Color Space-121',
- 'zCldMast-Uniform_Type_ID-122',
- 'zCldMast-Full Size JPEG Source-123',
- 'zAsset-HDR Gain-124',
- 'zAsset-zHDR_Type-125',
- 'zExtAttr-Codec-126',
- 'zIntResou-Codec Four Char Code Name-127',
- 'zCldMast-Codec Name-128',
- 'zCldMast-Video Frame Rate-129',
- 'zCldMast-Placeholder State-130',
- 'zAsset-Depth_Type-131',
- 'zAsset-Avalanche UUID-132',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-133',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-134',
- 'zAddAssetAttr-Cloud Recovery State-135',
- 'zAddAssetAttr-Cloud State Recovery Attempts Count-136',
- 'zAsset-Deferred Processing Needed-137',
- 'zAsset-Video Deferred Processing Needed-138',
- 'zAddAssetAttr-Deferred Photo Identifier-139',
- 'zAddAssetAttr-Deferred Processing Candidate Options-140',
- 'zAsset-Has Adjustments-Camera-Effects-Filters-141',
- 'zAsset-Adjustment Timestamp-142',
- 'zAddAssetAttr-Editor Bundle ID-143',
- 'zAddAssetAttr-Montage-144',
- 'zAsset-Favorite-145',
- 'zAsset-Hidden-146',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-147',
- 'zAsset-Trashed Date-148',
- 'zAsset-Trashed by Participant= zSharePartic_zPK-149',
- 'zAsset-Delete-Reason-150',
- 'zIntResou-Trash State-151',
- 'zIntResou-Trashed Date-152',
- 'zAsset-Cloud Delete State-153',
- 'zIntResou-Cloud Delete State-154',
- 'zAddAssetAttr-PTP Trashed State-155',
- 'zIntResou-PTP Trashed State-156',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-157',
- 'zMedAnlyAstAttr-Media Analysis Timestamp-158',
- 'zAsset-Analysis State Modificaion Date-159',
- 'zAddAssetAttr- Pending View Count-160',
- 'zAddAssetAttr- View Count-161',
- 'zAddAssetAttr- Pending Play Count-162',
- 'zAddAssetAttr- Play Count-163',
- 'zAddAssetAttr- Pending Share Count-164',
- 'zAddAssetAttr- Share Count-165',
- 'zAddAssetAttr-Allowed for Analysis-166',
- 'zAddAssetAttr-Scene Analysis Version-167',
- 'zAddAssetAttr-Scene Analysis is From Preview-168',
- 'zAddAssetAttr-Scene Analysis Timestamp-169',
- 'zAsset-Duplication Asset Visibility State-170',
- 'zAddAssetAttr-Destination Asset Copy State-171',
- 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-172',
- 'zAddAssetAttr-Source Asset for Duplication Scope ID-173',
- 'zCldMast-Source Master For Duplication Scope ID-174',
- 'zAddAssetAttr-Source Asset For Duplication ID-175',
- 'zCldMast-Source Master for Duplication ID-176',
- 'zAddAssetAttr-Variation Suggestions States-177',
- 'zAsset-High Frame Rate State-178',
- 'zAsset-Video Key Frame Time Scale-179',
- 'zAsset-Video Key Frame Value-180',
- 'zExtAttr-ISO-181',
- 'zExtAttr-Metering Mode-182',
- 'zExtAttr-Sample Rate-183',
- 'zExtAttr-Track Format-184',
- 'zExtAttr-White Balance-185',
- 'zExtAttr-Aperture-186',
- 'zExtAttr-BitRate-187',
- 'zExtAttr-Exposure Bias-188',
- 'zExtAttr-Frames Per Second-189',
- 'zExtAttr-Shutter Speed-190',
- 'zExtAttr-Slush Scene Bias-191',
- 'zExtAttr-Slush Version-192',
- 'zExtAttr-Slush Preset-193',
- 'zExtAttr-Slush Warm Bias-194',
- 'zAsset-Height-195',
- 'zAddAssetAttr-Original Height-196',
- 'zIntResou-Unoriented Height-197',
- 'zAsset-Width-198',
- 'zAddAssetAttr-Original Width-199',
- 'zIntResou-Unoriented Width-200',
- 'zAsset-Thumbnail Index-201',
- 'zAddAssetAttr-Embedded Thumbnail Height-202',
- 'zAddAssetAttr-Embedded Thumbnail Length-203',
- 'zAddAssetAttr-Embedded Thumbnail Offset-204',
- 'zAddAssetAttr-Embedded Thumbnail Width-205',
- 'zAsset-Packed Acceptable Crop Rect-206',
- 'zAsset-Packed Badge Attributes-207',
- 'zAsset-Packed Preferred Crop Rect-208',
- 'zAsset-Curation Score-209',
- 'zAsset-Camera Processing Adjustment State-210',
- 'zAsset-Depth Type-211',
- 'zAsset-Is Magic Carpet-QuicktimeMOVfile-212',
- 'zAddAssetAttr-Orig Resource Choice-213',
- 'zAddAssetAttr-Spatial Over Capture Group ID-214',
- 'zAddAssetAttr-Place Annotation Data-215',
- 'zAddAssetAttr-Distance Identity-HEX-216',
- 'zAddAssetAttr-Edited IPTC Attributes-217',
- 'zAddAssetAttr-Title-Comments via Cloud Website-218',
- 'zAddAssetAttr-Accessibility Description-219',
- 'zAddAssetAttr-Photo Stream Tag ID-220',
- 'zAddAssetAttr-Share Type-221',
- 'zAddAssetAttr-Library Scope Asset Contributors To Update-222',
- 'zAsset-Overall Aesthetic Score-223',
- 'zAsset-zENT-224',
- 'zAsset-zOPT-225',
- 'zAsset-Master= zCldMast-zPK-226',
- 'zAsset-Extended Attributes= zExtAttr-zPK-227',
- 'zAsset-Import Session Key-228',
- 'zAsset-Photo Analysis Attributes Key-229',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-230',
- 'zAsset-Computed Attributes Asset Key-231',
- 'zAsset-Promotion Score-232',
- 'zAsset-Media Analysis Attributes Key-233',
- 'zAsset-Media Group UUID-234',
- 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-235',
- 'zAsset.Cloud Collection GUID-236',
- 'zAddAssetAttr-zENT-237',
- 'ZAddAssetAttr-zOPT-238',
- 'zAddAssetAttr-zAsset= zAsset_zPK-239',
- 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-240',
- 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-241',
- 'zAddAssetAttr-Public Global UUID-242',
- 'zAddAssetAttr-Original Assets UUID-243',
- 'zAddAssetAttr-Originating Asset Identifier-244',
- 'zAddAssetAttr.Adjusted Fingerprint-245',
- 'zCldMast-zPK= zAsset-Master-246',
- 'zCldMast-zENT-247',
- 'zCldMast-zOPT-248',
- 'zCldMast-Moment Share Key= zShare-zPK-249',
- 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-250',
- 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-251',
- 'zCldMast-Originating Asset ID-252',
- 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-253',
- 'CMzCldMastMedData-zENT-254',
- 'CMzCldMastMedData-CldMast= zCldMast-zPK-255',
- 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-256',
- 'AAAzCldMastMedData-zENT-257',
- 'AAAzCldMastMedData-CldMast key-258',
- 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-259',
- 'zExtAttr-zPK= zAsset-zExtendedAttributes-260',
- 'zExtAttr-zENT-261',
- 'zExtAttr-zOPT-262',
- 'zExtAttr-Asset Key-263',
- 'zIntResou-zPK-264',
- 'zIntResou-zENT-265',
- 'zIntResou-zOPT-266',
- 'zIntResou-Asset= zAsset_zPK-267',
- 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-268',
- 'zMedAnlyAstAttr-zEnt-269',
- 'zMedAnlyAstAttr-zOpt-270',
- 'zMedAnlyAstAttr-Asset= zAsset-zPK-271')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
+ '''
- tsvname = 'Ph50.2-Asset_IntResou-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
+ row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
+ row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
+ row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
+ row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
+ row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
+ row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
+ row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
+ row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
+ row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
+ row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
+ row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
+ row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
+ row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
+ row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
+ row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
+ row[268], row[269], row[270], row[271]))
- tlactivity = 'Ph50.2-Asset_IntResou-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'),
+ 'zAsset-zPK-7',
+ 'zAddAssetAttr-zPK-8',
+ 'zAsset-UUID = store.cloudphotodb-9',
+ 'zAddAssetAttr-Master Fingerprint-10',
+ 'zIntResou-Fingerprint-11',
+ 'zIntResou-Local Availability-4QueryStart-1',
+ 'zIntResou-Remote Availability-4QueryStart-2',
+ 'zIntResou-Resource Type-4QueryStart-3',
+ 'zIntResou-Datastore Sub-Type-4QueryStart-4',
+ 'zIntResou-Recipe ID-4QueryStart-5',
+ 'zAsset Complete-6',
+ 'zAsset-Bundle Scope-12',
+ 'zAsset-Syndication State-13',
+ 'zAsset-Cloud is My Asset-14',
+ 'zAsset-Cloud is deletable-Asset-15',
+ 'zAsset-Cloud_Local_State-16',
+ 'zAsset-Visibility State-17',
+ 'zExtAttr-Camera Make-18',
+ 'zExtAttr-Camera Model-19',
+ 'zExtAttr-Lens Model-20',
+ 'zExtAttr-Flash Fired-21',
+ 'zExtAttr-Focal Lenght-22',
+ 'zExtAttr-Focal Lenth in 35MM-23',
+ 'zExtAttr-Digital Zoom Ratio-24',
+ 'zAsset-Derived Camera Capture Device-25',
+ 'zAddAssetAttr-Camera Captured Device-26',
+ 'zAddAssetAttr-Imported by-27',
+ 'zCldMast-Imported By-28',
+ 'zAddAssetAttr.Imported by Bundle Identifier-29',
+ 'zAddAssetAttr-Imported By Display Name-30',
+ 'zCldMast-Imported by Bundle ID-31',
+ 'zCldMast-Imported by Display Name-32',
+ 'zAsset-Saved Asset Type-33',
+ 'zAsset-Directory-Path-34',
+ 'zAsset-Filename-35',
+ 'zAddAssetAttr- Original Filename-36',
+ 'zCldMast- Original Filename-37',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-38',
+ 'zAsset-Active Library Scope Participation State-39',
+ 'zAsset-Library Scope Share State- StillTesting-40',
+ ('zAsset-Added Date-41', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-42', 'datetime'),
+ ('zAddAssetAttr-Date Created Source-43', 'datetime'),
+ ('zAsset-Date Created-44', 'datetime'),
+ ('zCldMast-Creation Date-45', 'datetime'),
+ ('zIntResou-CldMst Date Created-46', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-47',
+ 'zAddAssetAttr-Time Zone Offset-48',
+ 'zAddAssetAttr-Inferred Time Zone Offset-49',
+ 'zAddAssetAttr-EXIF-String-50',
+ ('zAsset-Modification Date-51', 'datetime'),
+ ('zAsset-Last Shared Date-52', 'datetime'),
+ 'zCldMast-Cloud Local State-53',
+ ('zCldMast-Import Date-54', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-55', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-56',
+ ('zAddAssetAttr-Alt Import Image Date-57', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-58',
+ ('zAsset-Cloud Batch Publish Date-59', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-60', 'datetime'),
+ 'zAsset-Cloud Download Requests-61',
+ 'zAsset-Cloud Batch ID-62',
+ 'zAddAssetAttr-Upload Attempts-63',
+ 'zAsset-Latitude-64',
+ 'zExtAttr-Latitude-65',
+ 'zAsset-Longitude-66',
+ 'zExtAttr-Longitude-67',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-68',
+ 'zAddAssetAttr-Location Hash-69',
+ 'zAddAssetAttr-Shifted Location Valid-70',
+ 'zAddAssetAttr-Shifted Location Data-71',
+ 'zAddAssetAttr-Reverse Location Is Valid-72',
+ 'zAddAssetAttr-Reverse Location Data-73',
+ 'AAAzCldMastMedData-zOPT-74',
+ 'zAddAssetAttr-Media Metadata Type-75',
+ 'AAAzCldMastMedData-Data-76',
+ 'CldMasterzCldMastMedData-zOPT-77',
+ 'zCldMast-Media Metadata Type-78',
+ 'CMzCldMastMedData-Data-79',
+ 'zAsset-Search Index Rebuild State-80',
+ 'zAddAssetAttr-Syndication History-81',
+ 'zMedAnlyAstAttr-Syndication Processing Version-82',
+ 'zMedAnlyAstAttr-Syndication Processing Value-83',
+ 'zAsset-Orientation-84',
+ 'zAddAssetAttr-Original Orientation-85',
+ 'zAsset-Kind-86',
+ 'zAsset-Kind-Sub-Type-87',
+ 'zAddAssetAttr-Cloud Kind Sub Type-88',
+ 'zAsset-Playback Style-89',
+ 'zAsset-Playback Variation-90',
+ 'zAsset-Video Duration-91',
+ 'zExtAttr-Duration-92',
+ 'zAsset-Video CP Duration-93',
+ 'zAddAssetAttr-Video CP Duration Time Scale-94',
+ 'zAsset-Video CP Visibility State-95',
+ 'zAddAssetAttr-Video CP Display Value-96',
+ 'zAddAssetAttr-Video CP Display Time Scale-97',
+ 'zIntResou-Datastore Class ID-98',
+ 'zAsset-Cloud Placeholder Kind-99',
+ 'zIntResou-Local Availability-100',
+ 'zIntResou-Local Availability Target-101',
+ 'zIntResou-Cloud Local State-102',
+ 'zIntResou-Remote Availability-103',
+ 'zIntResou-Remote Availability Target-104',
+ 'zIntResou-Transient Cloud Master-105',
+ 'zIntResou-Side Car Index-106',
+ 'zIntResou- File ID-107',
+ 'zIntResou-Version-108',
+ 'zAddAssetAttr- Original-File-Size-109',
+ 'zIntResou-Resource Type-110',
+ 'zIntResou-Datastore Sub-Type-111',
+ 'zIntResou-Cloud Source Type-112',
+ 'zIntResou-Data Length-113',
+ 'zIntResou-Recipe ID-114',
+ ('zIntResou-Cloud Last Prefetch Date-115', 'datetime'),
+ 'zIntResou-Cloud Prefetch Count-116',
+ ('zIntResou- Cloud-Last-OnDemand Download-Date-117', 'datetime'),
+ 'zIntResou-UniformTypeID_UTI_Conformance_Hint-118',
+ 'zIntResou-Compact-UTI-119',
+ 'zAsset-Uniform Type ID-120',
+ 'zAsset-Original Color Space-121',
+ 'zCldMast-Uniform_Type_ID-122',
+ 'zCldMast-Full Size JPEG Source-123',
+ 'zAsset-HDR Gain-124',
+ 'zAsset-zHDR_Type-125',
+ 'zExtAttr-Codec-126',
+ 'zIntResou-Codec Four Char Code Name-127',
+ 'zCldMast-Codec Name-128',
+ 'zCldMast-Video Frame Rate-129',
+ 'zCldMast-Placeholder State-130',
+ 'zAsset-Depth_Type-131',
+ 'zAsset-Avalanche UUID-132',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-133',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-134',
+ 'zAddAssetAttr-Cloud Recovery State-135',
+ 'zAddAssetAttr-Cloud State Recovery Attempts Count-136',
+ 'zAsset-Deferred Processing Needed-137',
+ 'zAsset-Video Deferred Processing Needed-138',
+ 'zAddAssetAttr-Deferred Photo Identifier-139',
+ 'zAddAssetAttr-Deferred Processing Candidate Options-140',
+ 'zAsset-Has Adjustments-Camera-Effects-Filters-141',
+ ('zAsset-Adjustment Timestamp-142', 'datetime'),
+ 'zAddAssetAttr-Editor Bundle ID-143',
+ 'zAddAssetAttr-Montage-144',
+ 'zAsset-Favorite-145',
+ 'zAsset-Hidden-146',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-147',
+ ('zAsset-Trashed Date-148', 'datetime'),
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-149',
+ 'zAsset-Delete-Reason-150',
+ 'zIntResou-Trash State-151',
+ ('zIntResou-Trashed Date-152', 'datetime'),
+ 'zAsset-Cloud Delete State-153',
+ 'zIntResou-Cloud Delete State-154',
+ 'zAddAssetAttr-PTP Trashed State-155',
+ 'zIntResou-PTP Trashed State-156',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-157',
+ ('zMedAnlyAstAttr-Media Analysis Timestamp-158', 'datetime'),
+ ('zAsset-Analysis State Modification Date-159', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-160',
+ 'zAddAssetAttr- View Count-161',
+ 'zAddAssetAttr- Pending Play Count-162',
+ 'zAddAssetAttr- Play Count-163',
+ 'zAddAssetAttr- Pending Share Count-164',
+ 'zAddAssetAttr- Share Count-165',
+ 'zAddAssetAttr-Allowed for Analysis-166',
+ 'zAddAssetAttr-Scene Analysis Version-167',
+ 'zAddAssetAttr-Scene Analysis is From Preview-168',
+ ('zAddAssetAttr-Scene Analysis Timestamp-169', 'datetime'),
+ 'zAsset-Duplication Asset Visibility State-170',
+ 'zAddAssetAttr-Destination Asset Copy State-171',
+ 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-172',
+ 'zAddAssetAttr-Source Asset for Duplication Scope ID-173',
+ 'zCldMast-Source Master For Duplication Scope ID-174',
+ 'zAddAssetAttr-Source Asset For Duplication ID-175',
+ 'zCldMast-Source Master for Duplication ID-176',
+ 'zAddAssetAttr-Variation Suggestions States-177',
+ 'zAsset-High Frame Rate State-178',
+ 'zAsset-Video Key Frame Time Scale-179',
+ 'zAsset-Video Key Frame Value-180',
+ 'zExtAttr-ISO-181',
+ 'zExtAttr-Metering Mode-182',
+ 'zExtAttr-Sample Rate-183',
+ 'zExtAttr-Track Format-184',
+ 'zExtAttr-White Balance-185',
+ 'zExtAttr-Aperture-186',
+ 'zExtAttr-BitRate-187',
+ 'zExtAttr-Exposure Bias-188',
+ 'zExtAttr-Frames Per Second-189',
+ 'zExtAttr-Shutter Speed-190',
+ 'zExtAttr-Slush Scene Bias-191',
+ 'zExtAttr-Slush Version-192',
+ 'zExtAttr-Slush Preset-193',
+ 'zExtAttr-Slush Warm Bias-194',
+ 'zAsset-Height-195',
+ 'zAddAssetAttr-Original Height-196',
+ 'zIntResou-Unoriented Height-197',
+ 'zAsset-Width-198',
+ 'zAddAssetAttr-Original Width-199',
+ 'zIntResou-Unoriented Width-200',
+ 'zAsset-Thumbnail Index-201',
+ 'zAddAssetAttr-Embedded Thumbnail Height-202',
+ 'zAddAssetAttr-Embedded Thumbnail Length-203',
+ 'zAddAssetAttr-Embedded Thumbnail Offset-204',
+ 'zAddAssetAttr-Embedded Thumbnail Width-205',
+ 'zAsset-Packed Acceptable Crop Rect-206',
+ 'zAsset-Packed Badge Attributes-207',
+ 'zAsset-Packed Preferred Crop Rect-208',
+ 'zAsset-Curation Score-209',
+ 'zAsset-Camera Processing Adjustment State-210',
+ 'zAsset-Depth Type-211',
+ 'zAsset-Is Magic Carpet-QuicktimeMOVfile-212',
+ 'zAddAssetAttr-Orig Resource Choice-213',
+ 'zAddAssetAttr-Spatial Over Capture Group ID-214',
+ 'zAddAssetAttr-Place Annotation Data-215',
+ 'zAddAssetAttr-Distance Identity-HEX-216',
+ 'zAddAssetAttr-Edited IPTC Attributes-217',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-218',
+ 'zAddAssetAttr-Accessibility Description-219',
+ 'zAddAssetAttr-Photo Stream Tag ID-220',
+ 'zAddAssetAttr-Share Type-221',
+ 'zAddAssetAttr-Library Scope Asset Contributors To Update-222',
+ 'zAsset-Overall Aesthetic Score-223',
+ 'zAsset-zENT-224',
+ 'zAsset-zOPT-225',
+ 'zAsset-Master= zCldMast-zPK-226',
+ 'zAsset-Extended Attributes= zExtAttr-zPK-227',
+ 'zAsset-Import Session Key-228',
+ 'zAsset-Photo Analysis Attributes Key-229',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-230',
+ 'zAsset-Computed Attributes Asset Key-231',
+ 'zAsset-Promotion Score-232',
+ 'zAsset-Media Analysis Attributes Key-233',
+ 'zAsset-Media Group UUID-234',
+ 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-235',
+ 'zAsset.Cloud Collection GUID-236',
+ 'zAddAssetAttr-zENT-237',
+ 'ZAddAssetAttr-zOPT-238',
+ 'zAddAssetAttr-zAsset= zAsset_zPK-239',
+ 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-240',
+ 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-241',
+ 'zAddAssetAttr-Public Global UUID-242',
+ 'zAddAssetAttr-Original Assets UUID-243',
+ 'zAddAssetAttr-Originating Asset Identifier-244',
+ 'zAddAssetAttr.Adjusted Fingerprint-245',
+ 'zCldMast-zPK= zAsset-Master-246',
+ 'zCldMast-zENT-247',
+ 'zCldMast-zOPT-248',
+ 'zCldMast-Moment Share Key= zShare-zPK-249',
+ 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-250',
+ 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-251',
+ 'zCldMast-Originating Asset ID-252',
+ 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-253',
+ 'CMzCldMastMedData-zENT-254',
+ 'CMzCldMastMedData-CldMast= zCldMast-zPK-255',
+ 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-256',
+ 'AAAzCldMastMedData-zENT-257',
+ 'AAAzCldMastMedData-CldMast key-258',
+ 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-259',
+ 'zExtAttr-zPK= zAsset-zExtendedAttributes-260',
+ 'zExtAttr-zENT-261',
+ 'zExtAttr-zOPT-262',
+ 'zExtAttr-Asset Key-263',
+ 'zIntResou-zPK-264',
+ 'zIntResou-zENT-265',
+ 'zIntResou-zOPT-266',
+ 'zIntResou-Asset= zAsset_zPK-267',
+ 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-268',
+ 'zMedAnlyAstAttr-zEnt-269',
+ 'zMedAnlyAstAttr-zOpt-270',
+ 'zMedAnlyAstAttr-Asset= zAsset-zPK-271')
+ data_list = get_sqlite_db_records(source_path, query)
- else:
- logfunc('No Internal Resource data available for iOS 16 Syndication Photos Library Photos.sqlite')
-
- db.close()
- return
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found, "Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart',
zAsset.Z_PK AS 'zAsset-zPK',
@@ -10077,356 +9878,331 @@ def get_ph50intresouoptimzdatasyndpl(files_found, report_folder, seeker, wrap_te
LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
- row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
- row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
- row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
- row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
- row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
- row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
- row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
- row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
- row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
- row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
- row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
- row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
- row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
- row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
- row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
- row[268], row[269], row[270], row[271], row[272], row[273], row[274]))
-
- counter += 1
-
- description = 'Parses iOS 17 asset records from Syndication.photos.library-database-Photos.sqlite' \
- ' ZINTERNALRESOURCE and other tables. This and other related parsers should provide' \
- ' data for investigative analysis of assets being stored locally on the device verses' \
- ' assets being stored in iCloud Photos as the result of optimization. This is very large' \
- ' query and script, I recommend opening the TSV generated report with Zimmermans Tools' \
- ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \
- ' and filter the results.'
- report = ArtifactHtmlReport('Ph50.2-Asset_IntResou-SyndPL')
- report.start_artifact_report(report_folder, 'Ph50.2-Asset_IntResou-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-4QueryStart-0',
- 'zAsset-zPK-1',
- 'zAddAssetAttr-zPK-2',
- 'zAsset-UUID = store.cloudphotodb-3',
- 'zAddAssetAttr-Master Fingerprint-4',
- 'zAddAssetAttr.Adjusted Fingerprint-5',
- 'zIntResou-Fingerprint-6',
- 'zIntResou-Local Availability-4QueryStart-7',
- 'zIntResou-Remote Availability-4QueryStart-8',
- 'zIntResou-Resource Type-4QueryStart-9',
- 'zIntResou-Datastore Sub-Type-4QueryStart-10',
- 'zIntResou-Recipe ID-4QueryStart-11',
- 'zAsset Complete-12',
- 'zAsset-Bundle Scope-13',
- 'zAsset-Syndication State-14',
- 'zAsset-Cloud is My Asset-15',
- 'zAsset-Cloud is deletable-Asset-16',
- 'zAsset-Cloud_Local_State-17',
- 'zAsset-Visibility State-18',
- 'zExtAttr-Camera Make-19',
- 'zExtAttr-Camera Model-20',
- 'zExtAttr-Lens Model-21',
- 'zExtAttr-Flash Fired-22',
- 'zExtAttr-Focal Lenght-23',
- 'zExtAttr-Focal Length in 35MM-24',
- 'zExtAttr-Digital Zoom Ratio-25',
- 'zAsset-Derived Camera Capture Device-26',
- 'zAddAssetAttr-Camera Captured Device-27',
- 'zAddAssetAttr-Imported by-28',
- 'zCldMast-Imported By-29',
- 'zAddAssetAttr.Imported by Bundle Identifier-30',
- 'zAddAssetAttr-Imported By Display Name-31',
- 'zCldMast-Imported by Bundle ID-32',
- 'zCldMast-Imported by Display Name-33',
- 'zAsset-Saved Asset Type-34',
- 'zAsset-Directory-Path-35',
- 'zAsset-Filename-36',
- 'zAddAssetAttr- Original Filename-37',
- 'zCldMast- Original Filename-38',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-39',
- 'zAsset-Active Library Scope Participation State-40',
- 'zAsset-Library Scope Share State- StillTesting-41',
- 'zAsset-Added Date-42',
- 'zAsset- SortToken -CameraRoll-43',
- 'zAddAssetAttr-Date Created Source-44',
- 'zAsset-Date Created-45',
- 'zCldMast-Creation Date-46',
- 'zIntResou-CldMst Date Created-47',
- 'zAddAssetAttr-Time Zone Name-48',
- 'zAddAssetAttr-Time Zone Offset-49',
- 'zAddAssetAttr-Inferred Time Zone Offset-50',
- 'zAddAssetAttr-EXIF-String-51',
- 'zAsset-Modification Date-52',
- 'zAsset-Last Shared Date-53',
- 'zCldMast-Cloud Local State-54',
- 'zCldMast-Import Date-55',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-56',
- 'zAddAssetAttr-Import Session ID-57',
- 'zAddAssetAttr-Alt Import Image Date-58',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-59',
- 'zAsset-Cloud Batch Publish Date-60',
- 'zAsset-Cloud Server Publish Date-61',
- 'zAsset-Cloud Download Requests-62',
- 'zAsset-Cloud Batch ID-63',
- 'zAddAssetAttr-Upload Attempts-64',
- 'zAsset-Latitude-65',
- 'zExtAttr-Latitude-66',
- 'zAsset-Longitude-67',
- 'zExtAttr-Longitude-68',
- 'zAddAssetAttr-GPS Horizontal Accuracy-69',
- 'zAddAssetAttr-Location Hash-70',
- 'zAddAssetAttr-Shifted Location Valid-71',
- 'zAddAssetAttr-Shifted Location Data-72',
- 'zAddAssetAttr-Reverse Location Is Valid-73',
- 'zAddAssetAttr-Reverse Location Data-74',
- 'AAAzCldMastMedData-zOPT-75',
- 'zAddAssetAttr-Media Metadata Type-76',
- 'AAAzCldMastMedData-Data-77',
- 'CldMasterzCldMastMedData-zOPT-78',
- 'zCldMast-Media Metadata Type-79',
- 'CMzCldMastMedData-Data-80',
- 'zAsset-Search Index Rebuild State-81',
- 'zAddAssetAttr-Syndication History-82',
- 'zMedAnlyAstAttr-Syndication Processing Version-83',
- 'zMedAnlyAstAttr-Syndication Processing Value-84',
- 'zAsset-Orientation-85',
- 'zAddAssetAttr-Original Orientation-86',
- 'zAsset-Kind-87',
- 'zAsset-Kind-Sub-Type-88',
- 'zAddAssetAttr-Cloud Kind Sub Type-89',
- 'zAsset-Playback Style-90',
- 'zAsset-Playback Variation-91',
- 'zAsset-Video Duration-92',
- 'zExtAttr-Duration-93',
- 'zAsset-Video CP Duration-94',
- 'zAddAssetAttr-Video CP Duration Time Scale-95',
- 'zAsset-Video CP Visibility State-96',
- 'zAddAssetAttr-Video CP Display Value-97',
- 'zAddAssetAttr-Video CP Display Time Scale-98',
- 'zIntResou-Datastore Class ID-99',
- 'zAsset-Cloud Placeholder Kind-100',
- 'zIntResou-Local Availability-101',
- 'zIntResou-Local Availability Target-102',
- 'zIntResou-Cloud Local State-103',
- 'zIntResou-Remote Availability-104',
- 'zIntResou-Remote Availability Target-105',
- 'zIntResou-Transient Cloud Master-106',
- 'zIntResou-Side Car Index-107',
- 'zIntResou- File ID-108',
- 'zIntResou-Version-109',
- 'zAddAssetAttr- Original-File-Size-110',
- 'zIntResou-Resource Type-111',
- 'zIntResou-Datastore Sub-Type-112',
- 'zIntResou-Cloud Source Type-113',
- 'zIntResou-Data Length-114',
- 'zIntResou-Recipe ID-115',
- 'zIntResou-Cloud Last Prefetch Date-116',
- 'zIntResou-Cloud Prefetch Count-117',
- 'zIntResou- Cloud-Last-OnDemand Download-Date-118',
- 'zIntResou-UniformTypeID_UTI_Conformance_Hint-119',
- 'zIntResou-Compact-UTI-120',
- 'zAsset-Uniform Type ID-121',
- 'zAsset-Original Color Space-122',
- 'zCldMast-Uniform_Type_ID-123',
- 'zCldMast-Full Size JPEG Source-124',
- 'zAsset-HDR Gain-125',
- 'zAsset-zHDR_Type-126',
- 'zExtAttr-Codec-127',
- 'zIntResou-Codec Four Char Code Name-128',
- 'zCldMast-Codec Name-129',
- 'zCldMast-Video Frame Rate-130',
- 'zCldMast-Placeholder State-131',
- 'zAsset-Depth_Type-132',
- 'zAsset-Avalanche UUID-133',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-134',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-135',
- 'zAddAssetAttr-Cloud Recovery State-136',
- 'zAddAssetAttr-Cloud State Recovery Attempts Count-137',
- 'zAsset-Deferred Processing Needed-138',
- 'zAsset-Video Deferred Processing Needed-139',
- 'zAddAssetAttr-Deferred Photo Identifier-140',
- 'zAddAssetAttr-Deferred Processing Candidate Options-141',
- 'zAsset-Has Adjustments-Camera-Effects-Filters-142',
- 'zAsset-Adjustment Timestamp-143',
- 'zAddAssetAttr-Editor Bundle ID-144',
- 'zAddAssetAttr-Montage-145',
- 'zAsset-Favorite-146',
- 'zAsset-Hidden-147',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-148',
- 'zAsset-Trashed Date-149',
- 'zAsset-Trashed by Participant= zSharePartic_zPK-150',
- 'zAsset-Delete-Reason-151',
- 'zIntResou-Trash State-152',
- 'zIntResou-Trashed Date-153',
- 'zAsset-Cloud Delete State-154',
- 'zIntResou-Cloud Delete State-155',
- 'zAddAssetAttr-PTP Trashed State-156',
- 'zIntResou-PTP Trashed State-157',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-158',
- 'zMedAnlyAstAttr-Media Analysis Timestamp-159',
- 'zAsset-Analysis State Modification Date-160',
- 'zAddAssetAttr- Pending View Count-161',
- 'zAddAssetAttr- View Count-162',
- 'zAddAssetAttr- Pending Play Count-163',
- 'zAddAssetAttr- Play Count-164',
- 'zAddAssetAttr- Pending Share Count-165',
- 'zAddAssetAttr- Share Count-166',
- 'zAddAssetAttr-Allowed for Analysis-167',
- 'zAddAssetAttr-Scene Analysis Version-168',
- 'zAddAssetAttr-Scene Analysis is From Preview-169',
- 'zAddAssetAttr-Scene Analysis Timestamp-170',
- 'zAsset-Duplication Asset Visibility State-171',
- 'zAddAssetAttr-Destination Asset Copy State-172',
- 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-173',
- 'zAddAssetAttr-Source Asset for Duplication Scope ID-174',
- 'zCldMast-Source Master For Duplication Scope ID-175',
- 'zAddAssetAttr-Source Asset For Duplication ID-176',
- 'zCldMast-Source Master for Duplication ID-177',
- 'zAddAssetAttr-Variation Suggestions States-178',
- 'zAsset-High Frame Rate State-179',
- 'zAsset-Video Key Frame Time Scale-180',
- 'zAsset-Video Key Frame Value-181',
- 'zExtAttr-ISO-182',
- 'zExtAttr-Metering Mode-183',
- 'zExtAttr-Sample Rate-184',
- 'zExtAttr-Track Format-185',
- 'zExtAttr-White Balance-186',
- 'zExtAttr-Aperture-187',
- 'zExtAttr-BitRate-188',
- 'zExtAttr-Exposure Bias-189',
- 'zExtAttr-Frames Per Second-190',
- 'zExtAttr-Shutter Speed-191',
- 'zExtAttr-Slush Scene Bias-192',
- 'zExtAttr-Slush Version-193',
- 'zExtAttr-Slush Preset-194',
- 'zExtAttr-Slush Warm Bias-195',
- 'zAsset-Height-196',
- 'zAddAssetAttr-Original Height-197',
- 'zIntResou-UnOriented Height-198',
- 'zAsset-Width-199',
- 'zAddAssetAttr-Original Width-200',
- 'zIntResou-UnOriented Width-201',
- 'zAsset-Thumbnail Index-202',
- 'zAddAssetAttr-Embedded Thumbnail Height-203',
- 'zAddAssetAttr-Embedded Thumbnail Length-204',
- 'zAddAssetAttr-Embedded Thumbnail Offset-205',
- 'zAddAssetAttr-Embedded Thumbnail Width-206',
- 'zAsset-Packed Acceptable Crop Rect-207',
- 'zAsset-Packed Badge Attributes-208',
- 'zAsset-Packed Preferred Crop Rect-209',
- 'zAsset-Curation Score-210',
- 'zAsset-Camera Processing Adjustment State-211',
- 'zAsset-Depth Type-212',
- 'zAsset-Is Magic Carpet-Quicktime_MOV-file-213',
- 'zAddAssetAttr-Orig Resource Choice-214',
- 'zAsset-Spatial Type-215',
- 'zAddAssetAttr-Spatial Over Capture Group ID-216',
- 'zAddAssetAttr-Place Annotation Data-217',
- 'zAddAssetAttr-Distance Identity-HEX-218',
- 'zAddAssetAttr-Edited IPTC Attributes-219',
- 'zAddAssetAttr-Title-Comments via Cloud Website-220',
- 'zAddAssetAttr-Accessibility Description-221',
- 'zAddAssetAttr-Photo Stream Tag ID-222',
- 'zAddAssetAttr-Share Type-223',
- 'zAddAssetAttr-Library Scope Asset Contributors To Update-224',
- 'zAsset-Overall Aesthetic Score-225',
- 'zAsset-zENT-226',
- 'zAsset-zOPT-227',
- 'zAsset-Master= zCldMast-zPK-228',
- 'zAsset-Extended Attributes= zExtAttr-zPK-229',
- 'zAsset-Import Session Key-230',
- 'zAsset-Photo Analysis Attributes Key-231',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-232',
- 'zAsset-Computed Attributes Asset Key-233',
- 'zAsset-Promotion Score-234',
- 'zAsset-Iconic Score-235',
- 'zAsset-Media Analysis Attributes Key-236',
- 'zAsset-Media Group UUID-237',
- 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-238',
- 'zAsset.Cloud Collection GUID-239',
- 'zAddAssetAttr-zENT-240',
- 'ZAddAssetAttr-zOPT-241',
- 'zAddAssetAttr-zAsset= zAsset_zPK-242',
- 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-243',
- 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-244',
- 'zAddAssetAttr-Public Global UUID-245',
- 'zAddAssetAttr-Original Assets UUID-246',
- 'zAddAssetAttr-Originating Asset Identifier-247',
- 'zAddAssetAttr.Adjusted Fingerprint-248',
- 'zCldMast-zPK= zAsset-Master-249',
- 'zCldMast-zENT-250',
- 'zCldMast-zOPT-251',
- 'zCldMast-Moment Share Key= zShare-zPK-252',
- 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-253',
- 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-254',
- 'zCldMast-Originating Asset ID-255',
- 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-256',
- 'CMzCldMastMedData-zENT-257',
- 'CMzCldMastMedData-CldMast= zCldMast-zPK-258',
- 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-259',
- 'AAAzCldMastMedData-zENT-260',
- 'AAAzCldMastMedData-CldMast key-261',
- 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-262',
- 'zExtAttr-zPK= zAsset-zExtendedAttributes-263',
- 'zExtAttr-zENT-264',
- 'zExtAttr-zOPT-265',
- 'zExtAttr-Asset Key-266',
- 'zIntResou-zPK-267',
- 'zIntResou-zENT-268',
- 'zIntResou-zOPT-269',
- 'zIntResou-Asset= zAsset_zPK-270',
- 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-271',
- 'zMedAnlyAstAttr-zEnt-272',
- 'zMedAnlyAstAttr-zOpt-273',
- 'zMedAnlyAstAttr-Asset= zAsset-zPK-274')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph50.2-Asset_IntResou-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
+ '''
- tlactivity = 'Ph50.2-Asset_IntResou-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
+ row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
+ row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
+ row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
+ row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
+ row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
+ row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
+ row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
+ row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
+ row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
+ row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
+ row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
+ row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
+ row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
+ row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
+ row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
+ row[268], row[269], row[270], row[271], row[272], row[273], row[274]))
- else:
- logfunc('No Internal Resource data available for iOS 17 Syndication Photos Library Photos.sqlite')
+ data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'),
+ 'zAsset-zPK-1',
+ 'zAddAssetAttr-zPK-2',
+ 'zAsset-UUID = store.cloudphotodb-3',
+ 'zAddAssetAttr-Master Fingerprint-4',
+ 'zAddAssetAttr.Adjusted Fingerprint-5',
+ 'zIntResou-Fingerprint-6',
+ 'zIntResou-Local Availability-4QueryStart-7',
+ 'zIntResou-Remote Availability-4QueryStart-8',
+ 'zIntResou-Resource Type-4QueryStart-9',
+ 'zIntResou-Datastore Sub-Type-4QueryStart-10',
+ 'zIntResou-Recipe ID-4QueryStart-11',
+ 'zAsset Complete-12',
+ 'zAsset-Bundle Scope-13',
+ 'zAsset-Syndication State-14',
+ 'zAsset-Cloud is My Asset-15',
+ 'zAsset-Cloud is deletable-Asset-16',
+ 'zAsset-Cloud_Local_State-17',
+ 'zAsset-Visibility State-18',
+ 'zExtAttr-Camera Make-19',
+ 'zExtAttr-Camera Model-20',
+ 'zExtAttr-Lens Model-21',
+ 'zExtAttr-Flash Fired-22',
+ 'zExtAttr-Focal Lenght-23',
+ 'zExtAttr-Focal Length in 35MM-24',
+ 'zExtAttr-Digital Zoom Ratio-25',
+ 'zAsset-Derived Camera Capture Device-26',
+ 'zAddAssetAttr-Camera Captured Device-27',
+ 'zAddAssetAttr-Imported by-28',
+ 'zCldMast-Imported By-29',
+ 'zAddAssetAttr.Imported by Bundle Identifier-30',
+ 'zAddAssetAttr-Imported By Display Name-31',
+ 'zCldMast-Imported by Bundle ID-32',
+ 'zCldMast-Imported by Display Name-33',
+ 'zAsset-Saved Asset Type-34',
+ 'zAsset-Directory-Path-35',
+ 'zAsset-Filename-36',
+ 'zAddAssetAttr- Original Filename-37',
+ 'zCldMast- Original Filename-38',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-39',
+ 'zAsset-Active Library Scope Participation State-40',
+ 'zAsset-Library Scope Share State- StillTesting-41',
+ ('zAsset-Added Date-42', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-43', 'datetime'),
+ ('zAddAssetAttr-Date Created Source-44', 'datetime'),
+ ('zAsset-Date Created-45', 'datetime'),
+ ('zCldMast-Creation Date-46', 'datetime'),
+ ('zIntResou-CldMst Date Created-47', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-48',
+ 'zAddAssetAttr-Time Zone Offset-49',
+ 'zAddAssetAttr-Inferred Time Zone Offset-50',
+ 'zAddAssetAttr-EXIF-String-51',
+ ('zAsset-Modification Date-52', 'datetime'),
+ ('zAsset-Last Shared Date-53', 'datetime'),
+ 'zCldMast-Cloud Local State-54',
+ ('zCldMast-Import Date-55', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-56', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-57',
+ ('zAddAssetAttr-Alt Import Image Date-58', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-59',
+ ('zAsset-Cloud Batch Publish Date-60', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-61', 'datetime'),
+ 'zAsset-Cloud Download Requests-62',
+ 'zAsset-Cloud Batch ID-63',
+ 'zAddAssetAttr-Upload Attempts-64',
+ 'zAsset-Latitude-65',
+ 'zExtAttr-Latitude-66',
+ 'zAsset-Longitude-67',
+ 'zExtAttr-Longitude-68',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-69',
+ 'zAddAssetAttr-Location Hash-70',
+ 'zAddAssetAttr-Shifted Location Valid-71',
+ 'zAddAssetAttr-Shifted Location Data-72',
+ 'zAddAssetAttr-Reverse Location Is Valid-73',
+ 'zAddAssetAttr-Reverse Location Data-74',
+ 'AAAzCldMastMedData-zOPT-75',
+ 'zAddAssetAttr-Media Metadata Type-76',
+ 'AAAzCldMastMedData-Data-77',
+ 'CldMasterzCldMastMedData-zOPT-78',
+ 'zCldMast-Media Metadata Type-79',
+ 'CMzCldMastMedData-Data-80',
+ 'zAsset-Search Index Rebuild State-81',
+ 'zAddAssetAttr-Syndication History-82',
+ 'zMedAnlyAstAttr-Syndication Processing Version-83',
+ 'zMedAnlyAstAttr-Syndication Processing Value-84',
+ 'zAsset-Orientation-85',
+ 'zAddAssetAttr-Original Orientation-86',
+ 'zAsset-Kind-87',
+ 'zAsset-Kind-Sub-Type-88',
+ 'zAddAssetAttr-Cloud Kind Sub Type-89',
+ 'zAsset-Playback Style-90',
+ 'zAsset-Playback Variation-91',
+ 'zAsset-Video Duration-92',
+ 'zExtAttr-Duration-93',
+ 'zAsset-Video CP Duration-94',
+ 'zAddAssetAttr-Video CP Duration Time Scale-95',
+ 'zAsset-Video CP Visibility State-96',
+ 'zAddAssetAttr-Video CP Display Value-97',
+ 'zAddAssetAttr-Video CP Display Time Scale-98',
+ 'zIntResou-Datastore Class ID-99',
+ 'zAsset-Cloud Placeholder Kind-100',
+ 'zIntResou-Local Availability-101',
+ 'zIntResou-Local Availability Target-102',
+ 'zIntResou-Cloud Local State-103',
+ 'zIntResou-Remote Availability-104',
+ 'zIntResou-Remote Availability Target-105',
+ 'zIntResou-Transient Cloud Master-106',
+ 'zIntResou-Side Car Index-107',
+ 'zIntResou- File ID-108',
+ 'zIntResou-Version-109',
+ 'zAddAssetAttr- Original-File-Size-110',
+ 'zIntResou-Resource Type-111',
+ 'zIntResou-Datastore Sub-Type-112',
+ 'zIntResou-Cloud Source Type-113',
+ 'zIntResou-Data Length-114',
+ 'zIntResou-Recipe ID-115',
+ ('zIntResou-Cloud Last Prefetch Date-116', 'datetime'),
+ 'zIntResou-Cloud Prefetch Count-117',
+ ('zIntResou- Cloud-Last-OnDemand Download-Date-118', 'datetime'),
+ 'zIntResou-UniformTypeID_UTI_Conformance_Hint-119',
+ 'zIntResou-Compact-UTI-120',
+ 'zAsset-Uniform Type ID-121',
+ 'zAsset-Original Color Space-122',
+ 'zCldMast-Uniform_Type_ID-123',
+ 'zCldMast-Full Size JPEG Source-124',
+ 'zAsset-HDR Gain-125',
+ 'zAsset-zHDR_Type-126',
+ 'zExtAttr-Codec-127',
+ 'zIntResou-Codec Four Char Code Name-128',
+ 'zCldMast-Codec Name-129',
+ 'zCldMast-Video Frame Rate-130',
+ 'zCldMast-Placeholder State-131',
+ 'zAsset-Depth_Type-132',
+ 'zAsset-Avalanche UUID-133',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-134',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-135',
+ 'zAddAssetAttr-Cloud Recovery State-136',
+ 'zAddAssetAttr-Cloud State Recovery Attempts Count-137',
+ 'zAsset-Deferred Processing Needed-138',
+ 'zAsset-Video Deferred Processing Needed-139',
+ 'zAddAssetAttr-Deferred Photo Identifier-140',
+ 'zAddAssetAttr-Deferred Processing Candidate Options-141',
+ 'zAsset-Has Adjustments-Camera-Effects-Filters-142',
+ ('zAsset-Adjustment Timestamp-143', 'datetime'),
+ 'zAddAssetAttr-Editor Bundle ID-144',
+ 'zAddAssetAttr-Montage-145',
+ 'zAsset-Favorite-146',
+ 'zAsset-Hidden-147',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-148',
+ ('zAsset-Trashed Date-149', 'datetime'),
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-150',
+ 'zAsset-Delete-Reason-151',
+ 'zIntResou-Trash State-152',
+ ('zIntResou-Trashed Date-153', 'datetime'),
+ 'zAsset-Cloud Delete State-154',
+ 'zIntResou-Cloud Delete State-155',
+ 'zAddAssetAttr-PTP Trashed State-156',
+ 'zIntResou-PTP Trashed State-157',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-158',
+ ('zMedAnlyAstAttr-Media Analysis Timestamp-159', 'datetime'),
+ ('zAsset-Analysis State Modification Date-160', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-161',
+ 'zAddAssetAttr- View Count-162',
+ 'zAddAssetAttr- Pending Play Count-163',
+ 'zAddAssetAttr- Play Count-164',
+ 'zAddAssetAttr- Pending Share Count-165',
+ 'zAddAssetAttr- Share Count-166',
+ 'zAddAssetAttr-Allowed for Analysis-167',
+ 'zAddAssetAttr-Scene Analysis Version-168',
+ 'zAddAssetAttr-Scene Analysis is From Preview-169',
+ ('zAddAssetAttr-Scene Analysis Timestamp-170', 'datetime'),
+ 'zAsset-Duplication Asset Visibility State-171',
+ 'zAddAssetAttr-Destination Asset Copy State-172',
+ 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-173',
+ 'zAddAssetAttr-Source Asset for Duplication Scope ID-174',
+ 'zCldMast-Source Master For Duplication Scope ID-175',
+ 'zAddAssetAttr-Source Asset For Duplication ID-176',
+ 'zCldMast-Source Master for Duplication ID-177',
+ 'zAddAssetAttr-Variation Suggestions States-178',
+ 'zAsset-High Frame Rate State-179',
+ 'zAsset-Video Key Frame Time Scale-180',
+ 'zAsset-Video Key Frame Value-181',
+ 'zExtAttr-ISO-182',
+ 'zExtAttr-Metering Mode-183',
+ 'zExtAttr-Sample Rate-184',
+ 'zExtAttr-Track Format-185',
+ 'zExtAttr-White Balance-186',
+ 'zExtAttr-Aperture-187',
+ 'zExtAttr-BitRate-188',
+ 'zExtAttr-Exposure Bias-189',
+ 'zExtAttr-Frames Per Second-190',
+ 'zExtAttr-Shutter Speed-191',
+ 'zExtAttr-Slush Scene Bias-192',
+ 'zExtAttr-Slush Version-193',
+ 'zExtAttr-Slush Preset-194',
+ 'zExtAttr-Slush Warm Bias-195',
+ 'zAsset-Height-196',
+ 'zAddAssetAttr-Original Height-197',
+ 'zIntResou-UnOriented Height-198',
+ 'zAsset-Width-199',
+ 'zAddAssetAttr-Original Width-200',
+ 'zIntResou-UnOriented Width-201',
+ 'zAsset-Thumbnail Index-202',
+ 'zAddAssetAttr-Embedded Thumbnail Height-203',
+ 'zAddAssetAttr-Embedded Thumbnail Length-204',
+ 'zAddAssetAttr-Embedded Thumbnail Offset-205',
+ 'zAddAssetAttr-Embedded Thumbnail Width-206',
+ 'zAsset-Packed Acceptable Crop Rect-207',
+ 'zAsset-Packed Badge Attributes-208',
+ 'zAsset-Packed Preferred Crop Rect-209',
+ 'zAsset-Curation Score-210',
+ 'zAsset-Camera Processing Adjustment State-211',
+ 'zAsset-Depth Type-212',
+ 'zAsset-Is Magic Carpet-Quicktime_MOV-file-213',
+ 'zAddAssetAttr-Orig Resource Choice-214',
+ 'zAsset-Spatial Type-215',
+ 'zAddAssetAttr-Spatial Over Capture Group ID-216',
+ 'zAddAssetAttr-Place Annotation Data-217',
+ 'zAddAssetAttr-Distance Identity-HEX-218',
+ 'zAddAssetAttr-Edited IPTC Attributes-219',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-220',
+ 'zAddAssetAttr-Accessibility Description-221',
+ 'zAddAssetAttr-Photo Stream Tag ID-222',
+ 'zAddAssetAttr-Share Type-223',
+ 'zAddAssetAttr-Library Scope Asset Contributors To Update-224',
+ 'zAsset-Overall Aesthetic Score-225',
+ 'zAsset-zENT-226',
+ 'zAsset-zOPT-227',
+ 'zAsset-Master= zCldMast-zPK-228',
+ 'zAsset-Extended Attributes= zExtAttr-zPK-229',
+ 'zAsset-Import Session Key-230',
+ 'zAsset-Photo Analysis Attributes Key-231',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-232',
+ 'zAsset-Computed Attributes Asset Key-233',
+ 'zAsset-Promotion Score-234',
+ 'zAsset-Iconic Score-235',
+ 'zAsset-Media Analysis Attributes Key-236',
+ 'zAsset-Media Group UUID-237',
+ 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-238',
+ 'zAsset.Cloud Collection GUID-239',
+ 'zAddAssetAttr-zENT-240',
+ 'ZAddAssetAttr-zOPT-241',
+ 'zAddAssetAttr-zAsset= zAsset_zPK-242',
+ 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-243',
+ 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-244',
+ 'zAddAssetAttr-Public Global UUID-245',
+ 'zAddAssetAttr-Original Assets UUID-246',
+ 'zAddAssetAttr-Originating Asset Identifier-247',
+ 'zAddAssetAttr.Adjusted Fingerprint-248',
+ 'zCldMast-zPK= zAsset-Master-249',
+ 'zCldMast-zENT-250',
+ 'zCldMast-zOPT-251',
+ 'zCldMast-Moment Share Key= zShare-zPK-252',
+ 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-253',
+ 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-254',
+ 'zCldMast-Originating Asset ID-255',
+ 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-256',
+ 'CMzCldMastMedData-zENT-257',
+ 'CMzCldMastMedData-CldMast= zCldMast-zPK-258',
+ 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-259',
+ 'AAAzCldMastMedData-zENT-260',
+ 'AAAzCldMastMedData-CldMast key-261',
+ 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-262',
+ 'zExtAttr-zPK= zAsset-zExtendedAttributes-263',
+ 'zExtAttr-zENT-264',
+ 'zExtAttr-zOPT-265',
+ 'zExtAttr-Asset Key-266',
+ 'zIntResou-zPK-267',
+ 'zIntResou-zENT-268',
+ 'zIntResou-zOPT-269',
+ 'zIntResou-Asset= zAsset_zPK-270',
+ 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-271',
+ 'zMedAnlyAstAttr-zEnt-272',
+ 'zMedAnlyAstAttr-zOpt-273',
+ 'zMedAnlyAstAttr-Asset= zAsset-zPK-274')
+ data_list = get_sqlite_db_records(source_path, query)
- db.close()
- return
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found, "Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart',
zAsset.Z_PK AS 'zAsset-zPK',
@@ -11229,11 +11005,6 @@ def get_ph50intresouoptimzdatasyndpl(files_found, report_folder, seeker, wrap_te
zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length',
zAddAssetAttr.ZEMBEDDEDTHUMBNAILOFFSET AS 'zAddAssetAttr-Embedded Thumbnail Offset',
zAddAssetAttr.ZEMBEDDEDTHUMBNAILWIDTH AS 'zAddAssetAttr-Embedded Thumbnail Width',
- CASE zAddAssetAttr.ZIMAGEEMBEDDINGVERSION
- WHEN 0 THEN '0-Obs_in_iOS18 still_testing-0'
- WHEN 1 THEN '1-Obs_in_iOS18 still_testing-1'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMAGEEMBEDDINGVERSION || ''
- END AS 'zAddAssetAttr-Image Embedding Version-iOS18',
zAsset.ZPACKEDACCEPTABLECROPRECT AS 'zAsset-Packed Acceptable Crop Rect',
zAsset.ZPACKEDBADGEATTRIBUTES AS 'zAsset-Packed Badge Attributes',
zAsset.ZPACKEDPREFERREDCROPRECT AS 'zAsset-Packed Preferred Crop Rect',
@@ -11267,19 +11038,7 @@ def get_ph50intresouoptimzdatasyndpl(files_found, report_folder, seeker, wrap_te
zMedAnlyAstAttr.ZMEDIAANALYSISIMAGEVERSION AS 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18',
zMedAnlyAstAttr.ZIMAGECAPTIONVERSION AS 'zMedAnlyAstAttr-Image_Caption_Version-iOS18',
zMedAnlyAstAttr.ZVIDEOCAPTIONVERSION AS 'zMedAnlyAstAttr-Video_Caption_Version-iOS18',
- zMedAnlyAstAttr.ZVALOCATIONANALYSISVERSION AS 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18',
- zGenAsstDesc.ZASSET AS 'zGenAsstDesc-zAsset= zAsset-zPK-iOS18',
- zAsset.ZGENERATEDASSETDESCRIPTION AS 'zAsset-Generated_Asset_Description= zGenAsstDesc-zPK-iOS18',
- zGenAsstDesc.Z_PK AS 'zGenAsstDesc-zPK= zAsset-GenAsstDesc-iOS18',
- zGenAsstDesc.Z_ENT AS 'zGenAsstDesc-zENT-iOS18',
- zGenAsstDesc.Z_OPT AS 'zGenAsstDesc-zOPT-iOS18',
- DateTime(zGenAsstDesc.ZANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zGenAsstDesc-Analysis_Timestamp-iOS18',
- CASE zGenAsstDesc.ZANALYSISSOURCETYPE
- WHEN 0 THEN '0-NotYetObs iOS18_Still_Testing-0'
- ELSE 'Unknown-New-Value!: ' || zGenAsstDesc.ZANALYSISSOURCETYPE || ''
- END AS 'zGenAsstDesc-Analysis_Source_Type-iOS18',
- zGenAsstDesc.ZANALYSISVERSION AS 'zGenAsstDesc-Analysis Version-iOS18',
- zGenAsstDesc.ZDESCRIPTIONTEXT AS 'zGenAsstDesc-Description_Text-iOS18',
+ zMedAnlyAstAttr.ZVALOCATIONANALYSISVERSION AS 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18',
zAsset.Z_ENT AS 'zAsset-zENT',
zAsset.Z_OPT AS 'zAsset-zOPT',
zAsset.ZMASTER AS 'zAsset-Master= zCldMast-zPK',
@@ -11345,431 +11104,352 @@ def get_ph50intresouoptimzdatasyndpl(files_found, report_folder, seeker, wrap_te
LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK
LEFT JOIN ZCOMPUTESYNCATTRIBUTES zCompSyncAttr ON zCompSyncAttr.Z_PK = zAsset.ZCOMPUTESYNCATTRIBUTES
- LEFT JOIN ZGENERATEDASSETDESCRIPTION zGenAsstDesc ON zGenAsstDesc.Z_PK = zAsset.ZGENERATEDASSETDESCRIPTION
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
- row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
- row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
- row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
- row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
- row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
- row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
- row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
- row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
- row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
- row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
- row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
- row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
- row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
- row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
- row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
- row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
- row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
- row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
- row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
- row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307],
- row[308], row[309], row[310], row[311], row[312]))
+ '''
- counter += 1
-
- description = 'Parses iOS 18 asset records from Syndication.photos.library-database-Photos.sqlite' \
- ' ZINTERNALRESOURCE and other tables. This and other related parsers should provide' \
- ' data for investigative analysis of assets being stored locally on the device verses' \
- ' assets being stored in iCloud Photos as the result of optimization. This is very large' \
- ' query and script, I recommend opening the TSV generated report with Zimmermans Tools' \
- ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \
- ' and filter the results.'
- report = ArtifactHtmlReport('Ph50.2-Asset_IntResou-SyndPL')
- report.start_artifact_report(report_folder, 'Ph50.2-Asset_IntResou-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-4QueryStart-0',
- 'zAsset-zPK-1',
- 'zAddAssetAttr-zPK-2',
- 'zAsset-UUID = store.cloudphotodb-3',
- 'zAddAssetAttr-Original Stable Hash-iOS18-4',
- 'zIntResou-Fingerprint-iOS18-5',
- 'zIntResou-Stable Hash-iOS18-6',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-7',
- 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18-8',
- 'zIntResou-Local Availability-4QueryStart-9',
- 'zIntResou-Remote Availability-4QueryStart-10',
- 'zIntResou-Resource Type-4QueryStart-11',
- 'zIntResou-Datastore Sub-Type-4QueryStart-12',
- 'zIntResou-Recipe ID-4QueryStart-13',
- 'zAsset Complete-14',
- 'zAsset-Bundle Scope-15',
- 'zAsset-Syndication State-16',
- 'zAsset-Cloud is My Asset-17',
- 'zAsset-Cloud is deletable-Asset-18',
- 'zAsset-Cloud_Local_State-19',
- 'zAsset-Visibility State-20',
- 'zExtAttr-Camera Make-21',
- 'zExtAttr-Camera Model-22',
- 'zExtAttr-Lens Model-23',
- 'zExtAttr-Flash Fired-24',
- 'zExtAttr-Focal Length-25',
- 'zExtAttr-Focal Length in 35MM-26',
- 'zExtAttr-Digital Zoom Ratio-27',
- 'zExtAttr-Generative_AI_Type-iOS18-28',
- 'zExtAttr-Credit-iOS18-29',
- 'zAsset-Derived Camera Capture Device-30',
- 'zAddAssetAttr-Camera Captured Device-31',
- 'zAsset-Capture_Session_Identifier-iOS18-32',
- 'zAddAssetAttr-Imported by-33',
- 'zCldMast-Imported By-34',
- 'zAddAssetAttr.Imported by Bundle Identifier-35',
- 'zAddAssetAttr-Imported By Display Name-36',
- 'zCldMast-Imported by Bundle ID-37',
- 'zCldMast-Imported by Display Name-38',
- 'zAsset-Is_Recently_Saved-iOS18-39',
- 'zAsset-Saved Asset Type-40',
- 'zAsset-Directory-Path-41',
- 'zAsset-Filename-42',
- 'zAddAssetAttr- Original Filename-43',
- 'zCldMast- Original Filename-44',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-45',
- 'zAsset-Active Library Scope Participation State-46',
- 'zAsset-Library Scope Share State- StillTesting-47',
- 'zAsset-Added Date-48',
- 'zAsset- SortToken -CameraRoll-49',
- 'zAddAssetAttr-Date Created Source-50',
- 'zAsset-Date Created-51',
- 'zCldMast-Creation Date-52',
- 'zIntResou-CldMst Date Created-53',
- 'zAddAssetAttr-Time Zone Name-54',
- 'zAddAssetAttr-Time Zone Offset-55',
- 'zAddAssetAttr-Inferred Time Zone Offset-56',
- 'zAddAssetAttr-EXIF-String-57',
- 'zAsset-Modification Date-58',
- 'zAsset-Last Shared Date-59',
- 'zCldMast-Cloud Local State-60',
- 'zCldMast-Import Date-61',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-62',
- 'zAddAssetAttr-Import Session ID-63',
- 'zAddAssetAttr-Alt Import Image Date-64',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-65',
- 'zAsset-Cloud Batch Publish Date-66',
- 'zAsset-Cloud Server Publish Date-67',
- 'zAsset-Cloud Download Requests-68',
- 'zAsset-Cloud Batch ID-69',
- 'zAddAssetAttr-Upload Attempts-70',
- 'zAsset-Latitude-71',
- 'zExtAttr-Latitude-72',
- 'zAsset-Longitude-73',
- 'zExtAttr-Longitude-74',
- 'zAddAssetAttr-GPS Horizontal Accuracy-75',
- 'zAddAssetAttr-Location Hash-76',
- 'zAddAssetAttr-Shifted Location Valid-77',
- 'zAddAssetAttr-Shifted Location Data-78',
- 'zAddAssetAttr-Reverse Location Is Valid-79',
- 'zAddAssetAttr-Reverse Location Data-80',
- 'AAAzCldMastMedData-zOPT-81',
- 'zAddAssetAttr-Media Metadata Type-82',
- 'AAAzCldMastMedData-Data-83',
- 'CldMasterzCldMastMedData-zOPT-84',
- 'zCldMast-Media Metadata Type-85',
- 'CMzCldMastMedData-Data-86',
- 'zAsset-Search Index Rebuild State-87',
- 'zAddAssetAttr-Syndication History-88',
- 'zMedAnlyAstAttr-Syndication Processing Version-89',
- 'zMedAnlyAstAttr-Syndication Processing Value-90',
- 'zAsset-Orientation-91',
- 'zAddAssetAttr-Original Orientation-92',
- 'zAsset-Kind-93',
- 'zAsset-Is_Detected_Screenshot-iOS18-94',
- 'zAsset-Kind-Sub-Type-95',
- 'zAddAssetAttr-Cloud Kind Sub Type-96',
- 'zAsset-Playback Style-97',
- 'zAsset-Playback Variation-98',
- 'zAddAssetAttr-View_Presentation-iOS18-99',
- 'zAsset-Video Duration-100',
- 'zExtAttr-Duration-101',
- 'zAsset-Video CP Duration-102',
- 'zAddAssetAttr-Video CP Duration Time Scale-103',
- 'zAsset-Video CP Visibility State-104',
- 'zAddAssetAttr-Video CP Display Value-105',
- 'zAddAssetAttr-Video CP Display Time Scale-106',
- 'zIntResou-Datastore Class ID-107',
- 'zAsset-Cloud Placeholder Kind-108',
- 'zIntResou-Local Availability-109',
- 'zIntResou-Local Availability Target-110',
- 'zIntResou-Cloud Local State-111',
- 'zIntResou-Remote Availability-112',
- 'zIntResou-Remote Availability Target-113',
- 'zIntResou-Transient Cloud Master-114',
- 'zIntResou-Side Car Index-115',
- 'zIntResou- File ID-116',
- 'zIntResou-Version-117',
- 'zAddAssetAttr- Original-File-Size-118',
- 'zIntResou-Resource Type-119',
- 'zIntResou-Datastore Sub-Type-120',
- 'zIntResou-Cloud Source Type-121',
- 'zIntResou-Data Length-122',
- 'zIntResou-Recipe ID-123',
- 'zIntResou-Cloud Last Prefetch Date-124',
- 'zIntResou-Cloud Prefetch Count-125',
- 'zIntResou- Cloud-Last-OnDemand Download-Date-126',
- 'zIntResou-UniformTypeID_UTI_Conformance_Hint-127',
- 'zIntResou-Compact-UTI-128',
- 'zAsset-Uniform Type ID-129',
- 'zAsset-Original Color Space-130',
- 'zCldMast-Uniform_Type_ID-131',
- 'zCldMast-Full Size JPEG Source-132',
- 'zAsset-HDR Gain-133',
- 'zAsset-zHDR_Type-134',
- 'zExtAttr-Codec-135',
- 'zIntResou-Codec Four Char Code Name-136',
- 'zCldMast-Codec Name-137',
- 'zCldMast-Video Frame Rate-138',
- 'zCldMast-Placeholder State-139',
- 'zAsset-Depth_Type-140',
- 'zAsset-Avalanche UUID-141',
- 'zAsset-Avalanche_Kind-iOS18-142',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-143',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-144',
- 'zAddAssetAttr-Cloud Recovery State-145',
- 'zAddAssetAttr-Cloud State Recovery Attempts Count-146',
- 'zAsset-Deferred Processing Needed-147',
- 'zAsset-Video Deferred Processing Needed-148',
- 'zAddAssetAttr-Deferred Photo Identifier-149',
- 'zAddAssetAttr-Deferred Processing Candidate Options-150',
- 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18-151',
- 'zAsset-Adjustment Timestamp-152',
- 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18-153',
- 'zAddAssetAttr-Editor Bundle ID-154',
- 'zAddAssetAttr-Montage-155',
- 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18-156',
- 'zAsset-Favorite-157',
- 'zAsset-Hidden-158',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-159',
- 'zAsset-Trashed Date-160',
- 'zAsset-Trashed by Participant= zSharePartic_zPK-161',
- 'zAsset-Delete-Reason-162',
- 'zIntResou-Trash State-163',
- 'zIntResou-Trashed Date-164',
- 'zAsset-Cloud Delete State-165',
- 'zIntResou-Cloud Delete State-166',
- 'zAddAssetAttr-PTP Trashed State-167',
- 'zIntResou-PTP Trashed State-168',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-169',
- 'zMedAnlyAstAttr-Media Analysis Timestamp-170',
- 'zAsset-Analysis State Modification Date-171',
- 'zAddAssetAttr- Pending View Count-172',
- 'zAddAssetAttr- View Count-173',
- 'zAddAssetAttr- Pending Play Count-174',
- 'zAddAssetAttr- Play Count-175',
- 'zAddAssetAttr- Pending Share Count-176',
- 'zAddAssetAttr- Share Count-177',
- 'zAddAssetAttr-Allowed for Analysis-178',
- 'zAddAssetAttr-Scene Analysis Version-179',
- 'zAddAssetAttr-Scene Analysis is From Preview-180',
- 'zAddAssetAttr-Scene Analysis Timestamp-181',
- 'zAsset-Duplication Asset Visibility State-182',
- 'zAddAssetAttr-Destination Asset Copy State-183',
- 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-184',
- 'zAddAssetAttr-Source Asset for Duplication Scope ID-185',
- 'zCldMast-Source Master For Duplication Scope ID-186',
- 'zAddAssetAttr-Source Asset For Duplication ID-187',
- 'zCldMast-Source Master for Duplication ID-188',
- 'zAddAssetAttr-Variation Suggestions States-189',
- 'zAsset-High Frame Rate State-190',
- 'zAsset-Video Key Frame Time Scale-191',
- 'zAsset-Video Key Frame Value-192',
- 'zAsset-Current_Sleet_Cast-iOS18-193',
- 'zAddAssetAttr.Sleet_Is_Reversible-iOS18-194',
- 'zExtAttr-Sleet_Rendering_Version-iOS18-195',
- 'zExtAttr-Sleet_Intensity-iOS18-196',
- 'zExtAttr-Sleet_Tone_Bias-iOS18-197',
- 'zExtAttr-Sleet_Color_Bias-iOS18-198',
- 'zExtAttr-Sleet_Cast-iOS18-199',
- 'zExtAttr-ISO-200',
- 'zExtAttr-Metering Mode-201',
- 'zExtAttr-Sample Rate-202',
- 'zExtAttr-Track Format-203',
- 'zExtAttr-White Balance-204',
- 'zExtAttr-Aperture-205',
- 'zExtAttr-BitRate-206',
- 'zExtAttr-Exposure Bias-207',
- 'zExtAttr-Frames Per Second-208',
- 'zExtAttr-Shutter Speed-209',
- 'zExtAttr-Slush Scene Bias-210',
- 'zExtAttr-Slush Version-211',
- 'zExtAttr-Slush Preset-212',
- 'zExtAttr-Slush Warm Bias-213',
- 'zAsset-Height-214',
- 'zAddAssetAttr-Original Height-215',
- 'zIntResou-UnOriented Height-216',
- 'zAsset-Width-217',
- 'zAddAssetAttr-Original Width-218',
- 'zIntResou-UnOriented Width-219',
- 'zAsset-Thumbnail Index-220',
- 'zAddAssetAttr-Embedded Thumbnail Height-221',
- 'zAddAssetAttr-Embedded Thumbnail Length-222',
- 'zAddAssetAttr-Embedded Thumbnail Offset-223',
- 'zAddAssetAttr-Embedded Thumbnail Width-224',
- 'zAddAssetAttr-Image Embedding Version-iOS18-225',
- 'zAsset-Packed Acceptable Crop Rect-226',
- 'zAsset-Packed Badge Attributes-227',
- 'zAsset-Packed Preferred Crop Rect-228',
- 'zAsset-Curation Score-229',
- 'zAsset-Camera Processing Adjustment State-230',
- 'zAsset-Depth Type-231',
- 'zAsset-Is Magic Carpet-Quicktime_MOV-file-232',
- 'zAddAssetAttr-Orig Resource Choice-233',
- 'zAsset-Spatial Type-234',
- 'zAddAssetAttr-Spatial Over Capture Group ID-235',
- 'zAddAssetAttr-Place Annotation Data-236',
- 'zAddAssetAttr-Distance Identity-HEX-237',
- 'zAddAssetAttr-Edited IPTC Attributes-238',
- 'zAddAssetAttr-Title-Comments via Cloud Website-239',
- 'zAddAssetAttr-Accessibility Description-240',
- 'zAddAssetAttr-Photo Stream Tag ID-241',
- 'zAddAssetAttr-Share Type-242',
- 'zAddAssetAttr-Library Scope Asset Contributors To Update-243',
- 'zAsset-Overall Aesthetic Score-244',
- 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18-245',
- 'zMedAnlyAstAttr-Image_Caption_Version-iOS18-246',
- 'zMedAnlyAstAttr-Video_Caption_Version-iOS18-247',
- 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18-248',
- 'zGenAsstDesc-zAsset= zAsset-zPK-iOS18-249',
- 'zAsset-Generated_Asset_Description= zGenAsstDesc-zPK-iOS18-250',
- 'zGenAsstDesc-zPK= zAsset-GenAsstDesc-iOS18-251',
- 'zGenAsstDesc-zENT-iOS18-252',
- 'zGenAsstDesc-zOPT-iOS18-253',
- 'zGenAsstDesc-Analysis_Timestamp-iOS18-254',
- 'zGenAsstDesc-Analysis_Source_Type-iOS18-255',
- 'zGenAsstDesc-Analysis Version-iOS18-256',
- 'zGenAsstDesc-Description_Text-iOS18-257',
- 'zAsset-zENT-258',
- 'zAsset-zOPT-259',
- 'zAsset-Master= zCldMast-zPK-260',
- 'zAsset-Extended Attributes= zExtAttr-zPK-261',
- 'zAsset-Import Session Key-262',
- 'zAsset-Photo Analysis Attributes Key-263',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-264',
- 'zAsset-Computed Attributes Asset Key-265',
- 'zAsset-Promotion Score-266',
- 'zAsset-Iconic Score-267',
- 'zAsset-Media Analysis Attributes Key-268',
- 'zAsset-Media Group UUID-269',
- 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-270',
- 'zAsset.Cloud Collection GUID-271',
- 'zAddAssetAttr-zENT-272',
- 'ZAddAssetAttr-zOPT-273',
- 'zAddAssetAttr-zAsset= zAsset_zPK-274',
- 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-275',
- 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-276',
- 'zAddAssetAttr-Public Global UUID-277',
- 'zAddAssetAttr-Original Assets UUID-278',
- 'zAddAssetAttr-Originating Asset Identifier-279',
- 'zCldMast-zPK= zAsset-Master-280',
- 'zCldMast-zENT-281',
- 'zCldMast-zOPT-282',
- 'zCldMast-Moment Share Key= zShare-zPK-283',
- 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-284',
- 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-285',
- 'zCldMast-Originating Asset ID-286',
- 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-287',
- 'CMzCldMastMedData-zENT-288',
- 'CMzCldMastMedData-CldMast= zCldMast-zPK-289',
- 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-290',
- 'AAAzCldMastMedData-zENT-291',
- 'AAAzCldMastMedData-CldMast key-292',
- 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-293',
- 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-iOS18-294',
- 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18-295',
- 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18-296',
- 'zCompSyncAttr-zENT-iOS18-297',
- 'zCompSyncAttr-zOPT-iOS18-298',
- 'zCompSyncAttr-Local_Analysis_Stage-iOS18-299',
- 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18-300',
- 'zExtAttr-zPK= zAsset-zExtendedAttributes-301',
- 'zExtAttr-zENT-302',
- 'zExtAttr-zOPT-303',
- 'zExtAttr-Asset Key-304',
- 'zIntResou-zPK-305',
- 'zIntResou-zENT-306',
- 'zIntResou-zOPT-307',
- 'zIntResou-Asset= zAsset_zPK-308',
- 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-309',
- 'zMedAnlyAstAttr-zEnt-310',
- 'zMedAnlyAstAttr-zOpt-311',
- 'zMedAnlyAstAttr-Asset= zAsset-zPK-312')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph50.2-Asset_IntResou-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph50.2-Asset_IntResou-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No Internal Resource data available for iOS 18 Syndication Photos Library Photos.sqlite')
-
- db.close()
- return
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
+ row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
+ row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
+ row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
+ row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
+ row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
+ row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
+ row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
+ row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
+ row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
+ row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
+ row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
+ row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
+ row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
+ row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
+ row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
+ row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
+ row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
+ row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
+ row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
+ row[300], row[301], row[302]))
+ data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'),
+ 'zAsset-zPK-1',
+ 'zAddAssetAttr-zPK-2',
+ 'zAsset-UUID = store.cloudphotodb-3',
+ 'zAddAssetAttr-Original Stable Hash-iOS18-4',
+ 'zIntResou-Fingerprint-iOS18-5',
+ 'zIntResou-Stable Hash-iOS18-6',
+ 'zAddAssetAttr.Adjusted Stable Hash-iOS18-7',
+ 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18-8',
+ 'zIntResou-Local Availability-4QueryStart-9',
+ 'zIntResou-Remote Availability-4QueryStart-10',
+ 'zIntResou-Resource Type-4QueryStart-11',
+ 'zIntResou-Datastore Sub-Type-4QueryStart-12',
+ 'zIntResou-Recipe ID-4QueryStart-13',
+ 'zAsset Complete-14',
+ 'zAsset-Bundle Scope-15',
+ 'zAsset-Syndication State-16',
+ 'zAsset-Cloud is My Asset-17',
+ 'zAsset-Cloud is deletable-Asset-18',
+ 'zAsset-Cloud_Local_State-19',
+ 'zAsset-Visibility State-20',
+ 'zExtAttr-Camera Make-21',
+ 'zExtAttr-Camera Model-22',
+ 'zExtAttr-Lens Model-23',
+ 'zExtAttr-Flash Fired-24',
+ 'zExtAttr-Focal Length-25',
+ 'zExtAttr-Focal Length in 35MM-26',
+ 'zExtAttr-Digital Zoom Ratio-27',
+ 'zExtAttr-Generative_AI_Type-iOS18-28',
+ 'zExtAttr-Credit-iOS18-29',
+ 'zAsset-Derived Camera Capture Device-30',
+ 'zAddAssetAttr-Camera Captured Device-31',
+ 'zAsset-Capture_Session_Identifier-iOS18-32',
+ 'zAddAssetAttr-Imported by-33',
+ 'zCldMast-Imported By-34',
+ 'zAddAssetAttr.Imported by Bundle Identifier-35',
+ 'zAddAssetAttr-Imported By Display Name-36',
+ 'zCldMast-Imported by Bundle ID-37',
+ 'zCldMast-Imported by Display Name-38',
+ 'zAsset-Is_Recently_Saved-iOS18-39',
+ 'zAsset-Saved Asset Type-40',
+ 'zAsset-Directory-Path-41',
+ 'zAsset-Filename-42',
+ 'zAddAssetAttr- Original Filename-43',
+ 'zCldMast- Original Filename-44',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-45',
+ 'zAsset-Active Library Scope Participation State-46',
+ 'zAsset-Library Scope Share State- StillTesting-47',
+ ('zAsset-Added Date-48', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-49', 'datetime'),
+ ('zAddAssetAttr-Date Created Source-50', 'datetime'),
+ ('zAsset-Date Created-51', 'datetime'),
+ ('zCldMast-Creation Date-52', 'datetime'),
+ ('zIntResou-CldMst Date Created-53', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-54',
+ 'zAddAssetAttr-Time Zone Offset-55',
+ 'zAddAssetAttr-Inferred Time Zone Offset-56',
+ 'zAddAssetAttr-EXIF-String-57',
+ ('zAsset-Modification Date-58', 'datetime'),
+ ('zAsset-Last Shared Date-59', 'datetime'),
+ 'zCldMast-Cloud Local State-60',
+ ('zCldMast-Import Date-61', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-62', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-63',
+ ('zAddAssetAttr-Alt Import Image Date-64', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-65',
+ ('zAsset-Cloud Batch Publish Date-66', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-67', 'datetime'),
+ 'zAsset-Cloud Download Requests-68',
+ 'zAsset-Cloud Batch ID-69',
+ 'zAddAssetAttr-Upload Attempts-70',
+ 'zAsset-Latitude-71',
+ 'zExtAttr-Latitude-72',
+ 'zAsset-Longitude-73',
+ 'zExtAttr-Longitude-74',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-75',
+ 'zAddAssetAttr-Location Hash-76',
+ 'zAddAssetAttr-Shifted Location Valid-77',
+ 'zAddAssetAttr-Shifted Location Data-78',
+ 'zAddAssetAttr-Reverse Location Is Valid-79',
+ 'zAddAssetAttr-Reverse Location Data-80',
+ 'AAAzCldMastMedData-zOPT-81',
+ 'zAddAssetAttr-Media Metadata Type-82',
+ 'AAAzCldMastMedData-Data-83',
+ 'CldMasterzCldMastMedData-zOPT-84',
+ 'zCldMast-Media Metadata Type-85',
+ 'CMzCldMastMedData-Data-86',
+ 'zAsset-Search Index Rebuild State-87',
+ 'zAddAssetAttr-Syndication History-88',
+ 'zMedAnlyAstAttr-Syndication Processing Version-89',
+ 'zMedAnlyAstAttr-Syndication Processing Value-90',
+ 'zAsset-Orientation-91',
+ 'zAddAssetAttr-Original Orientation-92',
+ 'zAsset-Kind-93',
+ 'zAsset-Is_Detected_Screenshot-iOS18-94',
+ 'zAsset-Kind-Sub-Type-95',
+ 'zAddAssetAttr-Cloud Kind Sub Type-96',
+ 'zAsset-Playback Style-97',
+ 'zAsset-Playback Variation-98',
+ 'zAddAssetAttr-View_Presentation-iOS18-99',
+ 'zAsset-Video Duration-100',
+ 'zExtAttr-Duration-101',
+ 'zAsset-Video CP Duration-102',
+ 'zAddAssetAttr-Video CP Duration Time Scale-103',
+ 'zAsset-Video CP Visibility State-104',
+ 'zAddAssetAttr-Video CP Display Value-105',
+ 'zAddAssetAttr-Video CP Display Time Scale-106',
+ 'zIntResou-Datastore Class ID-107',
+ 'zAsset-Cloud Placeholder Kind-108',
+ 'zIntResou-Local Availability-109',
+ 'zIntResou-Local Availability Target-110',
+ 'zIntResou-Cloud Local State-111',
+ 'zIntResou-Remote Availability-112',
+ 'zIntResou-Remote Availability Target-113',
+ 'zIntResou-Transient Cloud Master-114',
+ 'zIntResou-Side Car Index-115',
+ 'zIntResou- File ID-116',
+ 'zIntResou-Version-117',
+ 'zAddAssetAttr- Original-File-Size-118',
+ 'zIntResou-Resource Type-119',
+ 'zIntResou-Datastore Sub-Type-120',
+ 'zIntResou-Cloud Source Type-121',
+ 'zIntResou-Data Length-122',
+ 'zIntResou-Recipe ID-123',
+ ('zIntResou-Cloud Last Prefetch Date-124', 'datetime'),
+ 'zIntResou-Cloud Prefetch Count-125',
+ ('zIntResou- Cloud-Last-OnDemand Download-Date-126', 'datetime'),
+ 'zIntResou-UniformTypeID_UTI_Conformance_Hint-127',
+ 'zIntResou-Compact-UTI-128',
+ 'zAsset-Uniform Type ID-129',
+ 'zAsset-Original Color Space-130',
+ 'zCldMast-Uniform_Type_ID-131',
+ 'zCldMast-Full Size JPEG Source-132',
+ 'zAsset-HDR Gain-133',
+ 'zAsset-zHDR_Type-134',
+ 'zExtAttr-Codec-135',
+ 'zIntResou-Codec Four Char Code Name-136',
+ 'zCldMast-Codec Name-137',
+ 'zCldMast-Video Frame Rate-138',
+ 'zCldMast-Placeholder State-139',
+ 'zAsset-Depth_Type-140',
+ 'zAsset-Avalanche UUID-141',
+ 'zAsset-Avalanche_Kind-iOS18-142',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-143',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-144',
+ 'zAddAssetAttr-Cloud Recovery State-145',
+ 'zAddAssetAttr-Cloud State Recovery Attempts Count-146',
+ 'zAsset-Deferred Processing Needed-147',
+ 'zAsset-Video Deferred Processing Needed-148',
+ 'zAddAssetAttr-Deferred Photo Identifier-149',
+ 'zAddAssetAttr-Deferred Processing Candidate Options-150',
+ 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18-151',
+ ('zAsset-Adjustment Timestamp-152', 'datetime'),
+ 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18-153',
+ 'zAddAssetAttr-Editor Bundle ID-154',
+ 'zAddAssetAttr-Montage-155',
+ 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18-156',
+ 'zAsset-Favorite-157',
+ 'zAsset-Hidden-158',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-159',
+ ('zAsset-Trashed Date-160', 'datetime'),
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-161',
+ 'zAsset-Delete-Reason-162',
+ 'zIntResou-Trash State-163',
+ ('zIntResou-Trashed Date-164', 'datetime'),
+ 'zAsset-Cloud Delete State-165',
+ 'zIntResou-Cloud Delete State-166',
+ 'zAddAssetAttr-PTP Trashed State-167',
+ 'zIntResou-PTP Trashed State-168',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-169',
+ ('zMedAnlyAstAttr-Media Analysis Timestamp-170', 'datetime'),
+ ('zAsset-Analysis State Modification Date-171', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-172',
+ 'zAddAssetAttr- View Count-173',
+ 'zAddAssetAttr- Pending Play Count-174',
+ 'zAddAssetAttr- Play Count-175',
+ 'zAddAssetAttr- Pending Share Count-176',
+ 'zAddAssetAttr- Share Count-177',
+ 'zAddAssetAttr-Allowed for Analysis-178',
+ 'zAddAssetAttr-Scene Analysis Version-179',
+ 'zAddAssetAttr-Scene Analysis is From Preview-180',
+ ('zAddAssetAttr-Scene Analysis Timestamp-181', 'datetime'),
+ 'zAsset-Duplication Asset Visibility State-182',
+ 'zAddAssetAttr-Destination Asset Copy State-183',
+ 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-184',
+ 'zAddAssetAttr-Source Asset for Duplication Scope ID-185',
+ 'zCldMast-Source Master For Duplication Scope ID-186',
+ 'zAddAssetAttr-Source Asset For Duplication ID-187',
+ 'zCldMast-Source Master for Duplication ID-188',
+ 'zAddAssetAttr-Variation Suggestions States-189',
+ 'zAsset-High Frame Rate State-190',
+ 'zAsset-Video Key Frame Time Scale-191',
+ 'zAsset-Video Key Frame Value-192',
+ 'zAsset-Current_Sleet_Cast-iOS18-193',
+ 'zAddAssetAttr.Sleet_Is_Reversible-iOS18-194',
+ 'zExtAttr-Sleet_Rendering_Version-iOS18-195',
+ 'zExtAttr-Sleet_Intensity-iOS18-196',
+ 'zExtAttr-Sleet_Tone_Bias-iOS18-197',
+ 'zExtAttr-Sleet_Color_Bias-iOS18-198',
+ 'zExtAttr-Sleet_Cast-iOS18-199',
+ 'zExtAttr-ISO-200',
+ 'zExtAttr-Metering Mode-201',
+ 'zExtAttr-Sample Rate-202',
+ 'zExtAttr-Track Format-203',
+ 'zExtAttr-White Balance-204',
+ 'zExtAttr-Aperture-205',
+ 'zExtAttr-BitRate-206',
+ 'zExtAttr-Exposure Bias-207',
+ 'zExtAttr-Frames Per Second-208',
+ 'zExtAttr-Shutter Speed-209',
+ 'zExtAttr-Slush Scene Bias-210',
+ 'zExtAttr-Slush Version-211',
+ 'zExtAttr-Slush Preset-212',
+ 'zExtAttr-Slush Warm Bias-213',
+ 'zAsset-Height-214',
+ 'zAddAssetAttr-Original Height-215',
+ 'zIntResou-UnOriented Height-216',
+ 'zAsset-Width-217',
+ 'zAddAssetAttr-Original Width-218',
+ 'zIntResou-UnOriented Width-219',
+ 'zAsset-Thumbnail Index-220',
+ 'zAddAssetAttr-Embedded Thumbnail Height-221',
+ 'zAddAssetAttr-Embedded Thumbnail Length-222',
+ 'zAddAssetAttr-Embedded Thumbnail Offset-223',
+ 'zAddAssetAttr-Embedded Thumbnail Width-224',
+ 'zAsset-Packed Acceptable Crop Rect-226',
+ 'zAsset-Packed Badge Attributes-227',
+ 'zAsset-Packed Preferred Crop Rect-228',
+ 'zAsset-Curation Score-229',
+ 'zAsset-Camera Processing Adjustment State-230',
+ 'zAsset-Depth Type-231',
+ 'zAsset-Is Magic Carpet-Quicktime_MOV-file-232',
+ 'zAddAssetAttr-Orig Resource Choice-233',
+ 'zAsset-Spatial Type-234',
+ 'zAddAssetAttr-Spatial Over Capture Group ID-235',
+ 'zAddAssetAttr-Place Annotation Data-236',
+ 'zAddAssetAttr-Distance Identity-HEX-237',
+ 'zAddAssetAttr-Edited IPTC Attributes-238',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-239',
+ 'zAddAssetAttr-Accessibility Description-240',
+ 'zAddAssetAttr-Photo Stream Tag ID-241',
+ 'zAddAssetAttr-Share Type-242',
+ 'zAddAssetAttr-Library Scope Asset Contributors To Update-243',
+ 'zAsset-Overall Aesthetic Score-244',
+ 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18-245',
+ 'zMedAnlyAstAttr-Image_Caption_Version-iOS18-246',
+ 'zMedAnlyAstAttr-Video_Caption_Version-iOS18-247',
+ 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18-248',
+ 'zAsset-zENT-249',
+ 'zAsset-zOPT-250',
+ 'zAsset-Master= zCldMast-zPK-251',
+ 'zAsset-Extended Attributes= zExtAttr-zPK-252',
+ 'zAsset-Import Session Key-253',
+ 'zAsset-Photo Analysis Attributes Key-254',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-255',
+ 'zAsset-Computed Attributes Asset Key-256',
+ 'zAsset-Promotion Score-257',
+ 'zAsset-Iconic Score-258',
+ 'zAsset-Media Analysis Attributes Key-259',
+ 'zAsset-Media Group UUID-260',
+ 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-261',
+ 'zAsset.Cloud Collection GUID-262',
+ 'zAddAssetAttr-zENT-263',
+ 'ZAddAssetAttr-zOPT-264',
+ 'zAddAssetAttr-zAsset= zAsset_zPK-265',
+ 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-266',
+ 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-267',
+ 'zAddAssetAttr-Public Global UUID-268',
+ 'zAddAssetAttr-Original Assets UUID-269',
+ 'zAddAssetAttr-Originating Asset Identifier-270',
+ 'zCldMast-zPK= zAsset-Master-271',
+ 'zCldMast-zENT-272',
+ 'zCldMast-zOPT-273',
+ 'zCldMast-Moment Share Key= zShare-zPK-274',
+ 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-275',
+ 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-276',
+ 'zCldMast-Originating Asset ID-277',
+ 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-278',
+ 'CMzCldMastMedData-zENT-279',
+ 'CMzCldMastMedData-CldMast= zCldMast-zPK-280',
+ 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-281',
+ 'AAAzCldMastMedData-zENT-282',
+ 'AAAzCldMastMedData-CldMast key-283',
+ 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-284',
+ 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-285',
+ 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18-286',
+ 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18-287',
+ 'zCompSyncAttr-zENT-iOS18-288',
+ 'zCompSyncAttr-zOPT-iOS18-289',
+ 'zCompSyncAttr-Local_Analysis_Stage-iOS18-290',
+ 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18-291',
+ 'zExtAttr-zPK= zAsset-zExtendedAttributes-292',
+ 'zExtAttr-zENT-293',
+ 'zExtAttr-zOPT-294',
+ 'zExtAttr-Asset Key-295',
+ 'zIntResou-zPK-296',
+ 'zIntResou-zENT-297',
+ 'zIntResou-zOPT-298',
+ 'zIntResou-Asset= zAsset_zPK-299',
+ 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-300',
+ 'zMedAnlyAstAttr-zEnt-301',
+ 'zMedAnlyAstAttr-zOpt-302',
+ 'zMedAnlyAstAttr-Asset= zAsset-Zpk-303')
+ data_list = get_sqlite_db_records(source_path, query)
-__artifacts_v2__ = {
- 'Ph50-1-Asset_IntResou-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite Ph50.1 Asset IntResource Optimization Data',
- 'description': 'Parses iOS 14-18 asset records from PhotoData-Photos.sqlite ZINTERNALRESOURCE and'
- ' other tables. This and other related parsers should provide data for investigative'
- ' analysis of assets being stored locally on the device verses assets being stored in'
- ' iCloud Photos as the result of optimization. This is very large query and script,'
- ' I recommend opening the TSV generated report with Zimmermans Tools'
- ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,'
- ' and filter the results.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-14',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-I-Asset_IntResou-Optimization',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph50intresouoptimzdataphdapsql'
- },
- 'Ph50-2-Asset_IntResou-SyndPL': {
- 'name': 'SyndPL Photos.sqlite 50.2 Asset IntResource Optimization Data',
- 'description': 'Parses iOS 14-18 asset records from Syndication.photos.library-database-Photos.sqlite'
- ' ZINTERNALRESOURCE and and other tables. This and other related parsers should'
- ' provide data for investigative analysis of assets being stored locally on the'
- ' device verses assets being stored in iCloud Photos as the result of optimization.'
- ' This is very large query and script, I recommend opening the TSV generated report'
- ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer'
- ' to view, search, and filter the results.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-14',
- 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite',
- 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts',
- 'notes': '',
- 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',
- 'function': 'get_ph50intresouoptimzdatasyndpl'
- }
-}
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph51PossOptimizedAssetsIntResouData.py b/scripts/artifacts/Ph51PossOptimizedAssetsIntResouData.py
index 2a741d7d..f6487f6c 100644
--- a/scripts/artifacts/Ph51PossOptimizedAssetsIntResouData.py
+++ b/scripts/artifacts/Ph51PossOptimizedAssetsIntResouData.py
@@ -1,42 +1,52 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 2.0
-#
-# Description:
-# Parses iOS 14-18 possible optimized asset records from PhotoData-Photos.sqlite ZINTERNALRESOURCE and other tables.
-# This and other related parsers should provide data for investigative analysis of assets being stored locally
-# on the device verses assets being stored in iCloud Photos as the result of optimization.
-# This is very large query and script, I recommend opening the TSV generated report with Zimmerman's Tools
-# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results.
-# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347
-#
+__artifacts_v2__ = {
+ 'Ph51PossibleOptimizedAssetsIntResouPhDaPsql': {
+ 'name': 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql',
+ 'description': 'Parses iOS 14-18 asset records from PhotoData-Photos.sqlite ZINTERNALRESOURCE'
+ ' and other tables. This and other related parsers should provide data for investigative'
+ ' analysis of assets being stored locally on the device verses assets being stored in'
+ ' iCloud Photos as the result of optimization. This is very large query and script,'
+ ' I recommend opening the TSV generated report with Zimmermans Tools'
+ ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,'
+ ' and filter the results.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-I-Asset_IntResou-Optimization',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
-
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
-def get_ph51possibleoptimizedassetsphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+@artifact_processor
+def Ph51PossibleOptimizedAssetsIntResouPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("13.7"):
- logfunc("Unsupported version for PhotoData-Photos.sqlite ZINTERNALRESOURCE table data from iOS " + iosversion)
+ logfunc("Unsupported version for PhotoData-Photos.sqlite from iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found, "Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart',
zAsset.Z_PK AS 'zAsset-zPK',
@@ -739,310 +749,285 @@ def get_ph51possibleoptimizedassetsphdapsql(files_found, report_folder, seeker,
LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK
WHERE (zIntResou.ZDATASTORESUBTYPE = 1) & (zIntResou.ZLOCALAVAILABILITY = -1) & (zIntResou.ZFINGERPRINT IS NOT NULL)
ORDER BY zAsset.ZDATECREATED
- """)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
+ row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
+ row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
+ row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
+ row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
+ row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
+ row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
+ row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
+ row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
+ row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
+ row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
+ row[228], row[229], row[230], row[231], row[232], row[233]))
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
- row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
- row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
- row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
- row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
- row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
- row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
- row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
- row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
- row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
- row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
- row[228], row[229], row[230], row[231], row[232], row[233]))
-
- counter += 1
-
- description = 'Parses iOS 14 possible optimized asset records from PhotoData-Photos.sqlite' \
- ' ZINTERNALRESOURCE and other tables. This and other related parsers should provide data' \
- ' for investigative analysis of assets being stored locally on the device verses' \
- ' assets being stored in iCloud Photos as the result of optimization.' \
- ' This is very large query and script, I recommend opening the TSV generated report' \
- ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer' \
- ' to view, search, and filter the results.'
- report = ArtifactHtmlReport('Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-4QueryStart-0',
- 'zAsset-zPK-7',
- 'zAddAssetAttr-zPK-8',
- 'zAsset-UUID = store.cloudphotodb-9',
- 'zAddAssetAttr-Master Fingerprint-10',
- 'zIntResou-Fingerprint-11',
- 'zIntResou-Local Availability-4QueryStart-1',
- 'zIntResou-Remote Availability-4QueryStart-2',
- 'zIntResou-Resource Type-4QueryStart-3',
- 'zIntResou-Datastore Sub-Type-4QueryStart-4',
- 'zIntResou-Recipe ID-4QueryStart-5',
- 'zAsset Complete-6',
- 'zAsset-Cloud is My Asset-12',
- 'zAsset-Cloud is deletable-Asset-13',
- 'zAsset-Cloud_Local_State-14',
- 'zAsset-Visibility State-15',
- 'zExtAttr-Camera Make-16',
- 'zExtAttr-Camera Model-17',
- 'zExtAttr-Lens Model-18',
- 'zExtAttr-Flash Fired-19',
- 'zExtAttr-Focal Lenght-20',
- 'zAsset-Derived Camera Capture Device-21',
- 'zAddAssetAttr-Camera Captured Device-22',
- 'zAddAssetAttr-Imported by-23',
- 'zCldMast-Imported By-24',
- 'zAddAssetAttr-Creator Bundle ID-25',
- 'zAddAssetAttr-Imported By Display Name-26',
- 'zCldMast-Imported by Bundle ID-27',
- 'zCldMast-Imported by Display Name-28',
- 'zAsset-Saved Asset Type-29',
- 'zAsset-Directory-Path-30',
- 'zAsset-Filename-31',
- 'zAddAssetAttr- Original Filename-32',
- 'zCldMast- Original Filename-33',
- 'zAsset-Added Date-34',
- 'zAsset- SortToken -CameraRoll-35',
- 'zAsset-Date Created-36',
- 'zCldMast-Creation Date-37',
- 'zIntResou-CldMst Date Created-38',
- 'zAddAssetAttr-Time Zone Name-39',
- 'zAddAssetAttr-Time Zone Offset-40',
- 'zAddAssetAttr-Inferred Time Zone Offset-41',
- 'zAddAssetAttr-EXIF-String-42',
- 'zAsset-Modification Date-43',
- 'zAsset-Last Shared Date-44',
- 'zCldMast-Cloud Local State-45',
- 'zCldMast-Import Date-46',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-47',
- 'zAddAssetAttr-Import Session ID-48',
- 'zAddAssetAttr-Alt Import Image Date-49',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-50',
- 'zAsset-Cloud Batch Publish Date-51',
- 'zAsset-Cloud Server Publish Date-52',
- 'zAsset-Cloud Download Requests-53',
- 'zAsset-Cloud Batch ID-54',
- 'zAddAssetAttr-Upload Attempts-55',
- 'zAsset-Latitude-56',
- 'zExtAttr-Latitude-57',
- 'zAsset-Longitude-58',
- 'zExtAttr-Longitude-59',
- 'zAddAssetAttr-GPS Horizontal Accuracy-60',
- 'zAddAssetAttr-Location Hash-61',
- 'zAddAssetAttr-Reverse Location Is Valid-62',
- 'zAddAssetAttr-Shifted Location Valid-63',
- 'AAAzCldMastMedData-zOPT-64',
- 'zAddAssetAttr-Media Metadata Type-65',
- 'CldMasterzCldMastMedData-zOPT-66',
- 'zCldMast-Media Metadata Type-67',
- 'zAsset-Orientation-68',
- 'zAddAssetAttr-Original Orientation-69',
- 'zAsset-Kind-70',
- 'zAsset-Kind-Sub-Type-71',
- 'zAddAssetAttr-Cloud Kind Sub Type-72',
- 'zAsset-Playback Style-73',
- 'zAsset-Playback Variation-74',
- 'zAsset-Video Duration-75',
- 'zExtAttr-Duration-76',
- 'zAsset-Video CP Duration-77',
- 'zAddAssetAttr-Video CP Duration Time Scale-78',
- 'zAsset-Video CP Visibility State-79',
- 'zAddAssetAttr-Video CP Display Value-80',
- 'zAddAssetAttr-Video CP Display Time Scale-81',
- 'zIntResou-Datastore Class ID-82',
- 'zAsset-Cloud Placeholder Kind-83',
- 'zIntResou-Local Availability-84',
- 'zIntResou-Local Availability Target-85',
- 'zIntResou-Cloud Local State-86',
- 'zIntResou-Remote Availability-87',
- 'zIntResou-Remote Availability Target-88',
- 'zIntResou-Transient Cloud Master-89',
- 'zIntResou-Side Car Index-90',
- 'zIntResou- File ID-91',
- 'zIntResou-Version-92',
- 'zAddAssetAttr- Original-File-Size-93',
- 'zIntResou-Resource Type-94',
- 'zIntResou-Datastore Sub-Type-95',
- 'zIntResou-Cloud Source Type-96',
- 'zIntResou-Data Length-97',
- 'zIntResou-Recipe ID-98',
- 'zIntResou-Cloud Last Prefetch Date-99',
- 'zIntResou-Cloud Prefetch Count-100',
- 'zIntResou- Cloud-Last-OnDemand Download-Date-101',
- 'zAsset-Uniform Type ID-102',
- 'zAsset-Original Color Space-103',
- 'zCldMast-Uniform_Type_ID-104',
- 'zCldMast-Full Size JPEG Source-105',
- 'zAsset-HDR Gain-106',
- 'zExtAttr-Codec-107',
- 'zCldMast-Codec Name-108',
- 'zCldMast-Video Frame Rate-109',
- 'zCldMast-Placeholder State-110',
- 'zAsset-Depth_Type-111',
- 'zAsset-Avalanche UUID-112',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-113',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-114',
- 'zAddAssetAttr-Cloud Recovery State-115',
- 'zAddAssetAttr-Cloud State Recovery Attempts Count-116',
- 'zAsset-Deferred Processing Needed-117',
- 'zAddAssetAttr-Deferred Photo Identifier-118',
- 'zAddAssetAttr-Deferred Processing Candidate Options-119',
- 'zAsset-Has Adjustments-Camera-Effects-Filters-120',
- 'zAsset-Adjustment Timestamp-121',
- 'zAddAssetAttr-Editor Bundle ID-122',
- 'zAddAssetAttr-Montage-123',
- 'zAsset-Favorite-124',
- 'zAsset-Hidden-125',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-126',
- 'zAsset-Trashed Date-127',
- 'zIntResou-Trash State-128',
- 'zIntResou-Trashed Date-129',
- 'zAsset-Cloud Delete State-130',
- 'zIntResou-Cloud Delete State-131',
- 'zAddAssetAttr-PTP Trashed State-132',
- 'zIntResou-PTP Trashed State-133',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-134',
- 'zMedAnlyAstAttr-Media Analysis Timestamp-135',
- 'zAsset-Analysis State Modificaion Date-136',
- 'zAddAssetAttr- Pending View Count-137',
- 'zAddAssetAttr- View Count-138',
- 'zAddAssetAttr- Pending Play Count-139',
- 'zAddAssetAttr- Play Count-140',
- 'zAddAssetAttr- Pending Share Count-141',
- 'zAddAssetAttr- Share Count-142',
- 'zAddAssetAttr-Allowed for Analysis-143',
- 'zAddAssetAttr-Scene Analysis Version-144',
- 'zAddAssetAttr-Scene Analysis Timestamp-145',
- 'zAddAssetAttr-Destination Asset Copy State-146',
- 'zAddAssetAttr-Variation Suggestions States-147',
- 'zAsset-High Frame Rate State-148',
- 'zAsset-Video Key Frame Time Scale-149',
- 'zAsset-Video Key Frame Value-150',
- 'zExtAttr-ISO-151',
- 'zExtAttr-Metering Mode-152',
- 'zExtAttr-Sample Rate-153',
- 'zExtAttr-Track Format-154',
- 'zExtAttr-White Balance-155',
- 'zExtAttr-Aperture-156',
- 'zExtAttr-BitRate-157',
- 'zExtAttr-Exposure Bias-158',
- 'zExtAttr-Frames Per Second-159',
- 'zExtAttr-Shutter Speed-160',
- 'zAsset-Height-161',
- 'zAddAssetAttr-Original Height-162',
- 'zIntResou-Unoriented Height-163',
- 'zAsset-Width-164',
- 'zAddAssetAttr-Original Width-165',
- 'zIntResou-Unoriented Width-166',
- 'zAsset-Thumbnail Index-167',
- 'zAddAssetAttr-Embedded Thumbnail Height-168',
- 'zAddAssetAttr-Embedded Thumbnail Length-169',
- 'zAddAssetAttr-Embedded Thumbnail Offset-170',
- 'zAddAssetAttr-Embedded Thumbnail Width-171',
- 'zAsset-Packed Acceptable Crop Rect-172',
- 'zAsset-Packed Badge Attributes-173',
- 'zAsset-Packed Preferred Crop Rect-174',
- 'zAsset-Curation Score-175',
- 'zAsset-Camera Processing Adjustment State-176',
- 'zAsset-Depth Type-177',
- 'zAddAssetAttr-Orig Resource Choice-178',
- 'zAddAssetAttr-Spatial Over Capture Group ID-179',
- 'zAddAssetAttr-Place Annotation Data-180',
- 'zAddAssetAttr-Edited IPTC Attributes-181',
- 'zAddAssetAttr-Title-Comments via Cloud Website-182',
- 'zAddAssetAttr-Accessibility Description-183',
- 'zAddAssetAttr-Photo Stream Tag ID-184',
- 'zAddAssetAttr-Share Type-185',
- 'zAsset-Overall Aesthetic Score-186',
- 'zAsset-zENT-187',
- 'zAsset-zOPT-188',
- 'zAsset-Master= zCldMast-zPK-189',
- 'zAsset-Extended Attributes= zExtAttr-zPK-190',
- 'zAsset-Import Session Key-191',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-192',
- 'zAsset-Computed Attributes Asset Key-193',
- 'zAsset-Promotion Score-194',
- 'zAsset-Media Analysis Attributes Key-195',
- 'zAsset-Media Group UUID-196',
- 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-197',
- 'zAsset.Cloud Collection GUID-198',
- 'zAddAssetAttr-zENT-199',
- 'ZAddAssetAttr-zOPT-200',
- 'zAddAssetAttr-zAsset= zAsset_zPK-201',
- 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-202',
- 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-203',
- 'zAddAssetAttr-Public Global UUID-204',
- 'zAddAssetAttr-Original Assets UUID-205',
- 'zAddAssetAttr-Originating Asset Identifier-206',
- 'zAddAssetAttr.Adjusted Fingerprint-207',
- 'zCldMast-zPK= zAsset-Master-208',
- 'zCldMast-zENT-209',
- 'zCldMast-zOPT-210',
- 'zCldMast-Moment Share Key= zShare-zPK-211',
- 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-212',
- 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-213',
- 'zCldMast-Originating Asset ID-214',
- 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-215',
- 'CMzCldMastMedData-zENT-216',
- 'CMzCldMastMedData-CldMast= zCldMast-zPK-217',
- 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-218',
- 'AAAzCldMastMedData-zENT-219',
- 'AAAzCldMastMedData-CldMast key-220',
- 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-221',
- 'zExtAttr-zPK= zAsset-zExtendedAttributes-222',
- 'zExtAttr-zENT-223',
- 'zExtAttr-zOPT-224',
- 'zExtAttr-Asset Key-225',
- 'zIntResou-zPK-226',
- 'zIntResou-zENT-227',
- 'zIntResou-zOPT-228',
- 'zIntResou-Asset= zAsset_zPK-229',
- 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-230',
- 'zMedAnlyAstAttr-zEnt-231',
- 'zMedAnlyAstAttr-zOpt-232',
- 'zMedAnlyAstAttr-Asset= zAsset-zPK-233')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
+ data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'),
+ 'zAsset-zPK-7',
+ 'zAddAssetAttr-zPK-8',
+ 'zAsset-UUID = store.cloudphotodb-9',
+ 'zAddAssetAttr-Master Fingerprint-10',
+ 'zIntResou-Fingerprint-11',
+ 'zIntResou-Local Availability-4QueryStart-1',
+ 'zIntResou-Remote Availability-4QueryStart-2',
+ 'zIntResou-Resource Type-4QueryStart-3',
+ 'zIntResou-Datastore Sub-Type-4QueryStart-4',
+ 'zIntResou-Recipe ID-4QueryStart-5',
+ 'zAsset Complete-6',
+ 'zAsset-Cloud is My Asset-12',
+ 'zAsset-Cloud is deletable-Asset-13',
+ 'zAsset-Cloud_Local_State-14',
+ 'zAsset-Visibility State-15',
+ 'zExtAttr-Camera Make-16',
+ 'zExtAttr-Camera Model-17',
+ 'zExtAttr-Lens Model-18',
+ 'zExtAttr-Flash Fired-19',
+ 'zExtAttr-Focal Lenght-20',
+ 'zAsset-Derived Camera Capture Device-21',
+ 'zAddAssetAttr-Camera Captured Device-22',
+ 'zAddAssetAttr-Imported by-23',
+ 'zCldMast-Imported By-24',
+ 'zAddAssetAttr-Creator Bundle ID-25',
+ 'zAddAssetAttr-Imported By Display Name-26',
+ 'zCldMast-Imported by Bundle ID-27',
+ 'zCldMast-Imported by Display Name-28',
+ 'zAsset-Saved Asset Type-29',
+ 'zAsset-Directory-Path-30',
+ 'zAsset-Filename-31',
+ 'zAddAssetAttr- Original Filename-32',
+ 'zCldMast- Original Filename-33',
+ ('zAsset-Added Date-34', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-35', 'datetime'),
+ ('zAsset-Date Created-36', 'datetime'),
+ ('zCldMast-Creation Date-37', 'datetime'),
+ ('zIntResou-CldMst Date Created-38', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-39',
+ 'zAddAssetAttr-Time Zone Offset-40',
+ 'zAddAssetAttr-Inferred Time Zone Offset-41',
+ 'zAddAssetAttr-EXIF-String-42',
+ ('zAsset-Modification Date-43', 'datetime'),
+ ('zAsset-Last Shared Date-44', 'datetime'),
+ 'zCldMast-Cloud Local State-45',
+ ('zCldMast-Import Date-46', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-47', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-48',
+ ('zAddAssetAttr-Alt Import Image Date-49', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-50',
+ ('zAsset-Cloud Batch Publish Date-51', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-52', 'datetime'),
+ 'zAsset-Cloud Download Requests-53',
+ 'zAsset-Cloud Batch ID-54',
+ 'zAddAssetAttr-Upload Attempts-55',
+ 'zAsset-Latitude-56',
+ 'zExtAttr-Latitude-57',
+ 'zAsset-Longitude-58',
+ 'zExtAttr-Longitude-59',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-60',
+ 'zAddAssetAttr-Location Hash-61',
+ 'zAddAssetAttr-Reverse Location Is Valid-62',
+ 'zAddAssetAttr-Shifted Location Valid-63',
+ 'AAAzCldMastMedData-zOPT-64',
+ 'zAddAssetAttr-Media Metadata Type-65',
+ 'CldMasterzCldMastMedData-zOPT-66',
+ 'zCldMast-Media Metadata Type-67',
+ 'zAsset-Orientation-68',
+ 'zAddAssetAttr-Original Orientation-69',
+ 'zAsset-Kind-70',
+ 'zAsset-Kind-Sub-Type-71',
+ 'zAddAssetAttr-Cloud Kind Sub Type-72',
+ 'zAsset-Playback Style-73',
+ 'zAsset-Playback Variation-74',
+ 'zAsset-Video Duration-75',
+ 'zExtAttr-Duration-76',
+ 'zAsset-Video CP Duration-77',
+ 'zAddAssetAttr-Video CP Duration Time Scale-78',
+ 'zAsset-Video CP Visibility State-79',
+ 'zAddAssetAttr-Video CP Display Value-80',
+ 'zAddAssetAttr-Video CP Display Time Scale-81',
+ 'zIntResou-Datastore Class ID-82',
+ 'zAsset-Cloud Placeholder Kind-83',
+ 'zIntResou-Local Availability-84',
+ 'zIntResou-Local Availability Target-85',
+ 'zIntResou-Cloud Local State-86',
+ 'zIntResou-Remote Availability-87',
+ 'zIntResou-Remote Availability Target-88',
+ 'zIntResou-Transient Cloud Master-89',
+ 'zIntResou-Side Car Index-90',
+ 'zIntResou- File ID-91',
+ 'zIntResou-Version-92',
+ 'zAddAssetAttr- Original-File-Size-93',
+ 'zIntResou-Resource Type-94',
+ 'zIntResou-Datastore Sub-Type-95',
+ 'zIntResou-Cloud Source Type-96',
+ 'zIntResou-Data Length-97',
+ 'zIntResou-Recipe ID-98',
+ ('zIntResou-Cloud Last Prefetch Date-99', 'datetime'),
+ 'zIntResou-Cloud Prefetch Count-100',
+ ('zIntResou- Cloud-Last-OnDemand Download-Date-101', 'datetime'),
+ 'zAsset-Uniform Type ID-102',
+ 'zAsset-Original Color Space-103',
+ 'zCldMast-Uniform_Type_ID-104',
+ 'zCldMast-Full Size JPEG Source-105',
+ 'zAsset-HDR Gain-106',
+ 'zExtAttr-Codec-107',
+ 'zCldMast-Codec Name-108',
+ 'zCldMast-Video Frame Rate-109',
+ 'zCldMast-Placeholder State-110',
+ 'zAsset-Depth_Type-111',
+ 'zAsset-Avalanche UUID-112',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-113',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-114',
+ 'zAddAssetAttr-Cloud Recovery State-115',
+ 'zAddAssetAttr-Cloud State Recovery Attempts Count-116',
+ 'zAsset-Deferred Processing Needed-117',
+ 'zAddAssetAttr-Deferred Photo Identifier-118',
+ 'zAddAssetAttr-Deferred Processing Candidate Options-119',
+ 'zAsset-Has Adjustments-Camera-Effects-Filters-120',
+ ('zAsset-Adjustment Timestamp-121', 'datetime'),
+ 'zAddAssetAttr-Editor Bundle ID-122',
+ 'zAddAssetAttr-Montage-123',
+ 'zAsset-Favorite-124',
+ 'zAsset-Hidden-125',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-126',
+ ('zAsset-Trashed Date-127', 'datetime'),
+ 'zIntResou-Trash State-128',
+ ('zIntResou-Trashed Date-129', 'datetime'),
+ 'zAsset-Cloud Delete State-130',
+ 'zIntResou-Cloud Delete State-131',
+ 'zAddAssetAttr-PTP Trashed State-132',
+ 'zIntResou-PTP Trashed State-133',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-134',
+ ('zMedAnlyAstAttr-Media Analysis Timestamp-135', 'datetime'),
+ ('zAsset-Analysis State Modification Date-136', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-137',
+ 'zAddAssetAttr- View Count-138',
+ 'zAddAssetAttr- Pending Play Count-139',
+ 'zAddAssetAttr- Play Count-140',
+ 'zAddAssetAttr- Pending Share Count-141',
+ 'zAddAssetAttr- Share Count-142',
+ 'zAddAssetAttr-Allowed for Analysis-143',
+ 'zAddAssetAttr-Scene Analysis Version-144',
+ ('zAddAssetAttr-Scene Analysis Timestamp-145', 'datetime'),
+ 'zAddAssetAttr-Destination Asset Copy State-146',
+ 'zAddAssetAttr-Variation Suggestions States-147',
+ 'zAsset-High Frame Rate State-148',
+ 'zAsset-Video Key Frame Time Scale-149',
+ 'zAsset-Video Key Frame Value-150',
+ 'zExtAttr-ISO-151',
+ 'zExtAttr-Metering Mode-152',
+ 'zExtAttr-Sample Rate-153',
+ 'zExtAttr-Track Format-154',
+ 'zExtAttr-White Balance-155',
+ 'zExtAttr-Aperture-156',
+ 'zExtAttr-BitRate-157',
+ 'zExtAttr-Exposure Bias-158',
+ 'zExtAttr-Frames Per Second-159',
+ 'zExtAttr-Shutter Speed-160',
+ 'zAsset-Height-161',
+ 'zAddAssetAttr-Original Height-162',
+ 'zIntResou-Unoriented Height-163',
+ 'zAsset-Width-164',
+ 'zAddAssetAttr-Original Width-165',
+ 'zIntResou-Unoriented Width-166',
+ 'zAsset-Thumbnail Index-167',
+ 'zAddAssetAttr-Embedded Thumbnail Height-168',
+ 'zAddAssetAttr-Embedded Thumbnail Length-169',
+ 'zAddAssetAttr-Embedded Thumbnail Offset-170',
+ 'zAddAssetAttr-Embedded Thumbnail Width-171',
+ 'zAsset-Packed Acceptable Crop Rect-172',
+ 'zAsset-Packed Badge Attributes-173',
+ 'zAsset-Packed Preferred Crop Rect-174',
+ 'zAsset-Curation Score-175',
+ 'zAsset-Camera Processing Adjustment State-176',
+ 'zAsset-Depth Type-177',
+ 'zAddAssetAttr-Orig Resource Choice-178',
+ 'zAddAssetAttr-Spatial Over Capture Group ID-179',
+ 'zAddAssetAttr-Place Annotation Data-180',
+ 'zAddAssetAttr-Edited IPTC Attributes-181',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-182',
+ 'zAddAssetAttr-Accessibility Description-183',
+ 'zAddAssetAttr-Photo Stream Tag ID-184',
+ 'zAddAssetAttr-Share Type-185',
+ 'zAsset-Overall Aesthetic Score-186',
+ 'zAsset-zENT-187',
+ 'zAsset-zOPT-188',
+ 'zAsset-Master= zCldMast-zPK-189',
+ 'zAsset-Extended Attributes= zExtAttr-zPK-190',
+ 'zAsset-Import Session Key-191',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-192',
+ 'zAsset-Computed Attributes Asset Key-193',
+ 'zAsset-Promotion Score-194',
+ 'zAsset-Media Analysis Attributes Key-195',
+ 'zAsset-Media Group UUID-196',
+ 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-197',
+ 'zAsset.Cloud Collection GUID-198',
+ 'zAddAssetAttr-zENT-199',
+ 'ZAddAssetAttr-zOPT-200',
+ 'zAddAssetAttr-zAsset= zAsset_zPK-201',
+ 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-202',
+ 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-203',
+ 'zAddAssetAttr-Public Global UUID-204',
+ 'zAddAssetAttr-Original Assets UUID-205',
+ 'zAddAssetAttr-Originating Asset Identifier-206',
+ 'zAddAssetAttr.Adjusted Fingerprint-207',
+ 'zCldMast-zPK= zAsset-Master-208',
+ 'zCldMast-zENT-209',
+ 'zCldMast-zOPT-210',
+ 'zCldMast-Moment Share Key= zShare-zPK-211',
+ 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-212',
+ 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-213',
+ 'zCldMast-Originating Asset ID-214',
+ 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-215',
+ 'CMzCldMastMedData-zENT-216',
+ 'CMzCldMastMedData-CldMast= zCldMast-zPK-217',
+ 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-218',
+ 'AAAzCldMastMedData-zENT-219',
+ 'AAAzCldMastMedData-CldMast key-220',
+ 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-221',
+ 'zExtAttr-zPK= zAsset-zExtendedAttributes-222',
+ 'zExtAttr-zENT-223',
+ 'zExtAttr-zOPT-224',
+ 'zExtAttr-Asset Key-225',
+ 'zIntResou-zPK-226',
+ 'zIntResou-zENT-227',
+ 'zIntResou-zOPT-228',
+ 'zIntResou-Asset= zAsset_zPK-229',
+ 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-230',
+ 'zMedAnlyAstAttr-zEnt-231',
+ 'zMedAnlyAstAttr-zOpt-232',
+ 'zMedAnlyAstAttr-Asset= zAsset-zPK-233')
+ data_list = get_sqlite_db_records(source_path, query)
- tlactivity = 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No Internal Resource data available for iOS 14 PhotoData-Photos.sqlite')
-
- db.close()
- return
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found, "Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart',
zAsset.Z_PK AS 'zAsset-zPK',
@@ -1827,337 +1812,312 @@ def get_ph51possibleoptimizedassetsphdapsql(files_found, report_folder, seeker,
LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK
WHERE (zIntResou.ZDATASTORESUBTYPE = 1) & (zIntResou.ZLOCALAVAILABILITY = -1) & (zIntResou.ZFINGERPRINT IS NOT NULL)
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
- row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
- row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
- row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
- row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
- row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
- row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
- row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
- row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
- row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
- row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
- row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
- row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
- row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
- row[252], row[253], row[254], row[255], row[256], row[257]))
-
- counter += 1
-
- description = 'Parses iOS 15 possible optimized asset records from PhotoData-Photos.sqlite' \
- ' ZINTERNALRESOURCE and other tables. This and other related parsers should provide data' \
- ' for investigative analysis of assets being stored locally on the device verses' \
- ' assets being stored in iCloud Photos as the result of optimization.' \
- ' This is very large query and script, I recommend opening the TSV generated report' \
- ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer' \
- ' to view, search, and filter the results.'
- report = ArtifactHtmlReport('Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-4QueryStart-0',
- 'zAsset-zPK-7',
- 'zAddAssetAttr-zPK-8',
- 'zAsset-UUID = store.cloudphotodb-9',
- 'zAddAssetAttr-Master Fingerprint-10',
- 'zIntResou-Fingerprint-11',
- 'zIntResou-Local Availability-4QueryStart-1',
- 'zIntResou-Remote Availability-4QueryStart-2',
- 'zIntResou-Resource Type-4QueryStart-3',
- 'zIntResou-Datastore Sub-Type-4QueryStart-4',
- 'zIntResou-Recipe ID-4QueryStart-5',
- 'zAsset Complete-6',
- 'zAsset-Bundle Scope-12',
- 'zAsset-Syndication State-13',
- 'zAsset-Cloud is My Asset-14',
- 'zAsset-Cloud is deletable-Asset-15',
- 'zAsset-Cloud_Local_State-16',
- 'zAsset-Visibility State-17',
- 'zExtAttr-Camera Make-18',
- 'zExtAttr-Camera Model-19',
- 'zExtAttr-Lens Model-20',
- 'zExtAttr-Flash Fired-21',
- 'zExtAttr-Focal Length-22',
- 'zExtAttr-Focal Length in 35MM-23',
- 'zExtAttr-Digital Zoom Ratio-24',
- 'zAsset-Derived Camera Capture Device-25',
- 'zAddAssetAttr-Camera Captured Device-26',
- 'zAddAssetAttr-Imported by-27',
- 'zCldMast-Imported By-28',
- 'zAddAssetAttr.Imported by Bundle Identifier-29',
- 'zAddAssetAttr-Imported By Display Name-30',
- 'zCldMast-Imported by Bundle ID-31',
- 'zCldMast-Imported by Display Name-32',
- 'zAsset-Saved Asset Type-33',
- 'zAsset-Directory-Path-34',
- 'zAsset-Filename-35',
- 'zAddAssetAttr- Original Filename-36',
- 'zCldMast- Original Filename-37',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-38',
- 'zAsset-Added Date-39',
- 'zAsset- SortToken -CameraRoll-40',
- 'zAddAssetAttr-Date Created Source-41',
- 'zAsset-Date Created-42',
- 'zCldMast-Creation Date-43',
- 'zIntResou-CldMst Date Created-44',
- 'zAddAssetAttr-Time Zone Name-45',
- 'zAddAssetAttr-Time Zone Offset-46',
- 'zAddAssetAttr-Inferred Time Zone Offset-47',
- 'zAddAssetAttr-EXIF-String-48',
- 'zAsset-Modification Date-49',
- 'zAsset-Last Shared Date-50',
- 'zCldMast-Cloud Local State-51',
- 'zCldMast-Import Date-52',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-53',
- 'zAddAssetAttr-Import Session ID-54',
- 'zAddAssetAttr-Alt Import Image Date-55',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-56',
- 'zAsset-Cloud Batch Publish Date-57',
- 'zAsset-Cloud Server Publish Date-58',
- 'zAsset-Cloud Download Requests-59',
- 'zAsset-Cloud Batch ID-60',
- 'zAddAssetAttr-Upload Attempts-61',
- 'zAsset-Latitude-62',
- 'zExtAttr-Latitude-63',
- 'zAsset-Longitude-64',
- 'zExtAttr-Longitude-65',
- 'zAddAssetAttr-GPS Horizontal Accuracy-66',
- 'zAddAssetAttr-Location Hash-67',
- 'zAddAssetAttr-Reverse Location Is Valid-68',
- 'zAddAssetAttr-Shifted Location Valid-69',
- 'AAAzCldMastMedData-zOPT-70',
- 'zAddAssetAttr-Media Metadata Type-71',
- 'CldMasterzCldMastMedData-zOPT-72',
- 'zCldMast-Media Metadata Type-73',
- 'zAddAssetAttr-Syndication History-74',
- 'zMedAnlyAstAttr-Syndication Processing Version-75',
- 'zMedAnlyAstAttr-Syndication Processing Value-76',
- 'zAsset-Orientation-77',
- 'zAddAssetAttr-Original Orientation-78',
- 'zAsset-Kind-79',
- 'zAsset-Kind-Sub-Type-80',
- 'zAddAssetAttr-Cloud Kind Sub Type-81',
- 'zAsset-Playback Style-82',
- 'zAsset-Playback Variation-83',
- 'zAsset-Video Duration-84',
- 'zExtAttr-Duration-85',
- 'zAsset-Video CP Duration-86',
- 'zAddAssetAttr-Video CP Duration Time Scale-87',
- 'zAsset-Video CP Visibility State-88',
- 'zAddAssetAttr-Video CP Display Value-89',
- 'zAddAssetAttr-Video CP Display Time Scale-90',
- 'zIntResou-Datastore Class ID-91',
- 'zAsset-Cloud Placeholder Kind-92',
- 'zIntResou-Local Availability-93',
- 'zIntResou-Local Availability Target-94',
- 'zIntResou-Cloud Local State-95',
- 'zIntResou-Remote Availability-96',
- 'zIntResou-Remote Availability Target-97',
- 'zIntResou-Transient Cloud Master-98',
- 'zIntResou-Side Car Index-99',
- 'zIntResou- File ID-100',
- 'zIntResou-Version-101',
- 'zAddAssetAttr- Original-File-Size-102',
- 'zIntResou-Resource Type-103',
- 'zIntResou-Datastore Sub-Type-104',
- 'zIntResou-Cloud Source Type-105',
- 'zIntResou-Data Length-106',
- 'zIntResou-Recipe ID-107',
- 'zIntResou-Cloud Last Prefetch Date-108',
- 'zIntResou-Cloud Prefetch Count-109',
- 'zIntResou- Cloud-Last-OnDemand Download-Date-110',
- 'zIntResou-UniformTypeID_UTI_Conformance_Hint-111',
- 'zIntResou-Compact-UTI-112',
- 'zAsset-Uniform Type ID-113',
- 'zAsset-Original Color Space-114',
- 'zCldMast-Uniform_Type_ID-115',
- 'zCldMast-Full Size JPEG Source-116',
- 'zAsset-HDR Gain-117',
- 'zAsset-zHDR_Type-118',
- 'zExtAttr-Codec-119',
- 'zIntResou-Codec Four Char Code Name-120',
- 'zCldMast-Codec Name-121',
- 'zCldMast-Video Frame Rate-122',
- 'zCldMast-Placeholder State-123',
- 'zAsset-Depth_Type-124',
- 'zAsset-Avalanche UUID-125',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-126',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-127',
- 'zAddAssetAttr-Cloud Recovery State-128',
- 'zAddAssetAttr-Cloud State Recovery Attempts Count-129',
- 'zAsset-Deferred Processing Needed-130',
- 'zAsset-Video Deferred Processing Needed-131',
- 'zAddAssetAttr-Deferred Photo Identifier-132',
- 'zAddAssetAttr-Deferred Processing Candidate Options-133',
- 'zAsset-Has Adjustments-Camera-Effects-Filters-134',
- 'zAsset-Adjustment Timestamp-135',
- 'zAddAssetAttr-Editor Bundle ID-136',
- 'zAddAssetAttr-Montage-137',
- 'zAsset-Favorite-138',
- 'zAsset-Hidden-139',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-140',
- 'zAsset-Trashed Date-141',
- 'zIntResou-Trash State-142',
- 'zIntResou-Trashed Date-143',
- 'zAsset-Cloud Delete State-144',
- 'zIntResou-Cloud Delete State-145',
- 'zAddAssetAttr-PTP Trashed State-146',
- 'zIntResou-PTP Trashed State-147',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-148',
- 'zMedAnlyAstAttr-Media Analysis Timestamp-149',
- 'zAsset-Analysis State Modification Date-150',
- 'zAddAssetAttr- Pending View Count-151',
- 'zAddAssetAttr- View Count-152',
- 'zAddAssetAttr- Pending Play Count-153',
- 'zAddAssetAttr- Play Count-154',
- 'zAddAssetAttr- Pending Share Count-155',
- 'zAddAssetAttr- Share Count-156',
- 'zAddAssetAttr-Allowed for Analysis-157',
- 'zAddAssetAttr-Scene Analysis Version-158',
- 'zAddAssetAttr-Scene Analysis is From Preview-159',
- 'zAddAssetAttr-Scene Analysis Timestamp-160',
- 'zAddAssetAttr-Destination Asset Copy State-161',
- 'zAddAssetAttr-Source Asset for Duplication Scope ID-162',
- 'zCldMast-Source Master For Duplication Scope ID-163',
- 'zAddAssetAttr-Source Asset For Duplication ID-164',
- 'zCldMast-Source Master for Duplication ID-165',
- 'zAddAssetAttr-Variation Suggestions States-166',
- 'zAsset-High Frame Rate State-167',
- 'zAsset-Video Key Frame Time Scale-168',
- 'zAsset-Video Key Frame Value-169',
- 'zExtAttr-ISO-170',
- 'zExtAttr-Metering Mode-171',
- 'zExtAttr-Sample Rate-172',
- 'zExtAttr-Track Format-173',
- 'zExtAttr-White Balance-174',
- 'zExtAttr-Aperture-175',
- 'zExtAttr-BitRate-176',
- 'zExtAttr-Exposure Bias-177',
- 'zExtAttr-Frames Per Second-178',
- 'zExtAttr-Shutter Speed-179',
- 'zExtAttr-Slush Scene Bias-180',
- 'zExtAttr-Slush Version-181',
- 'zExtAttr-Slush Preset-182',
- 'zExtAttr-Slush Warm Bias-183',
- 'zAsset-Height-184',
- 'zAddAssetAttr-Original Height-185',
- 'zIntResou-UnOriented Height-186',
- 'zAsset-Width-187',
- 'zAddAssetAttr-Original Width-188',
- 'zIntResou-UnOriented Width-189',
- 'zAsset-Thumbnail Index-190',
- 'zAddAssetAttr-Embedded Thumbnail Height-191',
- 'zAddAssetAttr-Embedded Thumbnail Length-192',
- 'zAddAssetAttr-Embedded Thumbnail Offset-193',
- 'zAddAssetAttr-Embedded Thumbnail Width-194',
- 'zAsset-Packed Acceptable Crop Rect-195',
- 'zAsset-Packed Badge Attributes-196',
- 'zAsset-Packed Preferred Crop Rect-197',
- 'zAsset-Curation Score-198',
- 'zAsset-Camera Processing Adjustment State-199',
- 'zAsset-Depth Type-200',
- 'zAsset-Is Magic Carpet-Quicktime_MOV_file-201',
- 'zAddAssetAttr-Orig Resource Choice-202',
- 'zAddAssetAttr-Spatial Over Capture Group ID-203',
- 'zAddAssetAttr-Place Annotation Data-204',
- 'zAddAssetAttr-Edited IPTC Attributes-205',
- 'zAddAssetAttr-Title-Comments via Cloud Website-206',
- 'zAddAssetAttr-Accessibility Description-207',
- 'zAddAssetAttr-Photo Stream Tag ID-208',
- 'zAddAssetAttr-Share Type-209',
- 'zAsset-Overall Aesthetic Score-210',
- 'zAsset-zENT-211',
- 'zAsset-zOPT-212',
- 'zAsset-Master= zCldMast-zPK-213',
- 'zAsset-Extended Attributes= zExtAttr-zPK-214',
- 'zAsset-Import Session Key-215',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-216',
- 'zAsset-Computed Attributes Asset Key-217',
- 'zAsset-Promotion Score-218',
- 'zAsset-Media Analysis Attributes Key-219',
- 'zAsset-Media Group UUID-220',
- 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-221',
- 'zAsset.Cloud Collection GUID-222',
- 'zAddAssetAttr-zENT-223',
- 'ZAddAssetAttr-zOPT-224',
- 'zAddAssetAttr-zAsset= zAsset_zPK-225',
- 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-226',
- 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-227',
- 'zAddAssetAttr-Public Global UUID-228',
- 'zAddAssetAttr-Original Assets UUID-229',
- 'zAddAssetAttr-Originating Asset Identifier-230',
- 'zAddAssetAttr.Adjusted Fingerprint-231',
- 'zCldMast-zPK= zAsset-Master-232',
- 'zCldMast-zENT-233',
- 'zCldMast-zOPT-234',
- 'zCldMast-Moment Share Key= zShare-zPK-235',
- 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-236',
- 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-237',
- 'zCldMast-Originating Asset ID-238',
- 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-239',
- 'CMzCldMastMedData-zENT-240',
- 'CMzCldMastMedData-CldMast= zCldMast-zPK-241',
- 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-242',
- 'AAAzCldMastMedData-zENT-243',
- 'AAAzCldMastMedData-CldMast key-244',
- 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-245',
- 'zExtAttr-zPK= zAsset-zExtendedAttributes-246',
- 'zExtAttr-zENT-247',
- 'zExtAttr-zOPT-248',
- 'zExtAttr-Asset Key-249',
- 'zIntResou-zPK-250',
- 'zIntResou-zENT-251',
- 'zIntResou-zOPT-252',
- 'zIntResou-Asset= zAsset_zPK-253',
- 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-254',
- 'zMedAnlyAstAttr-zEnt-255',
- 'zMedAnlyAstAttr-zOpt-256',
- 'zMedAnlyAstAttr-Asset= zAsset-zPK-257')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
+ row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
+ row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
+ row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
+ row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
+ row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
+ row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
+ row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
+ row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
+ row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
+ row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
+ row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
+ row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
+ row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
+ row[252], row[253], row[254], row[255], row[256], row[257]))
- tlactivity = 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'),
+ 'zAsset-zPK-7',
+ 'zAddAssetAttr-zPK-8',
+ 'zAsset-UUID = store.cloudphotodb-9',
+ 'zAddAssetAttr-Master Fingerprint-10',
+ 'zIntResou-Fingerprint-11',
+ 'zIntResou-Local Availability-4QueryStart-1',
+ 'zIntResou-Remote Availability-4QueryStart-2',
+ 'zIntResou-Resource Type-4QueryStart-3',
+ 'zIntResou-Datastore Sub-Type-4QueryStart-4',
+ 'zIntResou-Recipe ID-4QueryStart-5',
+ 'zAsset Complete-6',
+ 'zAsset-Bundle Scope-12',
+ 'zAsset-Syndication State-13',
+ 'zAsset-Cloud is My Asset-14',
+ 'zAsset-Cloud is deletable-Asset-15',
+ 'zAsset-Cloud_Local_State-16',
+ 'zAsset-Visibility State-17',
+ 'zExtAttr-Camera Make-18',
+ 'zExtAttr-Camera Model-19',
+ 'zExtAttr-Lens Model-20',
+ 'zExtAttr-Flash Fired-21',
+ 'zExtAttr-Focal Length-22',
+ 'zExtAttr-Focal Length in 35MM-23',
+ 'zExtAttr-Digital Zoom Ratio-24',
+ 'zAsset-Derived Camera Capture Device-25',
+ 'zAddAssetAttr-Camera Captured Device-26',
+ 'zAddAssetAttr-Imported by-27',
+ 'zCldMast-Imported By-28',
+ 'zAddAssetAttr.Imported by Bundle Identifier-29',
+ 'zAddAssetAttr-Imported By Display Name-30',
+ 'zCldMast-Imported by Bundle ID-31',
+ 'zCldMast-Imported by Display Name-32',
+ 'zAsset-Saved Asset Type-33',
+ 'zAsset-Directory-Path-34',
+ 'zAsset-Filename-35',
+ 'zAddAssetAttr- Original Filename-36',
+ 'zCldMast- Original Filename-37',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-38',
+ ('zAsset-Added Date-39', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-40', 'datetime'),
+ ('zAddAssetAttr-Date Created Source-41', 'datetime'),
+ ('zAsset-Date Created-42', 'datetime'),
+ ('zCldMast-Creation Date-43', 'datetime'),
+ ('zIntResou-CldMst Date Created-44', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-45',
+ 'zAddAssetAttr-Time Zone Offset-46',
+ 'zAddAssetAttr-Inferred Time Zone Offset-47',
+ 'zAddAssetAttr-EXIF-String-48',
+ ('zAsset-Modification Date-49', 'datetime'),
+ ('zAsset-Last Shared Date-50', 'datetime'),
+ 'zCldMast-Cloud Local State-51',
+ ('zCldMast-Import Date-52', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-53', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-54',
+ ('zAddAssetAttr-Alt Import Image Date-55', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-56',
+ ('zAsset-Cloud Batch Publish Date-57', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-58', 'datetime'),
+ 'zAsset-Cloud Download Requests-59',
+ 'zAsset-Cloud Batch ID-60',
+ 'zAddAssetAttr-Upload Attempts-61',
+ 'zAsset-Latitude-62',
+ 'zExtAttr-Latitude-63',
+ 'zAsset-Longitude-64',
+ 'zExtAttr-Longitude-65',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-66',
+ 'zAddAssetAttr-Location Hash-67',
+ 'zAddAssetAttr-Reverse Location Is Valid-68',
+ 'zAddAssetAttr-Shifted Location Valid-69',
+ 'AAAzCldMastMedData-zOPT-70',
+ 'zAddAssetAttr-Media Metadata Type-71',
+ 'CldMasterzCldMastMedData-zOPT-72',
+ 'zCldMast-Media Metadata Type-73',
+ 'zAddAssetAttr-Syndication History-74',
+ 'zMedAnlyAstAttr-Syndication Processing Version-75',
+ 'zMedAnlyAstAttr-Syndication Processing Value-76',
+ 'zAsset-Orientation-77',
+ 'zAddAssetAttr-Original Orientation-78',
+ 'zAsset-Kind-79',
+ 'zAsset-Kind-Sub-Type-80',
+ 'zAddAssetAttr-Cloud Kind Sub Type-81',
+ 'zAsset-Playback Style-82',
+ 'zAsset-Playback Variation-83',
+ 'zAsset-Video Duration-84',
+ 'zExtAttr-Duration-85',
+ 'zAsset-Video CP Duration-86',
+ 'zAddAssetAttr-Video CP Duration Time Scale-87',
+ 'zAsset-Video CP Visibility State-88',
+ 'zAddAssetAttr-Video CP Display Value-89',
+ 'zAddAssetAttr-Video CP Display Time Scale-90',
+ 'zIntResou-Datastore Class ID-91',
+ 'zAsset-Cloud Placeholder Kind-92',
+ 'zIntResou-Local Availability-93',
+ 'zIntResou-Local Availability Target-94',
+ 'zIntResou-Cloud Local State-95',
+ 'zIntResou-Remote Availability-96',
+ 'zIntResou-Remote Availability Target-97',
+ 'zIntResou-Transient Cloud Master-98',
+ 'zIntResou-Side Car Index-99',
+ 'zIntResou- File ID-100',
+ 'zIntResou-Version-101',
+ 'zAddAssetAttr- Original-File-Size-102',
+ 'zIntResou-Resource Type-103',
+ 'zIntResou-Datastore Sub-Type-104',
+ 'zIntResou-Cloud Source Type-105',
+ 'zIntResou-Data Length-106',
+ 'zIntResou-Recipe ID-107',
+ ('zIntResou-Cloud Last Prefetch Date-108', 'datetime'),
+ 'zIntResou-Cloud Prefetch Count-109',
+ ('zIntResou- Cloud-Last-OnDemand Download-Date-110', 'datetime'),
+ 'zIntResou-UniformTypeID_UTI_Conformance_Hint-111',
+ 'zIntResou-Compact-UTI-112',
+ 'zAsset-Uniform Type ID-113',
+ 'zAsset-Original Color Space-114',
+ 'zCldMast-Uniform_Type_ID-115',
+ 'zCldMast-Full Size JPEG Source-116',
+ 'zAsset-HDR Gain-117',
+ 'zAsset-zHDR_Type-118',
+ 'zExtAttr-Codec-119',
+ 'zIntResou-Codec Four Char Code Name-120',
+ 'zCldMast-Codec Name-121',
+ 'zCldMast-Video Frame Rate-122',
+ 'zCldMast-Placeholder State-123',
+ 'zAsset-Depth_Type-124',
+ 'zAsset-Avalanche UUID-125',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-126',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-127',
+ 'zAddAssetAttr-Cloud Recovery State-128',
+ 'zAddAssetAttr-Cloud State Recovery Attempts Count-129',
+ 'zAsset-Deferred Processing Needed-130',
+ 'zAsset-Video Deferred Processing Needed-131',
+ 'zAddAssetAttr-Deferred Photo Identifier-132',
+ 'zAddAssetAttr-Deferred Processing Candidate Options-133',
+ 'zAsset-Has Adjustments-Camera-Effects-Filters-134',
+ ('zAsset-Adjustment Timestamp-135', 'datetime'),
+ 'zAddAssetAttr-Editor Bundle ID-136',
+ 'zAddAssetAttr-Montage-137',
+ 'zAsset-Favorite-138',
+ 'zAsset-Hidden-139',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-140',
+ ('zAsset-Trashed Date-141', 'datetime'),
+ 'zIntResou-Trash State-142',
+ ('zIntResou-Trashed Date-143', 'datetime'),
+ 'zAsset-Cloud Delete State-144',
+ 'zIntResou-Cloud Delete State-145',
+ 'zAddAssetAttr-PTP Trashed State-146',
+ 'zIntResou-PTP Trashed State-147',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-148',
+ ('zMedAnlyAstAttr-Media Analysis Timestamp-149', 'datetime'),
+ ('zAsset-Analysis State Modification Date-150', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-151',
+ 'zAddAssetAttr- View Count-152',
+ 'zAddAssetAttr- Pending Play Count-153',
+ 'zAddAssetAttr- Play Count-154',
+ 'zAddAssetAttr- Pending Share Count-155',
+ 'zAddAssetAttr- Share Count-156',
+ 'zAddAssetAttr-Allowed for Analysis-157',
+ 'zAddAssetAttr-Scene Analysis Version-158',
+ 'zAddAssetAttr-Scene Analysis is From Preview-159',
+ ('zAddAssetAttr-Scene Analysis Timestamp-160', 'datetime'),
+ 'zAddAssetAttr-Destination Asset Copy State-161',
+ 'zAddAssetAttr-Source Asset for Duplication Scope ID-162',
+ 'zCldMast-Source Master For Duplication Scope ID-163',
+ 'zAddAssetAttr-Source Asset For Duplication ID-164',
+ 'zCldMast-Source Master for Duplication ID-165',
+ 'zAddAssetAttr-Variation Suggestions States-166',
+ 'zAsset-High Frame Rate State-167',
+ 'zAsset-Video Key Frame Time Scale-168',
+ 'zAsset-Video Key Frame Value-169',
+ 'zExtAttr-ISO-170',
+ 'zExtAttr-Metering Mode-171',
+ 'zExtAttr-Sample Rate-172',
+ 'zExtAttr-Track Format-173',
+ 'zExtAttr-White Balance-174',
+ 'zExtAttr-Aperture-175',
+ 'zExtAttr-BitRate-176',
+ 'zExtAttr-Exposure Bias-177',
+ 'zExtAttr-Frames Per Second-178',
+ 'zExtAttr-Shutter Speed-179',
+ 'zExtAttr-Slush Scene Bias-180',
+ 'zExtAttr-Slush Version-181',
+ 'zExtAttr-Slush Preset-182',
+ 'zExtAttr-Slush Warm Bias-183',
+ 'zAsset-Height-184',
+ 'zAddAssetAttr-Original Height-185',
+ 'zIntResou-UnOriented Height-186',
+ 'zAsset-Width-187',
+ 'zAddAssetAttr-Original Width-188',
+ 'zIntResou-UnOriented Width-189',
+ 'zAsset-Thumbnail Index-190',
+ 'zAddAssetAttr-Embedded Thumbnail Height-191',
+ 'zAddAssetAttr-Embedded Thumbnail Length-192',
+ 'zAddAssetAttr-Embedded Thumbnail Offset-193',
+ 'zAddAssetAttr-Embedded Thumbnail Width-194',
+ 'zAsset-Packed Acceptable Crop Rect-195',
+ 'zAsset-Packed Badge Attributes-196',
+ 'zAsset-Packed Preferred Crop Rect-197',
+ 'zAsset-Curation Score-198',
+ 'zAsset-Camera Processing Adjustment State-199',
+ 'zAsset-Depth Type-200',
+ 'zAsset-Is Magic Carpet-Quicktime_MOV_file-201',
+ 'zAddAssetAttr-Orig Resource Choice-202',
+ 'zAddAssetAttr-Spatial Over Capture Group ID-203',
+ 'zAddAssetAttr-Place Annotation Data-204',
+ 'zAddAssetAttr-Edited IPTC Attributes-205',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-206',
+ 'zAddAssetAttr-Accessibility Description-207',
+ 'zAddAssetAttr-Photo Stream Tag ID-208',
+ 'zAddAssetAttr-Share Type-209',
+ 'zAsset-Overall Aesthetic Score-210',
+ 'zAsset-zENT-211',
+ 'zAsset-zOPT-212',
+ 'zAsset-Master= zCldMast-zPK-213',
+ 'zAsset-Extended Attributes= zExtAttr-zPK-214',
+ 'zAsset-Import Session Key-215',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-216',
+ 'zAsset-Computed Attributes Asset Key-217',
+ 'zAsset-Promotion Score-218',
+ 'zAsset-Media Analysis Attributes Key-219',
+ 'zAsset-Media Group UUID-220',
+ 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-221',
+ 'zAsset.Cloud Collection GUID-222',
+ 'zAddAssetAttr-zENT-223',
+ 'ZAddAssetAttr-zOPT-224',
+ 'zAddAssetAttr-zAsset= zAsset_zPK-225',
+ 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-226',
+ 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-227',
+ 'zAddAssetAttr-Public Global UUID-228',
+ 'zAddAssetAttr-Original Assets UUID-229',
+ 'zAddAssetAttr-Originating Asset Identifier-230',
+ 'zAddAssetAttr.Adjusted Fingerprint-231',
+ 'zCldMast-zPK= zAsset-Master-232',
+ 'zCldMast-zENT-233',
+ 'zCldMast-zOPT-234',
+ 'zCldMast-Moment Share Key= zShare-zPK-235',
+ 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-236',
+ 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-237',
+ 'zCldMast-Originating Asset ID-238',
+ 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-239',
+ 'CMzCldMastMedData-zENT-240',
+ 'CMzCldMastMedData-CldMast= zCldMast-zPK-241',
+ 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-242',
+ 'AAAzCldMastMedData-zENT-243',
+ 'AAAzCldMastMedData-CldMast key-244',
+ 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-245',
+ 'zExtAttr-zPK= zAsset-zExtendedAttributes-246',
+ 'zExtAttr-zENT-247',
+ 'zExtAttr-zOPT-248',
+ 'zExtAttr-Asset Key-249',
+ 'zIntResou-zPK-250',
+ 'zIntResou-zENT-251',
+ 'zIntResou-zOPT-252',
+ 'zIntResou-Asset= zAsset_zPK-253',
+ 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-254',
+ 'zMedAnlyAstAttr-zEnt-255',
+ 'zMedAnlyAstAttr-zOpt-256',
+ 'zMedAnlyAstAttr-Asset= zAsset-zPK-257')
+ data_list = get_sqlite_db_records(source_path, query)
- else:
- logfunc('No Internal Resource data available for iOS 15 PhotoData-Photos.sqlite')
-
- db.close()
- return
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found, "Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart',
zAsset.Z_PK AS 'zAsset-zPK',
@@ -2976,2864 +2936,2737 @@ def get_ph51possibleoptimizedassetsphdapsql(files_found, report_folder, seeker,
LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK
WHERE (zIntResou.ZDATASTORESUBTYPE = 1) & (zIntResou.ZLOCALAVAILABILITY = -1) & (zIntResou.ZFINGERPRINT IS NOT NULL)
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
- row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
- row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
- row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
- row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
- row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
- row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
- row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
- row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
- row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
- row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
- row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
- row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
- row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
- row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
- row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267]))
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
+ row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
+ row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
+ row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
+ row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
+ row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
+ row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
+ row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
+ row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
+ row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
+ row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
+ row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
+ row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
+ row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
+ row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
+ row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267]))
- counter += 1
+ data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'),
+ 'zAsset-zPK-7',
+ 'zAddAssetAttr-zPK-8',
+ 'zAsset-UUID = store.cloudphotodb-9',
+ 'zAddAssetAttr-Master Fingerprint-10',
+ 'zIntResou-Fingerprint-11',
+ 'zIntResou-Local Availability-4QueryStart-1',
+ 'zIntResou-Remote Availability-4QueryStart-2',
+ 'zIntResou-Resource Type-4QueryStart-3',
+ 'zIntResou-Datastore Sub-Type-4QueryStart-4',
+ 'zIntResou-Recipe ID-4QueryStart-5',
+ 'zAsset Complete-6',
+ 'zAsset-Bundle Scope-12',
+ 'zAsset-Syndication State-13',
+ 'zAsset-Cloud is My Asset-14',
+ 'zAsset-Cloud is deletable-Asset-15',
+ 'zAsset-Cloud_Local_State-16',
+ 'zAsset-Visibility State-17',
+ 'zExtAttr-Camera Make-18',
+ 'zExtAttr-Camera Model-19',
+ 'zExtAttr-Lens Model-20',
+ 'zExtAttr-Flash Fired-21',
+ 'zExtAttr-Focal Length-22',
+ 'zExtAttr-Focal Length in 35MM-23',
+ 'zExtAttr-Digital Zoom Ratio-24',
+ 'zAsset-Derived Camera Capture Device-25',
+ 'zAddAssetAttr-Camera Captured Device-26',
+ 'zAddAssetAttr-Imported by-27',
+ 'zCldMast-Imported By-28',
+ 'zAddAssetAttr.Imported by Bundle Identifier-29',
+ 'zAddAssetAttr-Imported By Display Name-30',
+ 'zCldMast-Imported by Bundle ID-31',
+ 'zCldMast-Imported by Display Name-32',
+ 'zAsset-Saved Asset Type-33',
+ 'zAsset-Directory-Path-34',
+ 'zAsset-Filename-35',
+ 'zAddAssetAttr- Original Filename-36',
+ 'zCldMast- Original Filename-37',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-38',
+ 'zAsset-Active Library Scope Participation State-39',
+ 'zAsset-Library Scope Share State- StillTesting-40',
+ ('zAsset-Added Date-41', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-42', 'datetime'),
+ ('zAddAssetAttr-Date Created Source-43', 'datetime'),
+ ('zAsset-Date Created-44', 'datetime'),
+ ('zCldMast-Creation Date-45', 'datetime'),
+ ('zIntResou-CldMst Date Created-46', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-47',
+ 'zAddAssetAttr-Time Zone Offset-48',
+ 'zAddAssetAttr-Inferred Time Zone Offset-49',
+ 'zAddAssetAttr-EXIF-String-50',
+ ('zAsset-Modification Date-51', 'datetime'),
+ ('zAsset-Last Shared Date-52', 'datetime'),
+ 'zCldMast-Cloud Local State-53',
+ ('zCldMast-Import Date-54', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-55', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-56',
+ ('zAddAssetAttr-Alt Import Image Date-57', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-58',
+ ('zAsset-Cloud Batch Publish Date-59', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-60', 'datetime'),
+ 'zAsset-Cloud Download Requests-61',
+ 'zAsset-Cloud Batch ID-62',
+ 'zAddAssetAttr-Upload Attempts-63',
+ 'zAsset-Latitude-64',
+ 'zExtAttr-Latitude-65',
+ 'zAsset-Longitude-66',
+ 'zExtAttr-Longitude-67',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-68',
+ 'zAddAssetAttr-Location Hash-69',
+ 'zAddAssetAttr-Reverse Location Is Valid-70',
+ 'zAddAssetAttr-Shifted Location Valid-71',
+ 'AAAzCldMastMedData-zOPT-72',
+ 'zAddAssetAttr-Media Metadata Type-73',
+ 'CldMasterzCldMastMedData-zOPT-74',
+ 'zCldMast-Media Metadata Type-75',
+ 'zAsset-Search Index Rebuild State-76',
+ 'zAddAssetAttr-Syndication History-77',
+ 'zMedAnlyAstAttr-Syndication Processing Version-78',
+ 'zMedAnlyAstAttr-Syndication Processing Value-79',
+ 'zAsset-Orientation-80',
+ 'zAddAssetAttr-Original Orientation-81',
+ 'zAsset-Kind-82',
+ 'zAsset-Kind-Sub-Type-83',
+ 'zAddAssetAttr-Cloud Kind Sub Type-84',
+ 'zAsset-Playback Style-85',
+ 'zAsset-Playback Variation-86',
+ 'zAsset-Video Duration-87',
+ 'zExtAttr-Duration-88',
+ 'zAsset-Video CP Duration-89',
+ 'zAddAssetAttr-Video CP Duration Time Scale-90',
+ 'zAsset-Video CP Visibility State-91',
+ 'zAddAssetAttr-Video CP Display Value-92',
+ 'zAddAssetAttr-Video CP Display Time Scale-93',
+ 'zIntResou-Datastore Class ID-94',
+ 'zAsset-Cloud Placeholder Kind-95',
+ 'zIntResou-Local Availability-96',
+ 'zIntResou-Local Availability Target-97',
+ 'zIntResou-Cloud Local State-98',
+ 'zIntResou-Remote Availability-99',
+ 'zIntResou-Remote Availability Target-100',
+ 'zIntResou-Transient Cloud Master-101',
+ 'zIntResou-Side Car Index-102',
+ 'zIntResou- File ID-103',
+ 'zIntResou-Version-104',
+ 'zAddAssetAttr- Original-File-Size-105',
+ 'zIntResou-Resource Type-106',
+ 'zIntResou-Datastore Sub-Type-107',
+ 'zIntResou-Cloud Source Type-108',
+ 'zIntResou-Data Length-109',
+ 'zIntResou-Recipe ID-110',
+ ('zIntResou-Cloud Last Prefetch Date-111', 'datetime'),
+ 'zIntResou-Cloud Prefetch Count-112',
+ ('zIntResou- Cloud-Last-OnDemand Download-Date-113', 'datetime'),
+ 'zIntResou-UniformTypeID_UTI_Conformance_Hint-114',
+ 'zIntResou-Compact-UTI-115',
+ 'zAsset-Uniform Type ID-116',
+ 'zAsset-Original Color Space-117',
+ 'zCldMast-Uniform_Type_ID-118',
+ 'zCldMast-Full Size JPEG Source-119',
+ 'zAsset-HDR Gain-120',
+ 'zAsset-zHDR_Type-121',
+ 'zExtAttr-Codec-122',
+ 'zIntResou-Codec Four Char Code Name-123',
+ 'zCldMast-Codec Name-124',
+ 'zCldMast-Video Frame Rate-125',
+ 'zCldMast-Placeholder State-126',
+ 'zAsset-Depth_Type-127',
+ 'zAsset-Avalanche UUID-128',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-129',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-130',
+ 'zAddAssetAttr-Cloud Recovery State-131',
+ 'zAddAssetAttr-Cloud State Recovery Attempts Count-132',
+ 'zAsset-Deferred Processing Needed-133',
+ 'zAsset-Video Deferred Processing Needed-134',
+ 'zAddAssetAttr-Deferred Photo Identifier-135',
+ 'zAddAssetAttr-Deferred Processing Candidate Options-136',
+ 'zAsset-Has Adjustments-Camera-Effects-Filters-137',
+ ('zAsset-Adjustment Timestamp-138', 'datetime'),
+ 'zAddAssetAttr-Editor Bundle ID-139',
+ 'zAddAssetAttr-Montage-140',
+ 'zAsset-Favorite-141',
+ 'zAsset-Hidden-142',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-143',
+ ('zAsset-Trashed Date-144', 'datetime'),
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-145',
+ 'zAsset-Delete-Reason-146',
+ 'zIntResou-Trash State-147',
+ ('zIntResou-Trashed Date-148', 'datetime'),
+ 'zAsset-Cloud Delete State-149',
+ 'zIntResou-Cloud Delete State-150',
+ 'zAddAssetAttr-PTP Trashed State-151',
+ 'zIntResou-PTP Trashed State-152',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-153',
+ ('zMedAnlyAstAttr-Media Analysis Timestamp-154', 'datetime'),
+ ('zAsset-Analysis State Modification Date-155', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-156',
+ 'zAddAssetAttr- View Count-157',
+ 'zAddAssetAttr- Pending Play Count-158',
+ 'zAddAssetAttr- Play Count-159',
+ 'zAddAssetAttr- Pending Share Count-160',
+ 'zAddAssetAttr- Share Count-161',
+ 'zAddAssetAttr-Allowed for Analysis-162',
+ 'zAddAssetAttr-Scene Analysis Version-163',
+ 'zAddAssetAttr-Scene Analysis is From Preview-164',
+ ('zAddAssetAttr-Scene Analysis Timestamp-165', 'datetime'),
+ 'zAsset-Duplication Asset Visibility State-166',
+ 'zAddAssetAttr-Destination Asset Copy State-167',
+ 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-168',
+ 'zAddAssetAttr-Source Asset for Duplication Scope ID-169',
+ 'zCldMast-Source Master For Duplication Scope ID-170',
+ 'zAddAssetAttr-Source Asset For Duplication ID-171',
+ 'zCldMast-Source Master for Duplication ID-172',
+ 'zAddAssetAttr-Variation Suggestions States-173',
+ 'zAsset-High Frame Rate State-174',
+ 'zAsset-Video Key Frame Time Scale-175',
+ 'zAsset-Video Key Frame Value-176',
+ 'zExtAttr-ISO-177',
+ 'zExtAttr-Metering Mode-178',
+ 'zExtAttr-Sample Rate-179',
+ 'zExtAttr-Track Format-180',
+ 'zExtAttr-White Balance-181',
+ 'zExtAttr-Aperture-182',
+ 'zExtAttr-BitRate-183',
+ 'zExtAttr-Exposure Bias-184',
+ 'zExtAttr-Frames Per Second-185',
+ 'zExtAttr-Shutter Speed-186',
+ 'zExtAttr-Slush Scene Bias-187',
+ 'zExtAttr-Slush Version-188',
+ 'zExtAttr-Slush Preset-189',
+ 'zExtAttr-Slush Warm Bias-190',
+ 'zAsset-Height-191',
+ 'zAddAssetAttr-Original Height-192',
+ 'zIntResou-UnOriented Height-193',
+ 'zAsset-Width-194',
+ 'zAddAssetAttr-Original Width-195',
+ 'zIntResou-UnOriented Width-196',
+ 'zAsset-Thumbnail Index-197',
+ 'zAddAssetAttr-Embedded Thumbnail Height-198',
+ 'zAddAssetAttr-Embedded Thumbnail Length-199',
+ 'zAddAssetAttr-Embedded Thumbnail Offset-200',
+ 'zAddAssetAttr-Embedded Thumbnail Width-201',
+ 'zAsset-Packed Acceptable Crop Rect-202',
+ 'zAsset-Packed Badge Attributes-203',
+ 'zAsset-Packed Preferred Crop Rect-204',
+ 'zAsset-Curation Score-205',
+ 'zAsset-Camera Processing Adjustment State-206',
+ 'zAsset-Depth Type-207',
+ 'zAsset-Is Magic Carpet-Quicktime_MOV_file-208',
+ 'zAddAssetAttr-Orig Resource Choice-209',
+ 'zAddAssetAttr-Spatial Over Capture Group ID-210',
+ 'zAddAssetAttr-Place Annotation Data-211',
+ 'zAddAssetAttr-Distance Identity-HEX-212',
+ 'zAddAssetAttr-Edited IPTC Attributes-213',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-214',
+ 'zAddAssetAttr-Accessibility Description-215',
+ 'zAddAssetAttr-Photo Stream Tag ID-216',
+ 'zAddAssetAttr-Share Type-217',
+ 'zAddAssetAttr-Library Scope Asset Contributors To Update-218',
+ 'zAsset-Overall Aesthetic Score-219',
+ 'zAsset-zENT-220',
+ 'zAsset-zOPT-221',
+ 'zAsset-Master= zCldMast-zPK-222',
+ 'zAsset-Extended Attributes= zExtAttr-zPK-223',
+ 'zAsset-Import Session Key-224',
+ 'zAsset-Photo Analysis Attributes Key-225',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-226',
+ 'zAsset-Computed Attributes Asset Key-227',
+ 'zAsset-Promotion Score-228',
+ 'zAsset-Media Analysis Attributes Key-229',
+ 'zAsset-Media Group UUID-230',
+ 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-231',
+ 'zAsset.Cloud Collection GUID-232',
+ 'zAddAssetAttr-zENT-233',
+ 'ZAddAssetAttr-zOPT-234',
+ 'zAddAssetAttr-zAsset= zAsset_zPK-235',
+ 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-236',
+ 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-237',
+ 'zAddAssetAttr-Public Global UUID-238',
+ 'zAddAssetAttr-Original Assets UUID-239',
+ 'zAddAssetAttr-Originating Asset Identifier-240',
+ 'zAddAssetAttr.Adjusted Fingerprint-241',
+ 'zCldMast-zPK= zAsset-Master-242',
+ 'zCldMast-zENT-243',
+ 'zCldMast-zOPT-244',
+ 'zCldMast-Moment Share Key= zShare-zPK-245',
+ 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-246',
+ 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-247',
+ 'zCldMast-Originating Asset ID-248',
+ 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-249',
+ 'CMzCldMastMedData-zENT-250',
+ 'CMzCldMastMedData-CldMast= zCldMast-zPK-251',
+ 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-252',
+ 'AAAzCldMastMedData-zENT-253',
+ 'AAAzCldMastMedData-CldMast key-254',
+ 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-255',
+ 'zExtAttr-zPK= zAsset-zExtendedAttributes-256',
+ 'zExtAttr-zENT-257',
+ 'zExtAttr-zOPT-258',
+ 'zExtAttr-Asset Key-259',
+ 'zIntResou-zPK-260',
+ 'zIntResou-zENT-261',
+ 'zIntResou-zOPT-262',
+ 'zIntResou-Asset= zAsset_zPK-263',
+ 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-264',
+ 'zMedAnlyAstAttr-zEnt-265',
+ 'zMedAnlyAstAttr-zOpt-266',
+ 'zMedAnlyAstAttr-Asset= zAsset-zPK-267')
+ data_list = get_sqlite_db_records(source_path, query)
- description = 'Parses iOS 16 possible optimized asset records from PhotoData-Photos.sqlite' \
- ' ZINTERNALRESOURCE and other tables. This and other related parsers should provide data' \
- ' for investigative analysis of assets being stored locally on the device verses' \
- ' assets being stored in iCloud Photos as the result of optimization.' \
- ' This is very large query and script, I recommend opening the TSV generated report' \
- ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer' \
- ' to view, search, and filter the results.'
- report = ArtifactHtmlReport('Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-4QueryStart-0',
- 'zAsset-zPK-7',
- 'zAddAssetAttr-zPK-8',
- 'zAsset-UUID = store.cloudphotodb-9',
- 'zAddAssetAttr-Master Fingerprint-10',
- 'zIntResou-Fingerprint-11',
- 'zIntResou-Local Availability-4QueryStart-1',
- 'zIntResou-Remote Availability-4QueryStart-2',
- 'zIntResou-Resource Type-4QueryStart-3',
- 'zIntResou-Datastore Sub-Type-4QueryStart-4',
- 'zIntResou-Recipe ID-4QueryStart-5',
- 'zAsset Complete-6',
- 'zAsset-Bundle Scope-12',
- 'zAsset-Syndication State-13',
- 'zAsset-Cloud is My Asset-14',
- 'zAsset-Cloud is deletable-Asset-15',
- 'zAsset-Cloud_Local_State-16',
- 'zAsset-Visibility State-17',
- 'zExtAttr-Camera Make-18',
- 'zExtAttr-Camera Model-19',
- 'zExtAttr-Lens Model-20',
- 'zExtAttr-Flash Fired-21',
- 'zExtAttr-Focal Length-22',
- 'zExtAttr-Focal Length in 35MM-23',
- 'zExtAttr-Digital Zoom Ratio-24',
- 'zAsset-Derived Camera Capture Device-25',
- 'zAddAssetAttr-Camera Captured Device-26',
- 'zAddAssetAttr-Imported by-27',
- 'zCldMast-Imported By-28',
- 'zAddAssetAttr.Imported by Bundle Identifier-29',
- 'zAddAssetAttr-Imported By Display Name-30',
- 'zCldMast-Imported by Bundle ID-31',
- 'zCldMast-Imported by Display Name-32',
- 'zAsset-Saved Asset Type-33',
- 'zAsset-Directory-Path-34',
- 'zAsset-Filename-35',
- 'zAddAssetAttr- Original Filename-36',
- 'zCldMast- Original Filename-37',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-38',
- 'zAsset-Active Library Scope Participation State-39',
- 'zAsset-Library Scope Share State- StillTesting-40',
- 'zAsset-Added Date-41',
- 'zAsset- SortToken -CameraRoll-42',
- 'zAddAssetAttr-Date Created Source-43',
- 'zAsset-Date Created-44',
- 'zCldMast-Creation Date-45',
- 'zIntResou-CldMst Date Created-46',
- 'zAddAssetAttr-Time Zone Name-47',
- 'zAddAssetAttr-Time Zone Offset-48',
- 'zAddAssetAttr-Inferred Time Zone Offset-49',
- 'zAddAssetAttr-EXIF-String-50',
- 'zAsset-Modification Date-51',
- 'zAsset-Last Shared Date-52',
- 'zCldMast-Cloud Local State-53',
- 'zCldMast-Import Date-54',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-55',
- 'zAddAssetAttr-Import Session ID-56',
- 'zAddAssetAttr-Alt Import Image Date-57',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-58',
- 'zAsset-Cloud Batch Publish Date-59',
- 'zAsset-Cloud Server Publish Date-60',
- 'zAsset-Cloud Download Requests-61',
- 'zAsset-Cloud Batch ID-62',
- 'zAddAssetAttr-Upload Attempts-63',
- 'zAsset-Latitude-64',
- 'zExtAttr-Latitude-65',
- 'zAsset-Longitude-66',
- 'zExtAttr-Longitude-67',
- 'zAddAssetAttr-GPS Horizontal Accuracy-68',
- 'zAddAssetAttr-Location Hash-69',
- 'zAddAssetAttr-Reverse Location Is Valid-70',
- 'zAddAssetAttr-Shifted Location Valid-71',
- 'AAAzCldMastMedData-zOPT-72',
- 'zAddAssetAttr-Media Metadata Type-73',
- 'CldMasterzCldMastMedData-zOPT-74',
- 'zCldMast-Media Metadata Type-75',
- 'zAsset-Search Index Rebuild State-76',
- 'zAddAssetAttr-Syndication History-77',
- 'zMedAnlyAstAttr-Syndication Processing Version-78',
- 'zMedAnlyAstAttr-Syndication Processing Value-79',
- 'zAsset-Orientation-80',
- 'zAddAssetAttr-Original Orientation-81',
- 'zAsset-Kind-82',
- 'zAsset-Kind-Sub-Type-83',
- 'zAddAssetAttr-Cloud Kind Sub Type-84',
- 'zAsset-Playback Style-85',
- 'zAsset-Playback Variation-86',
- 'zAsset-Video Duration-87',
- 'zExtAttr-Duration-88',
- 'zAsset-Video CP Duration-89',
- 'zAddAssetAttr-Video CP Duration Time Scale-90',
- 'zAsset-Video CP Visibility State-91',
- 'zAddAssetAttr-Video CP Display Value-92',
- 'zAddAssetAttr-Video CP Display Time Scale-93',
- 'zIntResou-Datastore Class ID-94',
- 'zAsset-Cloud Placeholder Kind-95',
- 'zIntResou-Local Availability-96',
- 'zIntResou-Local Availability Target-97',
- 'zIntResou-Cloud Local State-98',
- 'zIntResou-Remote Availability-99',
- 'zIntResou-Remote Availability Target-100',
- 'zIntResou-Transient Cloud Master-101',
- 'zIntResou-Side Car Index-102',
- 'zIntResou- File ID-103',
- 'zIntResou-Version-104',
- 'zAddAssetAttr- Original-File-Size-105',
- 'zIntResou-Resource Type-106',
- 'zIntResou-Datastore Sub-Type-107',
- 'zIntResou-Cloud Source Type-108',
- 'zIntResou-Data Length-109',
- 'zIntResou-Recipe ID-110',
- 'zIntResou-Cloud Last Prefetch Date-111',
- 'zIntResou-Cloud Prefetch Count-112',
- 'zIntResou- Cloud-Last-OnDemand Download-Date-113',
- 'zIntResou-UniformTypeID_UTI_Conformance_Hint-114',
- 'zIntResou-Compact-UTI-115',
- 'zAsset-Uniform Type ID-116',
- 'zAsset-Original Color Space-117',
- 'zCldMast-Uniform_Type_ID-118',
- 'zCldMast-Full Size JPEG Source-119',
- 'zAsset-HDR Gain-120',
- 'zAsset-zHDR_Type-121',
- 'zExtAttr-Codec-122',
- 'zIntResou-Codec Four Char Code Name-123',
- 'zCldMast-Codec Name-124',
- 'zCldMast-Video Frame Rate-125',
- 'zCldMast-Placeholder State-126',
- 'zAsset-Depth_Type-127',
- 'zAsset-Avalanche UUID-128',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-129',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-130',
- 'zAddAssetAttr-Cloud Recovery State-131',
- 'zAddAssetAttr-Cloud State Recovery Attempts Count-132',
- 'zAsset-Deferred Processing Needed-133',
- 'zAsset-Video Deferred Processing Needed-134',
- 'zAddAssetAttr-Deferred Photo Identifier-135',
- 'zAddAssetAttr-Deferred Processing Candidate Options-136',
- 'zAsset-Has Adjustments-Camera-Effects-Filters-137',
- 'zAsset-Adjustment Timestamp-138',
- 'zAddAssetAttr-Editor Bundle ID-139',
- 'zAddAssetAttr-Montage-140',
- 'zAsset-Favorite-141',
- 'zAsset-Hidden-142',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-143',
- 'zAsset-Trashed Date-144',
- 'zAsset-Trashed by Participant= zSharePartic_zPK-145',
- 'zAsset-Delete-Reason-146',
- 'zIntResou-Trash State-147',
- 'zIntResou-Trashed Date-148',
- 'zAsset-Cloud Delete State-149',
- 'zIntResou-Cloud Delete State-150',
- 'zAddAssetAttr-PTP Trashed State-151',
- 'zIntResou-PTP Trashed State-152',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-153',
- 'zMedAnlyAstAttr-Media Analysis Timestamp-154',
- 'zAsset-Analysis State Modification Date-155',
- 'zAddAssetAttr- Pending View Count-156',
- 'zAddAssetAttr- View Count-157',
- 'zAddAssetAttr- Pending Play Count-158',
- 'zAddAssetAttr- Play Count-159',
- 'zAddAssetAttr- Pending Share Count-160',
- 'zAddAssetAttr- Share Count-161',
- 'zAddAssetAttr-Allowed for Analysis-162',
- 'zAddAssetAttr-Scene Analysis Version-163',
- 'zAddAssetAttr-Scene Analysis is From Preview-164',
- 'zAddAssetAttr-Scene Analysis Timestamp-165',
- 'zAsset-Duplication Asset Visibility State-166',
- 'zAddAssetAttr-Destination Asset Copy State-167',
- 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-168',
- 'zAddAssetAttr-Source Asset for Duplication Scope ID-169',
- 'zCldMast-Source Master For Duplication Scope ID-170',
- 'zAddAssetAttr-Source Asset For Duplication ID-171',
- 'zCldMast-Source Master for Duplication ID-172',
- 'zAddAssetAttr-Variation Suggestions States-173',
- 'zAsset-High Frame Rate State-174',
- 'zAsset-Video Key Frame Time Scale-175',
- 'zAsset-Video Key Frame Value-176',
- 'zExtAttr-ISO-177',
- 'zExtAttr-Metering Mode-178',
- 'zExtAttr-Sample Rate-179',
- 'zExtAttr-Track Format-180',
- 'zExtAttr-White Balance-181',
- 'zExtAttr-Aperture-182',
- 'zExtAttr-BitRate-183',
- 'zExtAttr-Exposure Bias-184',
- 'zExtAttr-Frames Per Second-185',
- 'zExtAttr-Shutter Speed-186',
- 'zExtAttr-Slush Scene Bias-187',
- 'zExtAttr-Slush Version-188',
- 'zExtAttr-Slush Preset-189',
- 'zExtAttr-Slush Warm Bias-190',
- 'zAsset-Height-191',
- 'zAddAssetAttr-Original Height-192',
- 'zIntResou-UnOriented Height-193',
- 'zAsset-Width-194',
- 'zAddAssetAttr-Original Width-195',
- 'zIntResou-UnOriented Width-196',
- 'zAsset-Thumbnail Index-197',
- 'zAddAssetAttr-Embedded Thumbnail Height-198',
- 'zAddAssetAttr-Embedded Thumbnail Length-199',
- 'zAddAssetAttr-Embedded Thumbnail Offset-200',
- 'zAddAssetAttr-Embedded Thumbnail Width-201',
- 'zAsset-Packed Acceptable Crop Rect-202',
- 'zAsset-Packed Badge Attributes-203',
- 'zAsset-Packed Preferred Crop Rect-204',
- 'zAsset-Curation Score-205',
- 'zAsset-Camera Processing Adjustment State-206',
- 'zAsset-Depth Type-207',
- 'zAsset-Is Magic Carpet-Quicktime_MOV_file-208',
- 'zAddAssetAttr-Orig Resource Choice-209',
- 'zAddAssetAttr-Spatial Over Capture Group ID-210',
- 'zAddAssetAttr-Place Annotation Data-211',
- 'zAddAssetAttr-Distance Identity-HEX-212',
- 'zAddAssetAttr-Edited IPTC Attributes-213',
- 'zAddAssetAttr-Title-Comments via Cloud Website-214',
- 'zAddAssetAttr-Accessibility Description-215',
- 'zAddAssetAttr-Photo Stream Tag ID-216',
- 'zAddAssetAttr-Share Type-217',
- 'zAddAssetAttr-Library Scope Asset Contributors To Update-218',
- 'zAsset-Overall Aesthetic Score-219',
- 'zAsset-zENT-220',
- 'zAsset-zOPT-221',
- 'zAsset-Master= zCldMast-zPK-222',
- 'zAsset-Extended Attributes= zExtAttr-zPK-223',
- 'zAsset-Import Session Key-224',
- 'zAsset-Photo Analysis Attributes Key-225',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-226',
- 'zAsset-Computed Attributes Asset Key-227',
- 'zAsset-Promotion Score-228',
- 'zAsset-Media Analysis Attributes Key-229',
- 'zAsset-Media Group UUID-230',
- 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-231',
- 'zAsset.Cloud Collection GUID-232',
- 'zAddAssetAttr-zENT-233',
- 'ZAddAssetAttr-zOPT-234',
- 'zAddAssetAttr-zAsset= zAsset_zPK-235',
- 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-236',
- 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-237',
- 'zAddAssetAttr-Public Global UUID-238',
- 'zAddAssetAttr-Original Assets UUID-239',
- 'zAddAssetAttr-Originating Asset Identifier-240',
- 'zAddAssetAttr.Adjusted Fingerprint-241',
- 'zCldMast-zPK= zAsset-Master-242',
- 'zCldMast-zENT-243',
- 'zCldMast-zOPT-244',
- 'zCldMast-Moment Share Key= zShare-zPK-245',
- 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-246',
- 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-247',
- 'zCldMast-Originating Asset ID-248',
- 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-249',
- 'CMzCldMastMedData-zENT-250',
- 'CMzCldMastMedData-CldMast= zCldMast-zPK-251',
- 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-252',
- 'AAAzCldMastMedData-zENT-253',
- 'AAAzCldMastMedData-CldMast key-254',
- 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-255',
- 'zExtAttr-zPK= zAsset-zExtendedAttributes-256',
- 'zExtAttr-zENT-257',
- 'zExtAttr-zOPT-258',
- 'zExtAttr-Asset Key-259',
- 'zIntResou-zPK-260',
- 'zIntResou-zENT-261',
- 'zIntResou-zOPT-262',
- 'zIntResou-Asset= zAsset_zPK-263',
- 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-264',
- 'zMedAnlyAstAttr-zEnt-265',
- 'zMedAnlyAstAttr-zOpt-266',
- 'zMedAnlyAstAttr-Asset= zAsset-zPK-267')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No Internal Resource data available for iOS 16 PhotoData-Photos.sqlite')
-
- db.close()
- return
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
-
- cursor.execute("""
- SELECT
- DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart',
- zAsset.Z_PK AS 'zAsset-zPK',
- zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
- zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint',
- zAddAssetAttr.ZADJUSTEDFINGERPRINT AS 'zAddAssetAttr.Adjusted Fingerprint',
- zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint',
- CASE zIntResou.ZLOCALAVAILABILITY
- WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)'
- WHEN 1 THEN '1-IR_Asset_Avail_Locally-1'
- WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || ''
- END AS 'zIntResou-Local Availability-4QueryStart',
- CASE zIntResou.ZREMOTEAVAILABILITY
- WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0'
- WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || ''
- END AS 'zIntResou-Remote Availability-4QueryStart',
- CASE zIntResou.ZRESOURCETYPE
- WHEN 0 THEN '0-Photo-0'
- WHEN 1 THEN '1-Video-1'
- WHEN 3 THEN '3-Live-Photo-3'
- WHEN 5 THEN '5-Adjustment-Data-5'
- WHEN 6 THEN '6-Screenshot-6'
- WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9'
- WHEN 13 THEN '13-Movie-13'
- WHEN 14 THEN '14-Wallpaper-14'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || ''
- END AS 'zIntResou-Resource Type-4QueryStart',
- CASE zIntResou.ZDATASTORESUBTYPE
- WHEN 0 THEN '0-No Cloud Inter Resource-0'
- WHEN 1 THEN '1-Main-Asset-Orig-Size-1'
- WHEN 2 THEN '2-Photo-with-Adjustments-2'
- WHEN 3 THEN '3-JPG-Large-Thumb-3'
- WHEN 4 THEN '4-JPG-Med-Thumb-4'
- WHEN 5 THEN '5-JPG-Small-Thumb-5'
- WHEN 6 THEN '6-Video-Med-Data-6'
- WHEN 7 THEN '7-Video-Small-Data-7'
- WHEN 8 THEN '8-MP4-Cloud-Share-8'
- WHEN 9 THEN '9-StillTesting'
- WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10'
- WHEN 11 THEN '11-StillTesting'
- WHEN 12 THEN '12-StillTesting'
- WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13'
- WHEN 14 THEN '14-Wallpaper-14'
- WHEN 15 THEN '15-Has-Markup-and-Adjustments-15'
- WHEN 16 THEN '16-Video-with-Adjustments-16'
- WHEN 17 THEN '17-RAW_Photo-17_RT'
- WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18'
- WHEN 19 THEN '19-Live-Photo-with-Adjustments-19'
- WHEN 20 THEN '20-StillTesting'
- WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21'
- WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22'
- WHEN 23 THEN '23-StillTesting'
- WHEN 24 THEN '24-StillTesting'
- WHEN 25 THEN '25-StillTesting'
- WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26'
- WHEN 27 THEN '27-StillTesting'
- WHEN 28 THEN '28-MOV-Med-hdr-Data-28'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || ''
- END AS 'zIntResou-Datastore Sub-Type-4QueryStart',
- CASE zIntResou.ZRECIPEID
- WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0'
- WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737'
- WHEN 65739 THEN '65739-JPG_Large_Thumb-65739'
- WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741'
- WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743'
- WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749'
- WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938'
- WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072'
- WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077'
- WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079'
- WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081'
- WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272'
- WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275'
- WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277'
- WHEN 131475 THEN '131475-medium-hdr-MOV-131475'
- WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683'
- WHEN 327687 THEN '627687-WallpaperComputeResource-627687'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || ''
- END AS 'zIntResou-Recipe ID-4QueryStart',
- CASE zAsset.ZCOMPLETE
- WHEN 1 THEN '1-Yes-1'
- END AS 'zAsset Complete',
- CASE zAsset.ZBUNDLESCOPE
- WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0'
- WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1'
- WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2'
- WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || ''
- END AS 'zAsset-Bundle Scope',
- CASE zAsset.ZSYNDICATIONSTATE
- WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0'
- WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1'
- WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2'
- WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3'
- WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8'
- WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9'
- WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || ''
- END AS 'zAsset-Syndication State',
- CASE zAsset.ZCLOUDISMYASSET
- WHEN 0 THEN '0-Not_My_Asset_in_Shared_Album-0'
- WHEN 1 THEN '1-My_Asset_in_Shared_Album-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISMYASSET || ''
- END AS 'zAsset-Cloud is My Asset',
- CASE zAsset.ZCLOUDISDELETABLE
- WHEN 0 THEN '0-No-0'
- WHEN 1 THEN '1-Yes-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISDELETABLE || ''
- END AS 'zAsset-Cloud is deletable-Asset',
- CASE zAsset.ZCLOUDLOCALSTATE
- WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Album-Conv_or_iCldPhotos_OFF=Asset_Not_Synced-0'
- WHEN 1 THEN 'iCldPhotos ON=Asset_Can-Be-or-Has-Been_Synced_with_iCloud-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDLOCALSTATE || ''
- END AS 'zAsset-Cloud_Local_State',
- CASE zAsset.ZVISIBILITYSTATE
- WHEN 0 THEN '0-Visible-PL-CameraRoll-0'
- WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || ''
- END AS 'zAsset-Visibility State',
- zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make',
- zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model',
- zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model',
- CASE zExtAttr.ZFLASHFIRED
- WHEN 0 THEN '0-No Flash-0'
- WHEN 1 THEN '1-Flash Fired-1'
- ELSE 'Unknown-New-Value!: ' || zExtAttr.ZFLASHFIRED || ''
- END AS 'zExtAttr-Flash Fired',
- zExtAttr.ZFOCALLENGTH AS 'zExtAttr-Focal Length',
- zExtAttr.ZFOCALLENGTHIN35MM AS 'zExtAttr-Focal Length in 35MM',
- zExtAttr.ZDIGITALZOOMRATIO AS 'zExtAttr-Digital Zoom Ratio',
- CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE
- WHEN 0 THEN '0-Back-Camera-Other-0'
- WHEN 1 THEN '1-Front-Camera-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZDERIVEDCAMERACAPTUREDEVICE || ''
- END AS 'zAsset-Derived Camera Capture Device',
- CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE
- WHEN 0 THEN '0-Back-Camera-Other-0'
- WHEN 1 THEN '1-Front-Camera-1'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || ''
- END AS 'zAddAssetAttr-Camera Captured Device',
- CASE zAddAssetAttr.ZIMPORTEDBY
- WHEN 0 THEN '0-Cloud-Other-0'
- WHEN 1 THEN '1-Native-Back-Camera-1'
- WHEN 2 THEN '2-Native-Front-Camera-2'
- WHEN 3 THEN '3-Third-Party-App-3'
- WHEN 4 THEN '4-StillTesting-4'
- WHEN 5 THEN '5-PhotoBooth_PL-Asset-5'
- WHEN 6 THEN '6-Third-Party-App-6'
- WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7'
- WHEN 8 THEN '8-System-Package-App-8'
- WHEN 9 THEN '9-Native-App-9'
- WHEN 10 THEN '10-StillTesting-10'
- WHEN 11 THEN '11-StillTesting-11'
- WHEN 12 THEN '12-SWY_Syndication_PL-12'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || ''
- END AS 'zAddAssetAttr-Imported by',
- CASE zCldMast.ZIMPORTEDBY
- WHEN 0 THEN '0-Cloud-Other-0'
- WHEN 1 THEN '1-Native-Back-Camera-1'
- WHEN 2 THEN '2-Native-Front-Camera-2'
- WHEN 3 THEN '3-Third-Party-App-3'
- WHEN 4 THEN '4-StillTesting-4'
- WHEN 5 THEN '5-PhotoBooth_PL-Asset-5'
- WHEN 6 THEN '6-Third-Party-App-6'
- WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7'
- WHEN 8 THEN '8-System-Package-App-8'
- WHEN 9 THEN '9-Native-App-9'
- WHEN 10 THEN '10-StillTesting-10'
- WHEN 11 THEN '11-StillTesting-11'
- WHEN 12 THEN '12-SWY_Syndication_PL-12'
- ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || ''
- END AS 'zCldMast-Imported By',
- zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier',
- zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name',
- zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID',
- zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name',
- CASE zAsset.ZSAVEDASSETTYPE
- WHEN 0 THEN '0-Saved-via-other-source-0'
- WHEN 1 THEN '1-StillTesting-1'
- WHEN 2 THEN '2-StillTesting-2'
- WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3'
- WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4'
- WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5'
- WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6'
- WHEN 7 THEN '7-StillTesting-7'
- WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8'
- WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || ''
- END AS 'zAsset-Saved Asset Type',
- zAsset.ZDIRECTORY AS 'zAsset-Directory-Path',
- zAsset.ZFILENAME AS 'zAsset-Filename',
- zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename',
- zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename',
- zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files',
- CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE
- WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0'
- WHEN 1 THEN '1-Asset-In-Active-SPL-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || ''
- END AS 'zAsset-Active Library Scope Participation State',
- CASE zAsset.ZLIBRARYSCOPESHARESTATE
- WHEN 0 THEN '0-Asset-Not-In-SPL-0'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || ''
- END AS 'zAsset-Library Scope Share State- StillTesting',
- DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date',
- DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
- CASE zAddAssetAttr.ZDATECREATEDSOURCE
- WHEN 0 THEN '0-Cloud-Asset-0'
- WHEN 1 THEN '1-Local_Asset_EXIF-1'
- WHEN 3 THEN '3-Local_Asset_No_EXIF-3'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || ''
- END AS 'zAddAssetAttr-Date Created Source',
- DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
- DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date',
- DateTime(zIntResou.ZCLOUDMASTERDATECREATED + 978307200, 'UNIXEPOCH') AS 'zIntResou-CldMst Date Created',
- zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name',
- zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset',
- zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset',
- zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String',
- DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
- DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date',
- CASE zCldMast.ZCLOUDLOCALSTATE
- WHEN 0 THEN '0-Not Synced with Cloud-0'
- WHEN 1 THEN '1-Pending Upload-1'
- WHEN 2 THEN '2-StillTesting'
- WHEN 3 THEN '3-Synced with Cloud-3'
- ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || ''
- END AS 'zCldMast-Cloud Local State',
- DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date',
- DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files',
- zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID',
- DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date',
- zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting',
- DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date',
- DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date',
- zAsset.ZCLOUDDOWNLOADREQUESTS AS 'zAsset-Cloud Download Requests',
- zAsset.ZCLOUDBATCHID AS 'zAsset-Cloud Batch ID',
- zAddAssetAttr.ZUPLOADATTEMPTS AS 'zAddAssetAttr-Upload Attempts',
- CASE zAsset.ZLATITUDE
- WHEN -180.0 THEN '-180.0'
- ELSE zAsset.ZLATITUDE
- END AS 'zAsset-Latitude',
- zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude',
- CASE zAsset.ZLONGITUDE
- WHEN -180.0 THEN '-180.0'
- ELSE zAsset.ZLONGITUDE
- END AS 'zAsset-Longitude',
- zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude',
- CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY
- WHEN -1.0 THEN '-1.0'
- ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY
- END AS 'zAddAssetAttr-GPS Horizontal Accuracy',
- zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash',
- CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID
- WHEN 0 THEN '0-Shifted Location Not Valid-0'
- WHEN 1 THEN '1-Shifted Location Valid-1'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || ''
- END AS 'zAddAssetAttr-Shifted Location Valid',
- CASE
- WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist'
- ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL'
- END AS 'zAddAssetAttr-Shifted Location Data',
- CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID
- WHEN 0 THEN '0-Reverse Location Not Valid-0'
- WHEN 1 THEN '1-Reverse Location Valid-1'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || ''
- END AS 'zAddAssetAttr-Reverse Location Is Valid',
- CASE
- WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist'
- ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL'
- END AS 'zAddAssetAttr-Reverse Location Data',
- CASE AAAzCldMastMedData.Z_OPT
- WHEN 1 THEN '1-StillTesting-Cloud-1'
- WHEN 2 THEN '2-StillTesting-This Device-2'
- WHEN 3 THEN '3-StillTesting-Muted-3'
- WHEN 4 THEN '4-StillTesting-Unknown-4'
- WHEN 5 THEN '5-StillTesting-Unknown-5'
- ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || ''
- END AS 'AAAzCldMastMedData-zOPT',
- zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type',
- CASE
- WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist'
- ELSE 'AAAzCldMastMedData-Data_Empty-NULL'
- END AS 'AAAzCldMastMedData-Data',
- CASE CMzCldMastMedData.Z_OPT
- WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1'
- WHEN 2 THEN '2-StillTesting-Local_Asset-2'
- WHEN 3 THEN '3-StillTesting-Muted-3'
- WHEN 4 THEN '4-StillTesting-Unknown-4'
- WHEN 5 THEN '5-StillTesting-Unknown-5'
- ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || ''
- END AS 'CldMasterzCldMastMedData-zOPT',
- zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type',
- CASE
- WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist'
- ELSE 'CMzCldMastMedData-Data_Empty-NULL'
- END AS 'CMzCldMastMedData-Data',
- CASE zAsset.ZSEARCHINDEXREBUILDSTATE
- WHEN 0 THEN '0-StillTesting-0'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZSEARCHINDEXREBUILDSTATE || ''
- END AS 'zAsset-Search Index Rebuild State',
- zAddAssetAttr.ZSYNDICATIONHISTORY AS 'zAddAssetAttr-Syndication History',
- zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVERSION AS 'zMedAnlyAstAttr-Syndication Processing Version',
- CASE zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE
- WHEN 0 THEN '0-NA-0'
- WHEN 1 THEN '1-STILLTESTING_Wide-Camera_JPG-1'
- WHEN 2 THEN '2-STILLTESTING_Telephoto_Camera_Lens-2'
- WHEN 4 THEN '4-STILLTESTING_SWY_Asset_OrigAssetImport_SystemPackageApp-4'
- WHEN 16 THEN '16-STILLTESTING-16'
- WHEN 1024 THEN '1024-STILLTESTING_SWY_Asset_OrigAssetImport_NativeCamera-1024'
- WHEN 2048 THEN '2048-STILLTESTING-2048'
- WHEN 4096 THEN '4096-STILLTESTING_SWY_Asset_Manually_Saved-4096'
- ELSE 'Unknown-New-Value!: ' || zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE || ''
- END AS 'zMedAnlyAstAttr-Syndication Processing Value',
- CASE zAsset.ZORIENTATION
- WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1'
- WHEN 2 THEN '2-Horizontal-Camera-(right)-2'
- WHEN 3 THEN '3-Horizontal-Camera-(right)-3'
- WHEN 4 THEN '4-Horizontal-Camera-(left)-4'
- WHEN 5 THEN '5-Vertical-Camera-(top)-5'
- WHEN 6 THEN '6-Vertical-Camera-(top)-6'
- WHEN 7 THEN '7-Vertical-Camera-(bottom)-7'
- WHEN 8 THEN '8-Vertical-Camera-(bottom)-8'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || ''
- END AS 'zAsset-Orientation',
- CASE zAddAssetAttr.ZORIGINALORIENTATION
- WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1'
- WHEN 2 THEN '2-Horizontal-Camera-(right)-2'
- WHEN 3 THEN '3-Horizontal-Camera-(right)-3'
- WHEN 4 THEN '4-Horizontal-Camera-(left)-4'
- WHEN 5 THEN '5-Vertical-Camera-(top)-5'
- WHEN 6 THEN '6-Vertical-Camera-(top)-6'
- WHEN 7 THEN '7-Vertical-Camera-(bottom)-7'
- WHEN 8 THEN '8-Vertical-Camera-(bottom)-8'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || ''
- END AS 'zAddAssetAttr-Original Orientation',
- CASE zAsset.ZKIND
- WHEN 0 THEN '0-Photo-0'
- WHEN 1 THEN '1-Video-1'
- END AS 'zAsset-Kind',
- CASE zAsset.ZKINDSUBTYPE
- WHEN 0 THEN '0-Still-Photo-0'
- WHEN 1 THEN '1-Panorama-1'
- WHEN 2 THEN '2-Live-Photo-2'
- WHEN 10 THEN '10-SpringBoard-Screenshot-10'
- WHEN 100 THEN '100-Video-100'
- WHEN 101 THEN '101-Slow-Mo-Video-101'
- WHEN 102 THEN '102-Time-lapse-Video-102'
- WHEN 103 THEN '103-Replay_Screen_Recording-103'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || ''
- END AS 'zAsset-Kind-Sub-Type',
- CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE
- WHEN 0 THEN '0-Still-Photo-0'
- WHEN 1 THEN '1-StillTesting'
- WHEN 2 THEN '2-Live-Photo-2'
- WHEN 3 THEN '3-Screenshot-3'
- WHEN 10 THEN '10-SpringBoard-Screenshot-10'
- WHEN 100 THEN '100-Video-100'
- WHEN 101 THEN '101-Slow-Mo-Video-101'
- WHEN 102 THEN '102-Time-lapse-Video-102'
- WHEN 103 THEN '103-Replay_Screen_Recording-103'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || ''
- END AS 'zAddAssetAttr-Cloud Kind Sub Type',
- CASE zAsset.ZPLAYBACKSTYLE
- WHEN 1 THEN '1-Image-1'
- WHEN 2 THEN '2-Image-Animated-2'
- WHEN 3 THEN '3-Live-Photo-3'
- WHEN 4 THEN '4-Video-4'
- WHEN 5 THEN '5-Video-Looping-5'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || ''
- END AS 'zAsset-Playback Style',
- CASE zAsset.ZPLAYBACKVARIATION
- WHEN 0 THEN '0-No_Playback_Variation-0'
- WHEN 1 THEN '1-StillTesting_Playback_Variation-1'
- WHEN 2 THEN '2-StillTesting_Playback_Variation-2'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || ''
- END AS 'zAsset-Playback Variation',
- zAsset.ZDURATION AS 'zAsset-Video Duration',
- zExtAttr.ZDURATION AS 'zExtAttr-Duration',
- zAsset.ZVIDEOCPDURATIONVALUE AS 'zAsset-Video CP Duration',
- zAddAssetAttr.ZVIDEOCPDURATIONTIMESCALE AS 'zAddAssetAttr-Video CP Duration Time Scale',
- zAsset.ZVIDEOCPVISIBILITYSTATE AS 'zAsset-Video CP Visibility State',
- zAddAssetAttr.ZVIDEOCPDISPLAYVALUE AS 'zAddAssetAttr-Video CP Display Value',
- zAddAssetAttr.ZVIDEOCPDISPLAYTIMESCALE AS 'zAddAssetAttr-Video CP Display Time Scale',
- CASE zIntResou.ZDATASTORECLASSID
- WHEN 0 THEN '0-LPL-Asset_CPL-Asset-0'
- WHEN 1 THEN '1-StillTesting-1'
- WHEN 2 THEN '2-Photo-Cloud-Sharing-Asset-2'
- WHEN 3 THEN '3-SWY_Syndication_Asset-3'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORECLASSID || ''
- END AS 'zIntResou-Datastore Class ID',
- CASE zAsset.ZCLOUDPLACEHOLDERKIND
- WHEN 0 THEN '0-Local&CloudMaster Asset-0'
- WHEN 1 THEN '1-StillTesting-1'
- WHEN 2 THEN '2-StillTesting-2'
- WHEN 3 THEN '3-JPG-Asset_Only_PhDa-Thumb-V2-3'
- WHEN 4 THEN '4-LPL-JPG-Asset_CPLAsset-OtherType-4'
- WHEN 5 THEN '5-Asset_synced_CPL_2_Device-5'
- WHEN 6 THEN '6-StillTesting-6'
- WHEN 7 THEN '7-LPL-poster-JPG-Asset_CPLAsset-MP4-7'
- WHEN 8 THEN '8-LPL-JPG_Asset_CPLAsset-LivePhoto-MOV-8'
- WHEN 9 THEN '9-CPL_MP4_Asset_Saved_2_LPL-9'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDPLACEHOLDERKIND || ''
- END AS 'zAsset-Cloud Placeholder Kind',
- CASE zIntResou.ZLOCALAVAILABILITY
- WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)'
- WHEN 1 THEN '1-IR_Asset_Avail_Locally-1'
- WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || ''
- END AS 'zIntResou-Local Availability',
- CASE zIntResou.ZLOCALAVAILABILITYTARGET
- WHEN 0 THEN '0-StillTesting-0'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITYTARGET || ''
- END AS 'zIntResou-Local Availability Target',
- CASE zIntResou.ZCLOUDLOCALSTATE
- WHEN 0 THEN '0-IR_Asset_Not_Synced_No_IR-CldMastDateCreated-0'
- WHEN 1 THEN '1-IR_Asset_Pending-Upload-1'
- WHEN 2 THEN '2-IR_Asset_Photo_Cloud_Share_Asset_On-Local-Device-2'
- WHEN 3 THEN '3-IR_Asset_Synced_iCloud-3'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDLOCALSTATE || ''
- END AS 'zIntResou-Cloud Local State',
- CASE zIntResou.ZREMOTEAVAILABILITY
- WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0'
- WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || ''
- END AS 'zIntResou-Remote Availability',
- CASE zIntResou.ZREMOTEAVAILABILITYTARGET
- WHEN 0 THEN '0-StillTesting-0'
- WHEN 1 THEN '1-StillTesting-1'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITYTARGET || ''
- END AS 'zIntResou-Remote Availability Target',
- zIntResou.ZTRANSIENTCLOUDMASTER AS 'zIntResou-Transient Cloud Master',
- zIntResou.ZSIDECARINDEX AS 'zIntResou-Side Car Index',
- zIntResou.ZFILEID AS 'zIntResou- File ID',
- CASE zIntResou.ZVERSION
- WHEN 0 THEN '0-IR_Asset_Standard-0'
- WHEN 1 THEN '1-StillTesting-1'
- WHEN 2 THEN '2-IR_Asset_Adjustments-Mutation-2'
- WHEN 3 THEN '3-IR_Asset_No_IR-CldMastDateCreated-3'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZVERSION || ''
- END AS 'zIntResou-Version',
- zAddAssetAttr.ZORIGINALFILESIZE AS 'zAddAssetAttr- Original-File-Size',
- CASE zIntResou.ZRESOURCETYPE
- WHEN 0 THEN '0-Photo-0'
- WHEN 1 THEN '1-Video-1'
- WHEN 3 THEN '3-Live-Photo-3'
- WHEN 5 THEN '5-Adjustment-Data-5'
- WHEN 6 THEN '6-Screenshot-6'
- WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9'
- WHEN 13 THEN '13-Movie-13'
- WHEN 14 THEN '14-Wallpaper-14'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || ''
- END AS 'zIntResou-Resource Type',
- CASE zIntResou.ZDATASTORESUBTYPE
- WHEN 0 THEN '0-No Cloud Inter Resource-0'
- WHEN 1 THEN '1-Main-Asset-Orig-Size-1'
- WHEN 2 THEN '2-Photo-with-Adjustments-2'
- WHEN 3 THEN '3-JPG-Large-Thumb-3'
- WHEN 4 THEN '4-JPG-Med-Thumb-4'
- WHEN 5 THEN '5-JPG-Small-Thumb-5'
- WHEN 6 THEN '6-Video-Med-Data-6'
- WHEN 7 THEN '7-Video-Small-Data-7'
- WHEN 8 THEN '8-MP4-Cloud-Share-8'
- WHEN 9 THEN '9-StillTesting'
- WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10'
- WHEN 11 THEN '11-StillTesting'
- WHEN 12 THEN '12-StillTesting'
- WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13'
- WHEN 14 THEN '14-Wallpaper-14'
- WHEN 15 THEN '15-Has-Markup-and-Adjustments-15'
- WHEN 16 THEN '16-Video-with-Adjustments-16'
- WHEN 17 THEN '17-RAW_Photo-17_RT'
- WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18'
- WHEN 19 THEN '19-Live-Photo-with-Adjustments-19'
- WHEN 20 THEN '20-StillTesting'
- WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21'
- WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22'
- WHEN 23 THEN '23-StillTesting'
- WHEN 24 THEN '24-StillTesting'
- WHEN 25 THEN '25-StillTesting'
- WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26'
- WHEN 27 THEN '27-StillTesting'
- WHEN 28 THEN '28-MOV-Med-hdr-Data-28'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || ''
- END AS 'zIntResou-Datastore Sub-Type',
- CASE zIntResou.ZCLOUDSOURCETYPE
- WHEN 0 THEN '0-NA-0'
- WHEN 1 THEN '1-Main-Asset-Orig-Size-1'
- WHEN 2 THEN '2-Photo-with-Adjustments-2'
- WHEN 3 THEN '3-JPG-Large-Thumb-3'
- WHEN 4 THEN '4-JPG-Med-Thumb-4'
- WHEN 5 THEN '5-JPG-Small-Thumb-5'
- WHEN 6 THEN '6-Video-Med-Data-6'
- WHEN 7 THEN '7-Video-Small-Data-7'
- WHEN 8 THEN '8-MP4-Cloud-Share-8'
- WHEN 9 THEN '9-StillTesting'
- WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10'
- WHEN 11 THEN '11-StillTesting'
- WHEN 12 THEN '12-StillTesting'
- WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13'
- WHEN 14 THEN '14-Wallpaper-14'
- WHEN 15 THEN '15-Has-Markup-and-Adjustments-15'
- WHEN 16 THEN '16-Video-with-Adjustments-16'
- WHEN 17 THEN '17-RAW_Photo-17_RT'
- WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18'
- WHEN 19 THEN '19-Live-Photo-with-Adjustments-19'
- WHEN 20 THEN '20-StillTesting'
- WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21'
- WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22'
- WHEN 23 THEN '23-StillTesting'
- WHEN 24 THEN '24-StillTesting'
- WHEN 25 THEN '25-StillTesting'
- WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26'
- WHEN 27 THEN '27-StillTesting'
- WHEN 28 THEN '28-MOV-Med-hdr-Data-28'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDSOURCETYPE || ''
- END AS 'zIntResou-Cloud Source Type',
- zIntResou.ZDATALENGTH AS 'zIntResou-Data Length',
- CASE zIntResou.ZRECIPEID
- WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0'
- WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737'
- WHEN 65739 THEN '65739-JPG_Large_Thumb-65739'
- WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741'
- WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743'
- WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749'
- WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938'
- WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072'
- WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077'
- WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079'
- WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081'
- WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272'
- WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275'
- WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277'
- WHEN 131475 THEN '131475-medium-hdr-MOV-131475'
- WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683'
- WHEN 327687 THEN '627687-WallpaperComputeResource-627687'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || ''
- END AS 'zIntResou-Recipe ID',
- CASE zIntResou.ZCLOUDLASTPREFETCHDATE
- WHEN 0 THEN '0-NA-0'
- ELSE DateTime(zIntResou.ZCLOUDLASTPREFETCHDATE + 978307200, 'UNIXEPOCH')
- END AS 'zIntResou-Cloud Last Prefetch Date',
- zIntResou.ZCLOUDPREFETCHCOUNT AS 'zIntResou-Cloud Prefetch Count',
- DateTime(zIntResou.ZCLOUDLASTONDEMANDDOWNLOADDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou- Cloud-Last-OnDemand Download-Date',
- CASE zIntResou.ZUTICONFORMANCEHINT
- WHEN 0 THEN '0-NA-Doesnt_Conform-0'
- WHEN 1 THEN '1-UTTypeImage-1'
- WHEN 2 THEN '2-UTTypeProRawPhoto-2'
- WHEN 3 THEN '3-UTTypeMovie-3'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZUTICONFORMANCEHINT || ''
- END AS 'zIntResou-UniformTypeID_UTI_Conformance_Hint',
- CASE zIntResou.ZCOMPACTUTI
- WHEN 1 THEN '1-JPEG-THM-1'
- WHEN 3 THEN '3-HEIC-3'
- WHEN 6 THEN '6-PNG-6'
- WHEN 7 THEN '7-StillTesting'
- WHEN 9 THEN '9-DNG-9'
- WHEN 23 THEN '23-JPEG-HEIC-quicktime-mov-23'
- WHEN 24 THEN '24-MPEG4-24'
- WHEN 36 THEN '36-Wallpaper-36'
- WHEN 37 THEN '37-Adj-Mutation_Data-37'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZCOMPACTUTI || ''
- END AS 'zIntResou-Compact-UTI',
- zAsset.ZUNIFORMTYPEIDENTIFIER AS 'zAsset-Uniform Type ID',
- zAsset.ZORIGINALCOLORSPACE AS 'zAsset-Original Color Space',
- zCldMast.ZUNIFORMTYPEIDENTIFIER AS 'zCldMast-Uniform_Type_ID',
- CASE zCldMast.ZFULLSIZEJPEGSOURCE
- WHEN 0 THEN '0-CldMast-JPEG-Source-Video Still-Testing-0'
- WHEN 1 THEN '1-CldMast-JPEG-Source-Other- Still-Testing-1'
- ELSE 'Unknown-New-Value!: ' || zCldMast.ZFULLSIZEJPEGSOURCE || ''
- END AS 'zCldMast-Full Size JPEG Source',
- zAsset.ZHDRGAIN AS 'zAsset-HDR Gain',
- CASE zAsset.ZHDRTYPE
- WHEN 0 THEN '0-No-HDR-0'
- WHEN 3 THEN '3-HDR_Photo-3_RT'
- WHEN 4 THEN '4-Non-HDR_Version-4_RT'
- WHEN 5 THEN '5-HEVC_Movie-5'
- WHEN 6 THEN '6-Panorama-6_RT'
- WHEN 10 THEN '10-HDR-Gain-10'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZHDRTYPE || ''
- END AS 'zAsset-zHDR_Type',
- zExtAttr.ZCODEC AS 'zExtAttr-Codec',
- zIntResou.ZCODECFOURCHARCODENAME AS 'zIntResou-Codec Four Char Code Name',
- zCldMast.ZCODECNAME AS 'zCldMast-Codec Name',
- zCldMast.ZVIDEOFRAMERATE AS 'zCldMast-Video Frame Rate',
- zCldMast.ZPLACEHOLDERSTATE AS 'zCldMast-Placeholder State',
- CASE zAsset.ZDEPTHTYPE
- WHEN 0 THEN '0-Not_Portrait-0_RT'
- ELSE 'Portrait: ' || zAsset.ZDEPTHTYPE || ''
- END AS 'zAsset-Depth_Type',
- zAsset.ZAVALANCHEUUID AS 'zAsset-Avalanche UUID',
- CASE zAsset.ZAVALANCHEPICKTYPE
- WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT'
- WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT'
- WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT'
- WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT'
- WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT'
- WHEN 32 THEN '32-StillTesting-32_RT'
- WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEPICKTYPE || ''
- END AS 'zAsset-Avalanche_Pick_Type-BurstAsset',
- CASE zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE
- WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT'
- WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT'
- WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT'
- WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT'
- WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT'
- WHEN 32 THEN '32-StillTesting-32_RT'
- WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE || ''
- END AS 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset',
- CASE zAddAssetAttr.ZCLOUDRECOVERYSTATE
- WHEN 0 THEN '0-StillTesting'
- WHEN 1 THEN '1-StillTesting'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDRECOVERYSTATE || ''
- END AS 'zAddAssetAttr-Cloud Recovery State',
- zAddAssetAttr.ZCLOUDSTATERECOVERYATTEMPTSCOUNT AS 'zAddAssetAttr-Cloud State Recovery Attempts Count',
- zAsset.ZDEFERREDPROCESSINGNEEDED AS 'zAsset-Deferred Processing Needed',
- zAsset.ZVIDEODEFERREDPROCESSINGNEEDED AS 'zAsset-Video Deferred Processing Needed',
- zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier',
- zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options',
- CASE zAsset.ZHASADJUSTMENTS
- WHEN 0 THEN '0-No-Adjustments-0'
- WHEN 1 THEN '1-Yes-Adjustments-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZHASADJUSTMENTS || ''
- END AS 'zAsset-Has Adjustments-Camera-Effects-Filters',
- DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp',
- zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID',
- zAddAssetAttr.ZMONTAGE AS 'zAddAssetAttr-Montage',
- CASE zAsset.ZFAVORITE
- WHEN 0 THEN '0-Asset Not Favorite-0'
- WHEN 1 THEN '1-Asset Favorite-1'
- END AS 'zAsset-Favorite',
- CASE zAsset.ZHIDDEN
- WHEN 0 THEN '0-Asset Not Hidden-0'
- WHEN 1 THEN '1-Asset Hidden-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZHIDDEN || ''
- END AS 'zAsset-Hidden',
- CASE zAsset.ZTRASHEDSTATE
- WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0'
- WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || ''
- END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
- DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
- zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK',
- CASE zAsset.ZDELETEREASON
- WHEN 1 THEN '1-StillTesting Delete-Reason-1'
- WHEN 2 THEN '2-StillTesting Delete-Reason-2'
- WHEN 3 THEN '3-StillTesting Delete-Reason-3'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZDELETEREASON || ''
- END AS 'zAsset-Delete-Reason',
- CASE zIntResou.ZTRASHEDSTATE
- WHEN 0 THEN '0-zIntResou-Not In Trash-Recently Deleted-0'
- WHEN 1 THEN '1-zIntResou-In Trash-Recently Deleted-1'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZTRASHEDSTATE || ''
- END AS 'zIntResou-Trash State',
- DateTime(zIntResou.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou-Trashed Date',
- CASE zAsset.ZCLOUDDELETESTATE
- WHEN 0 THEN '0-Cloud Asset Not Deleted-0'
- WHEN 1 THEN '1-Cloud Asset Deleted-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDDELETESTATE || ''
- END AS 'zAsset-Cloud Delete State',
- CASE zIntResou.ZCLOUDDELETESTATE
- WHEN 0 THEN '0-Cloud IntResou Not Deleted-0'
- WHEN 1 THEN '1-Cloud IntResou Deleted-1'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDDELETESTATE || ''
- END AS 'zIntResou-Cloud Delete State',
- CASE zAddAssetAttr.ZPTPTRASHEDSTATE
- WHEN 0 THEN '0-PTP Not in Trash-0'
- WHEN 1 THEN '1-PTP In Trash-1'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZPTPTRASHEDSTATE || ''
- END AS 'zAddAssetAttr-PTP Trashed State',
- CASE zIntResou.ZPTPTRASHEDSTATE
- WHEN 0 THEN '0-PTP IntResou Not in Trash-0'
- WHEN 1 THEN '1-PTP IntResou In Trash-1'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZPTPTRASHEDSTATE || ''
- END AS 'zIntResou-PTP Trashed State',
- zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type',
- DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp',
- DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modification Date',
- zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count',
- zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count',
- zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count',
- zAddAssetAttr.ZPLAYCOUNT AS 'zAddAssetAttr- Play Count',
- zAddAssetAttr.ZPENDINGSHARECOUNT AS 'zAddAssetAttr- Pending Share Count',
- zAddAssetAttr.ZSHARECOUNT AS 'zAddAssetAttr- Share Count',
- CASE zAddAssetAttr.ZALLOWEDFORANALYSIS
- WHEN 0 THEN '0-Asset Not Allowed For Analysis-0'
- WHEN 1 THEN '1-Asset Allowed for Analysis-1'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZALLOWEDFORANALYSIS || ''
- END AS 'zAddAssetAttr-Allowed for Analysis',
- zAddAssetAttr.ZSCENEANALYSISVERSION AS 'zAddAssetAttr-Scene Analysis Version',
- CASE zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW
- WHEN 0 THEN '0-No-0'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW || ''
- END AS 'zAddAssetAttr-Scene Analysis is From Preview',
- DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp',
- CASE zAsset.ZDUPLICATEASSETVISIBILITYSTATE
- WHEN 0 THEN '0-No-Duplicates-0'
- WHEN 1 THEN '1-Has Duplicate-1'
- WHEN 2 THEN '2-Is a Duplicate-2'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZDUPLICATEASSETVISIBILITYSTATE || ''
- END AS 'zAsset-Duplication Asset Visibility State',
- CASE zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE
- WHEN 0 THEN '0-No Copy-0'
- WHEN 1 THEN '1-Has A Copy-1'
- WHEN 2 THEN '2-Has A Copy-2'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE || ''
- END AS 'zAddAssetAttr-Destination Asset Copy State',
- CASE zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE
- WHEN 0 THEN '0-Unknown-StillTesting-0'
- WHEN 1 THEN '1-Unknown-StillTesting-1'
- WHEN 2 THEN '2-Unknown-StillTesting-2'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE || ''
- END AS 'zAddAssetAttr-Duplicate Detector Perceptual Processing State',
- zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONSCOPEIDENTIFIER AS 'zAddAssetAttr-Source Asset for Duplication Scope ID',
- zCldMast.ZSOURCEMASTERFORDUPLICATIONSCOPEIDENTIFIER AS 'zCldMast-Source Master For Duplication Scope ID',
- zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONIDENTIFIER AS 'zAddAssetAttr-Source Asset For Duplication ID',
- zCldMast.ZSOURCEMASTERFORDUPLICATIONIDENTIFIER AS 'zCldMast-Source Master for Duplication ID',
- zAddAssetAttr.ZVARIATIONSUGGESTIONSTATES AS 'zAddAssetAttr-Variation Suggestions States',
- zAsset.ZHIGHFRAMERATESTATE AS 'zAsset-High Frame Rate State',
- zAsset.ZVIDEOKEYFRAMETIMESCALE AS 'zAsset-Video Key Frame Time Scale',
- zAsset.ZVIDEOKEYFRAMEVALUE AS 'zAsset-Video Key Frame Value',
- zExtAttr.ZISO AS 'zExtAttr-ISO',
- zExtAttr.ZMETERINGMODE AS 'zExtAttr-Metering Mode',
- zExtAttr.ZSAMPLERATE AS 'zExtAttr-Sample Rate',
- zExtAttr.ZTRACKFORMAT AS 'zExtAttr-Track Format',
- zExtAttr.ZWHITEBALANCE AS 'zExtAttr-White Balance',
- zExtAttr.ZAPERTURE AS 'zExtAttr-Aperture',
- zExtAttr.ZBITRATE AS 'zExtAttr-BitRate',
- zExtAttr.ZEXPOSUREBIAS AS 'zExtAttr-Exposure Bias',
- zExtAttr.ZFPS AS 'zExtAttr-Frames Per Second',
- zExtAttr.ZSHUTTERSPEED AS 'zExtAttr-Shutter Speed',
- zExtAttr.ZSLUSHSCENEBIAS AS 'zExtAttr-Slush Scene Bias',
- zExtAttr.ZSLUSHVERSION AS 'zExtAttr-Slush Version',
- zExtAttr.ZSLUSHPRESET AS 'zExtAttr-Slush Preset',
- zExtAttr.ZSLUSHWARMTHBIAS AS 'zExtAttr-Slush Warm Bias',
- zAsset.ZHEIGHT AS 'zAsset-Height',
- zAddAssetAttr.ZORIGINALHEIGHT AS 'zAddAssetAttr-Original Height',
- zIntResou.ZUNORIENTEDHEIGHT AS 'zIntResou-UnOriented Height',
- zAsset.ZWIDTH AS 'zAsset-Width',
- zAddAssetAttr.ZORIGINALWIDTH AS 'zAddAssetAttr-Original Width',
- zIntResou.ZUNORIENTEDWIDTH AS 'zIntResou-UnOriented Width',
- zAsset.ZTHUMBNAILINDEX AS 'zAsset-Thumbnail Index',
- zAddAssetAttr.ZEMBEDDEDTHUMBNAILHEIGHT AS 'zAddAssetAttr-Embedded Thumbnail Height',
- zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length',
- zAddAssetAttr.ZEMBEDDEDTHUMBNAILOFFSET AS 'zAddAssetAttr-Embedded Thumbnail Offset',
- zAddAssetAttr.ZEMBEDDEDTHUMBNAILWIDTH AS 'zAddAssetAttr-Embedded Thumbnail Width',
- zAsset.ZPACKEDACCEPTABLECROPRECT AS 'zAsset-Packed Acceptable Crop Rect',
- zAsset.ZPACKEDBADGEATTRIBUTES AS 'zAsset-Packed Badge Attributes',
- zAsset.ZPACKEDPREFERREDCROPRECT AS 'zAsset-Packed Preferred Crop Rect',
- zAsset.ZCURATIONSCORE AS 'zAsset-Curation Score',
- zAsset.ZCAMERAPROCESSINGADJUSTMENTSTATE AS 'zAsset-Camera Processing Adjustment State',
- zAsset.ZDEPTHTYPE AS 'zAsset-Depth Type',
- zAsset.ZISMAGICCARPET AS 'zAsset-Is Magic Carpet-Quicktime_MOV-file',
- CASE zAddAssetAttr.ZORIGINALRESOURCECHOICE
- WHEN 0 THEN '0-JPEG Original Resource-0'
- WHEN 1 THEN '1-RAW Original Resource-1'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZORIGINALRESOURCECHOICE || ''
- END AS 'zAddAssetAttr-Orig Resource Choice',
- CASE zAsset.ZSPATIALTYPE
- WHEN 0 THEN '0-UnknownTesting-0'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZSPATIALTYPE || ''
- END AS 'zAsset-Spatial Type',
- zAddAssetAttr.ZSPATIALOVERCAPTUREGROUPIDENTIFIER AS 'zAddAssetAttr-Spatial Over Capture Group ID',
- zAddAssetAttr.ZPLACEANNOTATIONDATA AS 'zAddAssetAttr-Place Annotation Data',
- zAddAssetAttr.ZDISTANCEIDENTITY AS 'zAddAssetAttr-Distance Identity-HEX',
- zAddAssetAttr.ZEDITEDIPTCATTRIBUTES AS 'zAddAssetAttr-Edited IPTC Attributes',
- zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website',
- zAddAssetAttr.ZACCESSIBILITYDESCRIPTION AS 'zAddAssetAttr-Accessibility Description',
- zAddAssetAttr.ZPHOTOSTREAMTAGID AS 'zAddAssetAttr-Photo Stream Tag ID',
- CASE zAddAssetAttr.ZSHARETYPE
- WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0'
- WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || ''
- END AS 'zAddAssetAttr-Share Type',
- zAddAssetAttr.ZLIBRARYSCOPEASSETCONTRIBUTORSTOUPDATE AS 'zAddAssetAttr-Library Scope Asset Contributors To Update',
- zAsset.ZOVERALLAESTHETICSCORE AS 'zAsset-Overall Aesthetic Score',
- zAsset.Z_ENT AS 'zAsset-zENT',
- zAsset.Z_OPT AS 'zAsset-zOPT',
- zAsset.ZMASTER AS 'zAsset-Master= zCldMast-zPK',
- zAsset.ZEXTENDEDATTRIBUTES AS 'zAsset-Extended Attributes= zExtAttr-zPK',
- zAsset.ZIMPORTSESSION AS 'zAsset-Import Session Key',
- zAsset.ZPHOTOANALYSISATTRIBUTES AS 'zAsset-Photo Analysis Attributes Key',
- zAsset.Z_FOK_CLOUDFEEDASSETSENTRY AS 'zAsset-FOK-Cloud Feed Asset Entry Key',
- zAsset.ZCOMPUTEDATTRIBUTES AS 'zAsset-Computed Attributes Asset Key',
- zAsset.ZPROMOTIONSCORE AS 'zAsset-Promotion Score',
- zAsset.ZICONICSCORE AS 'zAsset-Iconic Score',
- zAsset.ZMEDIAANALYSISATTRIBUTES AS 'zAsset-Media Analysis Attributes Key',
- zAsset.ZMEDIAGROUPUUID AS 'zAsset-Media Group UUID',
- zAsset.ZCLOUDASSETGUID AS 'zAsset-Cloud_Asset_GUID = store.cloudphotodb',
- zAsset.ZCLOUDCOLLECTIONGUID AS 'zAsset.Cloud Collection GUID',
- zAddAssetAttr.Z_ENT AS 'zAddAssetAttr-zENT',
- zAddAssetAttr.Z_OPT AS 'ZAddAssetAttr-zOPT',
- zAddAssetAttr.ZASSET AS 'zAddAssetAttr-zAsset= zAsset_zPK',
- zAddAssetAttr.ZUNMANAGEDADJUSTMENT AS 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK',
- zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK',
- zAddAssetAttr.ZPUBLICGLOBALUUID AS 'zAddAssetAttr-Public Global UUID',
- zAddAssetAttr.ZORIGINALASSETSUUID AS 'zAddAssetAttr-Original Assets UUID',
- zAddAssetAttr.ZORIGINATINGASSETIDENTIFIER AS 'zAddAssetAttr-Originating Asset Identifier',
- zAddAssetAttr.ZADJUSTEDFINGERPRINT AS 'zAddAssetAttr.Adjusted Fingerprint',
- zCldMast.Z_PK AS 'zCldMast-zPK= zAsset-Master',
- zCldMast.Z_ENT AS 'zCldMast-zENT',
- zCldMast.Z_OPT AS 'zCldMast-zOPT',
- zCldMast.ZMOMENTSHARE AS 'zCldMast-Moment Share Key= zShare-zPK',
- zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK',
- zCldMast.ZCLOUDMASTERGUID AS 'zCldMast-Cloud_Master_GUID = store.cloudphotodb',
- zCldMast.ZORIGINATINGASSETIDENTIFIER AS 'zCldMast-Originating Asset ID',
- CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key',
- CMzCldMastMedData.Z_ENT AS 'CMzCldMastMedData-zENT',
- CMzCldMastMedData.ZCLOUDMASTER AS 'CMzCldMastMedData-CldMast= zCldMast-zPK',
- AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData',
- AAAzCldMastMedData.Z_ENT AS 'AAAzCldMastMedData-zENT',
- AAAzCldMastMedData.ZCLOUDMASTER AS 'AAAzCldMastMedData-CldMast key',
- AAAzCldMastMedData.ZADDITIONALASSETATTRIBUTES AS 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK',
- zExtAttr.Z_PK AS 'zExtAttr-zPK= zAsset-zExtendedAttributes',
- zExtAttr.Z_ENT AS 'zExtAttr-zENT',
- zExtAttr.Z_OPT AS 'zExtAttr-zOPT',
- zExtAttr.ZASSET AS 'zExtAttr-Asset Key',
- zIntResou.Z_PK AS 'zIntResou-zPK',
- zIntResou.Z_ENT AS 'zIntResou-zENT',
- zIntResou.Z_OPT AS 'zIntResou-zOPT',
- zIntResou.ZASSET AS 'zIntResou-Asset= zAsset_zPK',
- zMedAnlyAstAttr.Z_PK AS 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata',
- zMedAnlyAstAttr.Z_ENT AS 'zMedAnlyAstAttr-zEnt',
- zMedAnlyAstAttr.Z_OPT AS 'zMedAnlyAstAttr-zOpt',
- zMedAnlyAstAttr.ZASSET AS 'zMedAnlyAstAttr-Asset= zAsset-zPK'
- FROM ZASSET zAsset
- LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
- LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES
- LEFT JOIN ZINTERNALRESOURCE zIntResou ON zIntResou.ZASSET = zAsset.Z_PK
- LEFT JOIN ZSCENEPRINT zSceneP ON zSceneP.Z_PK = zAddAssetAttr.ZSCENEPRINT
- LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
- LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA
- LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
- LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK
- WHERE (zIntResou.ZDATASTORESUBTYPE = 1) & (zIntResou.ZLOCALAVAILABILITY = -1) & (zIntResou.ZFINGERPRINT IS NOT NULL)
- ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
- row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
- row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
- row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
- row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
- row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
- row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
- row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
- row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
- row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
- row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
- row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
- row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
- row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
- row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
- row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
- row[268], row[269], row[270], row[271], row[272], row[273], row[274]))
-
- counter += 1
-
- description = 'Parses iOS 17 possible optimized asset records from PhotoData-Photos.sqlite' \
- ' ZINTERNALRESOURCE and other tables. This and other related parsers should provide data' \
- ' for investigative analysis of assets being stored locally on the device verses' \
- ' assets being stored in iCloud Photos as the result of optimization.' \
- ' This is very large query and script, I recommend opening the TSV generated report' \
- ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer' \
- ' to view, search, and filter the results.'
- report = ArtifactHtmlReport('Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-4QueryStart-0',
- 'zAsset-zPK-1',
- 'zAddAssetAttr-zPK-2',
- 'zAsset-UUID = store.cloudphotodb-3',
- 'zAddAssetAttr-Master Fingerprint-4',
- 'zAddAssetAttr.Adjusted Fingerprint-5',
- 'zIntResou-Fingerprint-6',
- 'zIntResou-Local Availability-4QueryStart-7',
- 'zIntResou-Remote Availability-4QueryStart-8',
- 'zIntResou-Resource Type-4QueryStart-9',
- 'zIntResou-Datastore Sub-Type-4QueryStart-10',
- 'zIntResou-Recipe ID-4QueryStart-11',
- 'zAsset Complete-12',
- 'zAsset-Bundle Scope-13',
- 'zAsset-Syndication State-14',
- 'zAsset-Cloud is My Asset-15',
- 'zAsset-Cloud is deletable-Asset-16',
- 'zAsset-Cloud_Local_State-17',
- 'zAsset-Visibility State-18',
- 'zExtAttr-Camera Make-19',
- 'zExtAttr-Camera Model-20',
- 'zExtAttr-Lens Model-21',
- 'zExtAttr-Flash Fired-22',
- 'zExtAttr-Focal Lenght-23',
- 'zExtAttr-Focal Length in 35MM-24',
- 'zExtAttr-Digital Zoom Ratio-25',
- 'zAsset-Derived Camera Capture Device-26',
- 'zAddAssetAttr-Camera Captured Device-27',
- 'zAddAssetAttr-Imported by-28',
- 'zCldMast-Imported By-29',
- 'zAddAssetAttr.Imported by Bundle Identifier-30',
- 'zAddAssetAttr-Imported By Display Name-31',
- 'zCldMast-Imported by Bundle ID-32',
- 'zCldMast-Imported by Display Name-33',
- 'zAsset-Saved Asset Type-34',
- 'zAsset-Directory-Path-35',
- 'zAsset-Filename-36',
- 'zAddAssetAttr- Original Filename-37',
- 'zCldMast- Original Filename-38',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-39',
- 'zAsset-Active Library Scope Participation State-40',
- 'zAsset-Library Scope Share State- StillTesting-41',
- 'zAsset-Added Date-42',
- 'zAsset- SortToken -CameraRoll-43',
- 'zAddAssetAttr-Date Created Source-44',
- 'zAsset-Date Created-45',
- 'zCldMast-Creation Date-46',
- 'zIntResou-CldMst Date Created-47',
- 'zAddAssetAttr-Time Zone Name-48',
- 'zAddAssetAttr-Time Zone Offset-49',
- 'zAddAssetAttr-Inferred Time Zone Offset-50',
- 'zAddAssetAttr-EXIF-String-51',
- 'zAsset-Modification Date-52',
- 'zAsset-Last Shared Date-53',
- 'zCldMast-Cloud Local State-54',
- 'zCldMast-Import Date-55',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-56',
- 'zAddAssetAttr-Import Session ID-57',
- 'zAddAssetAttr-Alt Import Image Date-58',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-59',
- 'zAsset-Cloud Batch Publish Date-60',
- 'zAsset-Cloud Server Publish Date-61',
- 'zAsset-Cloud Download Requests-62',
- 'zAsset-Cloud Batch ID-63',
- 'zAddAssetAttr-Upload Attempts-64',
- 'zAsset-Latitude-65',
- 'zExtAttr-Latitude-66',
- 'zAsset-Longitude-67',
- 'zExtAttr-Longitude-68',
- 'zAddAssetAttr-GPS Horizontal Accuracy-69',
- 'zAddAssetAttr-Location Hash-70',
- 'zAddAssetAttr-Shifted Location Valid-71',
- 'zAddAssetAttr-Shifted Location Data-72',
- 'zAddAssetAttr-Reverse Location Is Valid-73',
- 'zAddAssetAttr-Reverse Location Data-74',
- 'AAAzCldMastMedData-zOPT-75',
- 'zAddAssetAttr-Media Metadata Type-76',
- 'AAAzCldMastMedData-Data-77',
- 'CldMasterzCldMastMedData-zOPT-78',
- 'zCldMast-Media Metadata Type-79',
- 'CMzCldMastMedData-Data-80',
- 'zAsset-Search Index Rebuild State-81',
- 'zAddAssetAttr-Syndication History-82',
- 'zMedAnlyAstAttr-Syndication Processing Version-83',
- 'zMedAnlyAstAttr-Syndication Processing Value-84',
- 'zAsset-Orientation-85',
- 'zAddAssetAttr-Original Orientation-86',
- 'zAsset-Kind-87',
- 'zAsset-Kind-Sub-Type-88',
- 'zAddAssetAttr-Cloud Kind Sub Type-89',
- 'zAsset-Playback Style-90',
- 'zAsset-Playback Variation-91',
- 'zAsset-Video Duration-92',
- 'zExtAttr-Duration-93',
- 'zAsset-Video CP Duration-94',
- 'zAddAssetAttr-Video CP Duration Time Scale-95',
- 'zAsset-Video CP Visibility State-96',
- 'zAddAssetAttr-Video CP Display Value-97',
- 'zAddAssetAttr-Video CP Display Time Scale-98',
- 'zIntResou-Datastore Class ID-99',
- 'zAsset-Cloud Placeholder Kind-100',
- 'zIntResou-Local Availability-101',
- 'zIntResou-Local Availability Target-102',
- 'zIntResou-Cloud Local State-103',
- 'zIntResou-Remote Availability-104',
- 'zIntResou-Remote Availability Target-105',
- 'zIntResou-Transient Cloud Master-106',
- 'zIntResou-Side Car Index-107',
- 'zIntResou- File ID-108',
- 'zIntResou-Version-109',
- 'zAddAssetAttr- Original-File-Size-110',
- 'zIntResou-Resource Type-111',
- 'zIntResou-Datastore Sub-Type-112',
- 'zIntResou-Cloud Source Type-113',
- 'zIntResou-Data Length-114',
- 'zIntResou-Recipe ID-115',
- 'zIntResou-Cloud Last Prefetch Date-116',
- 'zIntResou-Cloud Prefetch Count-117',
- 'zIntResou- Cloud-Last-OnDemand Download-Date-118',
- 'zIntResou-UniformTypeID_UTI_Conformance_Hint-119',
- 'zIntResou-Compact-UTI-120',
- 'zAsset-Uniform Type ID-121',
- 'zAsset-Original Color Space-122',
- 'zCldMast-Uniform_Type_ID-123',
- 'zCldMast-Full Size JPEG Source-124',
- 'zAsset-HDR Gain-125',
- 'zAsset-zHDR_Type-126',
- 'zExtAttr-Codec-127',
- 'zIntResou-Codec Four Char Code Name-128',
- 'zCldMast-Codec Name-129',
- 'zCldMast-Video Frame Rate-130',
- 'zCldMast-Placeholder State-131',
- 'zAsset-Depth_Type-132',
- 'zAsset-Avalanche UUID-133',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-134',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-135',
- 'zAddAssetAttr-Cloud Recovery State-136',
- 'zAddAssetAttr-Cloud State Recovery Attempts Count-137',
- 'zAsset-Deferred Processing Needed-138',
- 'zAsset-Video Deferred Processing Needed-139',
- 'zAddAssetAttr-Deferred Photo Identifier-140',
- 'zAddAssetAttr-Deferred Processing Candidate Options-141',
- 'zAsset-Has Adjustments-Camera-Effects-Filters-142',
- 'zAsset-Adjustment Timestamp-143',
- 'zAddAssetAttr-Editor Bundle ID-144',
- 'zAddAssetAttr-Montage-145',
- 'zAsset-Favorite-146',
- 'zAsset-Hidden-147',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-148',
- 'zAsset-Trashed Date-149',
- 'zAsset-Trashed by Participant= zSharePartic_zPK-150',
- 'zAsset-Delete-Reason-151',
- 'zIntResou-Trash State-152',
- 'zIntResou-Trashed Date-153',
- 'zAsset-Cloud Delete State-154',
- 'zIntResou-Cloud Delete State-155',
- 'zAddAssetAttr-PTP Trashed State-156',
- 'zIntResou-PTP Trashed State-157',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-158',
- 'zMedAnlyAstAttr-Media Analysis Timestamp-159',
- 'zAsset-Analysis State Modification Date-160',
- 'zAddAssetAttr- Pending View Count-161',
- 'zAddAssetAttr- View Count-162',
- 'zAddAssetAttr- Pending Play Count-163',
- 'zAddAssetAttr- Play Count-164',
- 'zAddAssetAttr- Pending Share Count-165',
- 'zAddAssetAttr- Share Count-166',
- 'zAddAssetAttr-Allowed for Analysis-167',
- 'zAddAssetAttr-Scene Analysis Version-168',
- 'zAddAssetAttr-Scene Analysis is From Preview-169',
- 'zAddAssetAttr-Scene Analysis Timestamp-170',
- 'zAsset-Duplication Asset Visibility State-171',
- 'zAddAssetAttr-Destination Asset Copy State-172',
- 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-173',
- 'zAddAssetAttr-Source Asset for Duplication Scope ID-174',
- 'zCldMast-Source Master For Duplication Scope ID-175',
- 'zAddAssetAttr-Source Asset For Duplication ID-176',
- 'zCldMast-Source Master for Duplication ID-177',
- 'zAddAssetAttr-Variation Suggestions States-178',
- 'zAsset-High Frame Rate State-179',
- 'zAsset-Video Key Frame Time Scale-180',
- 'zAsset-Video Key Frame Value-181',
- 'zExtAttr-ISO-182',
- 'zExtAttr-Metering Mode-183',
- 'zExtAttr-Sample Rate-184',
- 'zExtAttr-Track Format-185',
- 'zExtAttr-White Balance-186',
- 'zExtAttr-Aperture-187',
- 'zExtAttr-BitRate-188',
- 'zExtAttr-Exposure Bias-189',
- 'zExtAttr-Frames Per Second-190',
- 'zExtAttr-Shutter Speed-191',
- 'zExtAttr-Slush Scene Bias-192',
- 'zExtAttr-Slush Version-193',
- 'zExtAttr-Slush Preset-194',
- 'zExtAttr-Slush Warm Bias-195',
- 'zAsset-Height-196',
- 'zAddAssetAttr-Original Height-197',
- 'zIntResou-UnOriented Height-198',
- 'zAsset-Width-199',
- 'zAddAssetAttr-Original Width-200',
- 'zIntResou-UnOriented Width-201',
- 'zAsset-Thumbnail Index-202',
- 'zAddAssetAttr-Embedded Thumbnail Height-203',
- 'zAddAssetAttr-Embedded Thumbnail Length-204',
- 'zAddAssetAttr-Embedded Thumbnail Offset-205',
- 'zAddAssetAttr-Embedded Thumbnail Width-206',
- 'zAsset-Packed Acceptable Crop Rect-207',
- 'zAsset-Packed Badge Attributes-208',
- 'zAsset-Packed Preferred Crop Rect-209',
- 'zAsset-Curation Score-210',
- 'zAsset-Camera Processing Adjustment State-211',
- 'zAsset-Depth Type-212',
- 'zAsset-Is Magic Carpet-Quicktime_MOV-file-213',
- 'zAddAssetAttr-Orig Resource Choice-214',
- 'zAsset-Spatial Type-215',
- 'zAddAssetAttr-Spatial Over Capture Group ID-216',
- 'zAddAssetAttr-Place Annotation Data-217',
- 'zAddAssetAttr-Distance Identity-HEX-218',
- 'zAddAssetAttr-Edited IPTC Attributes-219',
- 'zAddAssetAttr-Title-Comments via Cloud Website-220',
- 'zAddAssetAttr-Accessibility Description-221',
- 'zAddAssetAttr-Photo Stream Tag ID-222',
- 'zAddAssetAttr-Share Type-223',
- 'zAddAssetAttr-Library Scope Asset Contributors To Update-224',
- 'zAsset-Overall Aesthetic Score-225',
- 'zAsset-zENT-226',
- 'zAsset-zOPT-227',
- 'zAsset-Master= zCldMast-zPK-228',
- 'zAsset-Extended Attributes= zExtAttr-zPK-229',
- 'zAsset-Import Session Key-230',
- 'zAsset-Photo Analysis Attributes Key-231',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-232',
- 'zAsset-Computed Attributes Asset Key-233',
- 'zAsset-Promotion Score-234',
- 'zAsset-Iconic Score-235',
- 'zAsset-Media Analysis Attributes Key-236',
- 'zAsset-Media Group UUID-237',
- 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-238',
- 'zAsset.Cloud Collection GUID-239',
- 'zAddAssetAttr-zENT-240',
- 'ZAddAssetAttr-zOPT-241',
- 'zAddAssetAttr-zAsset= zAsset_zPK-242',
- 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-243',
- 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-244',
- 'zAddAssetAttr-Public Global UUID-245',
- 'zAddAssetAttr-Original Assets UUID-246',
- 'zAddAssetAttr-Originating Asset Identifier-247',
- 'zAddAssetAttr.Adjusted Fingerprint-248',
- 'zCldMast-zPK= zAsset-Master-249',
- 'zCldMast-zENT-250',
- 'zCldMast-zOPT-251',
- 'zCldMast-Moment Share Key= zShare-zPK-252',
- 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-253',
- 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-254',
- 'zCldMast-Originating Asset ID-255',
- 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-256',
- 'CMzCldMastMedData-zENT-257',
- 'CMzCldMastMedData-CldMast= zCldMast-zPK-258',
- 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-259',
- 'AAAzCldMastMedData-zENT-260',
- 'AAAzCldMastMedData-CldMast key-261',
- 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-262',
- 'zExtAttr-zPK= zAsset-zExtendedAttributes-263',
- 'zExtAttr-zENT-264',
- 'zExtAttr-zOPT-265',
- 'zExtAttr-Asset Key-266',
- 'zIntResou-zPK-267',
- 'zIntResou-zENT-268',
- 'zIntResou-zOPT-269',
- 'zIntResou-Asset= zAsset_zPK-270',
- 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-271',
- 'zMedAnlyAstAttr-zEnt-272',
- 'zMedAnlyAstAttr-zOpt-273',
- 'zMedAnlyAstAttr-Asset= zAsset-zPK-274')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No Internal Resource data available for iOS 17 PhotoData-Photos.sqlite')
-
- db.close()
- return
-
- elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
-
- cursor.execute("""
- SELECT
- DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart',
- zAsset.Z_PK AS 'zAsset-zPK',
- zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
- zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18',
- zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18',
- zCompSyncAttr.ZCLOUDCOMPUTESTATEADJUSTMENTFINGERPRINT AS 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18',
- zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-iOS18',
- CASE zIntResou.ZLOCALAVAILABILITY
- WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)'
- WHEN 1 THEN '1-IR_Asset_Avail_Locally-1'
- WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || ''
- END AS 'zIntResou-Local Availability-4QueryStart',
- CASE zIntResou.ZREMOTEAVAILABILITY
- WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0'
- WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || ''
- END AS 'zIntResou-Remote Availability-4QueryStart',
- CASE zIntResou.ZRESOURCETYPE
- WHEN 0 THEN '0-Photo-0'
- WHEN 1 THEN '1-Video-1'
- WHEN 3 THEN '3-Live-Photo-3'
- WHEN 5 THEN '5-Adjustment-Data-5'
- WHEN 6 THEN '6-Screenshot-6'
- WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9'
- WHEN 13 THEN '13-Movie-13'
- WHEN 14 THEN '14-Wallpaper-14'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || ''
- END AS 'zIntResou-Resource Type-4QueryStart',
- CASE zIntResou.ZDATASTORESUBTYPE
- WHEN 0 THEN '0-No Cloud Inter Resource-0'
- WHEN 1 THEN '1-Main-Asset-Orig-Size-1'
- WHEN 2 THEN '2-Photo-with-Adjustments-2'
- WHEN 3 THEN '3-JPG-Large-Thumb-3'
- WHEN 4 THEN '4-JPG-Med-Thumb-4'
- WHEN 5 THEN '5-JPG-Small-Thumb-5'
- WHEN 6 THEN '6-Video-Med-Data-6'
- WHEN 7 THEN '7-Video-Small-Data-7'
- WHEN 8 THEN '8-MP4-Cloud-Share-8'
- WHEN 9 THEN '9-StillTesting'
- WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10'
- WHEN 11 THEN '11-StillTesting'
- WHEN 12 THEN '12-StillTesting'
- WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13'
- WHEN 14 THEN '14-Wallpaper-14'
- WHEN 15 THEN '15-Has-Markup-and-Adjustments-15'
- WHEN 16 THEN '16-Video-with-Adjustments-16'
- WHEN 17 THEN '17-RAW_Photo-17_RT'
- WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18'
- WHEN 19 THEN '19-Live-Photo-with-Adjustments-19'
- WHEN 20 THEN '20-StillTesting'
- WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21'
- WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22'
- WHEN 23 THEN '23-StillTesting'
- WHEN 24 THEN '24-StillTesting'
- WHEN 25 THEN '25-StillTesting'
- WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26'
- WHEN 27 THEN '27-StillTesting'
- WHEN 28 THEN '28-MOV-Med-hdr-Data-28'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || ''
- END AS 'zIntResou-Datastore Sub-Type-4QueryStart',
- CASE zIntResou.ZRECIPEID
- WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0'
- WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737'
- WHEN 65739 THEN '65739-JPG_Large_Thumb-65739'
- WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741'
- WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743'
- WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749'
- WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938'
- WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072'
- WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077'
- WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079'
- WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081'
- WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272'
- WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275'
- WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277'
- WHEN 131475 THEN '131475-medium-hdr-MOV-131475'
- WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683'
- WHEN 327687 THEN '627687-WallpaperComputeResource-627687'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || ''
- END AS 'zIntResou-Recipe ID-4QueryStart',
- CASE zAsset.ZCOMPLETE
- WHEN 1 THEN '1-Yes-1'
- END AS 'zAsset Complete',
- CASE zAsset.ZBUNDLESCOPE
- WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0'
- WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1'
- WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2'
- WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || ''
- END AS 'zAsset-Bundle Scope',
- CASE zAsset.ZSYNDICATIONSTATE
- WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0'
- WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1'
- WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2'
- WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3'
- WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8'
- WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9'
- WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || ''
- END AS 'zAsset-Syndication State',
- CASE zAsset.ZCLOUDISMYASSET
- WHEN 0 THEN '0-Not_My_Asset_in_Shared_Album-0'
- WHEN 1 THEN '1-My_Asset_in_Shared_Album-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISMYASSET || ''
- END AS 'zAsset-Cloud is My Asset',
- CASE zAsset.ZCLOUDISDELETABLE
- WHEN 0 THEN '0-No-0'
- WHEN 1 THEN '1-Yes-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISDELETABLE || ''
- END AS 'zAsset-Cloud is deletable-Asset',
- CASE zAsset.ZCLOUDLOCALSTATE
- WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Album-Conv_or_iCldPhotos_OFF=Asset_Not_Synced-0'
- WHEN 1 THEN 'iCldPhotos ON=Asset_Can-Be-or-Has-Been_Synced_with_iCloud-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDLOCALSTATE || ''
- END AS 'zAsset-Cloud_Local_State',
- CASE zAsset.ZVISIBILITYSTATE
- WHEN 0 THEN '0-Visible-PL-CameraRoll-0'
- WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || ''
- END AS 'zAsset-Visibility State',
- zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make',
- zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model',
- zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model',
- CASE zExtAttr.ZFLASHFIRED
- WHEN 0 THEN '0-No Flash-0'
- WHEN 1 THEN '1-Flash Fired-1'
- ELSE 'Unknown-New-Value!: ' || zExtAttr.ZFLASHFIRED || ''
- END AS 'zExtAttr-Flash Fired',
- zExtAttr.ZFOCALLENGTH AS 'zExtAttr-Focal Length',
- zExtAttr.ZFOCALLENGTHIN35MM AS 'zExtAttr-Focal Length in 35MM',
- zExtAttr.ZDIGITALZOOMRATIO AS 'zExtAttr-Digital Zoom Ratio',
- CASE zExtAttr.ZGENERATIVEAITYPE
- WHEN 0 THEN '0-Not_Generative_AI iOS18_Still_Testing-0'
- ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || ''
- END AS 'zExtAttr-Generative_AI_Type-iOS18',
- zExtAttr.ZCREDIT AS 'zExtAttr-Credit-iOS18',
- CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE
- WHEN 0 THEN '0-Back-Camera-Other-0'
- WHEN 1 THEN '1-Front-Camera-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZDERIVEDCAMERACAPTUREDEVICE || ''
- END AS 'zAsset-Derived Camera Capture Device',
- CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE
- WHEN 0 THEN '0-Back-Camera-Other-0'
- WHEN 1 THEN '1-Front-Camera-1'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || ''
- END AS 'zAddAssetAttr-Camera Captured Device',
- zAsset.ZCAPTURESESSIONIDENTIFIER AS 'zAsset-Capture_Session_Identifier-iOS18',
- CASE zAddAssetAttr.ZIMPORTEDBY
- WHEN 0 THEN '0-Cloud-Other-0'
- WHEN 1 THEN '1-Native-Back-Camera-1'
- WHEN 2 THEN '2-Native-Front-Camera-2'
- WHEN 3 THEN '3-Third-Party-App-3'
- WHEN 4 THEN '4-StillTesting-4'
- WHEN 5 THEN '5-PhotoBooth_PL-Asset-5'
- WHEN 6 THEN '6-Third-Party-App-6'
- WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7'
- WHEN 8 THEN '8-System-Package-App-8'
- WHEN 9 THEN '9-Native-App-9'
- WHEN 10 THEN '10-StillTesting-10'
- WHEN 11 THEN '11-StillTesting-11'
- WHEN 12 THEN '12-SWY_Syndication_PL-12'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || ''
- END AS 'zAddAssetAttr-Imported by',
- CASE zCldMast.ZIMPORTEDBY
- WHEN 0 THEN '0-Cloud-Other-0'
- WHEN 1 THEN '1-Native-Back-Camera-1'
- WHEN 2 THEN '2-Native-Front-Camera-2'
- WHEN 3 THEN '3-Third-Party-App-3'
- WHEN 4 THEN '4-StillTesting-4'
- WHEN 5 THEN '5-PhotoBooth_PL-Asset-5'
- WHEN 6 THEN '6-Third-Party-App-6'
- WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7'
- WHEN 8 THEN '8-System-Package-App-8'
- WHEN 9 THEN '9-Native-App-9'
- WHEN 10 THEN '10-StillTesting-10'
- WHEN 11 THEN '11-StillTesting-11'
- WHEN 12 THEN '12-SWY_Syndication_PL-12'
- ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || ''
- END AS 'zCldMast-Imported By',
- zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier',
- zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name',
- zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID',
- zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name',
- CASE zAsset.ZISRECENTLYSAVED
- WHEN 0 THEN '0-Not_Recently_Saved iOS18_Still_Testing-0'
- WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || ''
- END AS 'zAsset-Is_Recently_Saved-iOS18',
- CASE zAsset.ZSAVEDASSETTYPE
- WHEN 0 THEN '0-Saved-via-other-source-0'
- WHEN 1 THEN '1-StillTesting-1'
- WHEN 2 THEN '2-StillTesting-2'
- WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3'
- WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4'
- WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5'
- WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6'
- WHEN 7 THEN '7-StillTesting-7'
- WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8'
- WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || ''
- END AS 'zAsset-Saved Asset Type',
- zAsset.ZDIRECTORY AS 'zAsset-Directory-Path',
- zAsset.ZFILENAME AS 'zAsset-Filename',
- zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename',
- zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename',
- zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files',
- CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE
- WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0'
- WHEN 1 THEN '1-Asset-In-Active-SPL-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || ''
- END AS 'zAsset-Active Library Scope Participation State',
- CASE zAsset.ZLIBRARYSCOPESHARESTATE
- WHEN 0 THEN '0-Asset-Not-In-SPL-0'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || ''
- END AS 'zAsset-Library Scope Share State- StillTesting',
- DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date',
- DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
- CASE zAddAssetAttr.ZDATECREATEDSOURCE
- WHEN 0 THEN '0-Cloud-Asset-0'
- WHEN 1 THEN '1-Local_Asset_EXIF-1'
- WHEN 3 THEN '3-Local_Asset_No_EXIF-3'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || ''
- END AS 'zAddAssetAttr-Date Created Source',
- DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
- DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date',
- DateTime(zIntResou.ZCLOUDMASTERDATECREATED + 978307200, 'UNIXEPOCH') AS 'zIntResou-CldMst Date Created',
- zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name',
- zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset',
- zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset',
- zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String',
- DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
- DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date',
- CASE zCldMast.ZCLOUDLOCALSTATE
- WHEN 0 THEN '0-Not Synced with Cloud-0'
- WHEN 1 THEN '1-Pending Upload-1'
- WHEN 2 THEN '2-StillTesting'
- WHEN 3 THEN '3-Synced with Cloud-3'
- ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || ''
- END AS 'zCldMast-Cloud Local State',
- DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date',
- DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files',
- zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID',
- DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date',
- zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting',
- DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date',
- DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date',
- zAsset.ZCLOUDDOWNLOADREQUESTS AS 'zAsset-Cloud Download Requests',
- zAsset.ZCLOUDBATCHID AS 'zAsset-Cloud Batch ID',
- zAddAssetAttr.ZUPLOADATTEMPTS AS 'zAddAssetAttr-Upload Attempts',
- CASE zAsset.ZLATITUDE
- WHEN -180.0 THEN '-180.0'
- ELSE zAsset.ZLATITUDE
- END AS 'zAsset-Latitude',
- zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude',
- CASE zAsset.ZLONGITUDE
- WHEN -180.0 THEN '-180.0'
- ELSE zAsset.ZLONGITUDE
- END AS 'zAsset-Longitude',
- zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude',
- CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY
- WHEN -1.0 THEN '-1.0'
- ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY
- END AS 'zAddAssetAttr-GPS Horizontal Accuracy',
- zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash',
- CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID
- WHEN 0 THEN '0-Shifted Location Not Valid-0'
- WHEN 1 THEN '1-Shifted Location Valid-1'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || ''
- END AS 'zAddAssetAttr-Shifted Location Valid',
- CASE
- WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist'
- ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL'
- END AS 'zAddAssetAttr-Shifted Location Data',
- CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID
- WHEN 0 THEN '0-Reverse Location Not Valid-0'
- WHEN 1 THEN '1-Reverse Location Valid-1'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || ''
- END AS 'zAddAssetAttr-Reverse Location Is Valid',
- CASE
- WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist'
- ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL'
- END AS 'zAddAssetAttr-Reverse Location Data',
- CASE AAAzCldMastMedData.Z_OPT
- WHEN 1 THEN '1-StillTesting-Cloud-1'
- WHEN 2 THEN '2-StillTesting-This Device-2'
- WHEN 3 THEN '3-StillTesting-Muted-3'
- WHEN 4 THEN '4-StillTesting-Unknown-4'
- WHEN 5 THEN '5-StillTesting-Unknown-5'
- ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || ''
- END AS 'AAAzCldMastMedData-zOPT',
- zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type',
- CASE
- WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist'
- ELSE 'AAAzCldMastMedData-Data_Empty-NULL'
- END AS 'AAAzCldMastMedData-Data',
- CASE CMzCldMastMedData.Z_OPT
- WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1'
- WHEN 2 THEN '2-StillTesting-Local_Asset-2'
- WHEN 3 THEN '3-StillTesting-Muted-3'
- WHEN 4 THEN '4-StillTesting-Unknown-4'
- WHEN 5 THEN '5-StillTesting-Unknown-5'
- ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || ''
- END AS 'CldMasterzCldMastMedData-zOPT',
- zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type',
- CASE
- WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist'
- ELSE 'CMzCldMastMedData-Data_Empty-NULL'
- END AS 'CMzCldMastMedData-Data',
- CASE zAsset.ZSEARCHINDEXREBUILDSTATE
- WHEN 0 THEN '0-StillTesting-0'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZSEARCHINDEXREBUILDSTATE || ''
- END AS 'zAsset-Search Index Rebuild State',
- zAddAssetAttr.ZSYNDICATIONHISTORY AS 'zAddAssetAttr-Syndication History',
- zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVERSION AS 'zMedAnlyAstAttr-Syndication Processing Version',
- CASE zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE
- WHEN 0 THEN '0-NA-0'
- WHEN 1 THEN '1-STILLTESTING_Wide-Camera_JPG-1'
- WHEN 2 THEN '2-STILLTESTING_Telephoto_Camera_Lens-2'
- WHEN 4 THEN '4-STILLTESTING_SWY_Asset_OrigAssetImport_SystemPackageApp-4'
- WHEN 16 THEN '16-STILLTESTING-16'
- WHEN 1024 THEN '1024-STILLTESTING_SWY_Asset_OrigAssetImport_NativeCamera-1024'
- WHEN 2048 THEN '2048-STILLTESTING-2048'
- WHEN 4096 THEN '4096-STILLTESTING_SWY_Asset_Manually_Saved-4096'
- ELSE 'Unknown-New-Value!: ' || zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE || ''
- END AS 'zMedAnlyAstAttr-Syndication Processing Value',
- CASE zAsset.ZORIENTATION
- WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1'
- WHEN 2 THEN '2-Horizontal-Camera-(right)-2'
- WHEN 3 THEN '3-Horizontal-Camera-(right)-3'
- WHEN 4 THEN '4-Horizontal-Camera-(left)-4'
- WHEN 5 THEN '5-Vertical-Camera-(top)-5'
- WHEN 6 THEN '6-Vertical-Camera-(top)-6'
- WHEN 7 THEN '7-Vertical-Camera-(bottom)-7'
- WHEN 8 THEN '8-Vertical-Camera-(bottom)-8'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || ''
- END AS 'zAsset-Orientation',
- CASE zAddAssetAttr.ZORIGINALORIENTATION
- WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1'
- WHEN 2 THEN '2-Horizontal-Camera-(right)-2'
- WHEN 3 THEN '3-Horizontal-Camera-(right)-3'
- WHEN 4 THEN '4-Horizontal-Camera-(left)-4'
- WHEN 5 THEN '5-Vertical-Camera-(top)-5'
- WHEN 6 THEN '6-Vertical-Camera-(top)-6'
- WHEN 7 THEN '7-Vertical-Camera-(bottom)-7'
- WHEN 8 THEN '8-Vertical-Camera-(bottom)-8'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || ''
- END AS 'zAddAssetAttr-Original Orientation',
- CASE zAsset.ZKIND
- WHEN 0 THEN '0-Photo-0'
- WHEN 1 THEN '1-Video-1'
- END AS 'zAsset-Kind',
- CASE zAsset.ZISDETECTEDSCREENSHOT
- WHEN 0 THEN '0-Not_Detected_Screenshot iOS18_Still_Testing-0'
- WHEN 1 THEN '1-Detected_Screenshot iOS18_Still_Testing-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZISDETECTEDSCREENSHOT || ''
- END AS 'zAsset-Is_Detected_Screenshot-iOS18',
- CASE zAsset.ZKINDSUBTYPE
- WHEN 0 THEN '0-Still-Photo-0'
- WHEN 1 THEN '1-Panorama-1'
- WHEN 2 THEN '2-Live-Photo-2'
- WHEN 10 THEN '10-SpringBoard-Screenshot-10'
- WHEN 100 THEN '100-Video-100'
- WHEN 101 THEN '101-Slow-Mo-Video-101'
- WHEN 102 THEN '102-Time-lapse-Video-102'
- WHEN 103 THEN '103-Replay_Screen_Recording-103'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || ''
- END AS 'zAsset-Kind-Sub-Type',
- CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE
- WHEN 0 THEN '0-Still-Photo-0'
- WHEN 1 THEN '1-StillTesting'
- WHEN 2 THEN '2-Live-Photo-2'
- WHEN 3 THEN '3-Screenshot-3'
- WHEN 10 THEN '10-SpringBoard-Screenshot-10'
- WHEN 100 THEN '100-Video-100'
- WHEN 101 THEN '101-Slow-Mo-Video-101'
- WHEN 102 THEN '102-Time-lapse-Video-102'
- WHEN 103 THEN '103-Replay_Screen_Recording-103'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || ''
- END AS 'zAddAssetAttr-Cloud Kind Sub Type',
- CASE zAsset.ZPLAYBACKSTYLE
- WHEN 1 THEN '1-Image-1'
- WHEN 2 THEN '2-Image-Animated-2'
- WHEN 3 THEN '3-Live-Photo-3'
- WHEN 4 THEN '4-Video-4'
- WHEN 5 THEN '5-Video-Looping-5'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || ''
- END AS 'zAsset-Playback Style',
- CASE zAsset.ZPLAYBACKVARIATION
- WHEN 0 THEN '0-No_Playback_Variation-0'
- WHEN 1 THEN '1-StillTesting_Playback_Variation-1'
- WHEN 2 THEN '2-StillTesting_Playback_Variation-2'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || ''
- END AS 'zAsset-Playback Variation',
- CASE zAddAssetAttr.ZVIEWPRESENTATION
- WHEN 0 THEN '0-Obs in iOS 18 still testing-0'
- WHEN 1 THEN '1-Obs in iOS 18 still testing-1'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZVIEWPRESENTATION || ''
- END AS 'zAddAssetAttr-View_Presentation-iOS18',
- zAsset.ZDURATION AS 'zAsset-Video Duration',
- zExtAttr.ZDURATION AS 'zExtAttr-Duration',
- zAsset.ZVIDEOCPDURATIONVALUE AS 'zAsset-Video CP Duration',
- zAddAssetAttr.ZVIDEOCPDURATIONTIMESCALE AS 'zAddAssetAttr-Video CP Duration Time Scale',
- zAsset.ZVIDEOCPVISIBILITYSTATE AS 'zAsset-Video CP Visibility State',
- zAddAssetAttr.ZVIDEOCPDISPLAYVALUE AS 'zAddAssetAttr-Video CP Display Value',
- zAddAssetAttr.ZVIDEOCPDISPLAYTIMESCALE AS 'zAddAssetAttr-Video CP Display Time Scale',
- CASE zIntResou.ZDATASTORECLASSID
- WHEN 0 THEN '0-LPL-Asset_CPL-Asset-0'
- WHEN 1 THEN '1-StillTesting-1'
- WHEN 2 THEN '2-Photo-Cloud-Sharing-Asset-2'
- WHEN 3 THEN '3-SWY_Syndication_Asset-3'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORECLASSID || ''
- END AS 'zIntResou-Datastore Class ID',
- CASE zAsset.ZCLOUDPLACEHOLDERKIND
- WHEN 0 THEN '0-Local&CloudMaster Asset-0'
- WHEN 1 THEN '1-StillTesting-1'
- WHEN 2 THEN '2-StillTesting-2'
- WHEN 3 THEN '3-JPG-Asset_Only_PhDa-Thumb-V2-3'
- WHEN 4 THEN '4-LPL-JPG-Asset_CPLAsset-OtherType-4'
- WHEN 5 THEN '5-Asset_synced_CPL_2_Device-5'
- WHEN 6 THEN '6-StillTesting-6'
- WHEN 7 THEN '7-LPL-poster-JPG-Asset_CPLAsset-MP4-7'
- WHEN 8 THEN '8-LPL-JPG_Asset_CPLAsset-LivePhoto-MOV-8'
- WHEN 9 THEN '9-CPL_MP4_Asset_Saved_2_LPL-9'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDPLACEHOLDERKIND || ''
- END AS 'zAsset-Cloud Placeholder Kind',
- CASE zIntResou.ZLOCALAVAILABILITY
- WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)'
- WHEN 1 THEN '1-IR_Asset_Avail_Locally-1'
- WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || ''
- END AS 'zIntResou-Local Availability',
- CASE zIntResou.ZLOCALAVAILABILITYTARGET
- WHEN 0 THEN '0-StillTesting-0'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITYTARGET || ''
- END AS 'zIntResou-Local Availability Target',
- CASE zIntResou.ZCLOUDLOCALSTATE
- WHEN 0 THEN '0-IR_Asset_Not_Synced_No_IR-CldMastDateCreated-0'
- WHEN 1 THEN '1-IR_Asset_Pending-Upload-1'
- WHEN 2 THEN '2-IR_Asset_Photo_Cloud_Share_Asset_On-Local-Device-2'
- WHEN 3 THEN '3-IR_Asset_Synced_iCloud-3'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDLOCALSTATE || ''
- END AS 'zIntResou-Cloud Local State',
- CASE zIntResou.ZREMOTEAVAILABILITY
- WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0'
- WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || ''
- END AS 'zIntResou-Remote Availability',
- CASE zIntResou.ZREMOTEAVAILABILITYTARGET
- WHEN 0 THEN '0-StillTesting-0'
- WHEN 1 THEN '1-StillTesting-1'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITYTARGET || ''
- END AS 'zIntResou-Remote Availability Target',
- zIntResou.ZTRANSIENTCLOUDMASTER AS 'zIntResou-Transient Cloud Master',
- zIntResou.ZSIDECARINDEX AS 'zIntResou-Side Car Index',
- zIntResou.ZFILEID AS 'zIntResou- File ID',
- CASE zIntResou.ZVERSION
- WHEN 0 THEN '0-IR_Asset_Standard-0'
- WHEN 1 THEN '1-StillTesting-1'
- WHEN 2 THEN '2-IR_Asset_Adjustments-Mutation-2'
- WHEN 3 THEN '3-IR_Asset_No_IR-CldMastDateCreated-3'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZVERSION || ''
- END AS 'zIntResou-Version',
- zAddAssetAttr.ZORIGINALFILESIZE AS 'zAddAssetAttr- Original-File-Size',
- CASE zIntResou.ZRESOURCETYPE
- WHEN 0 THEN '0-Photo-0'
- WHEN 1 THEN '1-Video-1'
- WHEN 3 THEN '3-Live-Photo-3'
- WHEN 5 THEN '5-Adjustment-Data-5'
- WHEN 6 THEN '6-Screenshot-6'
- WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9'
- WHEN 13 THEN '13-Movie-13'
- WHEN 14 THEN '14-Wallpaper-14'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || ''
- END AS 'zIntResou-Resource Type',
- CASE zIntResou.ZDATASTORESUBTYPE
- WHEN 0 THEN '0-No Cloud Inter Resource-0'
- WHEN 1 THEN '1-Main-Asset-Orig-Size-1'
- WHEN 2 THEN '2-Photo-with-Adjustments-2'
- WHEN 3 THEN '3-JPG-Large-Thumb-3'
- WHEN 4 THEN '4-JPG-Med-Thumb-4'
- WHEN 5 THEN '5-JPG-Small-Thumb-5'
- WHEN 6 THEN '6-Video-Med-Data-6'
- WHEN 7 THEN '7-Video-Small-Data-7'
- WHEN 8 THEN '8-MP4-Cloud-Share-8'
- WHEN 9 THEN '9-StillTesting'
- WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10'
- WHEN 11 THEN '11-StillTesting'
- WHEN 12 THEN '12-StillTesting'
- WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13'
- WHEN 14 THEN '14-Wallpaper-14'
- WHEN 15 THEN '15-Has-Markup-and-Adjustments-15'
- WHEN 16 THEN '16-Video-with-Adjustments-16'
- WHEN 17 THEN '17-RAW_Photo-17_RT'
- WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18'
- WHEN 19 THEN '19-Live-Photo-with-Adjustments-19'
- WHEN 20 THEN '20-StillTesting'
- WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21'
- WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22'
- WHEN 23 THEN '23-StillTesting'
- WHEN 24 THEN '24-StillTesting'
- WHEN 25 THEN '25-StillTesting'
- WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26'
- WHEN 27 THEN '27-StillTesting'
- WHEN 28 THEN '28-MOV-Med-hdr-Data-28'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || ''
- END AS 'zIntResou-Datastore Sub-Type',
- CASE zIntResou.ZCLOUDSOURCETYPE
- WHEN 0 THEN '0-NA-0'
- WHEN 1 THEN '1-Main-Asset-Orig-Size-1'
- WHEN 2 THEN '2-Photo-with-Adjustments-2'
- WHEN 3 THEN '3-JPG-Large-Thumb-3'
- WHEN 4 THEN '4-JPG-Med-Thumb-4'
- WHEN 5 THEN '5-JPG-Small-Thumb-5'
- WHEN 6 THEN '6-Video-Med-Data-6'
- WHEN 7 THEN '7-Video-Small-Data-7'
- WHEN 8 THEN '8-MP4-Cloud-Share-8'
- WHEN 9 THEN '9-StillTesting'
- WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10'
- WHEN 11 THEN '11-StillTesting'
- WHEN 12 THEN '12-StillTesting'
- WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13'
- WHEN 14 THEN '14-Wallpaper-14'
- WHEN 15 THEN '15-Has-Markup-and-Adjustments-15'
- WHEN 16 THEN '16-Video-with-Adjustments-16'
- WHEN 17 THEN '17-RAW_Photo-17_RT'
- WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18'
- WHEN 19 THEN '19-Live-Photo-with-Adjustments-19'
- WHEN 20 THEN '20-StillTesting'
- WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21'
- WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22'
- WHEN 23 THEN '23-StillTesting'
- WHEN 24 THEN '24-StillTesting'
- WHEN 25 THEN '25-StillTesting'
- WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26'
- WHEN 27 THEN '27-StillTesting'
- WHEN 28 THEN '28-MOV-Med-hdr-Data-28'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDSOURCETYPE || ''
- END AS 'zIntResou-Cloud Source Type',
- zIntResou.ZDATALENGTH AS 'zIntResou-Data Length',
- CASE zIntResou.ZRECIPEID
- WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0'
- WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737'
- WHEN 65739 THEN '65739-JPG_Large_Thumb-65739'
- WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741'
- WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743'
- WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749'
- WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938'
- WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072'
- WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077'
- WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079'
- WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081'
- WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272'
- WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275'
- WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277'
- WHEN 131475 THEN '131475-medium-hdr-MOV-131475'
- WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683'
- WHEN 327687 THEN '627687-WallpaperComputeResource-627687'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || ''
- END AS 'zIntResou-Recipe ID',
- CASE zIntResou.ZCLOUDLASTPREFETCHDATE
- WHEN 0 THEN '0-NA-0'
- ELSE DateTime(zIntResou.ZCLOUDLASTPREFETCHDATE + 978307200, 'UNIXEPOCH')
- END AS 'zIntResou-Cloud Last Prefetch Date',
- zIntResou.ZCLOUDPREFETCHCOUNT AS 'zIntResou-Cloud Prefetch Count',
- DateTime(zIntResou.ZCLOUDLASTONDEMANDDOWNLOADDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou- Cloud-Last-OnDemand Download-Date',
- CASE zIntResou.ZUTICONFORMANCEHINT
- WHEN 0 THEN '0-NA-Doesnt_Conform-0'
- WHEN 1 THEN '1-UTTypeImage-1'
- WHEN 2 THEN '2-UTTypeProRawPhoto-2'
- WHEN 3 THEN '3-UTTypeMovie-3'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZUTICONFORMANCEHINT || ''
- END AS 'zIntResou-UniformTypeID_UTI_Conformance_Hint',
- CASE zIntResou.ZCOMPACTUTI
- WHEN 1 THEN '1-JPEG-THM-1'
- WHEN 3 THEN '3-HEIC-3'
- WHEN 6 THEN '6-PNG-6'
- WHEN 7 THEN '7-StillTesting'
- WHEN 9 THEN '9-DNG-9'
- WHEN 23 THEN '23-JPEG-HEIC-quicktime-mov-23'
- WHEN 24 THEN '24-MPEG4-24'
- WHEN 36 THEN '36-Wallpaper-36'
- WHEN 37 THEN '37-Adj-Mutation_Data-37'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZCOMPACTUTI || ''
- END AS 'zIntResou-Compact-UTI',
- zAsset.ZUNIFORMTYPEIDENTIFIER AS 'zAsset-Uniform Type ID',
- zAsset.ZORIGINALCOLORSPACE AS 'zAsset-Original Color Space',
- zCldMast.ZUNIFORMTYPEIDENTIFIER AS 'zCldMast-Uniform_Type_ID',
- CASE zCldMast.ZFULLSIZEJPEGSOURCE
- WHEN 0 THEN '0-CldMast-JPEG-Source-Video Still-Testing-0'
- WHEN 1 THEN '1-CldMast-JPEG-Source-Other- Still-Testing-1'
- ELSE 'Unknown-New-Value!: ' || zCldMast.ZFULLSIZEJPEGSOURCE || ''
- END AS 'zCldMast-Full Size JPEG Source',
- zAsset.ZHDRGAIN AS 'zAsset-HDR Gain',
- CASE zAsset.ZHDRTYPE
- WHEN 0 THEN '0-No-HDR-0'
- WHEN 3 THEN '3-HDR_Photo-3_RT'
- WHEN 4 THEN '4-Non-HDR_Version-4_RT'
- WHEN 5 THEN '5-HEVC_Movie-5'
- WHEN 6 THEN '6-Panorama-6_RT'
- WHEN 10 THEN '10-HDR-Gain-10'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZHDRTYPE || ''
- END AS 'zAsset-zHDR_Type',
- zExtAttr.ZCODEC AS 'zExtAttr-Codec',
- zIntResou.ZCODECFOURCHARCODENAME AS 'zIntResou-Codec Four Char Code Name',
- zCldMast.ZCODECNAME AS 'zCldMast-Codec Name',
- zCldMast.ZVIDEOFRAMERATE AS 'zCldMast-Video Frame Rate',
- zCldMast.ZPLACEHOLDERSTATE AS 'zCldMast-Placeholder State',
- CASE zAsset.ZDEPTHTYPE
- WHEN 0 THEN '0-Not_Portrait-0_RT'
- ELSE 'Portrait: ' || zAsset.ZDEPTHTYPE || ''
- END AS 'zAsset-Depth_Type',
- zAsset.ZAVALANCHEUUID AS 'zAsset-Avalanche UUID',
- CASE zAsset.ZAVALANCHEKIND
- WHEN 0 THEN '0-No_Avalanche iOS18_Still_Testing-0'
- WHEN 1 THEN '1-Is_Avalanche iOS18_Still_Testing-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEKIND || ''
- END AS 'zAsset-Avalanche_Kind-iOS18',
- CASE zAsset.ZAVALANCHEPICKTYPE
- WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT'
- WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT'
- WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT'
- WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT'
- WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT'
- WHEN 32 THEN '32-StillTesting-32_RT'
- WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEPICKTYPE || ''
- END AS 'zAsset-Avalanche_Pick_Type-BurstAsset',
- CASE zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE
- WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT'
- WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT'
- WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT'
- WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT'
- WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT'
- WHEN 32 THEN '32-StillTesting-32_RT'
- WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE || ''
- END AS 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset',
- CASE zAddAssetAttr.ZCLOUDRECOVERYSTATE
- WHEN 0 THEN '0-StillTesting'
- WHEN 1 THEN '1-StillTesting'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDRECOVERYSTATE || ''
- END AS 'zAddAssetAttr-Cloud Recovery State',
- zAddAssetAttr.ZCLOUDSTATERECOVERYATTEMPTSCOUNT AS 'zAddAssetAttr-Cloud State Recovery Attempts Count',
- zAsset.ZDEFERREDPROCESSINGNEEDED AS 'zAsset-Deferred Processing Needed',
- zAsset.ZVIDEODEFERREDPROCESSINGNEEDED AS 'zAsset-Video Deferred Processing Needed',
- zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier',
- zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options',
- CASE zAsset.ZADJUSTMENTSSTATE
- WHEN 0 THEN '0-No-Adjustments-0'
- WHEN 2 THEN '2-Yes-Adjustments iOS18_needs_update_Decoding-2'
- WHEN 3 THEN '3-Yes-Adjustments iOS18_needs_update_Decoding-3'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || ''
- END AS 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18',
- DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp',
- DateTime(zCompSyncAttr.ZCLOUDCOMPUTESTATELASTUPDATEDDATE + 978307200, 'UNIXEPOCH') AS 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18',
- zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID',
- zAddAssetAttr.ZMONTAGE AS 'zAddAssetAttr-Montage',
- CASE zCompSyncAttr.ZLOCALANALYSISMAJORVERSION
- WHEN 1 THEN '1-Is_Local_Analysis_Major_Version-1'
- ELSE 'Unknown-New-Value!: ' || zCompSyncAttr.ZLOCALANALYSISMAJORVERSION || ''
- END AS 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18',
- CASE zAsset.ZFAVORITE
- WHEN 0 THEN '0-Asset Not Favorite-0'
- WHEN 1 THEN '1-Asset Favorite-1'
- END AS 'zAsset-Favorite',
- CASE zAsset.ZHIDDEN
- WHEN 0 THEN '0-Asset Not Hidden-0'
- WHEN 1 THEN '1-Asset Hidden-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZHIDDEN || ''
- END AS 'zAsset-Hidden',
- CASE zAsset.ZTRASHEDSTATE
- WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0'
- WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || ''
- END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
- DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
- zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK',
- CASE zAsset.ZDELETEREASON
- WHEN 1 THEN '1-StillTesting Delete-Reason-1'
- WHEN 2 THEN '2-StillTesting Delete-Reason-2'
- WHEN 3 THEN '3-StillTesting Delete-Reason-3'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZDELETEREASON || ''
- END AS 'zAsset-Delete-Reason',
- CASE zIntResou.ZTRASHEDSTATE
- WHEN 0 THEN '0-zIntResou-Not In Trash-Recently Deleted-0'
- WHEN 1 THEN '1-zIntResou-In Trash-Recently Deleted-1'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZTRASHEDSTATE || ''
- END AS 'zIntResou-Trash State',
- DateTime(zIntResou.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou-Trashed Date',
- CASE zAsset.ZCLOUDDELETESTATE
- WHEN 0 THEN '0-Cloud Asset Not Deleted-0'
- WHEN 1 THEN '1-Cloud Asset Deleted-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDDELETESTATE || ''
- END AS 'zAsset-Cloud Delete State',
- CASE zIntResou.ZCLOUDDELETESTATE
- WHEN 0 THEN '0-Cloud IntResou Not Deleted-0'
- WHEN 1 THEN '1-Cloud IntResou Deleted-1'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDDELETESTATE || ''
- END AS 'zIntResou-Cloud Delete State',
- CASE zAddAssetAttr.ZPTPTRASHEDSTATE
- WHEN 0 THEN '0-PTP Not in Trash-0'
- WHEN 1 THEN '1-PTP In Trash-1'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZPTPTRASHEDSTATE || ''
- END AS 'zAddAssetAttr-PTP Trashed State',
- CASE zIntResou.ZPTPTRASHEDSTATE
- WHEN 0 THEN '0-PTP IntResou Not in Trash-0'
- WHEN 1 THEN '1-PTP IntResou In Trash-1'
- ELSE 'Unknown-New-Value!: ' || zIntResou.ZPTPTRASHEDSTATE || ''
- END AS 'zIntResou-PTP Trashed State',
- zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type',
- DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp',
- DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modification Date',
- zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count',
- zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count',
- zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count',
- zAddAssetAttr.ZPLAYCOUNT AS 'zAddAssetAttr- Play Count',
- zAddAssetAttr.ZPENDINGSHARECOUNT AS 'zAddAssetAttr- Pending Share Count',
- zAddAssetAttr.ZSHARECOUNT AS 'zAddAssetAttr- Share Count',
- CASE zAddAssetAttr.ZALLOWEDFORANALYSIS
- WHEN 0 THEN '0-Asset Not Allowed For Analysis-0'
- WHEN 1 THEN '1-Asset Allowed for Analysis-1'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZALLOWEDFORANALYSIS || ''
- END AS 'zAddAssetAttr-Allowed for Analysis',
- zAddAssetAttr.ZSCENEANALYSISVERSION AS 'zAddAssetAttr-Scene Analysis Version',
- CASE zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW
- WHEN 0 THEN '0-No-0'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW || ''
- END AS 'zAddAssetAttr-Scene Analysis is From Preview',
- DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp',
- CASE zAsset.ZDUPLICATEASSETVISIBILITYSTATE
- WHEN 0 THEN '0-No-Duplicates-0'
- WHEN 1 THEN '1-Has Duplicate-1'
- WHEN 2 THEN '2-Is a Duplicate-2'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZDUPLICATEASSETVISIBILITYSTATE || ''
- END AS 'zAsset-Duplication Asset Visibility State',
- CASE zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE
- WHEN 0 THEN '0-No Copy-0'
- WHEN 1 THEN '1-Has A Copy-1'
- WHEN 2 THEN '2-Has A Copy-2'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE || ''
- END AS 'zAddAssetAttr-Destination Asset Copy State',
- CASE zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE
- WHEN 0 THEN '0-Unknown-StillTesting-0'
- WHEN 1 THEN '1-Unknown-StillTesting-1'
- WHEN 2 THEN '2-Unknown-StillTesting-2'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE || ''
- END AS 'zAddAssetAttr-Duplicate Detector Perceptual Processing State',
- zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONSCOPEIDENTIFIER AS 'zAddAssetAttr-Source Asset for Duplication Scope ID',
- zCldMast.ZSOURCEMASTERFORDUPLICATIONSCOPEIDENTIFIER AS 'zCldMast-Source Master For Duplication Scope ID',
- zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONIDENTIFIER AS 'zAddAssetAttr-Source Asset For Duplication ID',
- zCldMast.ZSOURCEMASTERFORDUPLICATIONIDENTIFIER AS 'zCldMast-Source Master for Duplication ID',
- zAddAssetAttr.ZVARIATIONSUGGESTIONSTATES AS 'zAddAssetAttr-Variation Suggestions States',
- zAsset.ZHIGHFRAMERATESTATE AS 'zAsset-High Frame Rate State',
- zAsset.ZVIDEOKEYFRAMETIMESCALE AS 'zAsset-Video Key Frame Time Scale',
- zAsset.ZVIDEOKEYFRAMEVALUE AS 'zAsset-Video Key Frame Value',
- CASE zAsset.ZCURRENTSLEETCAST
- WHEN 0 THEN '0-ObsButUnkn iOS18_Still_Testing-0'
- WHEN 1 THEN '1-NotYetObs iOS18_Still_Testing-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZCURRENTSLEETCAST || ''
- END AS 'zAsset-Current_Sleet_Cast-iOS18',
- CASE zAddAssetAttr.ZSLEETISREVERSIBLE
- WHEN 0 THEN '0-Obs in iOS 18 still testing-0'
- WHEN 1 THEN '1-Obs in iOS 18 still testing-1'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSLEETISREVERSIBLE || ''
- END AS 'zAddAssetAttr.Sleet_Is_Reversible-iOS18',
- zExtAttr.ZSLEETRENDERINGVERSION AS 'zExtAttr-Sleet_Rendering_Version-iOS18',
- zExtAttr.ZSLEETINTENSITY AS 'zExtAttr-Sleet_Intensity-iOS18',
- zExtAttr.ZSLEETTONEBIAS AS 'zExtAttr-Sleet_Tone_Bias-iOS18',
- zExtAttr.ZSLEETCOLORBIAS AS 'zExtAttr-Sleet_Color_Bias-iOS18',
- CASE zExtAttr.ZSLEETCAST
- WHEN 0 THEN '0-ObsButUnkn iOS18_Still_Testing-0'
- ELSE 'Unknown-New-Value!: ' || zExtAttr.ZSLEETCAST || ''
- END AS 'zExtAttr-Sleet_Cast-iOS18',
- zExtAttr.ZISO AS 'zExtAttr-ISO',
- zExtAttr.ZMETERINGMODE AS 'zExtAttr-Metering Mode',
- zExtAttr.ZSAMPLERATE AS 'zExtAttr-Sample Rate',
- zExtAttr.ZTRACKFORMAT AS 'zExtAttr-Track Format',
- zExtAttr.ZWHITEBALANCE AS 'zExtAttr-White Balance',
- zExtAttr.ZAPERTURE AS 'zExtAttr-Aperture',
- zExtAttr.ZBITRATE AS 'zExtAttr-BitRate',
- zExtAttr.ZEXPOSUREBIAS AS 'zExtAttr-Exposure Bias',
- zExtAttr.ZFPS AS 'zExtAttr-Frames Per Second',
- zExtAttr.ZSHUTTERSPEED AS 'zExtAttr-Shutter Speed',
- zExtAttr.ZSLUSHSCENEBIAS AS 'zExtAttr-Slush Scene Bias',
- zExtAttr.ZSLUSHVERSION AS 'zExtAttr-Slush Version',
- zExtAttr.ZSLUSHPRESET AS 'zExtAttr-Slush Preset',
- zExtAttr.ZSLUSHWARMTHBIAS AS 'zExtAttr-Slush Warm Bias',
- zAsset.ZHEIGHT AS 'zAsset-Height',
- zAddAssetAttr.ZORIGINALHEIGHT AS 'zAddAssetAttr-Original Height',
- zIntResou.ZUNORIENTEDHEIGHT AS 'zIntResou-UnOriented Height',
- zAsset.ZWIDTH AS 'zAsset-Width',
- zAddAssetAttr.ZORIGINALWIDTH AS 'zAddAssetAttr-Original Width',
- zIntResou.ZUNORIENTEDWIDTH AS 'zIntResou-UnOriented Width',
- zAsset.ZTHUMBNAILINDEX AS 'zAsset-Thumbnail Index',
- zAddAssetAttr.ZEMBEDDEDTHUMBNAILHEIGHT AS 'zAddAssetAttr-Embedded Thumbnail Height',
- zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length',
- zAddAssetAttr.ZEMBEDDEDTHUMBNAILOFFSET AS 'zAddAssetAttr-Embedded Thumbnail Offset',
- zAddAssetAttr.ZEMBEDDEDTHUMBNAILWIDTH AS 'zAddAssetAttr-Embedded Thumbnail Width',
- CASE zAddAssetAttr.ZIMAGEEMBEDDINGVERSION
- WHEN 0 THEN '0-Obs_in_iOS18 still_testing-0'
- WHEN 1 THEN '1-Obs_in_iOS18 still_testing-1'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMAGEEMBEDDINGVERSION || ''
- END AS 'zAddAssetAttr-Image Embedding Version-iOS18',
- zAsset.ZPACKEDACCEPTABLECROPRECT AS 'zAsset-Packed Acceptable Crop Rect',
- zAsset.ZPACKEDBADGEATTRIBUTES AS 'zAsset-Packed Badge Attributes',
- zAsset.ZPACKEDPREFERREDCROPRECT AS 'zAsset-Packed Preferred Crop Rect',
- zAsset.ZCURATIONSCORE AS 'zAsset-Curation Score',
- zAsset.ZCAMERAPROCESSINGADJUSTMENTSTATE AS 'zAsset-Camera Processing Adjustment State',
- zAsset.ZDEPTHTYPE AS 'zAsset-Depth Type',
- zAsset.ZISMAGICCARPET AS 'zAsset-Is Magic Carpet-Quicktime_MOV-file',
- CASE zAddAssetAttr.ZORIGINALRESOURCECHOICE
- WHEN 0 THEN '0-JPEG Original Resource-0'
- WHEN 1 THEN '1-RAW Original Resource-1'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZORIGINALRESOURCECHOICE || ''
- END AS 'zAddAssetAttr-Orig Resource Choice',
- CASE zAsset.ZSPATIALTYPE
- WHEN 0 THEN '0-UnknownTesting-0'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZSPATIALTYPE || ''
- END AS 'zAsset-Spatial Type',
- zAddAssetAttr.ZSPATIALOVERCAPTUREGROUPIDENTIFIER AS 'zAddAssetAttr-Spatial Over Capture Group ID',
- zAddAssetAttr.ZPLACEANNOTATIONDATA AS 'zAddAssetAttr-Place Annotation Data',
- zAddAssetAttr.ZDISTANCEIDENTITY AS 'zAddAssetAttr-Distance Identity-HEX',
- zAddAssetAttr.ZEDITEDIPTCATTRIBUTES AS 'zAddAssetAttr-Edited IPTC Attributes',
- zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website',
- zAddAssetAttr.ZACCESSIBILITYDESCRIPTION AS 'zAddAssetAttr-Accessibility Description',
- zAddAssetAttr.ZPHOTOSTREAMTAGID AS 'zAddAssetAttr-Photo Stream Tag ID',
- CASE zAddAssetAttr.ZSHARETYPE
- WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0'
- WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || ''
- END AS 'zAddAssetAttr-Share Type',
- zAddAssetAttr.ZLIBRARYSCOPEASSETCONTRIBUTORSTOUPDATE AS 'zAddAssetAttr-Library Scope Asset Contributors To Update',
- zAsset.ZOVERALLAESTHETICSCORE AS 'zAsset-Overall Aesthetic Score',
- zMedAnlyAstAttr.ZMEDIAANALYSISIMAGEVERSION AS 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18',
- zMedAnlyAstAttr.ZIMAGECAPTIONVERSION AS 'zMedAnlyAstAttr-Image_Caption_Version-iOS18',
- zMedAnlyAstAttr.ZVIDEOCAPTIONVERSION AS 'zMedAnlyAstAttr-Video_Caption_Version-iOS18',
- zMedAnlyAstAttr.ZVALOCATIONANALYSISVERSION AS 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18',
- zGenAsstDesc.ZASSET AS 'zGenAsstDesc-zAsset= zAsset-zPK-iOS18',
- zAsset.ZGENERATEDASSETDESCRIPTION AS 'zAsset-Generated_Asset_Description= zGenAsstDesc-zPK-iOS18',
- zGenAsstDesc.Z_PK AS 'zGenAsstDesc-zPK= zAsset-GenAsstDesc-iOS18',
- zGenAsstDesc.Z_ENT AS 'zGenAsstDesc-zENT-iOS18',
- zGenAsstDesc.Z_OPT AS 'zGenAsstDesc-zOPT-iOS18',
- DateTime(zGenAsstDesc.ZANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zGenAsstDesc-Analysis_Timestamp-iOS18',
- CASE zGenAsstDesc.ZANALYSISSOURCETYPE
- WHEN 0 THEN '0-NotYetObs iOS18_Still_Testing-0'
- ELSE 'Unknown-New-Value!: ' || zGenAsstDesc.ZANALYSISSOURCETYPE || ''
- END AS 'zGenAsstDesc-Analysis_Source_Type-iOS18',
- zGenAsstDesc.ZANALYSISVERSION AS 'zGenAsstDesc-Analysis Version-iOS18',
- zGenAsstDesc.ZDESCRIPTIONTEXT AS 'zGenAsstDesc-Description_Text-iOS18',
- zAsset.Z_ENT AS 'zAsset-zENT',
- zAsset.Z_OPT AS 'zAsset-zOPT',
- zAsset.ZMASTER AS 'zAsset-Master= zCldMast-zPK',
- zAsset.ZEXTENDEDATTRIBUTES AS 'zAsset-Extended Attributes= zExtAttr-zPK',
- zAsset.ZIMPORTSESSION AS 'zAsset-Import Session Key',
- zAsset.ZPHOTOANALYSISATTRIBUTES AS 'zAsset-Photo Analysis Attributes Key',
- zAsset.Z_FOK_CLOUDFEEDASSETSENTRY AS 'zAsset-FOK-Cloud Feed Asset Entry Key',
- zAsset.ZCOMPUTEDATTRIBUTES AS 'zAsset-Computed Attributes Asset Key',
- zAsset.ZPROMOTIONSCORE AS 'zAsset-Promotion Score',
- zAsset.ZICONICSCORE AS 'zAsset-Iconic Score',
- zAsset.ZMEDIAANALYSISATTRIBUTES AS 'zAsset-Media Analysis Attributes Key',
- zAsset.ZMEDIAGROUPUUID AS 'zAsset-Media Group UUID',
- zAsset.ZCLOUDASSETGUID AS 'zAsset-Cloud_Asset_GUID = store.cloudphotodb',
- zAsset.ZCLOUDCOLLECTIONGUID AS 'zAsset.Cloud Collection GUID',
- zAddAssetAttr.Z_ENT AS 'zAddAssetAttr-zENT',
- zAddAssetAttr.Z_OPT AS 'ZAddAssetAttr-zOPT',
- zAddAssetAttr.ZASSET AS 'zAddAssetAttr-zAsset= zAsset_zPK',
- zAddAssetAttr.ZUNMANAGEDADJUSTMENT AS 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK',
- zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK',
- zAddAssetAttr.ZPUBLICGLOBALUUID AS 'zAddAssetAttr-Public Global UUID',
- zAddAssetAttr.ZORIGINALASSETSUUID AS 'zAddAssetAttr-Original Assets UUID',
- zAddAssetAttr.ZORIGINATINGASSETIDENTIFIER AS 'zAddAssetAttr-Originating Asset Identifier',
- zCldMast.Z_PK AS 'zCldMast-zPK= zAsset-Master',
- zCldMast.Z_ENT AS 'zCldMast-zENT',
- zCldMast.Z_OPT AS 'zCldMast-zOPT',
- zCldMast.ZMOMENTSHARE AS 'zCldMast-Moment Share Key= zShare-zPK',
- zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK',
- zCldMast.ZCLOUDMASTERGUID AS 'zCldMast-Cloud_Master_GUID = store.cloudphotodb',
- zCldMast.ZORIGINATINGASSETIDENTIFIER AS 'zCldMast-Originating Asset ID',
- CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key',
- CMzCldMastMedData.Z_ENT AS 'CMzCldMastMedData-zENT',
- CMzCldMastMedData.ZCLOUDMASTER AS 'CMzCldMastMedData-CldMast= zCldMast-zPK',
- AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData',
- AAAzCldMastMedData.Z_ENT AS 'AAAzCldMastMedData-zENT',
- AAAzCldMastMedData.ZCLOUDMASTER AS 'AAAzCldMastMedData-CldMast key',
- AAAzCldMastMedData.ZADDITIONALASSETATTRIBUTES AS 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK',
- zAsset.ZCOMPUTESYNCATTRIBUTES AS 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-iOS18',
- zCompSyncAttr.Z_PK AS 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18',
- zCompSyncAttr.ZASSET AS 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18',
- zCompSyncAttr.Z_ENT AS 'zCompSyncAttr-zENT-iOS18',
- zCompSyncAttr.Z_OPT AS 'zCompSyncAttr-zOPT-iOS18',
- zCompSyncAttr.ZLOCALANALYSISSTAGE AS 'zCompSyncAttr-Local_Analysis_Stage-iOS18',
- zCompSyncAttr.ZCLOUDCOMPUTESTATEVERSION AS 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18',
- zExtAttr.Z_PK AS 'zExtAttr-zPK= zAsset-zExtendedAttributes',
- zExtAttr.Z_ENT AS 'zExtAttr-zENT',
- zExtAttr.Z_OPT AS 'zExtAttr-zOPT',
- zExtAttr.ZASSET AS 'zExtAttr-Asset Key',
- zIntResou.Z_PK AS 'zIntResou-zPK',
- zIntResou.Z_ENT AS 'zIntResou-zENT',
- zIntResou.Z_OPT AS 'zIntResou-zOPT',
- zIntResou.ZASSET AS 'zIntResou-Asset= zAsset_zPK',
- zMedAnlyAstAttr.Z_PK AS 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata',
- zMedAnlyAstAttr.Z_ENT AS 'zMedAnlyAstAttr-zEnt',
- zMedAnlyAstAttr.Z_OPT AS 'zMedAnlyAstAttr-zOpt',
- zMedAnlyAstAttr.ZASSET AS 'zMedAnlyAstAttr-Asset= zAsset-zPK'
- FROM ZASSET zAsset
- LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
- LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES
- LEFT JOIN ZINTERNALRESOURCE zIntResou ON zIntResou.ZASSET = zAsset.Z_PK
- LEFT JOIN ZSCENEPRINT zSceneP ON zSceneP.Z_PK = zAddAssetAttr.ZSCENEPRINT
- LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
- LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA
- LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
- LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK
- LEFT JOIN ZCOMPUTESYNCATTRIBUTES zCompSyncAttr ON zCompSyncAttr.Z_PK = zAsset.ZCOMPUTESYNCATTRIBUTES
- LEFT JOIN ZGENERATEDASSETDESCRIPTION zGenAsstDesc ON zGenAsstDesc.Z_PK = zAsset.ZGENERATEDASSETDESCRIPTION
- WHERE (zIntResou.ZDATASTORESUBTYPE = 1) & (zIntResou.ZLOCALAVAILABILITY = -1) & (zIntResou.ZFINGERPRINT IS NOT NULL)
- ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
+ source_path = get_file_path(files_found, "Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
- row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
- row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
- row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
- row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
- row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
- row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
- row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
- row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
- row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
- row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
- row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
- row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
- row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
- row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
- row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
- row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
- row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
- row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
- row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
- row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307],
- row[308], row[309], row[310], row[311], row[312]))
-
- counter += 1
-
- description = 'Parses iOS 18 possible optimized asset records from PhotoData-Photos.sqlite' \
- ' ZINTERNALRESOURCE and other tables. This and other related parsers should provide data' \
- ' for investigative analysis of assets being stored locally on the device verses' \
- ' assets being stored in iCloud Photos as the result of optimization.' \
- ' This is very large query and script, I recommend opening the TSV generated report' \
- ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer' \
- ' to view, search, and filter the results.'
- report = ArtifactHtmlReport('Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-4QueryStart-0',
- 'zAsset-zPK-1',
- 'zAddAssetAttr-zPK-2',
- 'zAsset-UUID = store.cloudphotodb-3',
- 'zAddAssetAttr-Original Stable Hash-iOS18-4',
- 'zIntResou-Fingerprint-5',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-6',
- 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18-7',
- 'zIntResou-Stable Hash-iOS18-8',
- 'zIntResou-Local Availability-4QueryStart-9',
- 'zIntResou-Remote Availability-4QueryStart-10',
- 'zIntResou-Resource Type-4QueryStart-11',
- 'zIntResou-Datastore Sub-Type-4QueryStart-12',
- 'zIntResou-Recipe ID-4QueryStart-13',
- 'zAsset Complete-14',
- 'zAsset-Bundle Scope-15',
- 'zAsset-Syndication State-16',
- 'zAsset-Cloud is My Asset-17',
- 'zAsset-Cloud is deletable-Asset-18',
- 'zAsset-Cloud_Local_State-19',
- 'zAsset-Visibility State-20',
- 'zExtAttr-Camera Make-21',
- 'zExtAttr-Camera Model-22',
- 'zExtAttr-Lens Model-23',
- 'zExtAttr-Flash Fired-24',
- 'zExtAttr-Focal Length-25',
- 'zExtAttr-Focal Length in 35MM-26',
- 'zExtAttr-Digital Zoom Ratio-27',
- 'zExtAttr-Generative_AI_Type-iOS18-28',
- 'zExtAttr-Credit-iOS18-29',
- 'zAsset-Derived Camera Capture Device-30',
- 'zAddAssetAttr-Camera Captured Device-31',
- 'zAsset-Capture_Session_Identifier-iOS18-32',
- 'zAddAssetAttr-Imported by-33',
- 'zCldMast-Imported By-34',
- 'zAddAssetAttr.Imported by Bundle Identifier-35',
- 'zAddAssetAttr-Imported By Display Name-36',
- 'zCldMast-Imported by Bundle ID-37',
- 'zCldMast-Imported by Display Name-38',
- 'zAsset-Is_Recently_Saved-iOS18-39',
- 'zAsset-Saved Asset Type-40',
- 'zAsset-Directory-Path-41',
- 'zAsset-Filename-42',
- 'zAddAssetAttr- Original Filename-43',
- 'zCldMast- Original Filename-44',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-45',
- 'zAsset-Active Library Scope Participation State-46',
- 'zAsset-Library Scope Share State- StillTesting-47',
- 'zAsset-Added Date-48',
- 'zAsset- SortToken -CameraRoll-49',
- 'zAddAssetAttr-Date Created Source-50',
- 'zAsset-Date Created-51',
- 'zCldMast-Creation Date-52',
- 'zIntResou-CldMst Date Created-53',
- 'zAddAssetAttr-Time Zone Name-54',
- 'zAddAssetAttr-Time Zone Offset-55',
- 'zAddAssetAttr-Inferred Time Zone Offset-56',
- 'zAddAssetAttr-EXIF-String-57',
- 'zAsset-Modification Date-58',
- 'zAsset-Last Shared Date-59',
- 'zCldMast-Cloud Local State-60',
- 'zCldMast-Import Date-61',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-62',
- 'zAddAssetAttr-Import Session ID-63',
- 'zAddAssetAttr-Alt Import Image Date-64',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-65',
- 'zAsset-Cloud Batch Publish Date-66',
- 'zAsset-Cloud Server Publish Date-67',
- 'zAsset-Cloud Download Requests-68',
- 'zAsset-Cloud Batch ID-69',
- 'zAddAssetAttr-Upload Attempts-70',
- 'zAsset-Latitude-71',
- 'zExtAttr-Latitude-72',
- 'zAsset-Longitude-73',
- 'zExtAttr-Longitude-74',
- 'zAddAssetAttr-GPS Horizontal Accuracy-75',
- 'zAddAssetAttr-Location Hash-76',
- 'zAddAssetAttr-Shifted Location Valid-77',
- 'zAddAssetAttr-Shifted Location Data-78',
- 'zAddAssetAttr-Reverse Location Is Valid-79',
- 'zAddAssetAttr-Reverse Location Data-80',
- 'AAAzCldMastMedData-zOPT-81',
- 'zAddAssetAttr-Media Metadata Type-82',
- 'AAAzCldMastMedData-Data-83',
- 'CldMasterzCldMastMedData-zOPT-84',
- 'zCldMast-Media Metadata Type-85',
- 'CMzCldMastMedData-Data-86',
- 'zAsset-Search Index Rebuild State-87',
- 'zAddAssetAttr-Syndication History-88',
- 'zMedAnlyAstAttr-Syndication Processing Version-89',
- 'zMedAnlyAstAttr-Syndication Processing Value-90',
- 'zAsset-Orientation-91',
- 'zAddAssetAttr-Original Orientation-92',
- 'zAsset-Kind-93',
- 'zAsset-Is_Detected_Screenshot-iOS18-94',
- 'zAsset-Kind-Sub-Type-95',
- 'zAddAssetAttr-Cloud Kind Sub Type-96',
- 'zAsset-Playback Style-97',
- 'zAsset-Playback Variation-98',
- 'zAddAssetAttr-View_Presentation-iOS18-99',
- 'zAsset-Video Duration-100',
- 'zExtAttr-Duration-101',
- 'zAsset-Video CP Duration-102',
- 'zAddAssetAttr-Video CP Duration Time Scale-103',
- 'zAsset-Video CP Visibility State-104',
- 'zAddAssetAttr-Video CP Display Value-105',
- 'zAddAssetAttr-Video CP Display Time Scale-106',
- 'zIntResou-Datastore Class ID-107',
- 'zAsset-Cloud Placeholder Kind-108',
- 'zIntResou-Local Availability-109',
- 'zIntResou-Local Availability Target-110',
- 'zIntResou-Cloud Local State-111',
- 'zIntResou-Remote Availability-112',
- 'zIntResou-Remote Availability Target-113',
- 'zIntResou-Transient Cloud Master-114',
- 'zIntResou-Side Car Index-115',
- 'zIntResou- File ID-116',
- 'zIntResou-Version-117',
- 'zAddAssetAttr- Original-File-Size-118',
- 'zIntResou-Resource Type-119',
- 'zIntResou-Datastore Sub-Type-120',
- 'zIntResou-Cloud Source Type-121',
- 'zIntResou-Data Length-122',
- 'zIntResou-Recipe ID-123',
- 'zIntResou-Cloud Last Prefetch Date-124',
- 'zIntResou-Cloud Prefetch Count-125',
- 'zIntResou- Cloud-Last-OnDemand Download-Date-126',
- 'zIntResou-UniformTypeID_UTI_Conformance_Hint-127',
- 'zIntResou-Compact-UTI-128',
- 'zAsset-Uniform Type ID-129',
- 'zAsset-Original Color Space-130',
- 'zCldMast-Uniform_Type_ID-131',
- 'zCldMast-Full Size JPEG Source-132',
- 'zAsset-HDR Gain-133',
- 'zAsset-zHDR_Type-134',
- 'zExtAttr-Codec-135',
- 'zIntResou-Codec Four Char Code Name-136',
- 'zCldMast-Codec Name-137',
- 'zCldMast-Video Frame Rate-138',
- 'zCldMast-Placeholder State-139',
- 'zAsset-Depth_Type-140',
- 'zAsset-Avalanche UUID-141',
- 'zAsset-Avalanche_Kind-iOS18-142',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-143',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-144',
- 'zAddAssetAttr-Cloud Recovery State-145',
- 'zAddAssetAttr-Cloud State Recovery Attempts Count-146',
- 'zAsset-Deferred Processing Needed-147',
- 'zAsset-Video Deferred Processing Needed-148',
- 'zAddAssetAttr-Deferred Photo Identifier-149',
- 'zAddAssetAttr-Deferred Processing Candidate Options-150',
- 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18-151',
- 'zAsset-Adjustment Timestamp-152',
- 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18-153',
- 'zAddAssetAttr-Editor Bundle ID-154',
- 'zAddAssetAttr-Montage-155',
- 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18-156',
- 'zAsset-Favorite-157',
- 'zAsset-Hidden-158',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-159',
- 'zAsset-Trashed Date-160',
- 'zAsset-Trashed by Participant= zSharePartic_zPK-161',
- 'zAsset-Delete-Reason-162',
- 'zIntResou-Trash State-163',
- 'zIntResou-Trashed Date-164',
- 'zAsset-Cloud Delete State-165',
- 'zIntResou-Cloud Delete State-166',
- 'zAddAssetAttr-PTP Trashed State-167',
- 'zIntResou-PTP Trashed State-168',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-169',
- 'zMedAnlyAstAttr-Media Analysis Timestamp-170',
- 'zAsset-Analysis State Modification Date-171',
- 'zAddAssetAttr- Pending View Count-172',
- 'zAddAssetAttr- View Count-173',
- 'zAddAssetAttr- Pending Play Count-174',
- 'zAddAssetAttr- Play Count-175',
- 'zAddAssetAttr- Pending Share Count-176',
- 'zAddAssetAttr- Share Count-177',
- 'zAddAssetAttr-Allowed for Analysis-178',
- 'zAddAssetAttr-Scene Analysis Version-179',
- 'zAddAssetAttr-Scene Analysis is From Preview-180',
- 'zAddAssetAttr-Scene Analysis Timestamp-181',
- 'zAsset-Duplication Asset Visibility State-182',
- 'zAddAssetAttr-Destination Asset Copy State-183',
- 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-184',
- 'zAddAssetAttr-Source Asset for Duplication Scope ID-185',
- 'zCldMast-Source Master For Duplication Scope ID-186',
- 'zAddAssetAttr-Source Asset For Duplication ID-187',
- 'zCldMast-Source Master for Duplication ID-188',
- 'zAddAssetAttr-Variation Suggestions States-189',
- 'zAsset-High Frame Rate State-190',
- 'zAsset-Video Key Frame Time Scale-191',
- 'zAsset-Video Key Frame Value-192',
- 'zAsset-Current_Sleet_Cast-iOS18-193',
- 'zAddAssetAttr.Sleet_Is_Reversible-iOS18-194',
- 'zExtAttr-Sleet_Rendering_Version-iOS18-195',
- 'zExtAttr-Sleet_Intensity-iOS18-196',
- 'zExtAttr-Sleet_Tone_Bias-iOS18-197',
- 'zExtAttr-Sleet_Color_Bias-iOS18-198',
- 'zExtAttr-Sleet_Cast-iOS18-199',
- 'zExtAttr-ISO-200',
- 'zExtAttr-Metering Mode-201',
- 'zExtAttr-Sample Rate-202',
- 'zExtAttr-Track Format-203',
- 'zExtAttr-White Balance-204',
- 'zExtAttr-Aperture-205',
- 'zExtAttr-BitRate-206',
- 'zExtAttr-Exposure Bias-207',
- 'zExtAttr-Frames Per Second-208',
- 'zExtAttr-Shutter Speed-209',
- 'zExtAttr-Slush Scene Bias-210',
- 'zExtAttr-Slush Version-211',
- 'zExtAttr-Slush Preset-212',
- 'zExtAttr-Slush Warm Bias-213',
- 'zAsset-Height-214',
- 'zAddAssetAttr-Original Height-215',
- 'zIntResou-UnOriented Height-216',
- 'zAsset-Width-217',
- 'zAddAssetAttr-Original Width-218',
- 'zIntResou-UnOriented Width-219',
- 'zAsset-Thumbnail Index-220',
- 'zAddAssetAttr-Embedded Thumbnail Height-221',
- 'zAddAssetAttr-Embedded Thumbnail Length-222',
- 'zAddAssetAttr-Embedded Thumbnail Offset-223',
- 'zAddAssetAttr-Embedded Thumbnail Width-224',
- 'zAddAssetAttr-Image Embedding Version-iOS18-225',
- 'zAsset-Packed Acceptable Crop Rect-226',
- 'zAsset-Packed Badge Attributes-227',
- 'zAsset-Packed Preferred Crop Rect-228',
- 'zAsset-Curation Score-229',
- 'zAsset-Camera Processing Adjustment State-230',
- 'zAsset-Depth Type-231',
- 'zAsset-Is Magic Carpet-Quicktime_MOV-file-232',
- 'zAddAssetAttr-Orig Resource Choice-233',
- 'zAsset-Spatial Type-234',
- 'zAddAssetAttr-Spatial Over Capture Group ID-235',
- 'zAddAssetAttr-Place Annotation Data-236',
- 'zAddAssetAttr-Distance Identity-HEX-237',
- 'zAddAssetAttr-Edited IPTC Attributes-238',
- 'zAddAssetAttr-Title-Comments via Cloud Website-239',
- 'zAddAssetAttr-Accessibility Description-240',
- 'zAddAssetAttr-Photo Stream Tag ID-241',
- 'zAddAssetAttr-Share Type-242',
- 'zAddAssetAttr-Library Scope Asset Contributors To Update-243',
- 'zAsset-Overall Aesthetic Score-244',
- 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18-245',
- 'zMedAnlyAstAttr-Image_Caption_Version-iOS18-246',
- 'zMedAnlyAstAttr-Video_Caption_Version-iOS18-247',
- 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18-248',
- 'zGenAsstDesc-zAsset= zAsset-zPK-iOS18-249',
- 'zAsset-Generated_Asset_Description= zGenAsstDesc-zPK-iOS18-250',
- 'zGenAsstDesc-zPK= zAsset-GenAsstDesc-iOS18-251',
- 'zGenAsstDesc-zENT-iOS18-252',
- 'zGenAsstDesc-zOPT-iOS18-253',
- 'zGenAsstDesc-Analysis_Timestamp-iOS18-254',
- 'zGenAsstDesc-Analysis_Source_Type-iOS18-255',
- 'zGenAsstDesc-Analysis Version-iOS18-256',
- 'zGenAsstDesc-Description_Text-iOS18-257',
- 'zAsset-zENT-258',
- 'zAsset-zOPT-259',
- 'zAsset-Master= zCldMast-zPK-260',
- 'zAsset-Extended Attributes= zExtAttr-zPK-261',
- 'zAsset-Import Session Key-262',
- 'zAsset-Photo Analysis Attributes Key-263',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-264',
- 'zAsset-Computed Attributes Asset Key-265',
- 'zAsset-Promotion Score-266',
- 'zAsset-Iconic Score-267',
- 'zAsset-Media Analysis Attributes Key-268',
- 'zAsset-Media Group UUID-269',
- 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-270',
- 'zAsset.Cloud Collection GUID-271',
- 'zAddAssetAttr-zENT-272',
- 'ZAddAssetAttr-zOPT-273',
- 'zAddAssetAttr-zAsset= zAsset_zPK-274',
- 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-275',
- 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-276',
- 'zAddAssetAttr-Public Global UUID-277',
- 'zAddAssetAttr-Original Assets UUID-278',
- 'zAddAssetAttr-Originating Asset Identifier-279',
- 'zCldMast-zPK= zAsset-Master-280',
- 'zCldMast-zENT-281',
- 'zCldMast-zOPT-282',
- 'zCldMast-Moment Share Key= zShare-zPK-283',
- 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-284',
- 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-285',
- 'zCldMast-Originating Asset ID-286',
- 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-287',
- 'CMzCldMastMedData-zENT-288',
- 'CMzCldMastMedData-CldMast= zCldMast-zPK-289',
- 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-290',
- 'AAAzCldMastMedData-zENT-291',
- 'AAAzCldMastMedData-CldMast key-292',
- 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-293',
- 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-iOS18-294',
- 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18-295',
- 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18-296',
- 'zCompSyncAttr-zENT-iOS18-297',
- 'zCompSyncAttr-zOPT-iOS18-298',
- 'zCompSyncAttr-Local_Analysis_Stage-iOS18-299',
- 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18-300',
- 'zExtAttr-zPK= zAsset-zExtendedAttributes-301',
- 'zExtAttr-zENT-302',
- 'zExtAttr-zOPT-303',
- 'zExtAttr-Asset Key-304',
- 'zIntResou-zPK-305',
- 'zIntResou-zENT-306',
- 'zIntResou-zOPT-307',
- 'zIntResou-Asset= zAsset_zPK-308',
- 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-309',
- 'zMedAnlyAstAttr-zEnt-310',
- 'zMedAnlyAstAttr-zOpt-311',
- 'zMedAnlyAstAttr-Asset= zAsset-zPK-312')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No Internal Resource data available for iOS 18 PhotoData-Photos.sqlite')
-
- db.close()
- return
-
-__artifacts_v2__ = {
- 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql': {
- 'name': 'SyndPL Photos.sqlite Ph51 Possible Optimized Assets IntResource',
- 'description': 'Parses iOS 14-18 asset records from PhotoData-Photos.sqlite ZINTERNALRESOURCE'
- ' and other tables. This and other related parsers should provide data for investigative'
- ' analysis of assets being stored locally on the device verses assets being stored in'
- ' iCloud Photos as the result of optimization. This is very large query and script,'
- ' I recommend opening the TSV generated report with Zimmermans Tools'
- ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,'
- ' and filter the results.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-14',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-I-Asset_IntResou-Optimization',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph51possibleoptimizedassetsphdapsql'
- }
-}
+ query = '''
+ SELECT
+ DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart',
+ zAsset.Z_PK AS 'zAsset-zPK',
+ zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
+ zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
+ zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint',
+ zAddAssetAttr.ZADJUSTEDFINGERPRINT AS 'zAddAssetAttr.Adjusted Fingerprint',
+ zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint',
+ CASE zIntResou.ZLOCALAVAILABILITY
+ WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)'
+ WHEN 1 THEN '1-IR_Asset_Avail_Locally-1'
+ WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || ''
+ END AS 'zIntResou-Local Availability-4QueryStart',
+ CASE zIntResou.ZREMOTEAVAILABILITY
+ WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0'
+ WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || ''
+ END AS 'zIntResou-Remote Availability-4QueryStart',
+ CASE zIntResou.ZRESOURCETYPE
+ WHEN 0 THEN '0-Photo-0'
+ WHEN 1 THEN '1-Video-1'
+ WHEN 3 THEN '3-Live-Photo-3'
+ WHEN 5 THEN '5-Adjustment-Data-5'
+ WHEN 6 THEN '6-Screenshot-6'
+ WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9'
+ WHEN 13 THEN '13-Movie-13'
+ WHEN 14 THEN '14-Wallpaper-14'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || ''
+ END AS 'zIntResou-Resource Type-4QueryStart',
+ CASE zIntResou.ZDATASTORESUBTYPE
+ WHEN 0 THEN '0-No Cloud Inter Resource-0'
+ WHEN 1 THEN '1-Main-Asset-Orig-Size-1'
+ WHEN 2 THEN '2-Photo-with-Adjustments-2'
+ WHEN 3 THEN '3-JPG-Large-Thumb-3'
+ WHEN 4 THEN '4-JPG-Med-Thumb-4'
+ WHEN 5 THEN '5-JPG-Small-Thumb-5'
+ WHEN 6 THEN '6-Video-Med-Data-6'
+ WHEN 7 THEN '7-Video-Small-Data-7'
+ WHEN 8 THEN '8-MP4-Cloud-Share-8'
+ WHEN 9 THEN '9-StillTesting'
+ WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10'
+ WHEN 11 THEN '11-StillTesting'
+ WHEN 12 THEN '12-StillTesting'
+ WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13'
+ WHEN 14 THEN '14-Wallpaper-14'
+ WHEN 15 THEN '15-Has-Markup-and-Adjustments-15'
+ WHEN 16 THEN '16-Video-with-Adjustments-16'
+ WHEN 17 THEN '17-RAW_Photo-17_RT'
+ WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18'
+ WHEN 19 THEN '19-Live-Photo-with-Adjustments-19'
+ WHEN 20 THEN '20-StillTesting'
+ WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21'
+ WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22'
+ WHEN 23 THEN '23-StillTesting'
+ WHEN 24 THEN '24-StillTesting'
+ WHEN 25 THEN '25-StillTesting'
+ WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26'
+ WHEN 27 THEN '27-StillTesting'
+ WHEN 28 THEN '28-MOV-Med-hdr-Data-28'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || ''
+ END AS 'zIntResou-Datastore Sub-Type-4QueryStart',
+ CASE zIntResou.ZRECIPEID
+ WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0'
+ WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737'
+ WHEN 65739 THEN '65739-JPG_Large_Thumb-65739'
+ WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741'
+ WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743'
+ WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749'
+ WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938'
+ WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072'
+ WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077'
+ WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079'
+ WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081'
+ WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272'
+ WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275'
+ WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277'
+ WHEN 131475 THEN '131475-medium-hdr-MOV-131475'
+ WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683'
+ WHEN 327687 THEN '627687-WallpaperComputeResource-627687'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || ''
+ END AS 'zIntResou-Recipe ID-4QueryStart',
+ CASE zAsset.ZCOMPLETE
+ WHEN 1 THEN '1-Yes-1'
+ END AS 'zAsset Complete',
+ CASE zAsset.ZBUNDLESCOPE
+ WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0'
+ WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1'
+ WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2'
+ WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || ''
+ END AS 'zAsset-Bundle Scope',
+ CASE zAsset.ZSYNDICATIONSTATE
+ WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0'
+ WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1'
+ WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2'
+ WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3'
+ WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8'
+ WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9'
+ WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || ''
+ END AS 'zAsset-Syndication State',
+ CASE zAsset.ZCLOUDISMYASSET
+ WHEN 0 THEN '0-Not_My_Asset_in_Shared_Album-0'
+ WHEN 1 THEN '1-My_Asset_in_Shared_Album-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISMYASSET || ''
+ END AS 'zAsset-Cloud is My Asset',
+ CASE zAsset.ZCLOUDISDELETABLE
+ WHEN 0 THEN '0-No-0'
+ WHEN 1 THEN '1-Yes-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISDELETABLE || ''
+ END AS 'zAsset-Cloud is deletable-Asset',
+ CASE zAsset.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Album-Conv_or_iCldPhotos_OFF=Asset_Not_Synced-0'
+ WHEN 1 THEN 'iCldPhotos ON=Asset_Can-Be-or-Has-Been_Synced_with_iCloud-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDLOCALSTATE || ''
+ END AS 'zAsset-Cloud_Local_State',
+ CASE zAsset.ZVISIBILITYSTATE
+ WHEN 0 THEN '0-Visible-PL-CameraRoll-0'
+ WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || ''
+ END AS 'zAsset-Visibility State',
+ zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make',
+ zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model',
+ zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model',
+ CASE zExtAttr.ZFLASHFIRED
+ WHEN 0 THEN '0-No Flash-0'
+ WHEN 1 THEN '1-Flash Fired-1'
+ ELSE 'Unknown-New-Value!: ' || zExtAttr.ZFLASHFIRED || ''
+ END AS 'zExtAttr-Flash Fired',
+ zExtAttr.ZFOCALLENGTH AS 'zExtAttr-Focal Length',
+ zExtAttr.ZFOCALLENGTHIN35MM AS 'zExtAttr-Focal Length in 35MM',
+ zExtAttr.ZDIGITALZOOMRATIO AS 'zExtAttr-Digital Zoom Ratio',
+ CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE
+ WHEN 0 THEN '0-Back-Camera-Other-0'
+ WHEN 1 THEN '1-Front-Camera-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZDERIVEDCAMERACAPTUREDEVICE || ''
+ END AS 'zAsset-Derived Camera Capture Device',
+ CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE
+ WHEN 0 THEN '0-Back-Camera-Other-0'
+ WHEN 1 THEN '1-Front-Camera-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || ''
+ END AS 'zAddAssetAttr-Camera Captured Device',
+ CASE zAddAssetAttr.ZIMPORTEDBY
+ WHEN 0 THEN '0-Cloud-Other-0'
+ WHEN 1 THEN '1-Native-Back-Camera-1'
+ WHEN 2 THEN '2-Native-Front-Camera-2'
+ WHEN 3 THEN '3-Third-Party-App-3'
+ WHEN 4 THEN '4-StillTesting-4'
+ WHEN 5 THEN '5-PhotoBooth_PL-Asset-5'
+ WHEN 6 THEN '6-Third-Party-App-6'
+ WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7'
+ WHEN 8 THEN '8-System-Package-App-8'
+ WHEN 9 THEN '9-Native-App-9'
+ WHEN 10 THEN '10-StillTesting-10'
+ WHEN 11 THEN '11-StillTesting-11'
+ WHEN 12 THEN '12-SWY_Syndication_PL-12'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || ''
+ END AS 'zAddAssetAttr-Imported by',
+ CASE zCldMast.ZIMPORTEDBY
+ WHEN 0 THEN '0-Cloud-Other-0'
+ WHEN 1 THEN '1-Native-Back-Camera-1'
+ WHEN 2 THEN '2-Native-Front-Camera-2'
+ WHEN 3 THEN '3-Third-Party-App-3'
+ WHEN 4 THEN '4-StillTesting-4'
+ WHEN 5 THEN '5-PhotoBooth_PL-Asset-5'
+ WHEN 6 THEN '6-Third-Party-App-6'
+ WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7'
+ WHEN 8 THEN '8-System-Package-App-8'
+ WHEN 9 THEN '9-Native-App-9'
+ WHEN 10 THEN '10-StillTesting-10'
+ WHEN 11 THEN '11-StillTesting-11'
+ WHEN 12 THEN '12-SWY_Syndication_PL-12'
+ ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || ''
+ END AS 'zCldMast-Imported By',
+ zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier',
+ zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name',
+ zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID',
+ zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name',
+ CASE zAsset.ZSAVEDASSETTYPE
+ WHEN 0 THEN '0-Saved-via-other-source-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ WHEN 2 THEN '2-StillTesting-2'
+ WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3'
+ WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4'
+ WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5'
+ WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6'
+ WHEN 7 THEN '7-StillTesting-7'
+ WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8'
+ WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || ''
+ END AS 'zAsset-Saved Asset Type',
+ zAsset.ZDIRECTORY AS 'zAsset-Directory-Path',
+ zAsset.ZFILENAME AS 'zAsset-Filename',
+ zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename',
+ zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename',
+ zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files',
+ CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE
+ WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0'
+ WHEN 1 THEN '1-Asset-In-Active-SPL-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || ''
+ END AS 'zAsset-Active Library Scope Participation State',
+ CASE zAsset.ZLIBRARYSCOPESHARESTATE
+ WHEN 0 THEN '0-Asset-Not-In-SPL-0'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || ''
+ END AS 'zAsset-Library Scope Share State- StillTesting',
+ DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date',
+ DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
+ CASE zAddAssetAttr.ZDATECREATEDSOURCE
+ WHEN 0 THEN '0-Cloud-Asset-0'
+ WHEN 1 THEN '1-Local_Asset_EXIF-1'
+ WHEN 3 THEN '3-Local_Asset_No_EXIF-3'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || ''
+ END AS 'zAddAssetAttr-Date Created Source',
+ DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
+ DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date',
+ DateTime(zIntResou.ZCLOUDMASTERDATECREATED + 978307200, 'UNIXEPOCH') AS 'zIntResou-CldMst Date Created',
+ zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name',
+ zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset',
+ zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset',
+ zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String',
+ DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
+ DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date',
+ CASE zCldMast.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-Not Synced with Cloud-0'
+ WHEN 1 THEN '1-Pending Upload-1'
+ WHEN 2 THEN '2-StillTesting'
+ WHEN 3 THEN '3-Synced with Cloud-3'
+ ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || ''
+ END AS 'zCldMast-Cloud Local State',
+ DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date',
+ DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files',
+ zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID',
+ DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date',
+ zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting',
+ DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date',
+ DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date',
+ zAsset.ZCLOUDDOWNLOADREQUESTS AS 'zAsset-Cloud Download Requests',
+ zAsset.ZCLOUDBATCHID AS 'zAsset-Cloud Batch ID',
+ zAddAssetAttr.ZUPLOADATTEMPTS AS 'zAddAssetAttr-Upload Attempts',
+ CASE zAsset.ZLATITUDE
+ WHEN -180.0 THEN '-180.0'
+ ELSE zAsset.ZLATITUDE
+ END AS 'zAsset-Latitude',
+ zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude',
+ CASE zAsset.ZLONGITUDE
+ WHEN -180.0 THEN '-180.0'
+ ELSE zAsset.ZLONGITUDE
+ END AS 'zAsset-Longitude',
+ zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude',
+ CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY
+ WHEN -1.0 THEN '-1.0'
+ ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY
+ END AS 'zAddAssetAttr-GPS Horizontal Accuracy',
+ zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash',
+ CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID
+ WHEN 0 THEN '0-Shifted Location Not Valid-0'
+ WHEN 1 THEN '1-Shifted Location Valid-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || ''
+ END AS 'zAddAssetAttr-Shifted Location Valid',
+ CASE
+ WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist'
+ ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL'
+ END AS 'zAddAssetAttr-Shifted Location Data',
+ CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID
+ WHEN 0 THEN '0-Reverse Location Not Valid-0'
+ WHEN 1 THEN '1-Reverse Location Valid-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || ''
+ END AS 'zAddAssetAttr-Reverse Location Is Valid',
+ CASE
+ WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist'
+ ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL'
+ END AS 'zAddAssetAttr-Reverse Location Data',
+ CASE AAAzCldMastMedData.Z_OPT
+ WHEN 1 THEN '1-StillTesting-Cloud-1'
+ WHEN 2 THEN '2-StillTesting-This Device-2'
+ WHEN 3 THEN '3-StillTesting-Muted-3'
+ WHEN 4 THEN '4-StillTesting-Unknown-4'
+ WHEN 5 THEN '5-StillTesting-Unknown-5'
+ ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || ''
+ END AS 'AAAzCldMastMedData-zOPT',
+ zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type',
+ CASE
+ WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist'
+ ELSE 'AAAzCldMastMedData-Data_Empty-NULL'
+ END AS 'AAAzCldMastMedData-Data',
+ CASE CMzCldMastMedData.Z_OPT
+ WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1'
+ WHEN 2 THEN '2-StillTesting-Local_Asset-2'
+ WHEN 3 THEN '3-StillTesting-Muted-3'
+ WHEN 4 THEN '4-StillTesting-Unknown-4'
+ WHEN 5 THEN '5-StillTesting-Unknown-5'
+ ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || ''
+ END AS 'CldMasterzCldMastMedData-zOPT',
+ zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type',
+ CASE
+ WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist'
+ ELSE 'CMzCldMastMedData-Data_Empty-NULL'
+ END AS 'CMzCldMastMedData-Data',
+ CASE zAsset.ZSEARCHINDEXREBUILDSTATE
+ WHEN 0 THEN '0-StillTesting-0'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSEARCHINDEXREBUILDSTATE || ''
+ END AS 'zAsset-Search Index Rebuild State',
+ zAddAssetAttr.ZSYNDICATIONHISTORY AS 'zAddAssetAttr-Syndication History',
+ zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVERSION AS 'zMedAnlyAstAttr-Syndication Processing Version',
+ CASE zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE
+ WHEN 0 THEN '0-NA-0'
+ WHEN 1 THEN '1-STILLTESTING_Wide-Camera_JPG-1'
+ WHEN 2 THEN '2-STILLTESTING_Telephoto_Camera_Lens-2'
+ WHEN 4 THEN '4-STILLTESTING_SWY_Asset_OrigAssetImport_SystemPackageApp-4'
+ WHEN 16 THEN '16-STILLTESTING-16'
+ WHEN 1024 THEN '1024-STILLTESTING_SWY_Asset_OrigAssetImport_NativeCamera-1024'
+ WHEN 2048 THEN '2048-STILLTESTING-2048'
+ WHEN 4096 THEN '4096-STILLTESTING_SWY_Asset_Manually_Saved-4096'
+ ELSE 'Unknown-New-Value!: ' || zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE || ''
+ END AS 'zMedAnlyAstAttr-Syndication Processing Value',
+ CASE zAsset.ZORIENTATION
+ WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1'
+ WHEN 2 THEN '2-Horizontal-Camera-(right)-2'
+ WHEN 3 THEN '3-Horizontal-Camera-(right)-3'
+ WHEN 4 THEN '4-Horizontal-Camera-(left)-4'
+ WHEN 5 THEN '5-Vertical-Camera-(top)-5'
+ WHEN 6 THEN '6-Vertical-Camera-(top)-6'
+ WHEN 7 THEN '7-Vertical-Camera-(bottom)-7'
+ WHEN 8 THEN '8-Vertical-Camera-(bottom)-8'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || ''
+ END AS 'zAsset-Orientation',
+ CASE zAddAssetAttr.ZORIGINALORIENTATION
+ WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1'
+ WHEN 2 THEN '2-Horizontal-Camera-(right)-2'
+ WHEN 3 THEN '3-Horizontal-Camera-(right)-3'
+ WHEN 4 THEN '4-Horizontal-Camera-(left)-4'
+ WHEN 5 THEN '5-Vertical-Camera-(top)-5'
+ WHEN 6 THEN '6-Vertical-Camera-(top)-6'
+ WHEN 7 THEN '7-Vertical-Camera-(bottom)-7'
+ WHEN 8 THEN '8-Vertical-Camera-(bottom)-8'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || ''
+ END AS 'zAddAssetAttr-Original Orientation',
+ CASE zAsset.ZKIND
+ WHEN 0 THEN '0-Photo-0'
+ WHEN 1 THEN '1-Video-1'
+ END AS 'zAsset-Kind',
+ CASE zAsset.ZKINDSUBTYPE
+ WHEN 0 THEN '0-Still-Photo-0'
+ WHEN 1 THEN '1-Panorama-1'
+ WHEN 2 THEN '2-Live-Photo-2'
+ WHEN 10 THEN '10-SpringBoard-Screenshot-10'
+ WHEN 100 THEN '100-Video-100'
+ WHEN 101 THEN '101-Slow-Mo-Video-101'
+ WHEN 102 THEN '102-Time-lapse-Video-102'
+ WHEN 103 THEN '103-Replay_Screen_Recording-103'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || ''
+ END AS 'zAsset-Kind-Sub-Type',
+ CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE
+ WHEN 0 THEN '0-Still-Photo-0'
+ WHEN 1 THEN '1-StillTesting'
+ WHEN 2 THEN '2-Live-Photo-2'
+ WHEN 3 THEN '3-Screenshot-3'
+ WHEN 10 THEN '10-SpringBoard-Screenshot-10'
+ WHEN 100 THEN '100-Video-100'
+ WHEN 101 THEN '101-Slow-Mo-Video-101'
+ WHEN 102 THEN '102-Time-lapse-Video-102'
+ WHEN 103 THEN '103-Replay_Screen_Recording-103'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || ''
+ END AS 'zAddAssetAttr-Cloud Kind Sub Type',
+ CASE zAsset.ZPLAYBACKSTYLE
+ WHEN 1 THEN '1-Image-1'
+ WHEN 2 THEN '2-Image-Animated-2'
+ WHEN 3 THEN '3-Live-Photo-3'
+ WHEN 4 THEN '4-Video-4'
+ WHEN 5 THEN '5-Video-Looping-5'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || ''
+ END AS 'zAsset-Playback Style',
+ CASE zAsset.ZPLAYBACKVARIATION
+ WHEN 0 THEN '0-No_Playback_Variation-0'
+ WHEN 1 THEN '1-StillTesting_Playback_Variation-1'
+ WHEN 2 THEN '2-StillTesting_Playback_Variation-2'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || ''
+ END AS 'zAsset-Playback Variation',
+ zAsset.ZDURATION AS 'zAsset-Video Duration',
+ zExtAttr.ZDURATION AS 'zExtAttr-Duration',
+ zAsset.ZVIDEOCPDURATIONVALUE AS 'zAsset-Video CP Duration',
+ zAddAssetAttr.ZVIDEOCPDURATIONTIMESCALE AS 'zAddAssetAttr-Video CP Duration Time Scale',
+ zAsset.ZVIDEOCPVISIBILITYSTATE AS 'zAsset-Video CP Visibility State',
+ zAddAssetAttr.ZVIDEOCPDISPLAYVALUE AS 'zAddAssetAttr-Video CP Display Value',
+ zAddAssetAttr.ZVIDEOCPDISPLAYTIMESCALE AS 'zAddAssetAttr-Video CP Display Time Scale',
+ CASE zIntResou.ZDATASTORECLASSID
+ WHEN 0 THEN '0-LPL-Asset_CPL-Asset-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ WHEN 2 THEN '2-Photo-Cloud-Sharing-Asset-2'
+ WHEN 3 THEN '3-SWY_Syndication_Asset-3'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORECLASSID || ''
+ END AS 'zIntResou-Datastore Class ID',
+ CASE zAsset.ZCLOUDPLACEHOLDERKIND
+ WHEN 0 THEN '0-Local&CloudMaster Asset-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ WHEN 2 THEN '2-StillTesting-2'
+ WHEN 3 THEN '3-JPG-Asset_Only_PhDa-Thumb-V2-3'
+ WHEN 4 THEN '4-LPL-JPG-Asset_CPLAsset-OtherType-4'
+ WHEN 5 THEN '5-Asset_synced_CPL_2_Device-5'
+ WHEN 6 THEN '6-StillTesting-6'
+ WHEN 7 THEN '7-LPL-poster-JPG-Asset_CPLAsset-MP4-7'
+ WHEN 8 THEN '8-LPL-JPG_Asset_CPLAsset-LivePhoto-MOV-8'
+ WHEN 9 THEN '9-CPL_MP4_Asset_Saved_2_LPL-9'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDPLACEHOLDERKIND || ''
+ END AS 'zAsset-Cloud Placeholder Kind',
+ CASE zIntResou.ZLOCALAVAILABILITY
+ WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)'
+ WHEN 1 THEN '1-IR_Asset_Avail_Locally-1'
+ WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || ''
+ END AS 'zIntResou-Local Availability',
+ CASE zIntResou.ZLOCALAVAILABILITYTARGET
+ WHEN 0 THEN '0-StillTesting-0'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITYTARGET || ''
+ END AS 'zIntResou-Local Availability Target',
+ CASE zIntResou.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-IR_Asset_Not_Synced_No_IR-CldMastDateCreated-0'
+ WHEN 1 THEN '1-IR_Asset_Pending-Upload-1'
+ WHEN 2 THEN '2-IR_Asset_Photo_Cloud_Share_Asset_On-Local-Device-2'
+ WHEN 3 THEN '3-IR_Asset_Synced_iCloud-3'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDLOCALSTATE || ''
+ END AS 'zIntResou-Cloud Local State',
+ CASE zIntResou.ZREMOTEAVAILABILITY
+ WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0'
+ WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || ''
+ END AS 'zIntResou-Remote Availability',
+ CASE zIntResou.ZREMOTEAVAILABILITYTARGET
+ WHEN 0 THEN '0-StillTesting-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITYTARGET || ''
+ END AS 'zIntResou-Remote Availability Target',
+ zIntResou.ZTRANSIENTCLOUDMASTER AS 'zIntResou-Transient Cloud Master',
+ zIntResou.ZSIDECARINDEX AS 'zIntResou-Side Car Index',
+ zIntResou.ZFILEID AS 'zIntResou- File ID',
+ CASE zIntResou.ZVERSION
+ WHEN 0 THEN '0-IR_Asset_Standard-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ WHEN 2 THEN '2-IR_Asset_Adjustments-Mutation-2'
+ WHEN 3 THEN '3-IR_Asset_No_IR-CldMastDateCreated-3'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZVERSION || ''
+ END AS 'zIntResou-Version',
+ zAddAssetAttr.ZORIGINALFILESIZE AS 'zAddAssetAttr- Original-File-Size',
+ CASE zIntResou.ZRESOURCETYPE
+ WHEN 0 THEN '0-Photo-0'
+ WHEN 1 THEN '1-Video-1'
+ WHEN 3 THEN '3-Live-Photo-3'
+ WHEN 5 THEN '5-Adjustment-Data-5'
+ WHEN 6 THEN '6-Screenshot-6'
+ WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9'
+ WHEN 13 THEN '13-Movie-13'
+ WHEN 14 THEN '14-Wallpaper-14'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || ''
+ END AS 'zIntResou-Resource Type',
+ CASE zIntResou.ZDATASTORESUBTYPE
+ WHEN 0 THEN '0-No Cloud Inter Resource-0'
+ WHEN 1 THEN '1-Main-Asset-Orig-Size-1'
+ WHEN 2 THEN '2-Photo-with-Adjustments-2'
+ WHEN 3 THEN '3-JPG-Large-Thumb-3'
+ WHEN 4 THEN '4-JPG-Med-Thumb-4'
+ WHEN 5 THEN '5-JPG-Small-Thumb-5'
+ WHEN 6 THEN '6-Video-Med-Data-6'
+ WHEN 7 THEN '7-Video-Small-Data-7'
+ WHEN 8 THEN '8-MP4-Cloud-Share-8'
+ WHEN 9 THEN '9-StillTesting'
+ WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10'
+ WHEN 11 THEN '11-StillTesting'
+ WHEN 12 THEN '12-StillTesting'
+ WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13'
+ WHEN 14 THEN '14-Wallpaper-14'
+ WHEN 15 THEN '15-Has-Markup-and-Adjustments-15'
+ WHEN 16 THEN '16-Video-with-Adjustments-16'
+ WHEN 17 THEN '17-RAW_Photo-17_RT'
+ WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18'
+ WHEN 19 THEN '19-Live-Photo-with-Adjustments-19'
+ WHEN 20 THEN '20-StillTesting'
+ WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21'
+ WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22'
+ WHEN 23 THEN '23-StillTesting'
+ WHEN 24 THEN '24-StillTesting'
+ WHEN 25 THEN '25-StillTesting'
+ WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26'
+ WHEN 27 THEN '27-StillTesting'
+ WHEN 28 THEN '28-MOV-Med-hdr-Data-28'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || ''
+ END AS 'zIntResou-Datastore Sub-Type',
+ CASE zIntResou.ZCLOUDSOURCETYPE
+ WHEN 0 THEN '0-NA-0'
+ WHEN 1 THEN '1-Main-Asset-Orig-Size-1'
+ WHEN 2 THEN '2-Photo-with-Adjustments-2'
+ WHEN 3 THEN '3-JPG-Large-Thumb-3'
+ WHEN 4 THEN '4-JPG-Med-Thumb-4'
+ WHEN 5 THEN '5-JPG-Small-Thumb-5'
+ WHEN 6 THEN '6-Video-Med-Data-6'
+ WHEN 7 THEN '7-Video-Small-Data-7'
+ WHEN 8 THEN '8-MP4-Cloud-Share-8'
+ WHEN 9 THEN '9-StillTesting'
+ WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10'
+ WHEN 11 THEN '11-StillTesting'
+ WHEN 12 THEN '12-StillTesting'
+ WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13'
+ WHEN 14 THEN '14-Wallpaper-14'
+ WHEN 15 THEN '15-Has-Markup-and-Adjustments-15'
+ WHEN 16 THEN '16-Video-with-Adjustments-16'
+ WHEN 17 THEN '17-RAW_Photo-17_RT'
+ WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18'
+ WHEN 19 THEN '19-Live-Photo-with-Adjustments-19'
+ WHEN 20 THEN '20-StillTesting'
+ WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21'
+ WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22'
+ WHEN 23 THEN '23-StillTesting'
+ WHEN 24 THEN '24-StillTesting'
+ WHEN 25 THEN '25-StillTesting'
+ WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26'
+ WHEN 27 THEN '27-StillTesting'
+ WHEN 28 THEN '28-MOV-Med-hdr-Data-28'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDSOURCETYPE || ''
+ END AS 'zIntResou-Cloud Source Type',
+ zIntResou.ZDATALENGTH AS 'zIntResou-Data Length',
+ CASE zIntResou.ZRECIPEID
+ WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0'
+ WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737'
+ WHEN 65739 THEN '65739-JPG_Large_Thumb-65739'
+ WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741'
+ WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743'
+ WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749'
+ WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938'
+ WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072'
+ WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077'
+ WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079'
+ WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081'
+ WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272'
+ WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275'
+ WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277'
+ WHEN 131475 THEN '131475-medium-hdr-MOV-131475'
+ WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683'
+ WHEN 327687 THEN '627687-WallpaperComputeResource-627687'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || ''
+ END AS 'zIntResou-Recipe ID',
+ CASE zIntResou.ZCLOUDLASTPREFETCHDATE
+ WHEN 0 THEN '0-NA-0'
+ ELSE DateTime(zIntResou.ZCLOUDLASTPREFETCHDATE + 978307200, 'UNIXEPOCH')
+ END AS 'zIntResou-Cloud Last Prefetch Date',
+ zIntResou.ZCLOUDPREFETCHCOUNT AS 'zIntResou-Cloud Prefetch Count',
+ DateTime(zIntResou.ZCLOUDLASTONDEMANDDOWNLOADDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou- Cloud-Last-OnDemand Download-Date',
+ CASE zIntResou.ZUTICONFORMANCEHINT
+ WHEN 0 THEN '0-NA-Doesnt_Conform-0'
+ WHEN 1 THEN '1-UTTypeImage-1'
+ WHEN 2 THEN '2-UTTypeProRawPhoto-2'
+ WHEN 3 THEN '3-UTTypeMovie-3'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZUTICONFORMANCEHINT || ''
+ END AS 'zIntResou-UniformTypeID_UTI_Conformance_Hint',
+ CASE zIntResou.ZCOMPACTUTI
+ WHEN 1 THEN '1-JPEG-THM-1'
+ WHEN 3 THEN '3-HEIC-3'
+ WHEN 6 THEN '6-PNG-6'
+ WHEN 7 THEN '7-StillTesting'
+ WHEN 9 THEN '9-DNG-9'
+ WHEN 23 THEN '23-JPEG-HEIC-quicktime-mov-23'
+ WHEN 24 THEN '24-MPEG4-24'
+ WHEN 36 THEN '36-Wallpaper-36'
+ WHEN 37 THEN '37-Adj-Mutation_Data-37'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZCOMPACTUTI || ''
+ END AS 'zIntResou-Compact-UTI',
+ zAsset.ZUNIFORMTYPEIDENTIFIER AS 'zAsset-Uniform Type ID',
+ zAsset.ZORIGINALCOLORSPACE AS 'zAsset-Original Color Space',
+ zCldMast.ZUNIFORMTYPEIDENTIFIER AS 'zCldMast-Uniform_Type_ID',
+ CASE zCldMast.ZFULLSIZEJPEGSOURCE
+ WHEN 0 THEN '0-CldMast-JPEG-Source-Video Still-Testing-0'
+ WHEN 1 THEN '1-CldMast-JPEG-Source-Other- Still-Testing-1'
+ ELSE 'Unknown-New-Value!: ' || zCldMast.ZFULLSIZEJPEGSOURCE || ''
+ END AS 'zCldMast-Full Size JPEG Source',
+ zAsset.ZHDRGAIN AS 'zAsset-HDR Gain',
+ CASE zAsset.ZHDRTYPE
+ WHEN 0 THEN '0-No-HDR-0'
+ WHEN 3 THEN '3-HDR_Photo-3_RT'
+ WHEN 4 THEN '4-Non-HDR_Version-4_RT'
+ WHEN 5 THEN '5-HEVC_Movie-5'
+ WHEN 6 THEN '6-Panorama-6_RT'
+ WHEN 10 THEN '10-HDR-Gain-10'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZHDRTYPE || ''
+ END AS 'zAsset-zHDR_Type',
+ zExtAttr.ZCODEC AS 'zExtAttr-Codec',
+ zIntResou.ZCODECFOURCHARCODENAME AS 'zIntResou-Codec Four Char Code Name',
+ zCldMast.ZCODECNAME AS 'zCldMast-Codec Name',
+ zCldMast.ZVIDEOFRAMERATE AS 'zCldMast-Video Frame Rate',
+ zCldMast.ZPLACEHOLDERSTATE AS 'zCldMast-Placeholder State',
+ CASE zAsset.ZDEPTHTYPE
+ WHEN 0 THEN '0-Not_Portrait-0_RT'
+ ELSE 'Portrait: ' || zAsset.ZDEPTHTYPE || ''
+ END AS 'zAsset-Depth_Type',
+ zAsset.ZAVALANCHEUUID AS 'zAsset-Avalanche UUID',
+ CASE zAsset.ZAVALANCHEPICKTYPE
+ WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT'
+ WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT'
+ WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT'
+ WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT'
+ WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT'
+ WHEN 32 THEN '32-StillTesting-32_RT'
+ WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEPICKTYPE || ''
+ END AS 'zAsset-Avalanche_Pick_Type-BurstAsset',
+ CASE zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE
+ WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT'
+ WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT'
+ WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT'
+ WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT'
+ WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT'
+ WHEN 32 THEN '32-StillTesting-32_RT'
+ WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE || ''
+ END AS 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset',
+ CASE zAddAssetAttr.ZCLOUDRECOVERYSTATE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDRECOVERYSTATE || ''
+ END AS 'zAddAssetAttr-Cloud Recovery State',
+ zAddAssetAttr.ZCLOUDSTATERECOVERYATTEMPTSCOUNT AS 'zAddAssetAttr-Cloud State Recovery Attempts Count',
+ zAsset.ZDEFERREDPROCESSINGNEEDED AS 'zAsset-Deferred Processing Needed',
+ zAsset.ZVIDEODEFERREDPROCESSINGNEEDED AS 'zAsset-Video Deferred Processing Needed',
+ zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier',
+ zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options',
+ CASE zAsset.ZHASADJUSTMENTS
+ WHEN 0 THEN '0-No-Adjustments-0'
+ WHEN 1 THEN '1-Yes-Adjustments-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZHASADJUSTMENTS || ''
+ END AS 'zAsset-Has Adjustments-Camera-Effects-Filters',
+ DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp',
+ zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID',
+ zAddAssetAttr.ZMONTAGE AS 'zAddAssetAttr-Montage',
+ CASE zAsset.ZFAVORITE
+ WHEN 0 THEN '0-Asset Not Favorite-0'
+ WHEN 1 THEN '1-Asset Favorite-1'
+ END AS 'zAsset-Favorite',
+ CASE zAsset.ZHIDDEN
+ WHEN 0 THEN '0-Asset Not Hidden-0'
+ WHEN 1 THEN '1-Asset Hidden-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZHIDDEN || ''
+ END AS 'zAsset-Hidden',
+ CASE zAsset.ZTRASHEDSTATE
+ WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0'
+ WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || ''
+ END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
+ DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
+ zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK',
+ CASE zAsset.ZDELETEREASON
+ WHEN 1 THEN '1-StillTesting Delete-Reason-1'
+ WHEN 2 THEN '2-StillTesting Delete-Reason-2'
+ WHEN 3 THEN '3-StillTesting Delete-Reason-3'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZDELETEREASON || ''
+ END AS 'zAsset-Delete-Reason',
+ CASE zIntResou.ZTRASHEDSTATE
+ WHEN 0 THEN '0-zIntResou-Not In Trash-Recently Deleted-0'
+ WHEN 1 THEN '1-zIntResou-In Trash-Recently Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZTRASHEDSTATE || ''
+ END AS 'zIntResou-Trash State',
+ DateTime(zIntResou.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou-Trashed Date',
+ CASE zAsset.ZCLOUDDELETESTATE
+ WHEN 0 THEN '0-Cloud Asset Not Deleted-0'
+ WHEN 1 THEN '1-Cloud Asset Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDDELETESTATE || ''
+ END AS 'zAsset-Cloud Delete State',
+ CASE zIntResou.ZCLOUDDELETESTATE
+ WHEN 0 THEN '0-Cloud IntResou Not Deleted-0'
+ WHEN 1 THEN '1-Cloud IntResou Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDDELETESTATE || ''
+ END AS 'zIntResou-Cloud Delete State',
+ CASE zAddAssetAttr.ZPTPTRASHEDSTATE
+ WHEN 0 THEN '0-PTP Not in Trash-0'
+ WHEN 1 THEN '1-PTP In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZPTPTRASHEDSTATE || ''
+ END AS 'zAddAssetAttr-PTP Trashed State',
+ CASE zIntResou.ZPTPTRASHEDSTATE
+ WHEN 0 THEN '0-PTP IntResou Not in Trash-0'
+ WHEN 1 THEN '1-PTP IntResou In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZPTPTRASHEDSTATE || ''
+ END AS 'zIntResou-PTP Trashed State',
+ zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type',
+ DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp',
+ DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modification Date',
+ zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count',
+ zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count',
+ zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count',
+ zAddAssetAttr.ZPLAYCOUNT AS 'zAddAssetAttr- Play Count',
+ zAddAssetAttr.ZPENDINGSHARECOUNT AS 'zAddAssetAttr- Pending Share Count',
+ zAddAssetAttr.ZSHARECOUNT AS 'zAddAssetAttr- Share Count',
+ CASE zAddAssetAttr.ZALLOWEDFORANALYSIS
+ WHEN 0 THEN '0-Asset Not Allowed For Analysis-0'
+ WHEN 1 THEN '1-Asset Allowed for Analysis-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZALLOWEDFORANALYSIS || ''
+ END AS 'zAddAssetAttr-Allowed for Analysis',
+ zAddAssetAttr.ZSCENEANALYSISVERSION AS 'zAddAssetAttr-Scene Analysis Version',
+ CASE zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW
+ WHEN 0 THEN '0-No-0'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW || ''
+ END AS 'zAddAssetAttr-Scene Analysis is From Preview',
+ DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp',
+ CASE zAsset.ZDUPLICATEASSETVISIBILITYSTATE
+ WHEN 0 THEN '0-No-Duplicates-0'
+ WHEN 1 THEN '1-Has Duplicate-1'
+ WHEN 2 THEN '2-Is a Duplicate-2'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZDUPLICATEASSETVISIBILITYSTATE || ''
+ END AS 'zAsset-Duplication Asset Visibility State',
+ CASE zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE
+ WHEN 0 THEN '0-No Copy-0'
+ WHEN 1 THEN '1-Has A Copy-1'
+ WHEN 2 THEN '2-Has A Copy-2'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE || ''
+ END AS 'zAddAssetAttr-Destination Asset Copy State',
+ CASE zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE
+ WHEN 0 THEN '0-Unknown-StillTesting-0'
+ WHEN 1 THEN '1-Unknown-StillTesting-1'
+ WHEN 2 THEN '2-Unknown-StillTesting-2'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE || ''
+ END AS 'zAddAssetAttr-Duplicate Detector Perceptual Processing State',
+ zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONSCOPEIDENTIFIER AS 'zAddAssetAttr-Source Asset for Duplication Scope ID',
+ zCldMast.ZSOURCEMASTERFORDUPLICATIONSCOPEIDENTIFIER AS 'zCldMast-Source Master For Duplication Scope ID',
+ zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONIDENTIFIER AS 'zAddAssetAttr-Source Asset For Duplication ID',
+ zCldMast.ZSOURCEMASTERFORDUPLICATIONIDENTIFIER AS 'zCldMast-Source Master for Duplication ID',
+ zAddAssetAttr.ZVARIATIONSUGGESTIONSTATES AS 'zAddAssetAttr-Variation Suggestions States',
+ zAsset.ZHIGHFRAMERATESTATE AS 'zAsset-High Frame Rate State',
+ zAsset.ZVIDEOKEYFRAMETIMESCALE AS 'zAsset-Video Key Frame Time Scale',
+ zAsset.ZVIDEOKEYFRAMEVALUE AS 'zAsset-Video Key Frame Value',
+ zExtAttr.ZISO AS 'zExtAttr-ISO',
+ zExtAttr.ZMETERINGMODE AS 'zExtAttr-Metering Mode',
+ zExtAttr.ZSAMPLERATE AS 'zExtAttr-Sample Rate',
+ zExtAttr.ZTRACKFORMAT AS 'zExtAttr-Track Format',
+ zExtAttr.ZWHITEBALANCE AS 'zExtAttr-White Balance',
+ zExtAttr.ZAPERTURE AS 'zExtAttr-Aperture',
+ zExtAttr.ZBITRATE AS 'zExtAttr-BitRate',
+ zExtAttr.ZEXPOSUREBIAS AS 'zExtAttr-Exposure Bias',
+ zExtAttr.ZFPS AS 'zExtAttr-Frames Per Second',
+ zExtAttr.ZSHUTTERSPEED AS 'zExtAttr-Shutter Speed',
+ zExtAttr.ZSLUSHSCENEBIAS AS 'zExtAttr-Slush Scene Bias',
+ zExtAttr.ZSLUSHVERSION AS 'zExtAttr-Slush Version',
+ zExtAttr.ZSLUSHPRESET AS 'zExtAttr-Slush Preset',
+ zExtAttr.ZSLUSHWARMTHBIAS AS 'zExtAttr-Slush Warm Bias',
+ zAsset.ZHEIGHT AS 'zAsset-Height',
+ zAddAssetAttr.ZORIGINALHEIGHT AS 'zAddAssetAttr-Original Height',
+ zIntResou.ZUNORIENTEDHEIGHT AS 'zIntResou-UnOriented Height',
+ zAsset.ZWIDTH AS 'zAsset-Width',
+ zAddAssetAttr.ZORIGINALWIDTH AS 'zAddAssetAttr-Original Width',
+ zIntResou.ZUNORIENTEDWIDTH AS 'zIntResou-UnOriented Width',
+ zAsset.ZTHUMBNAILINDEX AS 'zAsset-Thumbnail Index',
+ zAddAssetAttr.ZEMBEDDEDTHUMBNAILHEIGHT AS 'zAddAssetAttr-Embedded Thumbnail Height',
+ zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length',
+ zAddAssetAttr.ZEMBEDDEDTHUMBNAILOFFSET AS 'zAddAssetAttr-Embedded Thumbnail Offset',
+ zAddAssetAttr.ZEMBEDDEDTHUMBNAILWIDTH AS 'zAddAssetAttr-Embedded Thumbnail Width',
+ zAsset.ZPACKEDACCEPTABLECROPRECT AS 'zAsset-Packed Acceptable Crop Rect',
+ zAsset.ZPACKEDBADGEATTRIBUTES AS 'zAsset-Packed Badge Attributes',
+ zAsset.ZPACKEDPREFERREDCROPRECT AS 'zAsset-Packed Preferred Crop Rect',
+ zAsset.ZCURATIONSCORE AS 'zAsset-Curation Score',
+ zAsset.ZCAMERAPROCESSINGADJUSTMENTSTATE AS 'zAsset-Camera Processing Adjustment State',
+ zAsset.ZDEPTHTYPE AS 'zAsset-Depth Type',
+ zAsset.ZISMAGICCARPET AS 'zAsset-Is Magic Carpet-Quicktime_MOV-file',
+ CASE zAddAssetAttr.ZORIGINALRESOURCECHOICE
+ WHEN 0 THEN '0-JPEG Original Resource-0'
+ WHEN 1 THEN '1-RAW Original Resource-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZORIGINALRESOURCECHOICE || ''
+ END AS 'zAddAssetAttr-Orig Resource Choice',
+ CASE zAsset.ZSPATIALTYPE
+ WHEN 0 THEN '0-UnknownTesting-0'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSPATIALTYPE || ''
+ END AS 'zAsset-Spatial Type',
+ zAddAssetAttr.ZSPATIALOVERCAPTUREGROUPIDENTIFIER AS 'zAddAssetAttr-Spatial Over Capture Group ID',
+ zAddAssetAttr.ZPLACEANNOTATIONDATA AS 'zAddAssetAttr-Place Annotation Data',
+ zAddAssetAttr.ZDISTANCEIDENTITY AS 'zAddAssetAttr-Distance Identity-HEX',
+ zAddAssetAttr.ZEDITEDIPTCATTRIBUTES AS 'zAddAssetAttr-Edited IPTC Attributes',
+ zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website',
+ zAddAssetAttr.ZACCESSIBILITYDESCRIPTION AS 'zAddAssetAttr-Accessibility Description',
+ zAddAssetAttr.ZPHOTOSTREAMTAGID AS 'zAddAssetAttr-Photo Stream Tag ID',
+ CASE zAddAssetAttr.ZSHARETYPE
+ WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0'
+ WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || ''
+ END AS 'zAddAssetAttr-Share Type',
+ zAddAssetAttr.ZLIBRARYSCOPEASSETCONTRIBUTORSTOUPDATE AS 'zAddAssetAttr-Library Scope Asset Contributors To Update',
+ zAsset.ZOVERALLAESTHETICSCORE AS 'zAsset-Overall Aesthetic Score',
+ zAsset.Z_ENT AS 'zAsset-zENT',
+ zAsset.Z_OPT AS 'zAsset-zOPT',
+ zAsset.ZMASTER AS 'zAsset-Master= zCldMast-zPK',
+ zAsset.ZEXTENDEDATTRIBUTES AS 'zAsset-Extended Attributes= zExtAttr-zPK',
+ zAsset.ZIMPORTSESSION AS 'zAsset-Import Session Key',
+ zAsset.ZPHOTOANALYSISATTRIBUTES AS 'zAsset-Photo Analysis Attributes Key',
+ zAsset.Z_FOK_CLOUDFEEDASSETSENTRY AS 'zAsset-FOK-Cloud Feed Asset Entry Key',
+ zAsset.ZCOMPUTEDATTRIBUTES AS 'zAsset-Computed Attributes Asset Key',
+ zAsset.ZPROMOTIONSCORE AS 'zAsset-Promotion Score',
+ zAsset.ZICONICSCORE AS 'zAsset-Iconic Score',
+ zAsset.ZMEDIAANALYSISATTRIBUTES AS 'zAsset-Media Analysis Attributes Key',
+ zAsset.ZMEDIAGROUPUUID AS 'zAsset-Media Group UUID',
+ zAsset.ZCLOUDASSETGUID AS 'zAsset-Cloud_Asset_GUID = store.cloudphotodb',
+ zAsset.ZCLOUDCOLLECTIONGUID AS 'zAsset.Cloud Collection GUID',
+ zAddAssetAttr.Z_ENT AS 'zAddAssetAttr-zENT',
+ zAddAssetAttr.Z_OPT AS 'ZAddAssetAttr-zOPT',
+ zAddAssetAttr.ZASSET AS 'zAddAssetAttr-zAsset= zAsset_zPK',
+ zAddAssetAttr.ZUNMANAGEDADJUSTMENT AS 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK',
+ zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK',
+ zAddAssetAttr.ZPUBLICGLOBALUUID AS 'zAddAssetAttr-Public Global UUID',
+ zAddAssetAttr.ZORIGINALASSETSUUID AS 'zAddAssetAttr-Original Assets UUID',
+ zAddAssetAttr.ZORIGINATINGASSETIDENTIFIER AS 'zAddAssetAttr-Originating Asset Identifier',
+ zAddAssetAttr.ZADJUSTEDFINGERPRINT AS 'zAddAssetAttr.Adjusted Fingerprint',
+ zCldMast.Z_PK AS 'zCldMast-zPK= zAsset-Master',
+ zCldMast.Z_ENT AS 'zCldMast-zENT',
+ zCldMast.Z_OPT AS 'zCldMast-zOPT',
+ zCldMast.ZMOMENTSHARE AS 'zCldMast-Moment Share Key= zShare-zPK',
+ zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK',
+ zCldMast.ZCLOUDMASTERGUID AS 'zCldMast-Cloud_Master_GUID = store.cloudphotodb',
+ zCldMast.ZORIGINATINGASSETIDENTIFIER AS 'zCldMast-Originating Asset ID',
+ CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key',
+ CMzCldMastMedData.Z_ENT AS 'CMzCldMastMedData-zENT',
+ CMzCldMastMedData.ZCLOUDMASTER AS 'CMzCldMastMedData-CldMast= zCldMast-zPK',
+ AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData',
+ AAAzCldMastMedData.Z_ENT AS 'AAAzCldMastMedData-zENT',
+ AAAzCldMastMedData.ZCLOUDMASTER AS 'AAAzCldMastMedData-CldMast key',
+ AAAzCldMastMedData.ZADDITIONALASSETATTRIBUTES AS 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK',
+ zExtAttr.Z_PK AS 'zExtAttr-zPK= zAsset-zExtendedAttributes',
+ zExtAttr.Z_ENT AS 'zExtAttr-zENT',
+ zExtAttr.Z_OPT AS 'zExtAttr-zOPT',
+ zExtAttr.ZASSET AS 'zExtAttr-Asset Key',
+ zIntResou.Z_PK AS 'zIntResou-zPK',
+ zIntResou.Z_ENT AS 'zIntResou-zENT',
+ zIntResou.Z_OPT AS 'zIntResou-zOPT',
+ zIntResou.ZASSET AS 'zIntResou-Asset= zAsset_zPK',
+ zMedAnlyAstAttr.Z_PK AS 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata',
+ zMedAnlyAstAttr.Z_ENT AS 'zMedAnlyAstAttr-zEnt',
+ zMedAnlyAstAttr.Z_OPT AS 'zMedAnlyAstAttr-zOpt',
+ zMedAnlyAstAttr.ZASSET AS 'zMedAnlyAstAttr-Asset= zAsset-zPK'
+ FROM ZASSET zAsset
+ LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
+ LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES
+ LEFT JOIN ZINTERNALRESOURCE zIntResou ON zIntResou.ZASSET = zAsset.Z_PK
+ LEFT JOIN ZSCENEPRINT zSceneP ON zSceneP.Z_PK = zAddAssetAttr.ZSCENEPRINT
+ LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
+ LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA
+ LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
+ LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK
+ WHERE (zIntResou.ZDATASTORESUBTYPE = 1) & (zIntResou.ZLOCALAVAILABILITY = -1) & (zIntResou.ZFINGERPRINT IS NOT NULL)
+ ORDER BY zAsset.ZDATECREATED
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
+ row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
+ row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
+ row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
+ row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
+ row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
+ row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
+ row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
+ row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
+ row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
+ row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
+ row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
+ row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
+ row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
+ row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
+ row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
+ row[268], row[269], row[270], row[271], row[272], row[273], row[274]))
+
+ data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'),
+ 'zAsset-zPK-1',
+ 'zAddAssetAttr-zPK-2',
+ 'zAsset-UUID = store.cloudphotodb-3',
+ 'zAddAssetAttr-Master Fingerprint-4',
+ 'zAddAssetAttr.Adjusted Fingerprint-5',
+ 'zIntResou-Fingerprint-6',
+ 'zIntResou-Local Availability-4QueryStart-7',
+ 'zIntResou-Remote Availability-4QueryStart-8',
+ 'zIntResou-Resource Type-4QueryStart-9',
+ 'zIntResou-Datastore Sub-Type-4QueryStart-10',
+ 'zIntResou-Recipe ID-4QueryStart-11',
+ 'zAsset Complete-12',
+ 'zAsset-Bundle Scope-13',
+ 'zAsset-Syndication State-14',
+ 'zAsset-Cloud is My Asset-15',
+ 'zAsset-Cloud is deletable-Asset-16',
+ 'zAsset-Cloud_Local_State-17',
+ 'zAsset-Visibility State-18',
+ 'zExtAttr-Camera Make-19',
+ 'zExtAttr-Camera Model-20',
+ 'zExtAttr-Lens Model-21',
+ 'zExtAttr-Flash Fired-22',
+ 'zExtAttr-Focal Lenght-23',
+ 'zExtAttr-Focal Length in 35MM-24',
+ 'zExtAttr-Digital Zoom Ratio-25',
+ 'zAsset-Derived Camera Capture Device-26',
+ 'zAddAssetAttr-Camera Captured Device-27',
+ 'zAddAssetAttr-Imported by-28',
+ 'zCldMast-Imported By-29',
+ 'zAddAssetAttr.Imported by Bundle Identifier-30',
+ 'zAddAssetAttr-Imported By Display Name-31',
+ 'zCldMast-Imported by Bundle ID-32',
+ 'zCldMast-Imported by Display Name-33',
+ 'zAsset-Saved Asset Type-34',
+ 'zAsset-Directory-Path-35',
+ 'zAsset-Filename-36',
+ 'zAddAssetAttr- Original Filename-37',
+ 'zCldMast- Original Filename-38',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-39',
+ 'zAsset-Active Library Scope Participation State-40',
+ 'zAsset-Library Scope Share State- StillTesting-41',
+ ('zAsset-Added Date-42', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-43', 'datetime'),
+ ('zAddAssetAttr-Date Created Source-44', 'datetime'),
+ ('zAsset-Date Created-45', 'datetime'),
+ ('zCldMast-Creation Date-46', 'datetime'),
+ ('zIntResou-CldMst Date Created-47', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-48',
+ 'zAddAssetAttr-Time Zone Offset-49',
+ 'zAddAssetAttr-Inferred Time Zone Offset-50',
+ 'zAddAssetAttr-EXIF-String-51',
+ ('zAsset-Modification Date-52', 'datetime'),
+ ('zAsset-Last Shared Date-53', 'datetime'),
+ 'zCldMast-Cloud Local State-54',
+ ('zCldMast-Import Date-55', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-56', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-57',
+ ('zAddAssetAttr-Alt Import Image Date-58', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-59',
+ ('zAsset-Cloud Batch Publish Date-60', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-61', 'datetime'),
+ 'zAsset-Cloud Download Requests-62',
+ 'zAsset-Cloud Batch ID-63',
+ 'zAddAssetAttr-Upload Attempts-64',
+ 'zAsset-Latitude-65',
+ 'zExtAttr-Latitude-66',
+ 'zAsset-Longitude-67',
+ 'zExtAttr-Longitude-68',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-69',
+ 'zAddAssetAttr-Location Hash-70',
+ 'zAddAssetAttr-Shifted Location Valid-71',
+ 'zAddAssetAttr-Shifted Location Data-72',
+ 'zAddAssetAttr-Reverse Location Is Valid-73',
+ 'zAddAssetAttr-Reverse Location Data-74',
+ 'AAAzCldMastMedData-zOPT-75',
+ 'zAddAssetAttr-Media Metadata Type-76',
+ 'AAAzCldMastMedData-Data-77',
+ 'CldMasterzCldMastMedData-zOPT-78',
+ 'zCldMast-Media Metadata Type-79',
+ 'CMzCldMastMedData-Data-80',
+ 'zAsset-Search Index Rebuild State-81',
+ 'zAddAssetAttr-Syndication History-82',
+ 'zMedAnlyAstAttr-Syndication Processing Version-83',
+ 'zMedAnlyAstAttr-Syndication Processing Value-84',
+ 'zAsset-Orientation-85',
+ 'zAddAssetAttr-Original Orientation-86',
+ 'zAsset-Kind-87',
+ 'zAsset-Kind-Sub-Type-88',
+ 'zAddAssetAttr-Cloud Kind Sub Type-89',
+ 'zAsset-Playback Style-90',
+ 'zAsset-Playback Variation-91',
+ 'zAsset-Video Duration-92',
+ 'zExtAttr-Duration-93',
+ 'zAsset-Video CP Duration-94',
+ 'zAddAssetAttr-Video CP Duration Time Scale-95',
+ 'zAsset-Video CP Visibility State-96',
+ 'zAddAssetAttr-Video CP Display Value-97',
+ 'zAddAssetAttr-Video CP Display Time Scale-98',
+ 'zIntResou-Datastore Class ID-99',
+ 'zAsset-Cloud Placeholder Kind-100',
+ 'zIntResou-Local Availability-101',
+ 'zIntResou-Local Availability Target-102',
+ 'zIntResou-Cloud Local State-103',
+ 'zIntResou-Remote Availability-104',
+ 'zIntResou-Remote Availability Target-105',
+ 'zIntResou-Transient Cloud Master-106',
+ 'zIntResou-Side Car Index-107',
+ 'zIntResou- File ID-108',
+ 'zIntResou-Version-109',
+ 'zAddAssetAttr- Original-File-Size-110',
+ 'zIntResou-Resource Type-111',
+ 'zIntResou-Datastore Sub-Type-112',
+ 'zIntResou-Cloud Source Type-113',
+ 'zIntResou-Data Length-114',
+ 'zIntResou-Recipe ID-115',
+ ('zIntResou-Cloud Last Prefetch Date-116', 'datetime'),
+ 'zIntResou-Cloud Prefetch Count-117',
+ ('zIntResou- Cloud-Last-OnDemand Download-Date-118', 'datetime'),
+ 'zIntResou-UniformTypeID_UTI_Conformance_Hint-119',
+ 'zIntResou-Compact-UTI-120',
+ 'zAsset-Uniform Type ID-121',
+ 'zAsset-Original Color Space-122',
+ 'zCldMast-Uniform_Type_ID-123',
+ 'zCldMast-Full Size JPEG Source-124',
+ 'zAsset-HDR Gain-125',
+ 'zAsset-zHDR_Type-126',
+ 'zExtAttr-Codec-127',
+ 'zIntResou-Codec Four Char Code Name-128',
+ 'zCldMast-Codec Name-129',
+ 'zCldMast-Video Frame Rate-130',
+ 'zCldMast-Placeholder State-131',
+ 'zAsset-Depth_Type-132',
+ 'zAsset-Avalanche UUID-133',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-134',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-135',
+ 'zAddAssetAttr-Cloud Recovery State-136',
+ 'zAddAssetAttr-Cloud State Recovery Attempts Count-137',
+ 'zAsset-Deferred Processing Needed-138',
+ 'zAsset-Video Deferred Processing Needed-139',
+ 'zAddAssetAttr-Deferred Photo Identifier-140',
+ 'zAddAssetAttr-Deferred Processing Candidate Options-141',
+ 'zAsset-Has Adjustments-Camera-Effects-Filters-142',
+ ('zAsset-Adjustment Timestamp-143', 'datetime'),
+ 'zAddAssetAttr-Editor Bundle ID-144',
+ 'zAddAssetAttr-Montage-145',
+ 'zAsset-Favorite-146',
+ 'zAsset-Hidden-147',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-148',
+ ('zAsset-Trashed Date-149', 'datetime'),
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-150',
+ 'zAsset-Delete-Reason-151',
+ 'zIntResou-Trash State-152',
+ ('zIntResou-Trashed Date-153', 'datetime'),
+ 'zAsset-Cloud Delete State-154',
+ 'zIntResou-Cloud Delete State-155',
+ 'zAddAssetAttr-PTP Trashed State-156',
+ 'zIntResou-PTP Trashed State-157',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-158',
+ ('zMedAnlyAstAttr-Media Analysis Timestamp-159', 'datetime'),
+ ('zAsset-Analysis State Modification Date-160', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-161',
+ 'zAddAssetAttr- View Count-162',
+ 'zAddAssetAttr- Pending Play Count-163',
+ 'zAddAssetAttr- Play Count-164',
+ 'zAddAssetAttr- Pending Share Count-165',
+ 'zAddAssetAttr- Share Count-166',
+ 'zAddAssetAttr-Allowed for Analysis-167',
+ 'zAddAssetAttr-Scene Analysis Version-168',
+ 'zAddAssetAttr-Scene Analysis is From Preview-169',
+ ('zAddAssetAttr-Scene Analysis Timestamp-170', 'datetime'),
+ 'zAsset-Duplication Asset Visibility State-171',
+ 'zAddAssetAttr-Destination Asset Copy State-172',
+ 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-173',
+ 'zAddAssetAttr-Source Asset for Duplication Scope ID-174',
+ 'zCldMast-Source Master For Duplication Scope ID-175',
+ 'zAddAssetAttr-Source Asset For Duplication ID-176',
+ 'zCldMast-Source Master for Duplication ID-177',
+ 'zAddAssetAttr-Variation Suggestions States-178',
+ 'zAsset-High Frame Rate State-179',
+ 'zAsset-Video Key Frame Time Scale-180',
+ 'zAsset-Video Key Frame Value-181',
+ 'zExtAttr-ISO-182',
+ 'zExtAttr-Metering Mode-183',
+ 'zExtAttr-Sample Rate-184',
+ 'zExtAttr-Track Format-185',
+ 'zExtAttr-White Balance-186',
+ 'zExtAttr-Aperture-187',
+ 'zExtAttr-BitRate-188',
+ 'zExtAttr-Exposure Bias-189',
+ 'zExtAttr-Frames Per Second-190',
+ 'zExtAttr-Shutter Speed-191',
+ 'zExtAttr-Slush Scene Bias-192',
+ 'zExtAttr-Slush Version-193',
+ 'zExtAttr-Slush Preset-194',
+ 'zExtAttr-Slush Warm Bias-195',
+ 'zAsset-Height-196',
+ 'zAddAssetAttr-Original Height-197',
+ 'zIntResou-UnOriented Height-198',
+ 'zAsset-Width-199',
+ 'zAddAssetAttr-Original Width-200',
+ 'zIntResou-UnOriented Width-201',
+ 'zAsset-Thumbnail Index-202',
+ 'zAddAssetAttr-Embedded Thumbnail Height-203',
+ 'zAddAssetAttr-Embedded Thumbnail Length-204',
+ 'zAddAssetAttr-Embedded Thumbnail Offset-205',
+ 'zAddAssetAttr-Embedded Thumbnail Width-206',
+ 'zAsset-Packed Acceptable Crop Rect-207',
+ 'zAsset-Packed Badge Attributes-208',
+ 'zAsset-Packed Preferred Crop Rect-209',
+ 'zAsset-Curation Score-210',
+ 'zAsset-Camera Processing Adjustment State-211',
+ 'zAsset-Depth Type-212',
+ 'zAsset-Is Magic Carpet-Quicktime_MOV-file-213',
+ 'zAddAssetAttr-Orig Resource Choice-214',
+ 'zAsset-Spatial Type-215',
+ 'zAddAssetAttr-Spatial Over Capture Group ID-216',
+ 'zAddAssetAttr-Place Annotation Data-217',
+ 'zAddAssetAttr-Distance Identity-HEX-218',
+ 'zAddAssetAttr-Edited IPTC Attributes-219',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-220',
+ 'zAddAssetAttr-Accessibility Description-221',
+ 'zAddAssetAttr-Photo Stream Tag ID-222',
+ 'zAddAssetAttr-Share Type-223',
+ 'zAddAssetAttr-Library Scope Asset Contributors To Update-224',
+ 'zAsset-Overall Aesthetic Score-225',
+ 'zAsset-zENT-226',
+ 'zAsset-zOPT-227',
+ 'zAsset-Master= zCldMast-zPK-228',
+ 'zAsset-Extended Attributes= zExtAttr-zPK-229',
+ 'zAsset-Import Session Key-230',
+ 'zAsset-Photo Analysis Attributes Key-231',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-232',
+ 'zAsset-Computed Attributes Asset Key-233',
+ 'zAsset-Promotion Score-234',
+ 'zAsset-Iconic Score-235',
+ 'zAsset-Media Analysis Attributes Key-236',
+ 'zAsset-Media Group UUID-237',
+ 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-238',
+ 'zAsset.Cloud Collection GUID-239',
+ 'zAddAssetAttr-zENT-240',
+ 'ZAddAssetAttr-zOPT-241',
+ 'zAddAssetAttr-zAsset= zAsset_zPK-242',
+ 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-243',
+ 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-244',
+ 'zAddAssetAttr-Public Global UUID-245',
+ 'zAddAssetAttr-Original Assets UUID-246',
+ 'zAddAssetAttr-Originating Asset Identifier-247',
+ 'zAddAssetAttr.Adjusted Fingerprint-248',
+ 'zCldMast-zPK= zAsset-Master-249',
+ 'zCldMast-zENT-250',
+ 'zCldMast-zOPT-251',
+ 'zCldMast-Moment Share Key= zShare-zPK-252',
+ 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-253',
+ 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-254',
+ 'zCldMast-Originating Asset ID-255',
+ 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-256',
+ 'CMzCldMastMedData-zENT-257',
+ 'CMzCldMastMedData-CldMast= zCldMast-zPK-258',
+ 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-259',
+ 'AAAzCldMastMedData-zENT-260',
+ 'AAAzCldMastMedData-CldMast key-261',
+ 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-262',
+ 'zExtAttr-zPK= zAsset-zExtendedAttributes-263',
+ 'zExtAttr-zENT-264',
+ 'zExtAttr-zOPT-265',
+ 'zExtAttr-Asset Key-266',
+ 'zIntResou-zPK-267',
+ 'zIntResou-zENT-268',
+ 'zIntResou-zOPT-269',
+ 'zIntResou-Asset= zAsset_zPK-270',
+ 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-271',
+ 'zMedAnlyAstAttr-zEnt-272',
+ 'zMedAnlyAstAttr-zOpt-273',
+ 'zMedAnlyAstAttr-Asset= zAsset-zPK-274')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
+ elif version.parse(iosversion) >= version.parse("18"):
+ source_path = get_file_path(files_found, "Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
+
+ query = '''
+ SELECT
+ DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart',
+ zAsset.Z_PK AS 'zAsset-zPK',
+ zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
+ zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18',
+ zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18',
+ zCompSyncAttr.ZCLOUDCOMPUTESTATEADJUSTMENTFINGERPRINT AS 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18',
+ zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-iOS18',
+ CASE zIntResou.ZLOCALAVAILABILITY
+ WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)'
+ WHEN 1 THEN '1-IR_Asset_Avail_Locally-1'
+ WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || ''
+ END AS 'zIntResou-Local Availability-4QueryStart',
+ CASE zIntResou.ZREMOTEAVAILABILITY
+ WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0'
+ WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || ''
+ END AS 'zIntResou-Remote Availability-4QueryStart',
+ CASE zIntResou.ZRESOURCETYPE
+ WHEN 0 THEN '0-Photo-0'
+ WHEN 1 THEN '1-Video-1'
+ WHEN 3 THEN '3-Live-Photo-3'
+ WHEN 5 THEN '5-Adjustment-Data-5'
+ WHEN 6 THEN '6-Screenshot-6'
+ WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9'
+ WHEN 13 THEN '13-Movie-13'
+ WHEN 14 THEN '14-Wallpaper-14'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || ''
+ END AS 'zIntResou-Resource Type-4QueryStart',
+ CASE zIntResou.ZDATASTORESUBTYPE
+ WHEN 0 THEN '0-No Cloud Inter Resource-0'
+ WHEN 1 THEN '1-Main-Asset-Orig-Size-1'
+ WHEN 2 THEN '2-Photo-with-Adjustments-2'
+ WHEN 3 THEN '3-JPG-Large-Thumb-3'
+ WHEN 4 THEN '4-JPG-Med-Thumb-4'
+ WHEN 5 THEN '5-JPG-Small-Thumb-5'
+ WHEN 6 THEN '6-Video-Med-Data-6'
+ WHEN 7 THEN '7-Video-Small-Data-7'
+ WHEN 8 THEN '8-MP4-Cloud-Share-8'
+ WHEN 9 THEN '9-StillTesting'
+ WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10'
+ WHEN 11 THEN '11-StillTesting'
+ WHEN 12 THEN '12-StillTesting'
+ WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13'
+ WHEN 14 THEN '14-Wallpaper-14'
+ WHEN 15 THEN '15-Has-Markup-and-Adjustments-15'
+ WHEN 16 THEN '16-Video-with-Adjustments-16'
+ WHEN 17 THEN '17-RAW_Photo-17_RT'
+ WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18'
+ WHEN 19 THEN '19-Live-Photo-with-Adjustments-19'
+ WHEN 20 THEN '20-StillTesting'
+ WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21'
+ WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22'
+ WHEN 23 THEN '23-StillTesting'
+ WHEN 24 THEN '24-StillTesting'
+ WHEN 25 THEN '25-StillTesting'
+ WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26'
+ WHEN 27 THEN '27-StillTesting'
+ WHEN 28 THEN '28-MOV-Med-hdr-Data-28'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || ''
+ END AS 'zIntResou-Datastore Sub-Type-4QueryStart',
+ CASE zIntResou.ZRECIPEID
+ WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0'
+ WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737'
+ WHEN 65739 THEN '65739-JPG_Large_Thumb-65739'
+ WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741'
+ WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743'
+ WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749'
+ WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938'
+ WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072'
+ WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077'
+ WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079'
+ WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081'
+ WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272'
+ WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275'
+ WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277'
+ WHEN 131475 THEN '131475-medium-hdr-MOV-131475'
+ WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683'
+ WHEN 327687 THEN '627687-WallpaperComputeResource-627687'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || ''
+ END AS 'zIntResou-Recipe ID-4QueryStart',
+ CASE zAsset.ZCOMPLETE
+ WHEN 1 THEN '1-Yes-1'
+ END AS 'zAsset Complete',
+ CASE zAsset.ZBUNDLESCOPE
+ WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0'
+ WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1'
+ WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2'
+ WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || ''
+ END AS 'zAsset-Bundle Scope',
+ CASE zAsset.ZSYNDICATIONSTATE
+ WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0'
+ WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1'
+ WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2'
+ WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3'
+ WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8'
+ WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9'
+ WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || ''
+ END AS 'zAsset-Syndication State',
+ CASE zAsset.ZCLOUDISMYASSET
+ WHEN 0 THEN '0-Not_My_Asset_in_Shared_Album-0'
+ WHEN 1 THEN '1-My_Asset_in_Shared_Album-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISMYASSET || ''
+ END AS 'zAsset-Cloud is My Asset',
+ CASE zAsset.ZCLOUDISDELETABLE
+ WHEN 0 THEN '0-No-0'
+ WHEN 1 THEN '1-Yes-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISDELETABLE || ''
+ END AS 'zAsset-Cloud is deletable-Asset',
+ CASE zAsset.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Album-Conv_or_iCldPhotos_OFF=Asset_Not_Synced-0'
+ WHEN 1 THEN 'iCldPhotos ON=Asset_Can-Be-or-Has-Been_Synced_with_iCloud-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDLOCALSTATE || ''
+ END AS 'zAsset-Cloud_Local_State',
+ CASE zAsset.ZVISIBILITYSTATE
+ WHEN 0 THEN '0-Visible-PL-CameraRoll-0'
+ WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || ''
+ END AS 'zAsset-Visibility State',
+ zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make',
+ zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model',
+ zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model',
+ CASE zExtAttr.ZFLASHFIRED
+ WHEN 0 THEN '0-No Flash-0'
+ WHEN 1 THEN '1-Flash Fired-1'
+ ELSE 'Unknown-New-Value!: ' || zExtAttr.ZFLASHFIRED || ''
+ END AS 'zExtAttr-Flash Fired',
+ zExtAttr.ZFOCALLENGTH AS 'zExtAttr-Focal Length',
+ zExtAttr.ZFOCALLENGTHIN35MM AS 'zExtAttr-Focal Length in 35MM',
+ zExtAttr.ZDIGITALZOOMRATIO AS 'zExtAttr-Digital Zoom Ratio',
+ CASE zExtAttr.ZGENERATIVEAITYPE
+ WHEN 0 THEN '0-Gen_AI_Type_Not_Detected-0'
+ WHEN 2 THEN '2-CleanUp-SafetyFilter-2'
+ ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || ''
+ END AS 'zExtAttr-Generative_AI_Type',
+ zExtAttr.ZCREDIT AS 'zExtAttr-Credit',
+ CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE
+ WHEN 0 THEN '0-Back-Camera-Other-0'
+ WHEN 1 THEN '1-Front-Camera-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZDERIVEDCAMERACAPTUREDEVICE || ''
+ END AS 'zAsset-Derived Camera Capture Device',
+ CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE
+ WHEN 0 THEN '0-Back-Camera-Other-0'
+ WHEN 1 THEN '1-Front-Camera-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || ''
+ END AS 'zAddAssetAttr-Camera Captured Device',
+ zAsset.ZCAPTURESESSIONIDENTIFIER AS 'zAsset-Capture_Session_Identifier-iOS18',
+ CASE zAddAssetAttr.ZIMPORTEDBY
+ WHEN 0 THEN '0-Cloud-Other-0'
+ WHEN 1 THEN '1-Native-Back-Camera-1'
+ WHEN 2 THEN '2-Native-Front-Camera-2'
+ WHEN 3 THEN '3-Third-Party-App-3'
+ WHEN 4 THEN '4-StillTesting-4'
+ WHEN 5 THEN '5-PhotoBooth_PL-Asset-5'
+ WHEN 6 THEN '6-Third-Party-App-6'
+ WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7'
+ WHEN 8 THEN '8-System-Package-App-8'
+ WHEN 9 THEN '9-Native-App-9'
+ WHEN 10 THEN '10-StillTesting-10'
+ WHEN 11 THEN '11-StillTesting-11'
+ WHEN 12 THEN '12-SWY_Syndication_PL-12'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || ''
+ END AS 'zAddAssetAttr-Imported by',
+ CASE zCldMast.ZIMPORTEDBY
+ WHEN 0 THEN '0-Cloud-Other-0'
+ WHEN 1 THEN '1-Native-Back-Camera-1'
+ WHEN 2 THEN '2-Native-Front-Camera-2'
+ WHEN 3 THEN '3-Third-Party-App-3'
+ WHEN 4 THEN '4-StillTesting-4'
+ WHEN 5 THEN '5-PhotoBooth_PL-Asset-5'
+ WHEN 6 THEN '6-Third-Party-App-6'
+ WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7'
+ WHEN 8 THEN '8-System-Package-App-8'
+ WHEN 9 THEN '9-Native-App-9'
+ WHEN 10 THEN '10-StillTesting-10'
+ WHEN 11 THEN '11-StillTesting-11'
+ WHEN 12 THEN '12-SWY_Syndication_PL-12'
+ ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || ''
+ END AS 'zCldMast-Imported By',
+ zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier',
+ zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name',
+ zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID',
+ zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name',
+ CASE zAsset.ZISRECENTLYSAVED
+ WHEN 0 THEN '0-Not_Recently_Saved-0'
+ WHEN 1 THEN '1-Recently_Saved-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || ''
+ END AS 'zAsset-Is_Recently_Saved',
+ CASE zAsset.ZSAVEDASSETTYPE
+ WHEN 0 THEN '0-Saved-via-other-source-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ WHEN 2 THEN '2-StillTesting-2'
+ WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3'
+ WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4'
+ WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5'
+ WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6'
+ WHEN 7 THEN '7-StillTesting-7'
+ WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8'
+ WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || ''
+ END AS 'zAsset-Saved Asset Type',
+ zAsset.ZDIRECTORY AS 'zAsset-Directory-Path',
+ zAsset.ZFILENAME AS 'zAsset-Filename',
+ zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename',
+ zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename',
+ zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files',
+ CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE
+ WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0'
+ WHEN 1 THEN '1-Asset-In-Active-SPL-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || ''
+ END AS 'zAsset-Active Library Scope Participation State',
+ CASE zAsset.ZLIBRARYSCOPESHARESTATE
+ WHEN 0 THEN '0-Asset-Not-In-SPL-0'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || ''
+ END AS 'zAsset-Library Scope Share State- StillTesting',
+ DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date',
+ DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
+ CASE zAddAssetAttr.ZDATECREATEDSOURCE
+ WHEN 0 THEN '0-Cloud-Asset-0'
+ WHEN 1 THEN '1-Local_Asset_EXIF-1'
+ WHEN 3 THEN '3-Local_Asset_No_EXIF-3'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || ''
+ END AS 'zAddAssetAttr-Date Created Source',
+ DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
+ DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date',
+ DateTime(zIntResou.ZCLOUDMASTERDATECREATED + 978307200, 'UNIXEPOCH') AS 'zIntResou-CldMst Date Created',
+ zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name',
+ zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset',
+ zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset',
+ zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String',
+ DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
+ DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date',
+ CASE zCldMast.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-Not Synced with Cloud-0'
+ WHEN 1 THEN '1-Pending Upload-1'
+ WHEN 2 THEN '2-StillTesting'
+ WHEN 3 THEN '3-Synced with Cloud-3'
+ ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || ''
+ END AS 'zCldMast-Cloud Local State',
+ DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date',
+ DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files',
+ zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID',
+ DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date',
+ zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting',
+ DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date',
+ DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date',
+ zAsset.ZCLOUDDOWNLOADREQUESTS AS 'zAsset-Cloud Download Requests',
+ zAsset.ZCLOUDBATCHID AS 'zAsset-Cloud Batch ID',
+ zAddAssetAttr.ZUPLOADATTEMPTS AS 'zAddAssetAttr-Upload Attempts',
+ CASE zAsset.ZLATITUDE
+ WHEN -180.0 THEN '-180.0'
+ ELSE zAsset.ZLATITUDE
+ END AS 'zAsset-Latitude',
+ zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude',
+ CASE zAsset.ZLONGITUDE
+ WHEN -180.0 THEN '-180.0'
+ ELSE zAsset.ZLONGITUDE
+ END AS 'zAsset-Longitude',
+ zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude',
+ CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY
+ WHEN -1.0 THEN '-1.0'
+ ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY
+ END AS 'zAddAssetAttr-GPS Horizontal Accuracy',
+ zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash',
+ CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID
+ WHEN 0 THEN '0-Shifted Location Not Valid-0'
+ WHEN 1 THEN '1-Shifted Location Valid-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || ''
+ END AS 'zAddAssetAttr-Shifted Location Valid',
+ CASE
+ WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist'
+ ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL'
+ END AS 'zAddAssetAttr-Shifted Location Data',
+ CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID
+ WHEN 0 THEN '0-Reverse Location Not Valid-0'
+ WHEN 1 THEN '1-Reverse Location Valid-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || ''
+ END AS 'zAddAssetAttr-Reverse Location Is Valid',
+ CASE
+ WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist'
+ ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL'
+ END AS 'zAddAssetAttr-Reverse Location Data',
+ CASE AAAzCldMastMedData.Z_OPT
+ WHEN 1 THEN '1-StillTesting-Cloud-1'
+ WHEN 2 THEN '2-StillTesting-This Device-2'
+ WHEN 3 THEN '3-StillTesting-Muted-3'
+ WHEN 4 THEN '4-StillTesting-Unknown-4'
+ WHEN 5 THEN '5-StillTesting-Unknown-5'
+ ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || ''
+ END AS 'AAAzCldMastMedData-zOPT',
+ zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type',
+ CASE
+ WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist'
+ ELSE 'AAAzCldMastMedData-Data_Empty-NULL'
+ END AS 'AAAzCldMastMedData-Data',
+ CASE CMzCldMastMedData.Z_OPT
+ WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1'
+ WHEN 2 THEN '2-StillTesting-Local_Asset-2'
+ WHEN 3 THEN '3-StillTesting-Muted-3'
+ WHEN 4 THEN '4-StillTesting-Unknown-4'
+ WHEN 5 THEN '5-StillTesting-Unknown-5'
+ ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || ''
+ END AS 'CldMasterzCldMastMedData-zOPT',
+ zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type',
+ CASE
+ WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist'
+ ELSE 'CMzCldMastMedData-Data_Empty-NULL'
+ END AS 'CMzCldMastMedData-Data',
+ CASE zAsset.ZSEARCHINDEXREBUILDSTATE
+ WHEN 0 THEN '0-StillTesting-0'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSEARCHINDEXREBUILDSTATE || ''
+ END AS 'zAsset-Search Index Rebuild State',
+ zAddAssetAttr.ZSYNDICATIONHISTORY AS 'zAddAssetAttr-Syndication History',
+ zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVERSION AS 'zMedAnlyAstAttr-Syndication Processing Version',
+ CASE zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE
+ WHEN 0 THEN '0-NA-0'
+ WHEN 1 THEN '1-STILLTESTING_Wide-Camera_JPG-1'
+ WHEN 2 THEN '2-STILLTESTING_Telephoto_Camera_Lens-2'
+ WHEN 4 THEN '4-STILLTESTING_SWY_Asset_OrigAssetImport_SystemPackageApp-4'
+ WHEN 16 THEN '16-STILLTESTING-16'
+ WHEN 1024 THEN '1024-STILLTESTING_SWY_Asset_OrigAssetImport_NativeCamera-1024'
+ WHEN 2048 THEN '2048-STILLTESTING-2048'
+ WHEN 4096 THEN '4096-STILLTESTING_SWY_Asset_Manually_Saved-4096'
+ ELSE 'Unknown-New-Value!: ' || zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE || ''
+ END AS 'zMedAnlyAstAttr-Syndication Processing Value',
+ CASE zAsset.ZORIENTATION
+ WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1'
+ WHEN 2 THEN '2-Horizontal-Camera-(right)-2'
+ WHEN 3 THEN '3-Horizontal-Camera-(right)-3'
+ WHEN 4 THEN '4-Horizontal-Camera-(left)-4'
+ WHEN 5 THEN '5-Vertical-Camera-(top)-5'
+ WHEN 6 THEN '6-Vertical-Camera-(top)-6'
+ WHEN 7 THEN '7-Vertical-Camera-(bottom)-7'
+ WHEN 8 THEN '8-Vertical-Camera-(bottom)-8'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || ''
+ END AS 'zAsset-Orientation',
+ CASE zAddAssetAttr.ZORIGINALORIENTATION
+ WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1'
+ WHEN 2 THEN '2-Horizontal-Camera-(right)-2'
+ WHEN 3 THEN '3-Horizontal-Camera-(right)-3'
+ WHEN 4 THEN '4-Horizontal-Camera-(left)-4'
+ WHEN 5 THEN '5-Vertical-Camera-(top)-5'
+ WHEN 6 THEN '6-Vertical-Camera-(top)-6'
+ WHEN 7 THEN '7-Vertical-Camera-(bottom)-7'
+ WHEN 8 THEN '8-Vertical-Camera-(bottom)-8'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || ''
+ END AS 'zAddAssetAttr-Original Orientation',
+ CASE zAsset.ZKIND
+ WHEN 0 THEN '0-Photo-0'
+ WHEN 1 THEN '1-Video-1'
+ END AS 'zAsset-Kind',
+ CASE zAsset.ZISDETECTEDSCREENSHOT
+ WHEN 0 THEN '0-Not_Screenshot-0'
+ WHEN 1 THEN '1-Screenshot-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZISDETECTEDSCREENSHOT || ''
+ END AS 'zAsset-Is_Detected_Screenshot',
+ CASE zAsset.ZKINDSUBTYPE
+ WHEN 0 THEN '0-Still-Photo-0'
+ WHEN 1 THEN '1-Panorama-1'
+ WHEN 2 THEN '2-Live-Photo-2'
+ WHEN 10 THEN '10-SpringBoard-Screenshot-10'
+ WHEN 100 THEN '100-Video-100'
+ WHEN 101 THEN '101-Slow-Mo-Video-101'
+ WHEN 102 THEN '102-Time-lapse-Video-102'
+ WHEN 103 THEN '103-Replay_Screen_Recording-103'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || ''
+ END AS 'zAsset-Kind-Sub-Type',
+ CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE
+ WHEN 0 THEN '0-Still-Photo-0'
+ WHEN 1 THEN '1-StillTesting'
+ WHEN 2 THEN '2-Live-Photo-2'
+ WHEN 3 THEN '3-Screenshot-3'
+ WHEN 10 THEN '10-SpringBoard-Screenshot-10'
+ WHEN 100 THEN '100-Video-100'
+ WHEN 101 THEN '101-Slow-Mo-Video-101'
+ WHEN 102 THEN '102-Time-lapse-Video-102'
+ WHEN 103 THEN '103-Replay_Screen_Recording-103'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || ''
+ END AS 'zAddAssetAttr-Cloud Kind Sub Type',
+ CASE zAsset.ZPLAYBACKSTYLE
+ WHEN 1 THEN '1-Image-1'
+ WHEN 2 THEN '2-Image-Animated-2'
+ WHEN 3 THEN '3-Live-Photo-3'
+ WHEN 4 THEN '4-Video-4'
+ WHEN 5 THEN '5-Video-Looping-5'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || ''
+ END AS 'zAsset-Playback Style',
+ CASE zAsset.ZPLAYBACKVARIATION
+ WHEN 0 THEN '0-No_Playback_Variation-0'
+ WHEN 1 THEN '1-StillTesting_Playback_Variation-1'
+ WHEN 2 THEN '2-StillTesting_Playback_Variation-2'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || ''
+ END AS 'zAsset-Playback Variation',
+ CASE zAddAssetAttr.ZVIEWPRESENTATION
+ WHEN 0 THEN '0-Obs in iOS 18 still testing-0'
+ WHEN 1 THEN '1-Obs in iOS 18 still testing-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZVIEWPRESENTATION || ''
+ END AS 'zAddAssetAttr-View_Presentation-iOS18',
+ zAsset.ZDURATION AS 'zAsset-Video Duration',
+ zExtAttr.ZDURATION AS 'zExtAttr-Duration',
+ zAsset.ZVIDEOCPDURATIONVALUE AS 'zAsset-Video CP Duration',
+ zAddAssetAttr.ZVIDEOCPDURATIONTIMESCALE AS 'zAddAssetAttr-Video CP Duration Time Scale',
+ zAsset.ZVIDEOCPVISIBILITYSTATE AS 'zAsset-Video CP Visibility State',
+ zAddAssetAttr.ZVIDEOCPDISPLAYVALUE AS 'zAddAssetAttr-Video CP Display Value',
+ zAddAssetAttr.ZVIDEOCPDISPLAYTIMESCALE AS 'zAddAssetAttr-Video CP Display Time Scale',
+ CASE zIntResou.ZDATASTORECLASSID
+ WHEN 0 THEN '0-LPL-Asset_CPL-Asset-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ WHEN 2 THEN '2-Photo-Cloud-Sharing-Asset-2'
+ WHEN 3 THEN '3-SWY_Syndication_Asset-3'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORECLASSID || ''
+ END AS 'zIntResou-Datastore Class ID',
+ CASE zAsset.ZCLOUDPLACEHOLDERKIND
+ WHEN 0 THEN '0-Local&CloudMaster Asset-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ WHEN 2 THEN '2-StillTesting-2'
+ WHEN 3 THEN '3-JPG-Asset_Only_PhDa-Thumb-V2-3'
+ WHEN 4 THEN '4-LPL-JPG-Asset_CPLAsset-OtherType-4'
+ WHEN 5 THEN '5-Asset_synced_CPL_2_Device-5'
+ WHEN 6 THEN '6-StillTesting-6'
+ WHEN 7 THEN '7-LPL-poster-JPG-Asset_CPLAsset-MP4-7'
+ WHEN 8 THEN '8-LPL-JPG_Asset_CPLAsset-LivePhoto-MOV-8'
+ WHEN 9 THEN '9-CPL_MP4_Asset_Saved_2_LPL-9'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDPLACEHOLDERKIND || ''
+ END AS 'zAsset-Cloud Placeholder Kind',
+ CASE zIntResou.ZLOCALAVAILABILITY
+ WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)'
+ WHEN 1 THEN '1-IR_Asset_Avail_Locally-1'
+ WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || ''
+ END AS 'zIntResou-Local Availability',
+ CASE zIntResou.ZLOCALAVAILABILITYTARGET
+ WHEN 0 THEN '0-StillTesting-0'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITYTARGET || ''
+ END AS 'zIntResou-Local Availability Target',
+ CASE zIntResou.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-IR_Asset_Not_Synced_No_IR-CldMastDateCreated-0'
+ WHEN 1 THEN '1-IR_Asset_Pending-Upload-1'
+ WHEN 2 THEN '2-IR_Asset_Photo_Cloud_Share_Asset_On-Local-Device-2'
+ WHEN 3 THEN '3-IR_Asset_Synced_iCloud-3'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDLOCALSTATE || ''
+ END AS 'zIntResou-Cloud Local State',
+ CASE zIntResou.ZREMOTEAVAILABILITY
+ WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0'
+ WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || ''
+ END AS 'zIntResou-Remote Availability',
+ CASE zIntResou.ZREMOTEAVAILABILITYTARGET
+ WHEN 0 THEN '0-StillTesting-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITYTARGET || ''
+ END AS 'zIntResou-Remote Availability Target',
+ zIntResou.ZTRANSIENTCLOUDMASTER AS 'zIntResou-Transient Cloud Master',
+ zIntResou.ZSIDECARINDEX AS 'zIntResou-Side Car Index',
+ zIntResou.ZFILEID AS 'zIntResou- File ID',
+ CASE zIntResou.ZVERSION
+ WHEN 0 THEN '0-IR_Asset_Standard-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ WHEN 2 THEN '2-IR_Asset_Adjustments-Mutation-2'
+ WHEN 3 THEN '3-IR_Asset_No_IR-CldMastDateCreated-3'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZVERSION || ''
+ END AS 'zIntResou-Version',
+ zAddAssetAttr.ZORIGINALFILESIZE AS 'zAddAssetAttr- Original-File-Size',
+ CASE zIntResou.ZRESOURCETYPE
+ WHEN 0 THEN '0-Photo-0'
+ WHEN 1 THEN '1-Video-1'
+ WHEN 3 THEN '3-Live-Photo-3'
+ WHEN 5 THEN '5-Adjustment-Data-5'
+ WHEN 6 THEN '6-Screenshot-6'
+ WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9'
+ WHEN 13 THEN '13-Movie-13'
+ WHEN 14 THEN '14-Wallpaper-14'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || ''
+ END AS 'zIntResou-Resource Type',
+ CASE zIntResou.ZDATASTORESUBTYPE
+ WHEN 0 THEN '0-No Cloud Inter Resource-0'
+ WHEN 1 THEN '1-Main-Asset-Orig-Size-1'
+ WHEN 2 THEN '2-Photo-with-Adjustments-2'
+ WHEN 3 THEN '3-JPG-Large-Thumb-3'
+ WHEN 4 THEN '4-JPG-Med-Thumb-4'
+ WHEN 5 THEN '5-JPG-Small-Thumb-5'
+ WHEN 6 THEN '6-Video-Med-Data-6'
+ WHEN 7 THEN '7-Video-Small-Data-7'
+ WHEN 8 THEN '8-MP4-Cloud-Share-8'
+ WHEN 9 THEN '9-StillTesting'
+ WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10'
+ WHEN 11 THEN '11-StillTesting'
+ WHEN 12 THEN '12-StillTesting'
+ WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13'
+ WHEN 14 THEN '14-Wallpaper-14'
+ WHEN 15 THEN '15-Has-Markup-and-Adjustments-15'
+ WHEN 16 THEN '16-Video-with-Adjustments-16'
+ WHEN 17 THEN '17-RAW_Photo-17_RT'
+ WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18'
+ WHEN 19 THEN '19-Live-Photo-with-Adjustments-19'
+ WHEN 20 THEN '20-StillTesting'
+ WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21'
+ WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22'
+ WHEN 23 THEN '23-StillTesting'
+ WHEN 24 THEN '24-StillTesting'
+ WHEN 25 THEN '25-StillTesting'
+ WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26'
+ WHEN 27 THEN '27-StillTesting'
+ WHEN 28 THEN '28-MOV-Med-hdr-Data-28'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || ''
+ END AS 'zIntResou-Datastore Sub-Type',
+ CASE zIntResou.ZCLOUDSOURCETYPE
+ WHEN 0 THEN '0-NA-0'
+ WHEN 1 THEN '1-Main-Asset-Orig-Size-1'
+ WHEN 2 THEN '2-Photo-with-Adjustments-2'
+ WHEN 3 THEN '3-JPG-Large-Thumb-3'
+ WHEN 4 THEN '4-JPG-Med-Thumb-4'
+ WHEN 5 THEN '5-JPG-Small-Thumb-5'
+ WHEN 6 THEN '6-Video-Med-Data-6'
+ WHEN 7 THEN '7-Video-Small-Data-7'
+ WHEN 8 THEN '8-MP4-Cloud-Share-8'
+ WHEN 9 THEN '9-StillTesting'
+ WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10'
+ WHEN 11 THEN '11-StillTesting'
+ WHEN 12 THEN '12-StillTesting'
+ WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13'
+ WHEN 14 THEN '14-Wallpaper-14'
+ WHEN 15 THEN '15-Has-Markup-and-Adjustments-15'
+ WHEN 16 THEN '16-Video-with-Adjustments-16'
+ WHEN 17 THEN '17-RAW_Photo-17_RT'
+ WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18'
+ WHEN 19 THEN '19-Live-Photo-with-Adjustments-19'
+ WHEN 20 THEN '20-StillTesting'
+ WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21'
+ WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22'
+ WHEN 23 THEN '23-StillTesting'
+ WHEN 24 THEN '24-StillTesting'
+ WHEN 25 THEN '25-StillTesting'
+ WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26'
+ WHEN 27 THEN '27-StillTesting'
+ WHEN 28 THEN '28-MOV-Med-hdr-Data-28'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDSOURCETYPE || ''
+ END AS 'zIntResou-Cloud Source Type',
+ zIntResou.ZDATALENGTH AS 'zIntResou-Data Length',
+ CASE zIntResou.ZRECIPEID
+ WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0'
+ WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737'
+ WHEN 65739 THEN '65739-JPG_Large_Thumb-65739'
+ WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741'
+ WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743'
+ WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749'
+ WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938'
+ WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072'
+ WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077'
+ WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079'
+ WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081'
+ WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272'
+ WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275'
+ WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277'
+ WHEN 131475 THEN '131475-medium-hdr-MOV-131475'
+ WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683'
+ WHEN 327687 THEN '627687-WallpaperComputeResource-627687'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || ''
+ END AS 'zIntResou-Recipe ID',
+ CASE zIntResou.ZCLOUDLASTPREFETCHDATE
+ WHEN 0 THEN '0-NA-0'
+ ELSE DateTime(zIntResou.ZCLOUDLASTPREFETCHDATE + 978307200, 'UNIXEPOCH')
+ END AS 'zIntResou-Cloud Last Prefetch Date',
+ zIntResou.ZCLOUDPREFETCHCOUNT AS 'zIntResou-Cloud Prefetch Count',
+ DateTime(zIntResou.ZCLOUDLASTONDEMANDDOWNLOADDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou- Cloud-Last-OnDemand Download-Date',
+ CASE zIntResou.ZUTICONFORMANCEHINT
+ WHEN 0 THEN '0-NA-Doesnt_Conform-0'
+ WHEN 1 THEN '1-UTTypeImage-1'
+ WHEN 2 THEN '2-UTTypeProRawPhoto-2'
+ WHEN 3 THEN '3-UTTypeMovie-3'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZUTICONFORMANCEHINT || ''
+ END AS 'zIntResou-UniformTypeID_UTI_Conformance_Hint',
+ CASE zIntResou.ZCOMPACTUTI
+ WHEN 1 THEN '1-JPEG-THM-1'
+ WHEN 3 THEN '3-HEIC-3'
+ WHEN 6 THEN '6-PNG-6'
+ WHEN 7 THEN '7-StillTesting'
+ WHEN 9 THEN '9-DNG-9'
+ WHEN 23 THEN '23-JPEG-HEIC-quicktime-mov-23'
+ WHEN 24 THEN '24-MPEG4-24'
+ WHEN 36 THEN '36-Wallpaper-36'
+ WHEN 37 THEN '37-Adj-Mutation_Data-37'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZCOMPACTUTI || ''
+ END AS 'zIntResou-Compact-UTI',
+ zAsset.ZUNIFORMTYPEIDENTIFIER AS 'zAsset-Uniform Type ID',
+ zAsset.ZORIGINALCOLORSPACE AS 'zAsset-Original Color Space',
+ zCldMast.ZUNIFORMTYPEIDENTIFIER AS 'zCldMast-Uniform_Type_ID',
+ CASE zCldMast.ZFULLSIZEJPEGSOURCE
+ WHEN 0 THEN '0-CldMast-JPEG-Source-Video Still-Testing-0'
+ WHEN 1 THEN '1-CldMast-JPEG-Source-Other- Still-Testing-1'
+ ELSE 'Unknown-New-Value!: ' || zCldMast.ZFULLSIZEJPEGSOURCE || ''
+ END AS 'zCldMast-Full Size JPEG Source',
+ zAsset.ZHDRGAIN AS 'zAsset-HDR Gain',
+ CASE zAsset.ZHDRTYPE
+ WHEN 0 THEN '0-No-HDR-0'
+ WHEN 3 THEN '3-HDR_Photo-3_RT'
+ WHEN 4 THEN '4-Non-HDR_Version-4_RT'
+ WHEN 5 THEN '5-HEVC_Movie-5'
+ WHEN 6 THEN '6-Panorama-6_RT'
+ WHEN 10 THEN '10-HDR-Gain-10'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZHDRTYPE || ''
+ END AS 'zAsset-zHDR_Type',
+ zExtAttr.ZCODEC AS 'zExtAttr-Codec',
+ zIntResou.ZCODECFOURCHARCODENAME AS 'zIntResou-Codec Four Char Code Name',
+ zCldMast.ZCODECNAME AS 'zCldMast-Codec Name',
+ zCldMast.ZVIDEOFRAMERATE AS 'zCldMast-Video Frame Rate',
+ zCldMast.ZPLACEHOLDERSTATE AS 'zCldMast-Placeholder State',
+ CASE zAsset.ZDEPTHTYPE
+ WHEN 0 THEN '0-Not_Portrait-0_RT'
+ ELSE 'Portrait: ' || zAsset.ZDEPTHTYPE || ''
+ END AS 'zAsset-Depth_Type',
+ zAsset.ZAVALANCHEUUID AS 'zAsset-Avalanche UUID',
+ CASE zAsset.ZAVALANCHEKIND
+ WHEN 0 THEN '0-No_Avalanche iOS18_Still_Testing-0'
+ WHEN 1 THEN '1-Is_Avalanche iOS18_Still_Testing-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEKIND || ''
+ END AS 'zAsset-Avalanche_Kind-iOS18',
+ CASE zAsset.ZAVALANCHEPICKTYPE
+ WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT'
+ WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT'
+ WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT'
+ WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT'
+ WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT'
+ WHEN 32 THEN '32-StillTesting-32_RT'
+ WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEPICKTYPE || ''
+ END AS 'zAsset-Avalanche_Pick_Type-BurstAsset',
+ CASE zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE
+ WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT'
+ WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT'
+ WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT'
+ WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT'
+ WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT'
+ WHEN 32 THEN '32-StillTesting-32_RT'
+ WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE || ''
+ END AS 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset',
+ CASE zAddAssetAttr.ZCLOUDRECOVERYSTATE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDRECOVERYSTATE || ''
+ END AS 'zAddAssetAttr-Cloud Recovery State',
+ zAddAssetAttr.ZCLOUDSTATERECOVERYATTEMPTSCOUNT AS 'zAddAssetAttr-Cloud State Recovery Attempts Count',
+ zAsset.ZDEFERREDPROCESSINGNEEDED AS 'zAsset-Deferred Processing Needed',
+ zAsset.ZVIDEODEFERREDPROCESSINGNEEDED AS 'zAsset-Video Deferred Processing Needed',
+ zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier',
+ zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options',
+ CASE zAsset.ZADJUSTMENTSSTATE
+ WHEN 0 THEN '0-No-Adjustments-0'
+ WHEN 2 THEN '2-Adjusted-PhotosAppEdit-2'
+ WHEN 3 THEN '3-Adjusted-Camera-lens-3'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || ''
+ END AS 'zAsset-Adjustments_State',
+ DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp',
+ DateTime(zCompSyncAttr.ZCLOUDCOMPUTESTATELASTUPDATEDDATE + 978307200, 'UNIXEPOCH') AS 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date',
+ zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID',
+ zAddAssetAttr.ZMONTAGE AS 'zAddAssetAttr-Montage',
+ CASE zCompSyncAttr.ZLOCALANALYSISMAJORVERSION
+ WHEN 1 THEN '1-Is_Local_Analysis_Major_Version-1'
+ ELSE 'Unknown-New-Value!: ' || zCompSyncAttr.ZLOCALANALYSISMAJORVERSION || ''
+ END AS 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18',
+ CASE zAsset.ZFAVORITE
+ WHEN 0 THEN '0-Asset Not Favorite-0'
+ WHEN 1 THEN '1-Asset Favorite-1'
+ END AS 'zAsset-Favorite',
+ CASE zAsset.ZHIDDEN
+ WHEN 0 THEN '0-Asset Not Hidden-0'
+ WHEN 1 THEN '1-Asset Hidden-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZHIDDEN || ''
+ END AS 'zAsset-Hidden',
+ CASE zAsset.ZTRASHEDSTATE
+ WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0'
+ WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || ''
+ END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
+ DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
+ zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK',
+ CASE zAsset.ZDELETEREASON
+ WHEN 1 THEN '1-StillTesting Delete-Reason-1'
+ WHEN 2 THEN '2-StillTesting Delete-Reason-2'
+ WHEN 3 THEN '3-StillTesting Delete-Reason-3'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZDELETEREASON || ''
+ END AS 'zAsset-Delete-Reason',
+ CASE zIntResou.ZTRASHEDSTATE
+ WHEN 0 THEN '0-zIntResou-Not In Trash-Recently Deleted-0'
+ WHEN 1 THEN '1-zIntResou-In Trash-Recently Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZTRASHEDSTATE || ''
+ END AS 'zIntResou-Trash State',
+ DateTime(zIntResou.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou-Trashed Date',
+ CASE zAsset.ZCLOUDDELETESTATE
+ WHEN 0 THEN '0-Cloud Asset Not Deleted-0'
+ WHEN 1 THEN '1-Cloud Asset Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDDELETESTATE || ''
+ END AS 'zAsset-Cloud Delete State',
+ CASE zIntResou.ZCLOUDDELETESTATE
+ WHEN 0 THEN '0-Cloud IntResou Not Deleted-0'
+ WHEN 1 THEN '1-Cloud IntResou Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDDELETESTATE || ''
+ END AS 'zIntResou-Cloud Delete State',
+ CASE zAddAssetAttr.ZPTPTRASHEDSTATE
+ WHEN 0 THEN '0-PTP Not in Trash-0'
+ WHEN 1 THEN '1-PTP In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZPTPTRASHEDSTATE || ''
+ END AS 'zAddAssetAttr-PTP Trashed State',
+ CASE zIntResou.ZPTPTRASHEDSTATE
+ WHEN 0 THEN '0-PTP IntResou Not in Trash-0'
+ WHEN 1 THEN '1-PTP IntResou In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZPTPTRASHEDSTATE || ''
+ END AS 'zIntResou-PTP Trashed State',
+ zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type',
+ DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp',
+ DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modification Date',
+ zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count',
+ zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count',
+ zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count',
+ zAddAssetAttr.ZPLAYCOUNT AS 'zAddAssetAttr- Play Count',
+ zAddAssetAttr.ZPENDINGSHARECOUNT AS 'zAddAssetAttr- Pending Share Count',
+ zAddAssetAttr.ZSHARECOUNT AS 'zAddAssetAttr- Share Count',
+ CASE zAddAssetAttr.ZALLOWEDFORANALYSIS
+ WHEN 0 THEN '0-Asset Not Allowed For Analysis-0'
+ WHEN 1 THEN '1-Asset Allowed for Analysis-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZALLOWEDFORANALYSIS || ''
+ END AS 'zAddAssetAttr-Allowed for Analysis',
+ zAddAssetAttr.ZSCENEANALYSISVERSION AS 'zAddAssetAttr-Scene Analysis Version',
+ CASE zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW
+ WHEN 0 THEN '0-No-0'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW || ''
+ END AS 'zAddAssetAttr-Scene Analysis is From Preview',
+ DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp',
+ CASE zAsset.ZDUPLICATEASSETVISIBILITYSTATE
+ WHEN 0 THEN '0-No-Duplicates-0'
+ WHEN 1 THEN '1-Has Duplicate-1'
+ WHEN 2 THEN '2-Is a Duplicate-2'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZDUPLICATEASSETVISIBILITYSTATE || ''
+ END AS 'zAsset-Duplication Asset Visibility State',
+ CASE zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE
+ WHEN 0 THEN '0-No Copy-0'
+ WHEN 1 THEN '1-Has A Copy-1'
+ WHEN 2 THEN '2-Has A Copy-2'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE || ''
+ END AS 'zAddAssetAttr-Destination Asset Copy State',
+ CASE zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE
+ WHEN 0 THEN '0-Unknown-StillTesting-0'
+ WHEN 1 THEN '1-Unknown-StillTesting-1'
+ WHEN 2 THEN '2-Unknown-StillTesting-2'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE || ''
+ END AS 'zAddAssetAttr-Duplicate Detector Perceptual Processing State',
+ zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONSCOPEIDENTIFIER AS 'zAddAssetAttr-Source Asset for Duplication Scope ID',
+ zCldMast.ZSOURCEMASTERFORDUPLICATIONSCOPEIDENTIFIER AS 'zCldMast-Source Master For Duplication Scope ID',
+ zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONIDENTIFIER AS 'zAddAssetAttr-Source Asset For Duplication ID',
+ zCldMast.ZSOURCEMASTERFORDUPLICATIONIDENTIFIER AS 'zCldMast-Source Master for Duplication ID',
+ zAddAssetAttr.ZVARIATIONSUGGESTIONSTATES AS 'zAddAssetAttr-Variation Suggestions States',
+ zAsset.ZHIGHFRAMERATESTATE AS 'zAsset-High Frame Rate State',
+ zAsset.ZVIDEOKEYFRAMETIMESCALE AS 'zAsset-Video Key Frame Time Scale',
+ zAsset.ZVIDEOKEYFRAMEVALUE AS 'zAsset-Video Key Frame Value',
+ CASE zAsset.ZCURRENTSLEETCAST
+ WHEN 0 THEN '0-ObsButUnkn iOS18_Still_Testing-0'
+ WHEN 1 THEN '1-NotYetObs iOS18_Still_Testing-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCURRENTSLEETCAST || ''
+ END AS 'zAsset-Current_Sleet_Cast-iOS18',
+ CASE zAddAssetAttr.ZSLEETISREVERSIBLE
+ WHEN 0 THEN '0-Obs in iOS 18 still testing-0'
+ WHEN 1 THEN '1-Obs in iOS 18 still testing-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSLEETISREVERSIBLE || ''
+ END AS 'zAddAssetAttr.Sleet_Is_Reversible-iOS18',
+ zExtAttr.ZSLEETRENDERINGVERSION AS 'zExtAttr-Sleet_Rendering_Version-iOS18',
+ zExtAttr.ZSLEETINTENSITY AS 'zExtAttr-Sleet_Intensity-iOS18',
+ zExtAttr.ZSLEETTONEBIAS AS 'zExtAttr-Sleet_Tone_Bias-iOS18',
+ zExtAttr.ZSLEETCOLORBIAS AS 'zExtAttr-Sleet_Color_Bias-iOS18',
+ CASE zExtAttr.ZSLEETCAST
+ WHEN 0 THEN '0-ObsButUnkn iOS18_Still_Testing-0'
+ ELSE 'Unknown-New-Value!: ' || zExtAttr.ZSLEETCAST || ''
+ END AS 'zExtAttr-Sleet_Cast-iOS18',
+ zExtAttr.ZISO AS 'zExtAttr-ISO',
+ zExtAttr.ZMETERINGMODE AS 'zExtAttr-Metering Mode',
+ zExtAttr.ZSAMPLERATE AS 'zExtAttr-Sample Rate',
+ zExtAttr.ZTRACKFORMAT AS 'zExtAttr-Track Format',
+ zExtAttr.ZWHITEBALANCE AS 'zExtAttr-White Balance',
+ zExtAttr.ZAPERTURE AS 'zExtAttr-Aperture',
+ zExtAttr.ZBITRATE AS 'zExtAttr-BitRate',
+ zExtAttr.ZEXPOSUREBIAS AS 'zExtAttr-Exposure Bias',
+ zExtAttr.ZFPS AS 'zExtAttr-Frames Per Second',
+ zExtAttr.ZSHUTTERSPEED AS 'zExtAttr-Shutter Speed',
+ zExtAttr.ZSLUSHSCENEBIAS AS 'zExtAttr-Slush Scene Bias',
+ zExtAttr.ZSLUSHVERSION AS 'zExtAttr-Slush Version',
+ zExtAttr.ZSLUSHPRESET AS 'zExtAttr-Slush Preset',
+ zExtAttr.ZSLUSHWARMTHBIAS AS 'zExtAttr-Slush Warm Bias',
+ zAsset.ZHEIGHT AS 'zAsset-Height',
+ zAddAssetAttr.ZORIGINALHEIGHT AS 'zAddAssetAttr-Original Height',
+ zIntResou.ZUNORIENTEDHEIGHT AS 'zIntResou-UnOriented Height',
+ zAsset.ZWIDTH AS 'zAsset-Width',
+ zAddAssetAttr.ZORIGINALWIDTH AS 'zAddAssetAttr-Original Width',
+ zIntResou.ZUNORIENTEDWIDTH AS 'zIntResou-UnOriented Width',
+ zAsset.ZTHUMBNAILINDEX AS 'zAsset-Thumbnail Index',
+ zAddAssetAttr.ZEMBEDDEDTHUMBNAILHEIGHT AS 'zAddAssetAttr-Embedded Thumbnail Height',
+ zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length',
+ zAddAssetAttr.ZEMBEDDEDTHUMBNAILOFFSET AS 'zAddAssetAttr-Embedded Thumbnail Offset',
+ zAddAssetAttr.ZEMBEDDEDTHUMBNAILWIDTH AS 'zAddAssetAttr-Embedded Thumbnail Width',
+ zAsset.ZPACKEDACCEPTABLECROPRECT AS 'zAsset-Packed Acceptable Crop Rect',
+ zAsset.ZPACKEDBADGEATTRIBUTES AS 'zAsset-Packed Badge Attributes',
+ zAsset.ZPACKEDPREFERREDCROPRECT AS 'zAsset-Packed Preferred Crop Rect',
+ zAsset.ZCURATIONSCORE AS 'zAsset-Curation Score',
+ zAsset.ZCAMERAPROCESSINGADJUSTMENTSTATE AS 'zAsset-Camera Processing Adjustment State',
+ zAsset.ZDEPTHTYPE AS 'zAsset-Depth Type',
+ zAsset.ZISMAGICCARPET AS 'zAsset-Is Magic Carpet-Quicktime_MOV-file',
+ CASE zAddAssetAttr.ZORIGINALRESOURCECHOICE
+ WHEN 0 THEN '0-JPEG Original Resource-0'
+ WHEN 1 THEN '1-RAW Original Resource-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZORIGINALRESOURCECHOICE || ''
+ END AS 'zAddAssetAttr-Orig Resource Choice',
+ CASE zAsset.ZSPATIALTYPE
+ WHEN 0 THEN '0-UnknownTesting-0'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSPATIALTYPE || ''
+ END AS 'zAsset-Spatial Type',
+ zAddAssetAttr.ZSPATIALOVERCAPTUREGROUPIDENTIFIER AS 'zAddAssetAttr-Spatial Over Capture Group ID',
+ zAddAssetAttr.ZPLACEANNOTATIONDATA AS 'zAddAssetAttr-Place Annotation Data',
+ zAddAssetAttr.ZDISTANCEIDENTITY AS 'zAddAssetAttr-Distance Identity-HEX',
+ zAddAssetAttr.ZEDITEDIPTCATTRIBUTES AS 'zAddAssetAttr-Edited IPTC Attributes',
+ zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website',
+ zAddAssetAttr.ZACCESSIBILITYDESCRIPTION AS 'zAddAssetAttr-Accessibility Description',
+ zAddAssetAttr.ZPHOTOSTREAMTAGID AS 'zAddAssetAttr-Photo Stream Tag ID',
+ CASE zAddAssetAttr.ZSHARETYPE
+ WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0'
+ WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || ''
+ END AS 'zAddAssetAttr-Share Type',
+ zAddAssetAttr.ZLIBRARYSCOPEASSETCONTRIBUTORSTOUPDATE AS 'zAddAssetAttr-Library Scope Asset Contributors To Update',
+ zAsset.ZOVERALLAESTHETICSCORE AS 'zAsset-Overall Aesthetic Score',
+ zMedAnlyAstAttr.ZMEDIAANALYSISIMAGEVERSION AS 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18',
+ zMedAnlyAstAttr.ZIMAGECAPTIONVERSION AS 'zMedAnlyAstAttr-Image_Caption_Version-iOS18',
+ zMedAnlyAstAttr.ZVIDEOCAPTIONVERSION AS 'zMedAnlyAstAttr-Video_Caption_Version-iOS18',
+ zMedAnlyAstAttr.ZVALOCATIONANALYSISVERSION AS 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18',
+ zAsset.Z_ENT AS 'zAsset-zENT',
+ zAsset.Z_OPT AS 'zAsset-zOPT',
+ zAsset.ZMASTER AS 'zAsset-Master= zCldMast-zPK',
+ zAsset.ZEXTENDEDATTRIBUTES AS 'zAsset-Extended Attributes= zExtAttr-zPK',
+ zAsset.ZIMPORTSESSION AS 'zAsset-Import Session Key',
+ zAsset.ZPHOTOANALYSISATTRIBUTES AS 'zAsset-Photo Analysis Attributes Key',
+ zAsset.Z_FOK_CLOUDFEEDASSETSENTRY AS 'zAsset-FOK-Cloud Feed Asset Entry Key',
+ zAsset.ZCOMPUTEDATTRIBUTES AS 'zAsset-Computed Attributes Asset Key',
+ zAsset.ZPROMOTIONSCORE AS 'zAsset-Promotion Score',
+ zAsset.ZICONICSCORE AS 'zAsset-Iconic Score',
+ zAsset.ZMEDIAANALYSISATTRIBUTES AS 'zAsset-Media Analysis Attributes Key',
+ zAsset.ZMEDIAGROUPUUID AS 'zAsset-Media Group UUID',
+ zAsset.ZCLOUDASSETGUID AS 'zAsset-Cloud_Asset_GUID = store.cloudphotodb',
+ zAsset.ZCLOUDCOLLECTIONGUID AS 'zAsset.Cloud Collection GUID',
+ zAddAssetAttr.Z_ENT AS 'zAddAssetAttr-zENT',
+ zAddAssetAttr.Z_OPT AS 'ZAddAssetAttr-zOPT',
+ zAddAssetAttr.ZASSET AS 'zAddAssetAttr-zAsset= zAsset_zPK',
+ zAddAssetAttr.ZUNMANAGEDADJUSTMENT AS 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK',
+ zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK',
+ zAddAssetAttr.ZPUBLICGLOBALUUID AS 'zAddAssetAttr-Public Global UUID',
+ zAddAssetAttr.ZORIGINALASSETSUUID AS 'zAddAssetAttr-Original Assets UUID',
+ zAddAssetAttr.ZORIGINATINGASSETIDENTIFIER AS 'zAddAssetAttr-Originating Asset Identifier',
+ zCldMast.Z_PK AS 'zCldMast-zPK= zAsset-Master',
+ zCldMast.Z_ENT AS 'zCldMast-zENT',
+ zCldMast.Z_OPT AS 'zCldMast-zOPT',
+ zCldMast.ZMOMENTSHARE AS 'zCldMast-Moment Share Key= zShare-zPK',
+ zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK',
+ zCldMast.ZCLOUDMASTERGUID AS 'zCldMast-Cloud_Master_GUID = store.cloudphotodb',
+ zCldMast.ZORIGINATINGASSETIDENTIFIER AS 'zCldMast-Originating Asset ID',
+ CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key',
+ CMzCldMastMedData.Z_ENT AS 'CMzCldMastMedData-zENT',
+ CMzCldMastMedData.ZCLOUDMASTER AS 'CMzCldMastMedData-CldMast= zCldMast-zPK',
+ AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData',
+ AAAzCldMastMedData.Z_ENT AS 'AAAzCldMastMedData-zENT',
+ AAAzCldMastMedData.ZCLOUDMASTER AS 'AAAzCldMastMedData-CldMast key',
+ AAAzCldMastMedData.ZADDITIONALASSETATTRIBUTES AS 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK',
+ zAsset.ZCOMPUTESYNCATTRIBUTES AS 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-iOS18',
+ zCompSyncAttr.Z_PK AS 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18',
+ zCompSyncAttr.ZASSET AS 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18',
+ zCompSyncAttr.Z_ENT AS 'zCompSyncAttr-zENT-iOS18',
+ zCompSyncAttr.Z_OPT AS 'zCompSyncAttr-zOPT-iOS18',
+ zCompSyncAttr.ZLOCALANALYSISSTAGE AS 'zCompSyncAttr-Local_Analysis_Stage-iOS18',
+ zCompSyncAttr.ZCLOUDCOMPUTESTATEVERSION AS 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18',
+ zExtAttr.Z_PK AS 'zExtAttr-zPK= zAsset-zExtendedAttributes',
+ zExtAttr.Z_ENT AS 'zExtAttr-zENT',
+ zExtAttr.Z_OPT AS 'zExtAttr-zOPT',
+ zExtAttr.ZASSET AS 'zExtAttr-Asset Key',
+ zIntResou.Z_PK AS 'zIntResou-zPK',
+ zIntResou.Z_ENT AS 'zIntResou-zENT',
+ zIntResou.Z_OPT AS 'zIntResou-zOPT',
+ zIntResou.ZASSET AS 'zIntResou-Asset= zAsset_zPK',
+ zMedAnlyAstAttr.Z_PK AS 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata',
+ zMedAnlyAstAttr.Z_ENT AS 'zMedAnlyAstAttr-zEnt',
+ zMedAnlyAstAttr.Z_OPT AS 'zMedAnlyAstAttr-zOpt',
+ zMedAnlyAstAttr.ZASSET AS 'zMedAnlyAstAttr-Asset= zAsset-zPK'
+ FROM ZASSET zAsset
+ LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
+ LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES
+ LEFT JOIN ZINTERNALRESOURCE zIntResou ON zIntResou.ZASSET = zAsset.Z_PK
+ LEFT JOIN ZSCENEPRINT zSceneP ON zSceneP.Z_PK = zAddAssetAttr.ZSCENEPRINT
+ LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
+ LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA
+ LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
+ LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK
+ LEFT JOIN ZCOMPUTESYNCATTRIBUTES zCompSyncAttr ON zCompSyncAttr.Z_PK = zAsset.ZCOMPUTESYNCATTRIBUTES
+ WHERE (zIntResou.ZDATASTORESUBTYPE = 1) & (zIntResou.ZLOCALAVAILABILITY = -1) & (zIntResou.ZFINGERPRINT IS NOT NULL)
+ ORDER BY zAsset.ZDATECREATED
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
+ row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
+ row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
+ row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
+ row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
+ row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
+ row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
+ row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
+ row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
+ row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
+ row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
+ row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
+ row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
+ row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
+ row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
+ row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
+ row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
+ row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
+ row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
+ row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
+ row[300], row[301], row[302]))
+
+ data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'),
+ 'zAsset-zPK-1',
+ 'zAddAssetAttr-zPK-2',
+ 'zAsset-UUID = store.cloudphotodb-3',
+ 'zAddAssetAttr-Original Stable Hash-iOS18-4',
+ 'zIntResou-Fingerprint-5',
+ 'zAddAssetAttr.Adjusted Stable Hash-iOS18-6',
+ 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18-7',
+ 'zIntResou-Stable Hash-iOS18-8',
+ 'zIntResou-Local Availability-4QueryStart-9',
+ 'zIntResou-Remote Availability-4QueryStart-10',
+ 'zIntResou-Resource Type-4QueryStart-11',
+ 'zIntResou-Datastore Sub-Type-4QueryStart-12',
+ 'zIntResou-Recipe ID-4QueryStart-13',
+ 'zAsset Complete-14',
+ 'zAsset-Bundle Scope-15',
+ 'zAsset-Syndication State-16',
+ 'zAsset-Cloud is My Asset-17',
+ 'zAsset-Cloud is deletable-Asset-18',
+ 'zAsset-Cloud_Local_State-19',
+ 'zAsset-Visibility State-20',
+ 'zExtAttr-Camera Make-21',
+ 'zExtAttr-Camera Model-22',
+ 'zExtAttr-Lens Model-23',
+ 'zExtAttr-Flash Fired-24',
+ 'zExtAttr-Focal Length-25',
+ 'zExtAttr-Focal Length in 35MM-26',
+ 'zExtAttr-Digital Zoom Ratio-27',
+ 'zExtAttr-Generative_AI_Type-iOS18-28',
+ 'zExtAttr-Credit-iOS18-29',
+ 'zAsset-Derived Camera Capture Device-30',
+ 'zAddAssetAttr-Camera Captured Device-31',
+ 'zAsset-Capture_Session_Identifier-iOS18-32',
+ 'zAddAssetAttr-Imported by-33',
+ 'zCldMast-Imported By-34',
+ 'zAddAssetAttr.Imported by Bundle Identifier-35',
+ 'zAddAssetAttr-Imported By Display Name-36',
+ 'zCldMast-Imported by Bundle ID-37',
+ 'zCldMast-Imported by Display Name-38',
+ 'zAsset-Is_Recently_Saved-iOS18-39',
+ 'zAsset-Saved Asset Type-40',
+ 'zAsset-Directory-Path-41',
+ 'zAsset-Filename-42',
+ 'zAddAssetAttr- Original Filename-43',
+ 'zCldMast- Original Filename-44',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-45',
+ 'zAsset-Active Library Scope Participation State-46',
+ 'zAsset-Library Scope Share State- StillTesting-47',
+ ('zAsset-Added Date-48', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-49', 'datetime'),
+ ('zAddAssetAttr-Date Created Source-50', 'datetime'),
+ ('zAsset-Date Created-51', 'datetime'),
+ ('zCldMast-Creation Date-52', 'datetime'),
+ ('zIntResou-CldMst Date Created-53', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-54',
+ 'zAddAssetAttr-Time Zone Offset-55',
+ 'zAddAssetAttr-Inferred Time Zone Offset-56',
+ 'zAddAssetAttr-EXIF-String-57',
+ ('zAsset-Modification Date-58', 'datetime'),
+ ('zAsset-Last Shared Date-59', 'datetime'),
+ 'zCldMast-Cloud Local State-60',
+ ('zCldMast-Import Date-61', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-62', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-63',
+ ('zAddAssetAttr-Alt Import Image Date-64', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-65',
+ ('zAsset-Cloud Batch Publish Date-66', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-67', 'datetime'),
+ 'zAsset-Cloud Download Requests-68',
+ 'zAsset-Cloud Batch ID-69',
+ 'zAddAssetAttr-Upload Attempts-70',
+ 'zAsset-Latitude-71',
+ 'zExtAttr-Latitude-72',
+ 'zAsset-Longitude-73',
+ 'zExtAttr-Longitude-74',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-75',
+ 'zAddAssetAttr-Location Hash-76',
+ 'zAddAssetAttr-Shifted Location Valid-77',
+ 'zAddAssetAttr-Shifted Location Data-78',
+ 'zAddAssetAttr-Reverse Location Is Valid-79',
+ 'zAddAssetAttr-Reverse Location Data-80',
+ 'AAAzCldMastMedData-zOPT-81',
+ 'zAddAssetAttr-Media Metadata Type-82',
+ 'AAAzCldMastMedData-Data-83',
+ 'CldMasterzCldMastMedData-zOPT-84',
+ 'zCldMast-Media Metadata Type-85',
+ 'CMzCldMastMedData-Data-86',
+ 'zAsset-Search Index Rebuild State-87',
+ 'zAddAssetAttr-Syndication History-88',
+ 'zMedAnlyAstAttr-Syndication Processing Version-89',
+ 'zMedAnlyAstAttr-Syndication Processing Value-90',
+ 'zAsset-Orientation-91',
+ 'zAddAssetAttr-Original Orientation-92',
+ 'zAsset-Kind-93',
+ 'zAsset-Is_Detected_Screenshot-iOS18-94',
+ 'zAsset-Kind-Sub-Type-95',
+ 'zAddAssetAttr-Cloud Kind Sub Type-96',
+ 'zAsset-Playback Style-97',
+ 'zAsset-Playback Variation-98',
+ 'zAddAssetAttr-View_Presentation-iOS18-99',
+ 'zAsset-Video Duration-100',
+ 'zExtAttr-Duration-101',
+ 'zAsset-Video CP Duration-102',
+ 'zAddAssetAttr-Video CP Duration Time Scale-103',
+ 'zAsset-Video CP Visibility State-104',
+ 'zAddAssetAttr-Video CP Display Value-105',
+ 'zAddAssetAttr-Video CP Display Time Scale-106',
+ 'zIntResou-Datastore Class ID-107',
+ 'zAsset-Cloud Placeholder Kind-108',
+ 'zIntResou-Local Availability-109',
+ 'zIntResou-Local Availability Target-110',
+ 'zIntResou-Cloud Local State-111',
+ 'zIntResou-Remote Availability-112',
+ 'zIntResou-Remote Availability Target-113',
+ 'zIntResou-Transient Cloud Master-114',
+ 'zIntResou-Side Car Index-115',
+ 'zIntResou- File ID-116',
+ 'zIntResou-Version-117',
+ 'zAddAssetAttr- Original-File-Size-118',
+ 'zIntResou-Resource Type-119',
+ 'zIntResou-Datastore Sub-Type-120',
+ 'zIntResou-Cloud Source Type-121',
+ 'zIntResou-Data Length-122',
+ 'zIntResou-Recipe ID-123',
+ ('zIntResou-Cloud Last Prefetch Date-124', 'datetime'),
+ 'zIntResou-Cloud Prefetch Count-125',
+ ('zIntResou- Cloud-Last-OnDemand Download-Date-126', 'datetime'),
+ 'zIntResou-UniformTypeID_UTI_Conformance_Hint-127',
+ 'zIntResou-Compact-UTI-128',
+ 'zAsset-Uniform Type ID-129',
+ 'zAsset-Original Color Space-130',
+ 'zCldMast-Uniform_Type_ID-131',
+ 'zCldMast-Full Size JPEG Source-132',
+ 'zAsset-HDR Gain-133',
+ 'zAsset-zHDR_Type-134',
+ 'zExtAttr-Codec-135',
+ 'zIntResou-Codec Four Char Code Name-136',
+ 'zCldMast-Codec Name-137',
+ 'zCldMast-Video Frame Rate-138',
+ 'zCldMast-Placeholder State-139',
+ 'zAsset-Depth_Type-140',
+ 'zAsset-Avalanche UUID-141',
+ 'zAsset-Avalanche_Kind-iOS18-142',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-143',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-144',
+ 'zAddAssetAttr-Cloud Recovery State-145',
+ 'zAddAssetAttr-Cloud State Recovery Attempts Count-146',
+ 'zAsset-Deferred Processing Needed-147',
+ 'zAsset-Video Deferred Processing Needed-148',
+ 'zAddAssetAttr-Deferred Photo Identifier-149',
+ 'zAddAssetAttr-Deferred Processing Candidate Options-150',
+ 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18-151',
+ ('zAsset-Adjustment Timestamp-152', 'datetime'),
+ 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18-153',
+ 'zAddAssetAttr-Editor Bundle ID-154',
+ 'zAddAssetAttr-Montage-155',
+ 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18-156',
+ 'zAsset-Favorite-157',
+ 'zAsset-Hidden-158',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-159',
+ ('zAsset-Trashed Date-160', 'datetime'),
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-161',
+ 'zAsset-Delete-Reason-162',
+ 'zIntResou-Trash State-163',
+ ('zIntResou-Trashed Date-164', 'datetime'),
+ 'zAsset-Cloud Delete State-165',
+ 'zIntResou-Cloud Delete State-166',
+ 'zAddAssetAttr-PTP Trashed State-167',
+ 'zIntResou-PTP Trashed State-168',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-169',
+ ('zMedAnlyAstAttr-Media Analysis Timestamp-170', 'datetime'),
+ ('zAsset-Analysis State Modification Date-171', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-172',
+ 'zAddAssetAttr- View Count-173',
+ 'zAddAssetAttr- Pending Play Count-174',
+ 'zAddAssetAttr- Play Count-175',
+ 'zAddAssetAttr- Pending Share Count-176',
+ 'zAddAssetAttr- Share Count-177',
+ 'zAddAssetAttr-Allowed for Analysis-178',
+ 'zAddAssetAttr-Scene Analysis Version-179',
+ 'zAddAssetAttr-Scene Analysis is From Preview-180',
+ ('zAddAssetAttr-Scene Analysis Timestamp-181', 'datetime'),
+ 'zAsset-Duplication Asset Visibility State-182',
+ 'zAddAssetAttr-Destination Asset Copy State-183',
+ 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-184',
+ 'zAddAssetAttr-Source Asset for Duplication Scope ID-185',
+ 'zCldMast-Source Master For Duplication Scope ID-186',
+ 'zAddAssetAttr-Source Asset For Duplication ID-187',
+ 'zCldMast-Source Master for Duplication ID-188',
+ 'zAddAssetAttr-Variation Suggestions States-189',
+ 'zAsset-High Frame Rate State-190',
+ 'zAsset-Video Key Frame Time Scale-191',
+ 'zAsset-Video Key Frame Value-192',
+ 'zAsset-Current_Sleet_Cast-iOS18-193',
+ 'zAddAssetAttr.Sleet_Is_Reversible-iOS18-194',
+ 'zExtAttr-Sleet_Rendering_Version-iOS18-195',
+ 'zExtAttr-Sleet_Intensity-iOS18-196',
+ 'zExtAttr-Sleet_Tone_Bias-iOS18-197',
+ 'zExtAttr-Sleet_Color_Bias-iOS18-198',
+ 'zExtAttr-Sleet_Cast-iOS18-199',
+ 'zExtAttr-ISO-200',
+ 'zExtAttr-Metering Mode-201',
+ 'zExtAttr-Sample Rate-202',
+ 'zExtAttr-Track Format-203',
+ 'zExtAttr-White Balance-204',
+ 'zExtAttr-Aperture-205',
+ 'zExtAttr-BitRate-206',
+ 'zExtAttr-Exposure Bias-207',
+ 'zExtAttr-Frames Per Second-208',
+ 'zExtAttr-Shutter Speed-209',
+ 'zExtAttr-Slush Scene Bias-210',
+ 'zExtAttr-Slush Version-211',
+ 'zExtAttr-Slush Preset-212',
+ 'zExtAttr-Slush Warm Bias-213',
+ 'zAsset-Height-214',
+ 'zAddAssetAttr-Original Height-215',
+ 'zIntResou-UnOriented Height-216',
+ 'zAsset-Width-217',
+ 'zAddAssetAttr-Original Width-218',
+ 'zIntResou-UnOriented Width-219',
+ 'zAsset-Thumbnail Index-220',
+ 'zAddAssetAttr-Embedded Thumbnail Height-221',
+ 'zAddAssetAttr-Embedded Thumbnail Length-222',
+ 'zAddAssetAttr-Embedded Thumbnail Offset-223',
+ 'zAddAssetAttr-Embedded Thumbnail Width-224',
+ 'zAsset-Packed Acceptable Crop Rect-225',
+ 'zAsset-Packed Badge Attributes-226',
+ 'zAsset-Packed Preferred Crop Rect-227',
+ 'zAsset-Curation Score-228',
+ 'zAsset-Camera Processing Adjustment State-229',
+ 'zAsset-Depth Type-230',
+ 'zAsset-Is Magic Carpet-Quicktime_MOV-file-231',
+ 'zAddAssetAttr-Orig Resource Choice-232',
+ 'zAsset-Spatial Type-233',
+ 'zAddAssetAttr-Spatial Over Capture Group ID-234',
+ 'zAddAssetAttr-Place Annotation Data-235',
+ 'zAddAssetAttr-Distance Identity-HEX-236',
+ 'zAddAssetAttr-Edited IPTC Attributes-237',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-238',
+ 'zAddAssetAttr-Accessibility Description-239',
+ 'zAddAssetAttr-Photo Stream Tag ID-240',
+ 'zAddAssetAttr-Share Type-241',
+ 'zAddAssetAttr-Library Scope Asset Contributors To Update-242',
+ 'zAsset-Overall Aesthetic Score-243',
+ 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18-244',
+ 'zMedAnlyAstAttr-Image_Caption_Version-iOS18-245',
+ 'zMedAnlyAstAttr-Video_Caption_Version-iOS18-246',
+ 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18-247',
+ 'zAsset-zENT-248',
+ 'zAsset-zOPT-249',
+ 'zAsset-Master= zCldMast-zPK-250',
+ 'zAsset-Extended Attributes= zExtAttr-zPK-251',
+ 'zAsset-Import Session Key-252',
+ 'zAsset-Photo Analysis Attributes Key-253',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-254',
+ 'zAsset-Computed Attributes Asset Key-255',
+ 'zAsset-Promotion Score-256',
+ 'zAsset-Iconic Score-257',
+ 'zAsset-Media Analysis Attributes Key-258',
+ 'zAsset-Media Group UUID-259',
+ 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-260',
+ 'zAsset.Cloud Collection GUID-261',
+ 'zAddAssetAttr-zENT-262',
+ 'ZAddAssetAttr-zOPT-263',
+ 'zAddAssetAttr-zAsset= zAsset_zPK-264',
+ 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-265',
+ 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-266',
+ 'zAddAssetAttr-Public Global UUID-267',
+ 'zAddAssetAttr-Original Assets UUID-268',
+ 'zAddAssetAttr-Originating Asset Identifier-269',
+ 'zCldMast-zPK= zAsset-Master-270',
+ 'zCldMast-zENT-271',
+ 'zCldMast-zOPT-272',
+ 'zCldMast-Moment Share Key= zShare-zPK-273',
+ 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-274',
+ 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-275',
+ 'zCldMast-Originating Asset ID-276',
+ 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-277',
+ 'CMzCldMastMedData-zENT-278',
+ 'CMzCldMastMedData-CldMast= zCldMast-zPK-279',
+ 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-280',
+ 'AAAzCldMastMedData-zENT-281',
+ 'AAAzCldMastMedData-CldMast key-282',
+ 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-283',
+ 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-iOS18-284',
+ 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18-285',
+ 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18-286',
+ 'zCompSyncAttr-zENT-iOS18-287',
+ 'zCompSyncAttr-zOPT-iOS18-288',
+ 'zCompSyncAttr-Local_Analysis_Stage-iOS18-289',
+ 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18-290',
+ 'zExtAttr-zPK= zAsset-zExtendedAttributes-291',
+ 'zExtAttr-zENT-292',
+ 'zExtAttr-zOPT-293',
+ 'zExtAttr-Asset Key-294',
+ 'zIntResou-zPK-295',
+ 'zIntResou-zENT-296',
+ 'zIntResou-zOPT-297',
+ 'zIntResou-Asset= zAsset_zPK-298',
+ 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-299',
+ 'zMedAnlyAstAttr-zEnt-300',
+ 'zMedAnlyAstAttr-zOpt-301',
+ 'zMedAnlyAstAttr-Asset= zAsset-zPK-302')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph5HasLocations.py b/scripts/artifacts/Ph5HasLocations.py
index 1529ab45..4e671f8f 100644
--- a/scripts/artifacts/Ph5HasLocations.py
+++ b/scripts/artifacts/Ph5HasLocations.py
@@ -1,41 +1,66 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 2.0
-#
-# Description:
-# Parses basic asset record data from Photos.sqlite for assets that have valid locations and supports iOS 11-18.
-# The results for this script will contain one record per ZASSET table Z_PK value.
-# This parser is based on research and SQLite queries written by Scott Koenig
-# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347
-#
+__artifacts_v2__ = {
+ 'Ph5_1AssetshavevalidlocationsPhDaPsql': {
+ 'name': 'Ph5.1-Assets have valid locations-PhDaPsql',
+ 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite for assets that have valid'
+ ' locations from the ZASSET and ZEXTENDEDATTRIBUTES table ZLATITUDE fields'
+ ' and supports iOS 11-18. The results for this script will contain'
+ ' one row per ZASSET table Z_PK value.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-C-Other_Artifacts',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ },
+ 'Ph5_2AssetshavevalidlocationsSyndPL': {
+ 'name': 'Ph5.2-Assets have valid locations-SyndPL',
+ 'description': 'Parses basic asset row data from Syndication.photoslibrary-database-Photos.sqlite'
+ ' for assets that have valid locations from the ZASSET and ZEXTENDEDATTRIBUTES table'
+ ' ZLATITUDE fields and supports iOS 11-18. The results for this script will contain'
+ ' one row per ZASSET table Z_PK value.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite',
+ 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts',
+ 'notes': '',
+ 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import plistlib
import nska_deserialize as nd
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
+@artifact_processor
+def Ph5_1AssetshavevalidlocationsPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
-def get_ph5haslocationsphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("10.3.4"):
- logfunc("Unsupported version for PhotosData-Photos.sqlite assets with valid locations from iOS " + iosversion)
+ logfunc("Unsupported version for PhotosData-Photos.sqlite iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("13")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
CASE zAsset.ZLATITUDE
@@ -80,97 +105,75 @@ def get_ph5haslocationsphdapsql(files_found, report_folder, seeker, wrap_text, t
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE zAsset.ZLATITUDE > 0
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
- aaashiftedlocation_geoplaceresult = ''
- # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
- aaareverselocation_geoplaceresult = ''
-
- # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
- if row[10] is not None:
- pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[4] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[10])
-
- with open(pathto, "rb") as fp:
- plist = plistlib.load(fp)
- for key, val in plist.items():
- if key == "geoPlaceResult":
- aaashiftedlocation_geoplaceresult = val
-
- # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
- if row[13] is not None:
- pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[4] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[13])
-
- with open(pathto, "rb") as fp:
- plist = plistlib.load(fp)
- for key, val in plist.items():
- if key == "geoPlaceResult":
- aaareverselocation_geoplaceresult = val
-
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- aaashiftedlocation_geoplaceresult,
- row[11], row[12],
- aaareverselocation_geoplaceresult,
- row[14], row[15], row[16], row[17]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for assets that have valid' \
- ' locations from the ZASSET and ZEXTENDEDATTRIBUTES table ZLATITUDE fields' \
- ' and supports iOS 11-13. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph5.1-Has Locations-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph5.1-Has Locations-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-Latitude-1',
- 'zAsset-Longitude-2',
- 'zAsset-Directory-Path-3',
- 'zAsset-Filename-4',
- 'zAddAssetAttr- Original Filename-5',
- 'zCldMast- Original Filename-6',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-7',
- 'zAddAssetAttr-Shifted Location Valid-8',
- 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-9',
- 'zAddAssetAttr-Shifted Location Data-geoPlaceResult-10',
- 'zAddAssetAttr-Reverse Location Is Valid-11',
- 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-12',
- 'zAddAssetAttr-Reverse Location Data-geoPlaceResult-13',
- 'zAsset-zPK-14',
- 'zAddAssetAttr-zPK-15',
- 'zAsset-UUID = store.cloudphotodb-16',
- 'zAddAssetAttr-Master Fingerprint-17')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph5.1-Has Locations-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph5.1-Has Locations-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite assets with valid locations')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
+ aaashiftedlocation_geoplaceresult = ''
+ # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
+ aaareverselocation_geoplaceresult = ''
+
+ # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
+ if row[10] is not None:
+ pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[4] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[10])
+
+ with open(pathto, "rb") as fp:
+ plist = plistlib.load(fp)
+ for key, val in plist.items():
+ if key == "geoPlaceResult":
+ aaashiftedlocation_geoplaceresult = val
+
+ # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
+ if row[13] is not None:
+ pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[4] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[13])
+
+ with open(pathto, "rb") as fp:
+ plist = plistlib.load(fp)
+ for key, val in plist.items():
+ if key == "geoPlaceResult":
+ aaareverselocation_geoplaceresult = val
+
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ aaashiftedlocation_geoplaceresult,
+ row[11], row[12],
+ aaareverselocation_geoplaceresult,
+ row[14], row[15], row[16], row[17]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-Latitude-1',
+ 'zAsset-Longitude-2',
+ 'zAsset-Directory-Path-3',
+ 'zAsset-Filename-4',
+ 'zAddAssetAttr- Original Filename-5',
+ 'zCldMast- Original Filename-6',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-7',
+ 'zAddAssetAttr-Shifted Location Valid-8',
+ 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-9',
+ 'zAddAssetAttr-Shifted Location Data-geoPlaceResult-10',
+ 'zAddAssetAttr-Reverse Location Is Valid-11',
+ 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-12',
+ 'zAddAssetAttr-Reverse Location Data-geoPlaceResult-13',
+ 'zAsset-zPK-14',
+ 'zAddAssetAttr-zPK-15',
+ 'zAsset-UUID = store.cloudphotodb-16',
+ 'zAddAssetAttr-Master Fingerprint-17')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("13")) & (version.parse(iosversion) < version.parse("14")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
CASE zAsset.ZLATITUDE
@@ -245,114 +248,92 @@ def get_ph5haslocationsphdapsql(files_found, report_folder, seeker, wrap_text, t
CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
WHERE zAsset.ZLATITUDE > 0
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
- aaashiftedlocation_postal_address = ''
- # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
- aaareverselocation_postal_address = ''
-
- # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
- if row[10] is not None:
- pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[4] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[10])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- aaashiftedlocation_postal_address = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[4])
- else:
- logfunc('Error reading exported plist from zAsset-Filename ' + row[4])
-
- # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
- if row[13] is not None:
- pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[4] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[13])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- aaareverselocation_postal_address = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[4])
- else:
- logfunc('Error reading exported plist from zAsset-Filename ' + row[4])
-
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- aaashiftedlocation_postal_address,
- row[11], row[12],
- aaareverselocation_postal_address,
- row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for assets that have valid' \
- ' locations from the ZASSET and ZEXTENDEDATTRIBUTES table ZLATITUDE fields' \
- ' and supports iOS 11-13. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph5.1-Has Locations-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph5.1-Has Locations-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-Latitude-1',
- 'zAsset-Longitude-2',
- 'zAsset-Directory-Path-3',
- 'zAsset-Filename-4',
- 'zAddAssetAttr- Original Filename-5',
- 'zCldMast- Original Filename-6',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-7',
- 'zAddAssetAttr-Shifted Location Valid-8',
- 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-9',
- 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-10',
- 'zAddAssetAttr-Reverse Location Is Valid-11',
- 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-12',
- 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-13',
- 'AAAzCldMastMedData-zOPT-14',
- 'zAddAssetAttr-Media Metadata Type-15',
- 'AAAzCldMastMedData-Data-16',
- 'CldMasterzCldMastMedData-zOPT-17',
- 'zCldMast-Media Metadata Type-18',
- 'CMzCldMastMedData-Data-19',
- 'zAsset-zPK-20',
- 'zAddAssetAttr-zPK-21',
- 'zAsset-UUID = store.cloudphotodb-22',
- 'zAddAssetAttr-Master Fingerprint-23')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph5.1-Has Locations-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph5.1-Has Locations-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite assets with valid locations')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
+ aaashiftedlocation_postal_address = ''
+ # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
+ aaareverselocation_postal_address = ''
+
+ # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
+ if row[10] is not None:
+ pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[4] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[10])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ aaashiftedlocation_postal_address = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[4])
+ else:
+ logfunc('Error reading exported plist from zAsset-Filename ' + row[4])
+
+ # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
+ if row[13] is not None:
+ pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[4] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[13])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ aaareverselocation_postal_address = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[4])
+ else:
+ logfunc('Error reading exported plist from zAsset-Filename ' + row[4])
+
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ aaashiftedlocation_postal_address,
+ row[11], row[12],
+ aaareverselocation_postal_address,
+ row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-Latitude-1',
+ 'zAsset-Longitude-2',
+ 'zAsset-Directory-Path-3',
+ 'zAsset-Filename-4',
+ 'zAddAssetAttr- Original Filename-5',
+ 'zCldMast- Original Filename-6',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-7',
+ 'zAddAssetAttr-Shifted Location Valid-8',
+ 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-9',
+ 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-10',
+ 'zAddAssetAttr-Reverse Location Is Valid-11',
+ 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-12',
+ 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-13',
+ 'AAAzCldMastMedData-zOPT-14',
+ 'zAddAssetAttr-Media Metadata Type-15',
+ 'AAAzCldMastMedData-Data-16',
+ 'CldMasterzCldMastMedData-zOPT-17',
+ 'zCldMast-Media Metadata Type-18',
+ 'CMzCldMastMedData-Data-19',
+ 'zAsset-zPK-20',
+ 'zAddAssetAttr-zPK-21',
+ 'zAsset-UUID = store.cloudphotodb-22',
+ 'zAddAssetAttr-Master Fingerprint-23')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
CASE zAsset.ZLATITUDE
@@ -435,118 +416,96 @@ def get_ph5haslocationsphdapsql(files_found, report_folder, seeker, wrap_text, t
WHERE (zAsset.ZLATITUDE > 0) OR
(zExtAttr.ZLATITUDE > 0)
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
- aaashiftedlocation_postal_address = ''
- # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
- aaareverselocation_postal_address = ''
-
- # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
- if row[13] is not None:
- pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[7] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[13])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- aaashiftedlocation_postal_address = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[7])
- else:
- logfunc('Error reading exported plist from zAsset-Filename ' + row[7])
-
- # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
- if row[16] is not None:
- pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[7] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[16])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- aaareverselocation_postal_address = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[7])
- else:
- logfunc('Error reading exported plist from zAsset-Filename ' + row[7])
-
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12],
- aaashiftedlocation_postal_address,
- row[14], row[15],
- aaareverselocation_postal_address,
- row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for assets that have valid' \
- ' locations from the ZASSET and ZEXTENDEDATTRIBUTES table ZLATITUDE fields' \
- ' and supports iOS 14. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph5.1-Has Locations-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph5.1-Has Locations-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-Latitude-1',
- 'zExtAttr-Latitude-2',
- 'zAsset-Longitude-3',
- 'zExtAttr-Longitude-4',
- 'zAddAssetAttr-GPS Horizontal Accuracy-5',
- 'zAsset-Directory-Path-6',
- 'zAsset-Filename-7',
- 'zAddAssetAttr- Original Filename-8',
- 'zCldMast- Original Filename-9',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-10',
- 'zAddAssetAttr-Shifted Location Valid-11',
- 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-12',
- 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-13',
- 'zAddAssetAttr-Reverse Location Is Valid-14',
- 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-15',
- 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-16',
- 'AAAzCldMastMedData-zOPT-17',
- 'zAddAssetAttr-Media Metadata Type-18',
- 'AAAzCldMastMedData-Data-19',
- 'CldMasterzCldMastMedData-zOPT-20',
- 'zCldMast-Media Metadata Type-21',
- 'CMzCldMastMedData-Data-22',
- 'zAsset-zPK-23',
- 'zAddAssetAttr-zPK-24',
- 'zAsset-UUID = store.cloudphotodb-25',
- 'zAddAssetAttr-Master Fingerprint-26')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph5.1-Has Locations-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph5.1-Has Locations-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite assets with valid locations')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
+ aaashiftedlocation_postal_address = ''
+ # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
+ aaareverselocation_postal_address = ''
+
+ # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
+ if row[13] is not None:
+ pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[7] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[13])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ aaashiftedlocation_postal_address = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[7])
+ else:
+ logfunc('Error reading exported plist from zAsset-Filename ' + row[7])
+
+ # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
+ if row[16] is not None:
+ pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[7] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[16])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ aaareverselocation_postal_address = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[7])
+ else:
+ logfunc('Error reading exported plist from zAsset-Filename ' + row[7])
+
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12],
+ aaashiftedlocation_postal_address,
+ row[14], row[15],
+ aaareverselocation_postal_address,
+ row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-Latitude-1',
+ 'zExtAttr-Latitude-2',
+ 'zAsset-Longitude-3',
+ 'zExtAttr-Longitude-4',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-5',
+ 'zAsset-Directory-Path-6',
+ 'zAsset-Filename-7',
+ 'zAddAssetAttr- Original Filename-8',
+ 'zCldMast- Original Filename-9',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-10',
+ 'zAddAssetAttr-Shifted Location Valid-11',
+ 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-12',
+ 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-13',
+ 'zAddAssetAttr-Reverse Location Is Valid-14',
+ 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-15',
+ 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-16',
+ 'AAAzCldMastMedData-zOPT-17',
+ 'zAddAssetAttr-Media Metadata Type-18',
+ 'AAAzCldMastMedData-Data-19',
+ 'CldMasterzCldMastMedData-zOPT-20',
+ 'zCldMast-Media Metadata Type-21',
+ 'CMzCldMastMedData-Data-22',
+ 'zAsset-zPK-23',
+ 'zAddAssetAttr-zPK-24',
+ 'zAsset-UUID = store.cloudphotodb-25',
+ 'zAddAssetAttr-Master Fingerprint-26')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
CASE zAsset.ZLATITUDE
@@ -630,119 +589,97 @@ def get_ph5haslocationsphdapsql(files_found, report_folder, seeker, wrap_text, t
WHERE (zAsset.ZLATITUDE > 0) OR
(zExtAttr.ZLATITUDE > 0)
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
- aaashiftedlocation_postal_address = ''
- # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
- aaareverselocation_postal_address = ''
-
- # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
- if row[14] is not None:
- pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[7] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[14])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- aaashiftedlocation_postal_address = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[7])
- else:
- logfunc('Error reading exported plist from zAsset-Filename ' + row[7])
-
- # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
- if row[17] is not None:
- pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[7] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[17])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- aaareverselocation_postal_address = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[7])
- else:
- logfunc('Error reading exported plist from zAsset-Filename ' + row[7])
-
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13],
- aaashiftedlocation_postal_address,
- row[15], row[16],
- aaareverselocation_postal_address,
- row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25],
- row[26], row[27]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for assets that have valid' \
- ' locations from the ZASSET and ZEXTENDEDATTRIBUTES table ZLATITUDE fields' \
- ' and supports iOS 15-17. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph5.1-Has Locations-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph5.1-Has Locations-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-Latitude-1',
- 'zExtAttr-Latitude-2',
- 'zAsset-Longitude-3',
- 'zExtAttr-Longitude-4',
- 'zAddAssetAttr-GPS Horizontal Accuracy-5',
- 'zAsset-Directory-Path-6',
- 'zAsset-Filename-7',
- 'zAddAssetAttr- Original Filename-8',
- 'zCldMast- Original Filename-9',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-10',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
- 'zAddAssetAttr-Shifted Location Valid-12',
- 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-13',
- 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-14',
- 'zAddAssetAttr-Reverse Location Is Valid-15',
- 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-16',
- 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-17',
- 'AAAzCldMastMedData-zOPT-18',
- 'zAddAssetAttr-Media Metadata Type-19',
- 'AAAzCldMastMedData-Data-20',
- 'CldMasterzCldMastMedData-zOPT-21',
- 'zCldMast-Media Metadata Type-22',
- 'CMzCldMastMedData-Data-23',
- 'zAsset-zPK-24',
- 'zAddAssetAttr-zPK-25',
- 'zAsset-UUID = store.cloudphotodb-26',
- 'zAddAssetAttr-Master Fingerprint-27')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph5.1-Has Locations-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph5.1-Has Locations-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite assets with valid locations')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
+ aaashiftedlocation_postal_address = ''
+ # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
+ aaareverselocation_postal_address = ''
+
+ # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
+ if row[14] is not None:
+ pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[7] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[14])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ aaashiftedlocation_postal_address = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[7])
+ else:
+ logfunc('Error reading exported plist from zAsset-Filename ' + row[7])
+
+ # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
+ if row[17] is not None:
+ pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[7] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[17])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ aaareverselocation_postal_address = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[7])
+ else:
+ logfunc('Error reading exported plist from zAsset-Filename ' + row[7])
+
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13],
+ aaashiftedlocation_postal_address,
+ row[15], row[16],
+ aaareverselocation_postal_address,
+ row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25],
+ row[26], row[27]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-Latitude-1',
+ 'zExtAttr-Latitude-2',
+ 'zAsset-Longitude-3',
+ 'zExtAttr-Longitude-4',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-5',
+ 'zAsset-Directory-Path-6',
+ 'zAsset-Filename-7',
+ 'zAddAssetAttr- Original Filename-8',
+ 'zCldMast- Original Filename-9',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-10',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
+ 'zAddAssetAttr-Shifted Location Valid-12',
+ 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-13',
+ 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-14',
+ 'zAddAssetAttr-Reverse Location Is Valid-15',
+ 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-16',
+ 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-17',
+ 'AAAzCldMastMedData-zOPT-18',
+ 'zAddAssetAttr-Media Metadata Type-19',
+ 'AAAzCldMastMedData-Data-20',
+ 'CldMasterzCldMastMedData-zOPT-21',
+ 'zCldMast-Media Metadata Type-22',
+ 'CMzCldMastMedData-Data-23',
+ 'zAsset-zPK-24',
+ 'zAddAssetAttr-zPK-25',
+ 'zAsset-UUID = store.cloudphotodb-26',
+ 'zAddAssetAttr-Master Fingerprint-27')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
CASE zAsset.ZLATITUDE
@@ -814,8 +751,8 @@ def get_ph5haslocationsphdapsql(files_found, report_folder, seeker, wrap_text, t
zAsset.Z_PK AS 'zAsset-zPK',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18'
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash'
FROM ZASSET zAsset
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES
@@ -827,133 +764,112 @@ def get_ph5haslocationsphdapsql(files_found, report_folder, seeker, wrap_text, t
WHERE (zAsset.ZLATITUDE > 0) OR
(zExtAttr.ZLATITUDE > 0)
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
- aaashiftedlocation_postal_address = ''
- # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
- aaareverselocation_postal_address = ''
-
- # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
- if row[14] is not None:
- pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[7] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[14])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- aaashiftedlocation_postal_address = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[7])
- else:
- logfunc('Error reading exported plist from zAsset-Filename ' + row[7])
-
- # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
- if row[17] is not None:
- pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[7] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[17])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- aaareverselocation_postal_address = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[7])
- else:
- logfunc('Error reading exported plist from zAsset-Filename ' + row[7])
-
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13],
- aaashiftedlocation_postal_address,
- row[15], row[16],
- aaareverselocation_postal_address,
- row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25],
- row[26], row[27], row[28]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for assets that have valid' \
- ' locations from the ZASSET and ZEXTENDEDATTRIBUTES table ZLATITUDE fields' \
- ' and supports iOS 18. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph5.1-Has Locations-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph5.1-Has Locations-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-Latitude-1',
- 'zExtAttr-Latitude-2',
- 'zAsset-Longitude-3',
- 'zExtAttr-Longitude-4',
- 'zAddAssetAttr-GPS Horizontal Accuracy-5',
- 'zAsset-Directory-Path-6',
- 'zAsset-Filename-7',
- 'zAddAssetAttr- Original Filename-8',
- 'zCldMast- Original Filename-9',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-10',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
- 'zAddAssetAttr-Shifted Location Valid-12',
- 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-13',
- 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-14',
- 'zAddAssetAttr-Reverse Location Is Valid-15',
- 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-16',
- 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-17',
- 'AAAzCldMastMedData-zOPT-18',
- 'zAddAssetAttr-Media Metadata Type-19',
- 'AAAzCldMastMedData-Data-20',
- 'CldMasterzCldMastMedData-zOPT-21',
- 'zCldMast-Media Metadata Type-22',
- 'CMzCldMastMedData-Data-23',
- 'zAsset-zPK-24',
- 'zAddAssetAttr-zPK-25',
- 'zAsset-UUID = store.cloudphotodb-26',
- 'zAddAssetAttr-Original Stable Hash-iOS18-27',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-28')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph5.1-Has Locations-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph5.1-Has Locations-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite assets with valid locations')
-
- db.close()
- return
-
-
-def get_ph5haslocationssyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
+ aaashiftedlocation_postal_address = ''
+ # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
+ aaareverselocation_postal_address = ''
+
+ # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
+ if row[14] is not None:
+ pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[7] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[14])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ aaashiftedlocation_postal_address = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[7])
+ else:
+ logfunc('Error reading exported plist from zAsset-Filename ' + row[7])
+
+ # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
+ if row[17] is not None:
+ pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[7] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[17])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ aaareverselocation_postal_address = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[7])
+ else:
+ logfunc('Error reading exported plist from zAsset-Filename ' + row[7])
+
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13],
+ aaashiftedlocation_postal_address,
+ row[15], row[16],
+ aaareverselocation_postal_address,
+ row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25],
+ row[26], row[27], row[28]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-Latitude-1',
+ 'zExtAttr-Latitude-2',
+ 'zAsset-Longitude-3',
+ 'zExtAttr-Longitude-4',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-5',
+ 'zAsset-Directory-Path-6',
+ 'zAsset-Filename-7',
+ 'zAddAssetAttr- Original Filename-8',
+ 'zCldMast- Original Filename-9',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-10',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
+ 'zAddAssetAttr-Shifted Location Valid-12',
+ 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-13',
+ 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-14',
+ 'zAddAssetAttr-Reverse Location Is Valid-15',
+ 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-16',
+ 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-17',
+ 'AAAzCldMastMedData-zOPT-18',
+ 'zAddAssetAttr-Media Metadata Type-19',
+ 'AAAzCldMastMedData-Data-20',
+ 'CldMasterzCldMastMedData-zOPT-21',
+ 'zCldMast-Media Metadata Type-22',
+ 'CMzCldMastMedData-Data-23',
+ 'zAsset-zPK-24',
+ 'zAddAssetAttr-zPK-25',
+ 'zAsset-UUID = store.cloudphotodb-26',
+ 'zAddAssetAttr-Original Stable Hash-27',
+ 'zAddAssetAttr.Adjusted Stable Hash-28')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
+@artifact_processor
+def Ph5_2AssetshavevalidlocationsSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
+
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("10.3.4"):
- logfunc("Unsupported version for Syndication.photoslibrary-database-Photos.sqlite assets with valid locations iOS " + iosversion)
+ logfunc("Unsupported version for Syndication.photoslibrary iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("13")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
CASE zAsset.ZLATITUDE
@@ -998,98 +914,75 @@ def get_ph5haslocationssyndpl(files_found, report_folder, seeker, wrap_text, tim
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE zAsset.ZLATITUDE > 0
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
- aaashiftedlocation_geoplaceresult = ''
- # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
- aaareverselocation_geoplaceresult = ''
-
- # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
- if row[10] is not None:
- pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[4] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[10])
-
- with open(pathto, "rb") as fp:
- plist = plistlib.load(fp)
- for key, val in plist.items():
- if key == "geoPlaceResult":
- aaashiftedlocation_geoplaceresult = val
-
- # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
- if row[13] is not None:
- pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[4] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[13])
-
- with open(pathto, "rb") as fp:
- plist = plistlib.load(fp)
- for key, val in plist.items():
- if key == "geoPlaceResult":
- aaareverselocation_geoplaceresult = val
-
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- aaashiftedlocation_geoplaceresult,
- row[11], row[12],
- aaareverselocation_geoplaceresult,
- row[14], row[15], row[16], row[17]))
-
- counter += 1
-
- description = 'Parses basic asset record data from Syndication.photoslibrary-Photos.sqlite for' \
- ' assets that have valid' \
- ' locations from the ZASSET and ZEXTENDEDATTRIBUTES table ZLATITUDE fields' \
- ' and supports iOS 11-13. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph5.2-Has Locations-SyndPL')
- report.start_artifact_report(report_folder, 'Ph5.2-Has Locations-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-Latitude-1',
- 'zAsset-Longitude-2',
- 'zAsset-Directory-Path-3',
- 'zAsset-Filename-4',
- 'zAddAssetAttr- Original Filename-5',
- 'zCldMast- Original Filename-6',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-7',
- 'zAddAssetAttr-Shifted Location Valid-8',
- 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-9',
- 'zAddAssetAttr-Shifted Location Data-geoPlaceResult-10',
- 'zAddAssetAttr-Reverse Location Is Valid-11',
- 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-12',
- 'zAddAssetAttr-Reverse Location Data-geoPlaceResult-13',
- 'zAsset-zPK-14',
- 'zAddAssetAttr-zPK-15',
- 'zAsset-UUID = store.cloudphotodb-16',
- 'zAddAssetAttr-Master Fingerprint-17')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph5.2-Has Locations-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph5.2-Has Locations-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-Photos.sqlite assets with valid locations')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
+ aaashiftedlocation_geoplaceresult = ''
+ # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
+ aaareverselocation_geoplaceresult = ''
+
+ # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
+ if row[10] is not None:
+ pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[4] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[10])
+
+ with open(pathto, "rb") as fp:
+ plist = plistlib.load(fp)
+ for key, val in plist.items():
+ if key == "geoPlaceResult":
+ aaashiftedlocation_geoplaceresult = val
+
+ # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
+ if row[13] is not None:
+ pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[4] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[13])
+
+ with open(pathto, "rb") as fp:
+ plist = plistlib.load(fp)
+ for key, val in plist.items():
+ if key == "geoPlaceResult":
+ aaareverselocation_geoplaceresult = val
+
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ aaashiftedlocation_geoplaceresult,
+ row[11], row[12],
+ aaareverselocation_geoplaceresult,
+ row[14], row[15], row[16], row[17]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-Latitude-1',
+ 'zAsset-Longitude-2',
+ 'zAsset-Directory-Path-3',
+ 'zAsset-Filename-4',
+ 'zAddAssetAttr- Original Filename-5',
+ 'zCldMast- Original Filename-6',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-7',
+ 'zAddAssetAttr-Shifted Location Valid-8',
+ 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-9',
+ 'zAddAssetAttr-Shifted Location Data-geoPlaceResult-10',
+ 'zAddAssetAttr-Reverse Location Is Valid-11',
+ 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-12',
+ 'zAddAssetAttr-Reverse Location Data-geoPlaceResult-13',
+ 'zAsset-zPK-14',
+ 'zAddAssetAttr-zPK-15',
+ 'zAsset-UUID = store.cloudphotodb-16',
+ 'zAddAssetAttr-Master Fingerprint-17')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("13")) & (version.parse(iosversion) < version.parse("14")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
CASE zAsset.ZLATITUDE
@@ -1164,116 +1057,92 @@ def get_ph5haslocationssyndpl(files_found, report_folder, seeker, wrap_text, tim
CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
WHERE zAsset.ZLATITUDE > 0
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
- aaashiftedlocation_postal_address = ''
- # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
- aaareverselocation_postal_address = ''
-
- # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
- if row[10] is not None:
- pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[4] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[10])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- aaashiftedlocation_postal_address = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[4])
- else:
- logfunc('Error reading exported plist from zAsset-Filename ' + row[4])
-
- # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
- if row[13] is not None:
- pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[4] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[13])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- aaareverselocation_postal_address = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[4])
- else:
- logfunc('Error reading exported plist from zAsset-Filename ' + row[4])
-
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- aaashiftedlocation_postal_address,
- row[11], row[12],
- aaareverselocation_postal_address,
- row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23]))
-
- counter += 1
-
- description = 'Parses basic asset record data from Syndication.photoslibrary-Photos.sqlite for' \
- ' assets that have valid' \
- ' locations from the ZASSET and ZEXTENDEDATTRIBUTES table ZLATITUDE fields' \
- ' and supports iOS 11-13. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph5.2-Has Locations-SyndPL')
- report.start_artifact_report(report_folder, 'Ph5.2-Has Locations-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-Latitude-1',
- 'zAsset-Longitude-2',
- 'zAsset-Directory-Path-3',
- 'zAsset-Filename-4',
- 'zAddAssetAttr- Original Filename-5',
- 'zCldMast- Original Filename-6',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-7',
- 'zAddAssetAttr-Shifted Location Valid-8',
- 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-9',
- 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-10',
- 'zAddAssetAttr-Reverse Location Is Valid-11',
- 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-12',
- 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-13',
- 'AAAzCldMastMedData-zOPT-14',
- 'zAddAssetAttr-Media Metadata Type-15',
- 'AAAzCldMastMedData-Data-16',
- 'CldMasterzCldMastMedData-zOPT-17',
- 'zCldMast-Media Metadata Type-18',
- 'CMzCldMastMedData-Data-19',
- 'zAsset-zPK-20',
- 'zAddAssetAttr-zPK-21',
- 'zAsset-UUID = store.cloudphotodb-22',
- 'zAddAssetAttr-Master Fingerprint-23')
-
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph5.2-Has Locations-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph5.2-Has Locations-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-Photos.sqlite assets with valid locations')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
+ aaashiftedlocation_postal_address = ''
+ # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
+ aaareverselocation_postal_address = ''
+
+ # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
+ if row[10] is not None:
+ pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[4] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[10])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ aaashiftedlocation_postal_address = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[4])
+ else:
+ logfunc('Error reading exported plist from zAsset-Filename ' + row[4])
+
+ # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
+ if row[13] is not None:
+ pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[4] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[13])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ aaareverselocation_postal_address = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[4])
+ else:
+ logfunc('Error reading exported plist from zAsset-Filename ' + row[4])
+
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ aaashiftedlocation_postal_address,
+ row[11], row[12],
+ aaareverselocation_postal_address,
+ row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-Latitude-1',
+ 'zAsset-Longitude-2',
+ 'zAsset-Directory-Path-3',
+ 'zAsset-Filename-4',
+ 'zAddAssetAttr- Original Filename-5',
+ 'zCldMast- Original Filename-6',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-7',
+ 'zAddAssetAttr-Shifted Location Valid-8',
+ 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-9',
+ 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-10',
+ 'zAddAssetAttr-Reverse Location Is Valid-11',
+ 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-12',
+ 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-13',
+ 'AAAzCldMastMedData-zOPT-14',
+ 'zAddAssetAttr-Media Metadata Type-15',
+ 'AAAzCldMastMedData-Data-16',
+ 'CldMasterzCldMastMedData-zOPT-17',
+ 'zCldMast-Media Metadata Type-18',
+ 'CMzCldMastMedData-Data-19',
+ 'zAsset-zPK-20',
+ 'zAddAssetAttr-zPK-21',
+ 'zAsset-UUID = store.cloudphotodb-22',
+ 'zAddAssetAttr-Master Fingerprint-23')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
CASE zAsset.ZLATITUDE
@@ -1356,119 +1225,96 @@ def get_ph5haslocationssyndpl(files_found, report_folder, seeker, wrap_text, tim
WHERE (zAsset.ZLATITUDE > 0) OR
(zExtAttr.ZLATITUDE > 0)
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
- aaashiftedlocation_postal_address = ''
- # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
- aaareverselocation_postal_address = ''
-
- # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
- if row[13] is not None:
- pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[7] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[13])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- aaashiftedlocation_postal_address = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[7])
- else:
- logfunc('Error reading exported plist from zAsset-Filename ' + row[7])
-
- # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
- if row[16] is not None:
- pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[7] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[16])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- aaareverselocation_postal_address = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[7])
- else:
- logfunc('Error reading exported plist from zAsset-Filename ' + row[7])
-
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12],
- aaashiftedlocation_postal_address,
- row[14], row[15],
- aaareverselocation_postal_address,
- row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26]))
-
- counter += 1
-
- description = 'Parses basic asset record data from Syndication.photoslibrary-Photos.sqlite for' \
- ' assets that have valid' \
- ' locations from the ZASSET and ZEXTENDEDATTRIBUTES table ZLATITUDE fields' \
- ' and supports iOS 14. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph5.2-Has Locations-SyndPL')
- report.start_artifact_report(report_folder, 'Ph5.2-Has Locations-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-Latitude-1',
- 'zExtAttr-Latitude-2',
- 'zAsset-Longitude-3',
- 'zExtAttr-Longitude-4',
- 'zAddAssetAttr-GPS Horizontal Accuracy-5',
- 'zAsset-Directory-Path-6',
- 'zAsset-Filename-7',
- 'zAddAssetAttr- Original Filename-8',
- 'zCldMast- Original Filename-9',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-10',
- 'zAddAssetAttr-Shifted Location Valid-11',
- 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-12',
- 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-13',
- 'zAddAssetAttr-Reverse Location Is Valid-14',
- 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-15',
- 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-16',
- 'AAAzCldMastMedData-zOPT-17',
- 'zAddAssetAttr-Media Metadata Type-18',
- 'AAAzCldMastMedData-Data-19',
- 'CldMasterzCldMastMedData-zOPT-20',
- 'zCldMast-Media Metadata Type-21',
- 'CMzCldMastMedData-Data-22',
- 'zAsset-zPK-23',
- 'zAddAssetAttr-zPK-24',
- 'zAsset-UUID = store.cloudphotodb-25',
- 'zAddAssetAttr-Master Fingerprint-26')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph5.2-Has Locations-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph5.2-Has Locations-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-Photos.sqlite assets with valid locations')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
+ aaashiftedlocation_postal_address = ''
+ # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
+ aaareverselocation_postal_address = ''
+
+ # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
+ if row[13] is not None:
+ pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[7] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[13])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ aaashiftedlocation_postal_address = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[7])
+ else:
+ logfunc('Error reading exported plist from zAsset-Filename ' + row[7])
+
+ # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
+ if row[16] is not None:
+ pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[7] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[16])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ aaareverselocation_postal_address = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[7])
+ else:
+ logfunc('Error reading exported plist from zAsset-Filename ' + row[7])
+
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12],
+ aaashiftedlocation_postal_address,
+ row[14], row[15],
+ aaareverselocation_postal_address,
+ row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-Latitude-1',
+ 'zExtAttr-Latitude-2',
+ 'zAsset-Longitude-3',
+ 'zExtAttr-Longitude-4',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-5',
+ 'zAsset-Directory-Path-6',
+ 'zAsset-Filename-7',
+ 'zAddAssetAttr- Original Filename-8',
+ 'zCldMast- Original Filename-9',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-10',
+ 'zAddAssetAttr-Shifted Location Valid-11',
+ 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-12',
+ 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-13',
+ 'zAddAssetAttr-Reverse Location Is Valid-14',
+ 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-15',
+ 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-16',
+ 'AAAzCldMastMedData-zOPT-17',
+ 'zAddAssetAttr-Media Metadata Type-18',
+ 'AAAzCldMastMedData-Data-19',
+ 'CldMasterzCldMastMedData-zOPT-20',
+ 'zCldMast-Media Metadata Type-21',
+ 'CMzCldMastMedData-Data-22',
+ 'zAsset-zPK-23',
+ 'zAddAssetAttr-zPK-24',
+ 'zAsset-UUID = store.cloudphotodb-25',
+ 'zAddAssetAttr-Master Fingerprint-26')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
CASE zAsset.ZLATITUDE
@@ -1552,120 +1398,97 @@ def get_ph5haslocationssyndpl(files_found, report_folder, seeker, wrap_text, tim
WHERE (zAsset.ZLATITUDE > 0) OR
(zExtAttr.ZLATITUDE > 0)
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
- aaashiftedlocation_postal_address = ''
- # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
- aaareverselocation_postal_address = ''
-
- # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
- if row[14] is not None:
- pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[7] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[14])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- aaashiftedlocation_postal_address = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[7])
- else:
- logfunc('Error reading exported plist from zAsset-Filename ' + row[7])
-
- # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
- if row[17] is not None:
- pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[7] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[17])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- aaareverselocation_postal_address = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[7])
- else:
- logfunc('Error reading exported plist from zAsset-Filename ' + row[7])
-
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13],
- aaashiftedlocation_postal_address,
- row[15], row[16],
- aaareverselocation_postal_address,
- row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25],
- row[26], row[27]))
-
- counter += 1
-
- description = 'Parses basic asset record data from Syndication.photoslibrary-Photos.sqlite for' \
- ' assets that have valid' \
- ' locations from the ZASSET and ZEXTENDEDATTRIBUTES table ZLATITUDE fields' \
- ' and supports iOS 15-17. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph5.2-Has Locations-SyndPL')
- report.start_artifact_report(report_folder, 'Ph5.2-Has Locations-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-Latitude-1',
- 'zExtAttr-Latitude-2',
- 'zAsset-Longitude-3',
- 'zExtAttr-Longitude-4',
- 'zAddAssetAttr-GPS Horizontal Accuracy-5',
- 'zAsset-Directory-Path-6',
- 'zAsset-Filename-7',
- 'zAddAssetAttr- Original Filename-8',
- 'zCldMast- Original Filename-9',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-10',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
- 'zAddAssetAttr-Shifted Location Valid-12',
- 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-13',
- 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-14',
- 'zAddAssetAttr-Reverse Location Is Valid-15',
- 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-16',
- 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-17',
- 'AAAzCldMastMedData-zOPT-18',
- 'zAddAssetAttr-Media Metadata Type-19',
- 'AAAzCldMastMedData-Data-20',
- 'CldMasterzCldMastMedData-zOPT-21',
- 'zCldMast-Media Metadata Type-22',
- 'CMzCldMastMedData-Data-23',
- 'zAsset-zPK-24',
- 'zAddAssetAttr-zPK-25',
- 'zAsset-UUID = store.cloudphotodb-26',
- 'zAddAssetAttr-Master Fingerprint-27')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph5.2-Has Locations-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph5.2-Has Locations-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-Photos.sqlite assets with valid locations')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
+ aaashiftedlocation_postal_address = ''
+ # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
+ aaareverselocation_postal_address = ''
+
+ # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
+ if row[14] is not None:
+ pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[7] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[14])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ aaashiftedlocation_postal_address = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[7])
+ else:
+ logfunc('Error reading exported plist from zAsset-Filename ' + row[7])
+
+ # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
+ if row[17] is not None:
+ pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[7] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[17])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ aaareverselocation_postal_address = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[7])
+ else:
+ logfunc('Error reading exported plist from zAsset-Filename ' + row[7])
+
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13],
+ aaashiftedlocation_postal_address,
+ row[15], row[16],
+ aaareverselocation_postal_address,
+ row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25],
+ row[26], row[27]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-Latitude-1',
+ 'zExtAttr-Latitude-2',
+ 'zAsset-Longitude-3',
+ 'zExtAttr-Longitude-4',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-5',
+ 'zAsset-Directory-Path-6',
+ 'zAsset-Filename-7',
+ 'zAddAssetAttr- Original Filename-8',
+ 'zCldMast- Original Filename-9',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-10',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
+ 'zAddAssetAttr-Shifted Location Valid-12',
+ 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-13',
+ 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-14',
+ 'zAddAssetAttr-Reverse Location Is Valid-15',
+ 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-16',
+ 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-17',
+ 'AAAzCldMastMedData-zOPT-18',
+ 'zAddAssetAttr-Media Metadata Type-19',
+ 'AAAzCldMastMedData-Data-20',
+ 'CldMasterzCldMastMedData-zOPT-21',
+ 'zCldMast-Media Metadata Type-22',
+ 'CMzCldMastMedData-Data-23',
+ 'zAsset-zPK-24',
+ 'zAddAssetAttr-zPK-25',
+ 'zAsset-UUID = store.cloudphotodb-26',
+ 'zAddAssetAttr-Master Fingerprint-27')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
CASE zAsset.ZLATITUDE
@@ -1737,8 +1560,8 @@ def get_ph5haslocationssyndpl(files_found, report_folder, seeker, wrap_text, tim
zAsset.Z_PK AS 'zAsset-zPK',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18'
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash'
FROM ZASSET zAsset
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES
@@ -1750,145 +1573,87 @@ def get_ph5haslocationssyndpl(files_found, report_folder, seeker, wrap_text, tim
WHERE (zAsset.ZLATITUDE > 0) OR
(zExtAttr.ZLATITUDE > 0)
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
- aaashiftedlocation_postal_address = ''
- # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
- aaareverselocation_postal_address = ''
-
- # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
- if row[14] is not None:
- pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[7] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[14])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- aaashiftedlocation_postal_address = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[7])
- else:
- logfunc('Error reading exported plist from zAsset-Filename ' + row[7])
-
- # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
- if row[17] is not None:
- pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[7] + '.plist')
- with open(pathto, 'ab') as wf:
- wf.write(row[17])
-
- with open(pathto, 'rb') as f:
- try:
- deserialized_plist = nd.deserialize_plist(f)
- aaareverselocation_postal_address = deserialized_plist
-
- except (KeyError, ValueError, TypeError) as ex:
- if str(ex).find("does not contain an '$archiver' key") >= 0:
- logfunc('plist was Not an NSKeyedArchive ' + row[7])
- else:
- logfunc('Error reading exported plist from zAsset-Filename ' + row[7])
-
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13],
- aaashiftedlocation_postal_address,
- row[15], row[16],
- aaareverselocation_postal_address,
- row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25],
- row[26], row[27], row[28]))
-
- counter += 1
-
- description = 'Parses basic asset record data from Syndication.photoslibrary-Photos.sqlite for' \
- ' assets that have valid' \
- ' locations from the ZASSET and ZEXTENDEDATTRIBUTES table ZLATITUDE fields' \
- ' and supports iOS 15-17. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph5.2-Has Locations-SyndPL')
- report.start_artifact_report(report_folder, 'Ph5.2-Has Locations-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-Latitude-1',
- 'zExtAttr-Latitude-2',
- 'zAsset-Longitude-3',
- 'zExtAttr-Longitude-4',
- 'zAddAssetAttr-GPS Horizontal Accuracy-5',
- 'zAsset-Directory-Path-6',
- 'zAsset-Filename-7',
- 'zAddAssetAttr- Original Filename-8',
- 'zCldMast- Original Filename-9',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-10',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
- 'zAddAssetAttr-Shifted Location Valid-12',
- 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-13',
- 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-14',
- 'zAddAssetAttr-Reverse Location Is Valid-15',
- 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-16',
- 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-17',
- 'AAAzCldMastMedData-zOPT-18',
- 'zAddAssetAttr-Media Metadata Type-19',
- 'AAAzCldMastMedData-Data-20',
- 'CldMasterzCldMastMedData-zOPT-21',
- 'zCldMast-Media Metadata Type-22',
- 'CMzCldMastMedData-Data-23',
- 'zAsset-zPK-24',
- 'zAddAssetAttr-zPK-25',
- 'zAsset-UUID = store.cloudphotodb-26',
- 'zAddAssetAttr-Original Stable Hash-iOS18-27',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-28')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph5.2-Has Locations-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph5.2-Has Locations-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for Syndication.photoslibrary-Photos.sqlite assets with valid locations')
-
- db.close()
- return
-
-
-__artifacts_v2__ = {
- 'Ph5-1-Assets have valid locations-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite 5.1 assets have locations',
- 'description': 'Parses basic asset record data from PhotoData-Photos.sqlite for assets that have valid'
- ' locations from the ZASSET and ZEXTENDEDATTRIBUTES table ZLATITUDE fields'
- ' and supports iOS 11-18. The results for this script will contain'
- ' one record per ZASSET table Z_PK value.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-12',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-C-Other_Artifacts',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph5haslocationsphdapsql'
- },
- 'Ph5-2-Assets have valid locations-SyndPL': {
- 'name': 'SyndPL Photos.sqlite 5.2 assets have locations',
- 'description': 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite'
- ' for assets that have valid locations from the ZASSET and ZEXTENDEDATTRIBUTES table'
- ' ZLATITUDE fields and supports iOS 11-18. The results for this script will contain'
- ' one record per ZASSET table Z_PK value.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-12',
- 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite',
- 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts',
- 'notes': '',
- 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',
- 'function': 'get_ph5haslocationssyndpl'
- }
-}
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
+ aaashiftedlocation_postal_address = ''
+ # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
+ aaareverselocation_postal_address = ''
+
+ # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST
+ if row[14] is not None:
+ pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[7] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[14])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ aaashiftedlocation_postal_address = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[7])
+ else:
+ logfunc('Error reading exported plist from zAsset-Filename ' + row[7])
+
+ # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST
+ if row[17] is not None:
+ pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[7] + '.plist')
+ with open(pathto, 'ab') as wf:
+ wf.write(row[17])
+
+ with open(pathto, 'rb') as f:
+ try:
+ deserialized_plist = nd.deserialize_plist(f)
+ aaareverselocation_postal_address = deserialized_plist
+
+ except (KeyError, ValueError, TypeError) as ex:
+ if str(ex).find("does not contain an '$archiver' key") >= 0:
+ logfunc('plist was Not an NSKeyedArchive ' + row[7])
+ else:
+ logfunc('Error reading exported plist from zAsset-Filename ' + row[7])
+
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13],
+ aaashiftedlocation_postal_address,
+ row[15], row[16],
+ aaareverselocation_postal_address,
+ row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25],
+ row[26], row[27], row[28]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-Latitude-1',
+ 'zExtAttr-Latitude-2',
+ 'zAsset-Longitude-3',
+ 'zExtAttr-Longitude-4',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-5',
+ 'zAsset-Directory-Path-6',
+ 'zAsset-Filename-7',
+ 'zAddAssetAttr- Original Filename-8',
+ 'zCldMast- Original Filename-9',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-10',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-11',
+ 'zAddAssetAttr-Shifted Location Valid-12',
+ 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-13',
+ 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-14',
+ 'zAddAssetAttr-Reverse Location Is Valid-15',
+ 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-16',
+ 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-17',
+ 'AAAzCldMastMedData-zOPT-18',
+ 'zAddAssetAttr-Media Metadata Type-19',
+ 'AAAzCldMastMedData-Data-20',
+ 'CldMasterzCldMastMedData-zOPT-21',
+ 'zCldMast-Media Metadata Type-22',
+ 'CMzCldMastMedData-Data-23',
+ 'zAsset-zPK-24',
+ 'zAddAssetAttr-zPK-25',
+ 'zAsset-UUID = store.cloudphotodb-26',
+ 'zAddAssetAttr-Original Stable Hash-27',
+ 'zAddAssetAttr.Adjusted Stable Hash-28')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
diff --git a/scripts/artifacts/Ph6ViewedPlayData.py b/scripts/artifacts/Ph6ViewedPlayData.py
index c09654a4..5f69d8e8 100644
--- a/scripts/artifacts/Ph6ViewedPlayData.py
+++ b/scripts/artifacts/Ph6ViewedPlayData.py
@@ -1,42 +1,50 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 2.0
-#
-# Description:
-# Parses basic asset record data from Photos.sqlite for assets with last viewed timestamp and other view and play data
-# from ZADDITTIONALASSETATTRIBUTES table ZLASTVIEWEDDATE and ZPLAYCOUNT fields and iOS version support varies
-# but last viewed date is supported in iOS 16-18.
-# The results for this script will contain one record per ZASSET table Z_PK value.
-# This parser is based on research and SQLite queries written by Scott Koenig
-# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347
-#
+__artifacts_v2__ = {
+ 'Ph6ViewandPlayDataPhDaPsql': {
+ 'name': 'Ph6-View and Play Data-PhDaPsql',
+ 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite for assets with'
+ ' view and played data in versions 11-18. If the iOS version is greater than iOS 16.5'
+ ' last viewed date from ZADDITTIONALASSETATTRIBUTES table ZLASTVIEWEDDATE field'
+ ' will be included. The results for this script will contain'
+ ' one row per ZASSET table Z_PK value.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-B-Interaction_Artifacts',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
+@artifact_processor
+def Ph6ViewandPlayDataPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
-def get_ph6viewplaydataphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("10.3.4"):
- logfunc("Unsupported version for PhotosData-Photos.sqlite assets with view and"
- " play data from iOS " + iosversion)
+ logfunc("Unsupported version for PhotosData-Photos.sqlite iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("13")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count',
@@ -58,62 +66,39 @@ def get_ph6viewplaydataphdapsql(files_found, report_folder, seeker, wrap_text, t
WHERE (zAddAssetAttr.ZPENDINGVIEWCOUNT > 0) OR (zAddAssetAttr.ZVIEWCOUNT > 0)
OR (zAddAssetAttr.ZPENDINGPLAYCOUNT > 0) OR (zAddAssetAttr.ZPLAYCOUNT > 0)
ORDER BY zAsset.ZMODIFICATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for assets with' \
- ' view and played data in versions 11-12. If the iOS version is greater than iOS 16' \
- ' last viewed date from ZADDITTIONALASSETATTRIBUTES table ZLASTVIEWEDDATE field' \
- ' will be included. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph6-Viewed and Played Data-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph6-Viewed and Played Data-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Modification Date',
- 'zAddAssetAttr- Pending View Count',
- 'zAddAssetAttr- View Count',
- 'zAddAssetAttr- Pending Play Count',
- 'zAddAssetAttr- Play Count',
- 'zAsset-Directory-Path',
- 'zAsset-Filename',
- 'zAddAssetAttr- Original Filename',
- 'zCldMast- Original Filename',
- 'zCldMast-Import Session ID- AirDrop-StillTesting',
- 'zAsset-zPK',
- 'zAddAssetAttr-zPK',
- 'zAsset-UUID = store.cloudphotodb',
- 'zAddAssetAttr-Master Fingerprint')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph6-Viewed and Played Data-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph6-Viewed and Played Data-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite asset viewed and played data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13]))
+
+ data_headers = (('zAsset-Modification Date', 'datetime'),
+ 'zAddAssetAttr- Pending View Count',
+ 'zAddAssetAttr- View Count',
+ 'zAddAssetAttr- Pending Play Count',
+ 'zAddAssetAttr- Play Count',
+ 'zAsset-Directory-Path',
+ 'zAsset-Filename',
+ 'zAddAssetAttr- Original Filename',
+ 'zCldMast- Original Filename',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting',
+ 'zAsset-zPK',
+ 'zAddAssetAttr-zPK',
+ 'zAsset-UUID = store.cloudphotodb',
+ 'zAddAssetAttr-Master Fingerprint')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("13")) & (version.parse(iosversion) < version.parse("14")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS
@@ -137,63 +122,40 @@ def get_ph6viewplaydataphdapsql(files_found, report_folder, seeker, wrap_text, t
WHERE (zAddAssetAttr.ZPENDINGVIEWCOUNT > 0) OR (zAddAssetAttr.ZVIEWCOUNT > 0)
OR (zAddAssetAttr.ZPENDINGPLAYCOUNT > 0) OR (zAddAssetAttr.ZPLAYCOUNT > 0)
ORDER BY zAsset.ZMODIFICATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for assets with' \
- ' view and played data in versions 13. If the iOS version is greater than iOS 16' \
- ' last viewed date from ZADDITTIONALASSETATTRIBUTES table ZLASTVIEWEDDATE field' \
- ' will be included. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph6-Viewed and Played Data-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph6-Viewed and Played Data-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Modification Date',
- 'zAsset-Analysis State Modification Date',
- 'zAddAssetAttr- Pending View Count',
- 'zAddAssetAttr- View Count',
- 'zAddAssetAttr- Pending Play Count',
- 'zAddAssetAttr- Play Count',
- 'zAsset-Directory-Path',
- 'zAsset-Filename',
- 'zAddAssetAttr- Original Filename',
- 'zCldMast- Original Filename',
- 'zCldMast-Import Session ID- AirDrop-StillTesting',
- 'zAsset-zPK',
- 'zAddAssetAttr-zPK',
- 'zAsset-UUID = store.cloudphotodb',
- 'zAddAssetAttr-Master Fingerprint')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph6-Viewed and Played Data-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph6-Viewed and Played Data-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite asset viewed and played data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14]))
+
+ data_headers = (('zAsset-Modification Date', 'datetime'),
+ 'zAsset-Analysis State Modification Date',
+ 'zAddAssetAttr- Pending View Count',
+ 'zAddAssetAttr- View Count',
+ 'zAddAssetAttr- Pending Play Count',
+ 'zAddAssetAttr- Play Count',
+ 'zAsset-Directory-Path',
+ 'zAsset-Filename',
+ 'zAddAssetAttr- Original Filename',
+ 'zCldMast- Original Filename',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting',
+ 'zAsset-zPK',
+ 'zAddAssetAttr-zPK',
+ 'zAsset-UUID = store.cloudphotodb',
+ 'zAddAssetAttr-Master Fingerprint')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS
@@ -217,63 +179,40 @@ def get_ph6viewplaydataphdapsql(files_found, report_folder, seeker, wrap_text, t
WHERE (zAddAssetAttr.ZPENDINGVIEWCOUNT > 0) OR (zAddAssetAttr.ZVIEWCOUNT > 0)
OR (zAddAssetAttr.ZPENDINGPLAYCOUNT > 0) OR (zAddAssetAttr.ZPLAYCOUNT > 0)
ORDER BY zAsset.ZMODIFICATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for assets with' \
- ' view and played data in versions 14. If the iOS version is greater than iOS 16' \
- ' last viewed date from ZADDITTIONALASSETATTRIBUTES table ZLASTVIEWEDDATE field' \
- ' will be included. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph6-Viewed and Played Data-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph6-Viewed and Played Data-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Modification Date',
- 'zAsset-Analysis State Modification Date',
- 'zAddAssetAttr- Pending View Count',
- 'zAddAssetAttr- View Count',
- 'zAddAssetAttr- Pending Play Count',
- 'zAddAssetAttr- Play Count',
- 'zAsset-Directory-Path',
- 'zAsset-Filename',
- 'zAddAssetAttr- Original Filename',
- 'zCldMast- Original Filename',
- 'zCldMast-Import Session ID- AirDrop-StillTesting',
- 'zAsset-zPK',
- 'zAddAssetAttr-zPK',
- 'zAsset-UUID = store.cloudphotodb',
- 'zAddAssetAttr-Master Fingerprint')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph6-Viewed and Played Data-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph6-Viewed and Played Data-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite asset viewed and played data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14]))
+
+ data_headers = (('zAsset-Modification Date', 'datetime'),
+ 'zAsset-Analysis State Modification Date',
+ 'zAddAssetAttr- Pending View Count',
+ 'zAddAssetAttr- View Count',
+ 'zAddAssetAttr- Pending Play Count',
+ 'zAddAssetAttr- Play Count',
+ 'zAsset-Directory-Path',
+ 'zAsset-Filename',
+ 'zAddAssetAttr- Original Filename',
+ 'zCldMast- Original Filename',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting',
+ 'zAsset-zPK',
+ 'zAddAssetAttr-zPK',
+ 'zAsset-UUID = store.cloudphotodb',
+ 'zAddAssetAttr-Master Fingerprint')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS
@@ -298,64 +237,41 @@ def get_ph6viewplaydataphdapsql(files_found, report_folder, seeker, wrap_text, t
WHERE (zAddAssetAttr.ZPENDINGVIEWCOUNT > 0) OR (zAddAssetAttr.ZVIEWCOUNT > 0)
OR (zAddAssetAttr.ZPENDINGPLAYCOUNT > 0) OR (zAddAssetAttr.ZPLAYCOUNT > 0)
ORDER BY zAsset.ZMODIFICATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for assets with' \
- ' view and played data in versions 15. If the iOS version is greater than iOS 16' \
- ' last viewed date from ZADDITTIONALASSETATTRIBUTES table ZLASTVIEWEDDATE field' \
- ' will be included. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph6-Viewed and Played Data-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph6-Viewed and Played Data-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Modification Date',
- 'zAsset-Analysis State Modification Date',
- 'zAddAssetAttr- Pending View Count',
- 'zAddAssetAttr- View Count',
- 'zAddAssetAttr- Pending Play Count',
- 'zAddAssetAttr- Play Count',
- 'zAsset-Directory-Path',
- 'zAsset-Filename',
- 'zAddAssetAttr- Original Filename',
- 'zCldMast- Original Filename',
- 'zCldMast-Import Session ID- AirDrop-StillTesting',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files',
- 'zAsset-zPK',
- 'zAddAssetAttr-zPK',
- 'zAsset-UUID = store.cloudphotodb',
- 'zAddAssetAttr-Master Fingerprint')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph6-Viewed and Played Data-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph6-Viewed and Played Data-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite asset viewed and played data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15]))
+
+ data_headers = (('zAsset-Modification Date', 'datetime'),
+ 'zAsset-Analysis State Modification Date',
+ 'zAddAssetAttr- Pending View Count',
+ 'zAddAssetAttr- View Count',
+ 'zAddAssetAttr- Pending Play Count',
+ 'zAddAssetAttr- Play Count',
+ 'zAsset-Directory-Path',
+ 'zAsset-Filename',
+ 'zAddAssetAttr- Original Filename',
+ 'zCldMast- Original Filename',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files',
+ 'zAsset-zPK',
+ 'zAddAssetAttr-zPK',
+ 'zAsset-UUID = store.cloudphotodb',
+ 'zAddAssetAttr-Master Fingerprint')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) <= version.parse("16.5.1")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS
@@ -380,64 +296,41 @@ def get_ph6viewplaydataphdapsql(files_found, report_folder, seeker, wrap_text, t
WHERE (zAddAssetAttr.ZLASTVIEWEDDATE > 0) OR (zAddAssetAttr.ZPENDINGVIEWCOUNT > 0)
OR (zAddAssetAttr.ZVIEWCOUNT > 0) OR (zAddAssetAttr.ZPENDINGPLAYCOUNT > 0) OR (zAddAssetAttr.ZPLAYCOUNT > 0)
ORDER BY zAsset.ZMODIFICATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for assets with' \
- ' view and played data in versions 16-17. If the iOS version is greater than iOS 16' \
- ' last viewed date from ZADDITTIONALASSETATTRIBUTES table ZLASTVIEWEDDATE field' \
- ' will be included. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph6-Viewed and Played Data-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph6-Viewed and Played Data-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Modification Date',
- 'zAsset-Analysis State Modification Date',
- 'zAddAssetAttr- Pending View Count',
- 'zAddAssetAttr- View Count',
- 'zAddAssetAttr- Pending Play Count',
- 'zAddAssetAttr- Play Count',
- 'zAsset-Directory-Path',
- 'zAsset-Filename',
- 'zAddAssetAttr- Original Filename',
- 'zCldMast- Original Filename',
- 'zCldMast-Import Session ID- AirDrop-StillTesting',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files',
- 'zAsset-zPK',
- 'zAddAssetAttr-zPK',
- 'zAsset-UUID = store.cloudphotodb',
- 'zAddAssetAttr-Master Fingerprint')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph6-Viewed and Played Data-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph6-Viewed and Played Data-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite asset viewed and played data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15]))
+
+ data_headers = (('zAsset-Modification Date', 'datetime'),
+ 'zAsset-Analysis State Modification Date',
+ 'zAddAssetAttr- Pending View Count',
+ 'zAddAssetAttr- View Count',
+ 'zAddAssetAttr- Pending Play Count',
+ 'zAddAssetAttr- Play Count',
+ 'zAsset-Directory-Path',
+ 'zAsset-Filename',
+ 'zAddAssetAttr- Original Filename',
+ 'zCldMast- Original Filename',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files',
+ 'zAsset-zPK',
+ 'zAddAssetAttr-zPK',
+ 'zAsset-UUID = store.cloudphotodb',
+ 'zAddAssetAttr-Master Fingerprint')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("16.6")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAddAssetAttr.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Viewed Date',
DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
@@ -463,65 +356,42 @@ def get_ph6viewplaydataphdapsql(files_found, report_folder, seeker, wrap_text, t
WHERE (zAddAssetAttr.ZLASTVIEWEDDATE > 0) OR (zAddAssetAttr.ZPENDINGVIEWCOUNT > 0)
OR (zAddAssetAttr.ZVIEWCOUNT > 0) OR (zAddAssetAttr.ZPENDINGPLAYCOUNT > 0) OR (zAddAssetAttr.ZPLAYCOUNT > 0)
ORDER BY zAsset.ZMODIFICATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for assets with' \
- ' view and played data in versions 16-17. If the iOS version is greater than iOS 16.5.1' \
- ' last viewed date from ZADDITTIONALASSETATTRIBUTES table ZLASTVIEWEDDATE field' \
- ' will be included. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph6-Viewed and Played Data-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph6-Viewed and Played Data-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAddAssetAttr-Last Viewed Date-0',
- 'zAsset-Modification Date-1',
- 'zAsset-Analysis State Modification Date-2',
- 'zAddAssetAttr- Pending View Count-3',
- 'zAddAssetAttr- View Count-4',
- 'zAddAssetAttr- Pending Play Count-5',
- 'zAddAssetAttr- Play Count-6',
- 'zAsset-Directory-Path-7',
- 'zAsset-Filename-8',
- 'zAddAssetAttr- Original Filename-9',
- 'zCldMast- Original Filename-10',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-11',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-12',
- 'zAsset-zPK-13',
- 'zAddAssetAttr-zPK-14',
- 'zAsset-UUID = store.cloudphotodb-15',
- 'zAddAssetAttr-Master Fingerprint-16')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph6-Viewed and Played Data-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph6-Viewed and Played Data-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite asset viewed and played data')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16]))
+
+ data_headers = (('zAddAssetAttr-Last Viewed Date-0', 'datetime'),
+ 'zAsset-Modification Date-1',
+ ('zAsset-Analysis State Modification Date-2', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-3',
+ 'zAddAssetAttr- View Count-4',
+ 'zAddAssetAttr- Pending Play Count-5',
+ 'zAddAssetAttr- Play Count-6',
+ 'zAsset-Directory-Path-7',
+ 'zAsset-Filename-8',
+ 'zAddAssetAttr- Original Filename-9',
+ 'zCldMast- Original Filename-10',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-11',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-12',
+ 'zAsset-zPK-13',
+ 'zAddAssetAttr-zPK-14',
+ 'zAsset-UUID = store.cloudphotodb-15',
+ 'zAddAssetAttr-Master Fingerprint-16')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAddAssetAttr.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Viewed Date',
DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
@@ -535,7 +405,7 @@ def get_ph6viewplaydataphdapsql(files_found, report_folder, seeker, wrap_text, t
WHEN 0 THEN '0-Obs in iOS 18 still testing-0'
WHEN 1 THEN '1-Obs in iOS 18 still testing-1'
ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZVIEWPRESENTATION || ''
- END AS 'zAddAssetAttr.View_Presentation-iOS18',
+ END AS 'zAddAssetAttr.View_Presentation',
zAsset.ZDIRECTORY AS 'zAsset-Directory-Path',
zAsset.ZFILENAME AS 'zAsset-Filename',
zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename',
@@ -545,85 +415,40 @@ def get_ph6viewplaydataphdapsql(files_found, report_folder, seeker, wrap_text, t
zAsset.Z_PK AS 'zAsset-zPK',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18'
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash'
FROM ZASSET zAsset
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE (zAddAssetAttr.ZLASTVIEWEDDATE > 0) OR (zAddAssetAttr.ZPENDINGVIEWCOUNT > 0)
OR (zAddAssetAttr.ZVIEWCOUNT > 0) OR (zAddAssetAttr.ZPENDINGPLAYCOUNT > 0) OR (zAddAssetAttr.ZPLAYCOUNT > 0)
ORDER BY zAsset.ZMODIFICATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for assets with' \
- ' view and played data in versions 18. If the iOS version is greater than iOS 16.5.1' \
- ' last viewed date from ZADDITTIONALASSETATTRIBUTES table ZLASTVIEWEDDATE field' \
- ' will be included. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph6-Viewed and Played Data-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph6-Viewed and Played Data-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAddAssetAttr-Last Viewed Date-0',
- 'zAsset-Modification Date-1',
- 'zAsset-Analysis State Modification Date-2',
- 'zAddAssetAttr- Pending View Count-3',
- 'zAddAssetAttr- View Count-4',
- 'zAddAssetAttr- Pending Play Count-5',
- 'zAddAssetAttr- Play Count-6',
- 'zAddAssetAttr.View_Presentation-iOS18-7',
- 'zAsset-Directory-Path-8',
- 'zAsset-Filename-9',
- 'zAddAssetAttr- Original Filename-10',
- 'zCldMast- Original Filename-11',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-12',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-13',
- 'zAsset-zPK-14',
- 'zAddAssetAttr-zPK-15',
- 'zAsset-UUID = store.cloudphotodb-16',
- 'zAddAssetAttr-Original Stable Hash-iOS18-17',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-18')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph6-Viewed and Played Data-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph6-Viewed and Played Data-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite asset viewed and played data')
-
- db.close()
- return
-
-
-__artifacts_v2__ = {
- 'Ph6-View and Play Data-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite Ph6 assets with viewed and played data',
- 'description': 'Parses basic asset record data from PhotoData-Photos.sqlite for assets with'
- ' view and played data in versions 11-18. If the iOS version is greater than iOS 16.5'
- ' last viewed date from ZADDITTIONALASSETATTRIBUTES table ZLASTVIEWEDDATE field'
- ' will be included. The results for this script will contain'
- ' one record per ZASSET table Z_PK value.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-12',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-B-Interaction_Artifacts',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph6viewplaydataphdapsql'
- }
-}
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18]))
+
+ data_headers = (('zAddAssetAttr-Last Viewed Date-0', 'datetime'),
+ 'zAsset-Modification Date-1',
+ ('zAsset-Analysis State Modification Date-2', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-3',
+ 'zAddAssetAttr- View Count-4',
+ 'zAddAssetAttr- Pending Play Count-5',
+ 'zAddAssetAttr- Play Count-6',
+ 'zAddAssetAttr.View_Presentation-7',
+ 'zAsset-Directory-Path-8',
+ 'zAsset-Filename-9',
+ 'zAddAssetAttr- Original Filename-10',
+ 'zCldMast- Original Filename-11',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-12',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-13',
+ 'zAsset-zPK-14',
+ 'zAddAssetAttr-zPK-15',
+ 'zAsset-UUID = store.cloudphotodb-16',
+ 'zAddAssetAttr-Original Stable Hash-17',
+ 'zAddAssetAttr.Adjusted Stable Hash-18')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph7Favorite.py b/scripts/artifacts/Ph7Favorite.py
index 66e7fee3..d914e501 100644
--- a/scripts/artifacts/Ph7Favorite.py
+++ b/scripts/artifacts/Ph7Favorite.py
@@ -1,40 +1,48 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 2.0
-#
-# Description:
-# Parses basic asset record data from Photos.sqlite for favorite assets and supports iOS 11-18.
-# The results for this script will contain one record per ZASSET table Z_PK value.
-# This parser is based on research and SQLite queries written by Scott Koenig
-# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347
-#
+__artifacts_v2__ = {
+ 'Ph7FavoritePhDaPsql': {
+ 'name': 'Ph7-Favorite-PhDaPsql',
+ 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite for favorite assets'
+ ' and supports iOS 11-18. The results for this script will contain'
+ ' one row per ZASSET table Z_PK value.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-B-Interaction_Artifacts',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, \
- open_sqlite_db_readonly
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
-
-def get_ph7favoritephdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
+@artifact_processor
+def Ph7FavoritePhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("10.3.4"):
- logfunc("Unsupported version for PhotoData-Photos.sqlite favorite assets from iOS " + iosversion)
+ logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("14")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
CASE zAsset.ZFAVORITE
@@ -55,57 +63,36 @@ def get_ph7favoritephdapsql(files_found, report_folder, seeker, wrap_text, timez
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE zAsset.ZFAVORITE = 1
ORDER BY zAsset.ZMODIFICATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for favorite assets' \
- ' and supports iOS 11-13. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph7-Favorite-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph7-Favorite-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Modification Date',
- 'zAsset-Favorite',
- 'zAsset-Directory-Path',
- 'zAsset-Filename',
- 'zAddAssetAttr- Original Filename',
- 'zCldMast- Original Filename',
- 'zCldMast-Import Session ID- AirDrop-StillTesting',
- 'zAsset-zPK',
- 'zAddAssetAttr-zPK',
- 'zAsset-UUID = store.cloudphotodb',
- 'zAddAssetAttr-Master Fingerprint')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph7-Favorite-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph7-Favorite-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Favorite Assets')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10]))
+
+ data_headers = (('zAsset-Modification Date-0', 'datetime'),
+ 'zAsset-Favorite-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-6',
+ 'zAsset-zPK-7',
+ 'zAddAssetAttr-zPK-8',
+ 'zAsset-UUID = store.cloudphotodb-9',
+ 'zAddAssetAttr-Master Fingerprint-10')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
CASE zAsset.ZFAVORITE
@@ -126,57 +113,36 @@ def get_ph7favoritephdapsql(files_found, report_folder, seeker, wrap_text, timez
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE zAsset.ZFAVORITE = 1
ORDER BY zAsset.ZMODIFICATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for favorite assets' \
- ' and supports iOS 14. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph7-Favorite-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph7-Favorite-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Modification Date',
- 'zAsset-Favorite',
- 'zAsset-Directory-Path',
- 'zAsset-Filename',
- 'zAddAssetAttr- Original Filename',
- 'zCldMast- Original Filename',
- 'zCldMast-Import Session ID- AirDrop-StillTesting',
- 'zAsset-zPK',
- 'zAddAssetAttr-zPK',
- 'zAsset-UUID = store.cloudphotodb',
- 'zAddAssetAttr-Master Fingerprint')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph7-Favorite-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph7-Favorite-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Favorite Assets')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10]))
+
+ data_headers = (('zAsset-Modification Date-0', 'datetime'),
+ 'zAsset-Favorite-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-6',
+ 'zAsset-zPK-7',
+ 'zAddAssetAttr-zPK-8',
+ 'zAsset-UUID = store.cloudphotodb-9',
+ 'zAddAssetAttr-Master Fingerprint-10')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
CASE zAsset.ZFAVORITE
@@ -198,58 +164,37 @@ def get_ph7favoritephdapsql(files_found, report_folder, seeker, wrap_text, timez
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE zAsset.ZFAVORITE = 1
ORDER BY zAsset.ZMODIFICATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for favorite assets' \
- ' and supports iOS 15-17. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph7-Favorite-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph7-Favorite-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Modification Date-0',
- 'zAsset-Favorite-1',
- 'zAsset-Directory-Path-2',
- 'zAsset-Filename-3',
- 'zAddAssetAttr- Original Filename-4',
- 'zCldMast- Original Filename-5',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-6',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-7',
- 'zAsset-zPK-8',
- 'zAddAssetAttr-zPK-9',
- 'zAsset-UUID = store.cloudphotodb-10',
- 'zAddAssetAttr-Master Fingerprint-11')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph7-Favorite-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph7-Favorite-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Favorite Assets')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11]))
+
+ data_headers = (('zAsset-Modification Date-0', 'datetime'),
+ 'zAsset-Favorite-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-6',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-7',
+ 'zAsset-zPK-8',
+ 'zAddAssetAttr-zPK-9',
+ 'zAsset-UUID = store.cloudphotodb-10',
+ 'zAddAssetAttr-Master Fingerprint-11')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
CASE zAsset.ZFAVORITE
@@ -265,74 +210,33 @@ def get_ph7favoritephdapsql(files_found, report_folder, seeker, wrap_text, timez
zAsset.Z_PK AS 'zAsset-zPK',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18'
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash'
FROM ZASSET zAsset
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE zAsset.ZFAVORITE = 1
ORDER BY zAsset.ZMODIFICATIONDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for favorite assets' \
- ' and supports iOS 18. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph7-Favorite-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph7-Favorite-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Modification Date-0',
- 'zAsset-Favorite-1',
- 'zAsset-Directory-Path-2',
- 'zAsset-Filename-3',
- 'zAddAssetAttr- Original Filename-4',
- 'zCldMast- Original Filename-5',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-6',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-7',
- 'zAsset-zPK-8',
- 'zAddAssetAttr-zPK-9',
- 'zAsset-UUID = store.cloudphotodb-10',
- 'zAddAssetAttr-Original Stable Hash-iOS18-11',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-12')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph7-Favorite-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph7-Favorite-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Favorite Assets')
-
- db.close()
- return
-
-
-__artifacts_v2__ = {
- 'Ph7-Favorite-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite Ph7 Favorite Assets',
- 'description': 'Parses basic asset record data from PhotoData-Photos.sqlite for favorite assets'
- ' and supports iOS 11-18. The results for this script will contain'
- ' one record per ZASSET table Z_PK value.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-12',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-B-Interaction_Artifacts',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph7favoritephdapsql'
- }
-}
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12]))
+
+ data_headers = (('zAsset-Modification Date-0', 'datetime'),
+ 'zAsset-Favorite-1',
+ 'zAsset-Directory-Path-2',
+ 'zAsset-Filename-3',
+ 'zAddAssetAttr- Original Filename-4',
+ 'zCldMast- Original Filename-5',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-6',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-7',
+ 'zAsset-zPK-8',
+ 'zAddAssetAttr-zPK-9',
+ 'zAsset-UUID = store.cloudphotodb-10',
+ 'zAddAssetAttr-Original Stable Hash-11',
+ 'zAddAssetAttr.Adjusted Stable Hash-12')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph80comappleMobileSlideShowPlist.py b/scripts/artifacts/Ph80comappleMobileSlideShowPlist.py
index 14b24a6e..86317188 100644
--- a/scripts/artifacts/Ph80comappleMobileSlideShowPlist.py
+++ b/scripts/artifacts/Ph80comappleMobileSlideShowPlist.py
@@ -1,33 +1,45 @@
-# Author: Scott Koenig, assisted by past contributors
-# Version: 1.0
-#
-# Description:
-# Parses basic data from com.apple.mobileslideshow.plist which contains some important data related to the Apple
-# Photos Application. Additional information and explanation of some keys-fields might be found with
-# research and published blogs written by Scott Koenig https://theforensicscooter.com/
+__artifacts_v2__ = {
+ 'Ph80ComAppleMobileSlideshowPlist': {
+ 'name': 'Ph80-Com-Apple-MobileSlideshow-Plist',
+ 'description': 'Parses basic data from com.apple.mobileslideshow.plist which contains some important'
+ ' data related to the Apple Photos Application. Additional information and explanation of some'
+ ' keys-fields might be found with research and published blogs written by'
+ ' Scott Koenig https://theforensicscooter.com/',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains com.apple.mobileslideshow.plist',
+ 'category': 'Photos-Z-Settings',
+ 'notes': '',
+ 'paths': ('*/Library/Preferences/com.apple.mobileslideshow.plist',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import datetime
import os
import plistlib
import nska_deserialize as nd
import scripts.artifacts.artGlobals
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, logdevinfo, tsv, is_platform_windows
-
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, logfunc, device_info, get_file_path
-def get_ph80comapplemobileslideshowplist(files_found, report_folder, seeker, wrap_text, time_offset):
+@artifact_processor
+def Ph80ComAppleMobileSlideshowPlist(files_found, report_folder, seeker, wrap_text, time_offset):
data_list = []
- file_found = str(files_found[0])
- with open(file_found, "rb") as fp:
+ source_path = str(files_found[0])
+
+ with open(source_path, "rb") as fp:
pl = plistlib.load(fp)
for key, val in pl.items():
+
if key == 'downloadAndKeepOriginals':
- data_list.append(('downloadAndKeepOriginals', val))
- logdevinfo(f"comapplemobileslideshowplist-downloadAndKeepOriginals: {val}")
+ logfunc(f"downloadAndKeepOriginals: {val}")
+ device_info("com.apple.mobileslideshow.plist", "downloadAndKeepOriginals", str(val), source_path)
elif key == 'PhotosSharedLibrarySyncingIsActive':
- data_list.append(('PhotosSharedLibrarySyncingIsActive', val))
- logdevinfo(f"comapplemobileslideshowplist-PhotosSharedLibrarySyncingIsActive: {val}")
+ logfunc(f"PhotosSharedLibrarySyncingIsActive: {val}")
+ device_info("com.apple.mobileslideshow.plist", "PhotosSharedLibrarySyncingIsActive", str(val), source_path)
elif key == 'TipKitEligibleContents-com.apple.mobileslideshow.one-up-photo':
pathto = os.path.join(report_folder, 'TipKitEligibleContents-com.apple.mobileslideshow.one-up-photo' + '.bplist')
@@ -47,41 +59,10 @@ def get_ph80comapplemobileslideshowplist(files_found, report_folder, seeker, wra
ValueError,
TypeError, OSError, OverflowError) as ex:
logfunc('Had exception: ' + str(ex))
- data_list.append(('TipKitEligibleContents-com.apple.mobileslideshow.one-up-photo', val))
+ data_list.append(('TipKitEligibleContents-com.apple.mobileslideshow.one-up-photo', str(val)))
else:
- data_list.append((key, val))
+ data_list.append((key, str(val)))
- if len(data_list) > 0:
- description = ('Parses data from com.apple.mobileslideshow.plist which contains some important data'
- ' related to the Apple Photos Application. Additional information and explanation of some'
- ' keys-fields might be found with research and published blogs written by'
- ' Scott Koenig https://theforensicscooter.com/')
- report = ArtifactHtmlReport('Ph80-Com-Apple-MobileSlideshow-Plist')
- report.start_artifact_report(report_folder, 'Ph80-Com-Apple-MobileSlideshow-Plist', description)
- report.add_script()
- data_headers = ('Key', 'Values')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph80-Com-Apple-MobileSlideshow-Plist'
- tsv(report_folder, data_headers, data_list, tsvname)
-
-
-__artifacts_v2__ = {
- 'Ph80-Com-Apple-MobileSlideshow-Plist': {
- 'name': 'Photos App Settings Ph80 com.apple.mobileslideshow-plist',
- 'description': 'Parses basic data from com.apple.mobileslideshow.plist which contains some important'
- ' data related to the Apple Photos Application. Additional information and explanation of some'
- ' keys-fields might be found with research and published blogs written by'
- ' Scott Koenig https://theforensicscooter.com/',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '1.0',
- 'date': '2024-06-8',
- 'requirements': 'Acquisition that contains com.apple.mobileslideshow.plist',
- 'category': 'Photos-Z-Settings',
- 'notes': '',
- 'paths': '*/Library/Preferences/com.apple.mobileslideshow.plist',
- 'function': 'get_ph80comapplemobileslideshowplist'
- }
-}
+ data_headers = ('Property','Property Value')
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph81comappleCameraPlist.py b/scripts/artifacts/Ph81comappleCameraPlist.py
index a7239609..d98e9598 100644
--- a/scripts/artifacts/Ph81comappleCameraPlist.py
+++ b/scripts/artifacts/Ph81comappleCameraPlist.py
@@ -1,26 +1,38 @@
-# Author: Scott Koenig, assisted by past contributors
-# Version: 1.0
-#
-# Description:
-# Parses basic data from */mobile/Library/Preferences/com.apple.camera.plist which contains some important data
-# related to the Apple Camera Application. Additional information and explanation of some keys-fields
-# might be found with research and published blogs written by Scott Koenig https://theforensicscooter.com/
+__artifacts_v2__ = {
+ 'Ph81ComAppleCameraPlist': {
+ 'name': 'Ph81-Com-Apple-Camera-Plist',
+ 'description': 'Parses data from */mobile/Library/Preferences/com.apple.camera.plist which contains some'
+ ' important data related to the Apple Camera Application. Additional information and'
+ ' explanation of some keys-fields might be found with research and published blogs written by'
+ ' Scott Koenig https://theforensicscooter.com/',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains com.apple.camera.plist',
+ 'category': 'Photos-Z-Settings',
+ 'notes': '',
+ 'paths': ('*/mobile/Library/Preferences/com.apple.camera.plist',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import datetime
import os
import plistlib
import nska_deserialize as nd
import scripts.artifacts.artGlobals
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, logdevinfo, tsv, is_platform_windows
-
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, logfunc, device_info, get_file_path
-def get_81comapplecameraplist(files_found, report_folder, seeker, wrap_text, time_offset):
+@artifact_processor
+def Ph81ComAppleCameraPlist(files_found, report_folder, seeker, wrap_text, time_offset):
data_list = []
- file_found = str(files_found[0])
- with open(file_found, "rb") as fp:
+ source_path = str(files_found[0])
+
+ with open(source_path, "rb") as fp:
pl = plistlib.load(fp)
for key, val in pl.items():
+
if key == 'CAMUserPreferenceSharedLibraryLastDiscoveryLocation':
pathto = os.path.join(report_folder, 'CAMUserPreferenceSharedLibraryLastDiscoveryLocation' + '.bplist')
with open(pathto, "ab") as wf:
@@ -39,7 +51,7 @@ def get_81comapplecameraplist(files_found, report_folder, seeker, wrap_text, tim
ValueError,
TypeError, OSError, OverflowError) as ex:
logfunc('Had exception: ' + str(ex))
- data_list.append(('CAMUserPreferenceSharedLibraryLastDiscoveryLocation', val))
+ data_list.append(('CAMUserPreferenceSharedLibraryLastDiscoveryLocation', str(val)))
elif key == 'CAMUserPreferenceSharedLibraryLastLocation':
pathto = os.path.join(report_folder, 'CAMUserPreferenceSharedLibraryLastLocation' + '.bplist')
@@ -59,7 +71,7 @@ def get_81comapplecameraplist(files_found, report_folder, seeker, wrap_text, tim
ValueError,
TypeError, OSError, OverflowError) as ex:
logfunc('Had exception: ' + str(ex))
- data_list.append(('CAMUserPreferenceSharedLibraryLastLocation', val))
+ data_list.append(('CAMUserPreferenceSharedLibraryLastLocation', str(val)))
elif key == 'CAMUserPreferenceSharedLibraryLastUserActionLocation':
pathto = os.path.join(report_folder, 'CAMUserPreferenceSharedLibraryLastUserActionLocation' + '.bplist')
@@ -79,7 +91,7 @@ def get_81comapplecameraplist(files_found, report_folder, seeker, wrap_text, tim
ValueError,
TypeError, OSError, OverflowError) as ex:
logfunc('Had exception: ' + str(ex))
- data_list.append(('CAMUserPreferenceSharedLibraryLastUserActionLocation', val))
+ data_list.append(('CAMUserPreferenceSharedLibraryLastUserActionLocation', str(val)))
elif key == 'CAMUserPreferenceExposureBiasByMode':
pathto = os.path.join(report_folder, 'CAMUserPreferenceExposureBiasByMode' + '.bplist')
@@ -99,41 +111,10 @@ def get_81comapplecameraplist(files_found, report_folder, seeker, wrap_text, tim
ValueError,
TypeError, OSError, OverflowError) as ex:
logfunc('Had exception: ' + str(ex))
- data_list.append(('CAMUserPreferenceExposureBiasByMode', val))
+ data_list.append(('CAMUserPreferenceExposureBiasByMode', str(val)))
else:
- data_list.append((key, val))
-
- if len(data_list) > 0:
- description = ('Parses data from */mobile/Library/Preferences/com.apple.camera.plist which contains some'
- ' important data related to the Apple Camera Application. Additional information and'
- ' explanation of some keys-fields might be found with research and published blogs written by'
- ' Scott Koenig https://theforensicscooter.com/')
- report = ArtifactHtmlReport('Ph81-Com-Apple-Camera-Plist')
- report.start_artifact_report(report_folder, 'Ph81-Com-Apple-Camera-Plist', description)
- report.add_script()
- data_headers = ('Key', 'Values')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph81-Com-Apple-Camera-Plist'
- tsv(report_folder, data_headers, data_list, tsvname)
-
+ data_list.append((key, str(val)))
-__artifacts_v2__ = {
- 'Ph81-Com-Apple-Camera-Plist': {
- 'name': 'Camera App Settings Ph81 Com-Apple-Camera-Plist',
- 'description': 'Parses data from */mobile/Library/Preferences/com.apple.camera.plist which contains some'
- ' important data related to the Apple Camera Application. Additional information and'
- ' explanation of some keys-fields might be found with research and published blogs written by'
- ' Scott Koenig https://theforensicscooter.com/',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '1.0',
- 'date': '2024-06-1',
- 'requirements': 'Acquisition that contains com.apple.camera.plist',
- 'category': 'Photos-Z-Settings',
- 'notes': '',
- 'paths': '*/mobile/Library/Preferences/com.apple.camera.plist',
- 'function': 'get_81comapplecameraplist'
- }
-}
+ data_headers = ('Property','Property Value')
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph82comappleMediaAnalysisDPlist.py b/scripts/artifacts/Ph82comappleMediaAnalysisDPlist.py
index 3bec86ee..59ddfb70 100644
--- a/scripts/artifacts/Ph82comappleMediaAnalysisDPlist.py
+++ b/scripts/artifacts/Ph82comappleMediaAnalysisDPlist.py
@@ -1,61 +1,39 @@
-# Author: Scott Koenig, assisted by past contributors
-# Version: 1.0
-#
-# Description:
-# Parses basic data from */mobile/Library/Preferences/com.apple.mediaanalysisd.plist which contains
-# some important data related to Apple Photos Libraries storage locations and Media Analysis Completion.
-# Additional information and explanation of some keys-fields
-# might be found with research and published blogs written by Scott Koenig https://theforensicscooter.com/
-
-import datetime
-import os
-import plistlib
-import nska_deserialize as nd
-import scripts.artifacts.artGlobals
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, logdevinfo, tsv, is_platform_windows
-
-
-def get_82comapplemediaanalysisdplist(files_found, report_folder, seeker, wrap_text, time_offset):
- data_list = []
- file_found = str(files_found[0])
- with open(file_found, "rb") as fp:
- pl = plistlib.load(fp)
- for key, val in pl.items():
- data_list.append((key, val))
-
- if len(data_list) > 0:
- description = ('Parses basic data from */mobile/Library/Preferences/com.apple.mediaanalysisd.plist which'
- ' contains some important data related to Apple Photos Libraries storage locations and'
- ' Media Analysis Completion. Additional information and explanation of some keys-fields'
- ' might be found with research and published blogs written by'
- ' Scott Koenig https://theforensicscooter.com/')
- report = ArtifactHtmlReport('Ph82-Com-Apple-MediaAnalysisD-Plist')
- report.start_artifact_report(report_folder, 'Ph82-Com-Apple-MediaAnalysisD-Plist', description)
- report.add_script()
- data_headers = ('Key', 'Values')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph82-Com-Apple-MediaAnalysisD-Plist'
- tsv(report_folder, data_headers, data_list, tsvname)
-
-
__artifacts_v2__ = {
- 'Ph82-Com-Apple-MediaAnalysisD-Plist': {
- 'name': 'Photo Libraries and Media Analysis Completion Ph82 Com-Apple-MediaAnalysisD-Plist',
+ 'Ph82ComAppleMediaAnalysisDPlist': {
+ 'name': 'Ph82-Com-Apple-MediaAnalysisD-Plist',
'description': 'Parses basic data from */mobile/Library/Preferences/com.apple.mediaanalysisd.plist which'
' contains some important data related to Apple Photos Libraries storage locations and'
' Media Analysis Completion. Additional information and explanation of some keys-fields'
' might be found with research and published blogs written by'
' Scott Koenig https://theforensicscooter.com/',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '1.0',
- 'date': '2024-06-1',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
'requirements': 'Acquisition that contains com.apple.mediaanalysisd.plist',
'category': 'Photos-Z-Settings',
'notes': '',
- 'paths': '*/mobile/Library/Preferences/com.apple.mediaanalysisd.plist',
- 'function': 'get_82comapplemediaanalysisdplist'
+ 'paths': ('*/mobile/Library/Preferences/com.apple.mediaanalysisd.plist',),
+ "output_types": ["standard", "tsv", "none"]
}
}
+
+import datetime
+import os
+import plistlib
+import nska_deserialize as nd
+import scripts.artifacts.artGlobals
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, logfunc, device_info, get_file_path
+
+@artifact_processor
+def Ph82ComAppleMediaAnalysisDPlist(files_found, report_folder, seeker, wrap_text, time_offset):
+ data_list = []
+ source_path = str(files_found[0])
+
+ with open(source_path, "rb") as fp:
+ pl = plistlib.load(fp)
+ for key, val in pl.items():
+ data_list.append((key, str(val)))
+
+ data_headers = ('Property','Property Value')
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph83comapplePurpleBuddyPlist.py b/scripts/artifacts/Ph83comapplePurpleBuddyPlist.py
index a6ee5be4..2e604ea2 100644
--- a/scripts/artifacts/Ph83comapplePurpleBuddyPlist.py
+++ b/scripts/artifacts/Ph83comapplePurpleBuddyPlist.py
@@ -1,57 +1,42 @@
-# Author: Scott Koenig, assisted by past contributors
-# Version: 1.0
-#
-# Description:
-# Parses basic data from com.apple.purplebuddy.plist which contains some important data related to device restore.
+__artifacts_v2__ = {
+ 'Ph83ComApplePurpleBuddyPlist': {
+ 'name': 'Ph83-Com-Apple-PurpleBuddy-Plist',
+ 'description': 'Parses basic data from com.apple.purplebuddy.plist which contains some important data'
+ ' related to device restore.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains com.apple.purplebuddy.plist',
+ 'category': 'Photos-Z-Settings',
+ 'notes': '',
+ 'paths': ('*/Library/Preferences/com.apple.purplebuddy.plist',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import datetime
import os
import plistlib
import nska_deserialize as nd
import scripts.artifacts.artGlobals
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, logdevinfo, tsv, is_platform_windows
-
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, logfunc, device_info, get_file_path
-def get_ph83comapplepurplebuddyplist(files_found, report_folder, seeker, wrap_text, time_offset):
+@artifact_processor
+def Ph83ComApplePurpleBuddyPlist(files_found, report_folder, seeker, wrap_text, time_offset):
data_list = []
- file_found = str(files_found[0])
- with open(file_found, "rb") as fp:
+ source_path = str(files_found[0])
+
+ with open(source_path, "rb") as fp:
pl = plistlib.load(fp)
for key, val in pl.items():
+
if key == 'SetupState':
- data_list.append(('SetupState', val))
- logdevinfo(f"comapplepurplebuddyplist-SetupState: {val}")
+ logfunc(f"SetupState: {val}")
+ device_info("com.apple.purplebuddy.plist", "SetupState", str(val), source_path)
else:
- data_list.append((key, val))
+ data_list.append((key, str(val)))
- if len(data_list) > 0:
- description = ('Parses basic data from com.apple.purplebuddy.plist which contains some important data'
- ' related to device restore.')
- report = ArtifactHtmlReport('Ph83-Com-Apple-PurpleBuddy-Plist')
- report.start_artifact_report(report_folder, 'Ph83-Com-Apple-PurpleBuddy-Plist', description)
- report.add_script()
- data_headers = ('Key', 'Values')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph83-Com-Apple-PurpleBuddy-Plist'
- tsv(report_folder, data_headers, data_list, tsvname)
-
-
-__artifacts_v2__ = {
- 'Ph83-Com-Apple-PurpleBuddy-Plist': {
- 'name': 'Photos App Settings Ph83 com.apple.purplebuddy-plist',
- 'description': 'Parses basic data from com.apple.purplebuddy.plist which contains some important data'
- ' related to device restore.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '1.0',
- 'date': '2024-06-8',
- 'requirements': 'Acquisition that contains com.apple.purplebuddy.plist',
- 'category': 'Photos-Z-Settings',
- 'notes': '',
- 'paths': '*/Library/Preferences/com.apple.purplebuddy.plist',
- 'function': 'get_ph83comapplepurplebuddyplist'
- }
-}
+ data_headers = ('Property','Property Value')
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph84CameraSmartSharingMetadataPlist.py b/scripts/artifacts/Ph84CameraSmartSharingMetadataPlist.py
index ecf2886a..28f2afea 100644
--- a/scripts/artifacts/Ph84CameraSmartSharingMetadataPlist.py
+++ b/scripts/artifacts/Ph84CameraSmartSharingMetadataPlist.py
@@ -1,44 +1,55 @@
-# Author: Scott Koenig https://theforensicscooter.com/
-# Version: 1.0
-#
-# Description:
-# Parses basic data from */PhotoData/Caches/SmartSharing/camera_smart_sharing_metadata.plist
-# which contains some important data related to iCloud Shared Photos Library
-# Smart Camera Settings and auto sharing. Additional information and
-# explanation of some keys-fields might be found with research and published blogs written by
-# Scott Koenig https://theforensicscooter.com/
+__artifacts_v2__ = {
+ 'Ph84CameraSmartSharingMetadataPlist': {
+ 'name': 'Ph84-Camera-Smart-Sharing-Metadata-Plist',
+ 'description': 'Parses basic data from */PhotoData/Caches/SmartSharing/camera_smart_sharing_metadata.plist'
+ ' which contains some important data related to iCloud Shared Photos Library'
+ ' Smart Camera Settings and auto sharing. Additional information and'
+ ' explanation of some keys-fields might be found with research and published blogs written by'
+ ' Scott Koenig https://theforensicscooter.com/',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains camera_smart_sharing_metadata.plist',
+ 'category': 'Photos-Z-Settings',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Caches/SmartSharing/camera_smart_sharing_metadata.plist',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
+import datetime
import os
import plistlib
-import biplist
import nska_deserialize as nd
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, logdevinfo, tsv, is_platform_windows
+import scripts.artifacts.artGlobals
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, logfunc, device_info, get_file_path
-
-def get_ph84camerasmartsharingmetadataplist(files_found, report_folder, seeker, wrap_text, timezone_offset):
+@artifact_processor
+def Ph84CameraSmartSharingMetadataPlist(files_found, report_folder, seeker, wrap_text, timezone_offset):
data_list = []
- file_found = str(files_found[0])
- if file_found.endswith('camera_smart_sharing_metadata.plist'):
- with open(file_found, 'rb') as f:
+ source_path = str(files_found[0])
+
+ if source_path.endswith('camera_smart_sharing_metadata.plist'):
+ with open(source_path, 'rb') as f:
try:
deserialized_plist = nd.deserialize_plist(f)
plist = deserialized_plist
- for key, value in plist.items():
- if key == 'homeLocations':
- homelocations = value
+ for key, val in plist.items():
if key == 'creationDate':
- creationdate = value
+ creationdate = val
+ if key == 'homeLocations':
+ homelocations = val
if key == 'frequentLocations':
- frequentlocations = value
+ frequentlocations = val
if key == 'identities':
- identities = value
+ identities = val
if key == 'locationShiftingRequired':
- locationshiftingrequired = value
+ locationshiftingrequired = val
if key == 'version':
- version = value
+ version = val
if key == 'libraryScopeLocalIdentifier':
- libraryscopelocalidentifier = value
+ libraryscopelocalidentifier = val
except (nd.DeserializeError,
nd.biplist.NotBinaryPlistException,
@@ -49,39 +60,17 @@ def get_ph84camerasmartsharingmetadataplist(files_found, report_folder, seeker,
TypeError, OSError, OverflowError) as ex:
logfunc('Had exception: ' + str(ex))
- data_list.append((homelocations, creationdate, frequentlocations, identities, locationshiftingrequired,
+ data_list.append((creationdate, homelocations, frequentlocations, identities, locationshiftingrequired,
version, libraryscopelocalidentifier))
- description = ('Parses basic data from */PhotoData/Caches/SmartSharing/camera_smart_sharing_metadata.plist'
- ' which contains some important data related to iCloud Shared Photos Library Smart'
- ' Camera Settings and auto sharing.')
- report = ArtifactHtmlReport('Ph84-Camera-Smart-Sharing-Metadata-Plist')
- report.start_artifact_report(report_folder, 'Ph84-Camera-Smart-Sharing-Metadata-Plist', description)
- report.add_script()
- data_headers = ('homeLocations', 'creationDate', 'frequentLocations', 'identities', 'locationShiftingRequired',
- 'version', 'libraryScopeLocalIdentifier')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph84-Camera-Smart-Sharing-Metadata-Plist'
- tsv(report_folder, data_headers, data_list, tsvname)
+ data_headers = (
+ ('creationdate', 'datetime'),
+ 'homelocations',
+ 'frequentlocations',
+ 'identities',
+ 'locationshiftingrequired',
+ 'version',
+ 'libraryscopelocalidentifier')
+ return data_headers, data_list, source_path
-__artifacts_v2__ = {
- 'Ph84-Camera-Smart-Sharing-Metadata-Plist': {
- 'name': 'Camera Smart Sharing Settings Ph84 Camera Smart Sharing Metadata Plist',
- 'description': 'Parses basic data from */PhotoData/Caches/SmartSharing/camera_smart_sharing_metadata.plist'
- ' which contains some important data related to iCloud Shared Photos Library'
- ' Smart Camera Settings and auto sharing. Additional information and'
- ' explanation of some keys-fields might be found with research and published blogs written by'
- ' Scott Koenig https://theforensicscooter.com/',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '1.0',
- 'date': '2024-06-8',
- 'requirements': 'Acquisition that contains camera_smart_sharing_metadata.plist',
- 'category': 'Photos-Z-Settings',
- 'notes': '',
- 'paths': '*/PhotoData/Caches/SmartSharing/camera_smart_sharing_metadata.plist',
- 'function': 'get_ph84camerasmartsharingmetadataplist'
- }
-}
diff --git a/scripts/artifacts/Ph85acntsdcloudServiceEnableLogplist.py b/scripts/artifacts/Ph85acntsdcloudServiceEnableLogplist.py
index da3a0efe..02b1a3c8 100644
--- a/scripts/artifacts/Ph85acntsdcloudServiceEnableLogplist.py
+++ b/scripts/artifacts/Ph85acntsdcloudServiceEnableLogplist.py
@@ -1,24 +1,35 @@
-# Author: Scott Koenig https://theforensicscooter.com/
-# Version: 1.0
-#
-# Description:
-# Parses basic data from */PhotoData/private/com.apple.accountsd/cloudServiceEnableLog.plist which is a plist that
-# tracks when Cloud Photos Library (CPL) and Shared Albums have been enabled.
-# Based on research and published blogs written by Scott Koenig https://theforensicscooter.com/
+__artifacts_v2__ = {
+ 'Ph85accountsdcloudServiceEnableLogPlist': {
+ 'name': 'Ph85-accountsd-cloud-Service-Enable-Log-Plist',
+ 'description': 'Parses basic data from */PhotoData/private/com.apple.accountsd/cloudServiceEnableLog.plist'
+ ' which is a plist that tracks when Cloud Photos Library (CPL) and Shared Albums have been'
+ ' enabled. Based on research and published blogs written by Scott Koenig'
+ ' https://theforensicscooter.com/',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains accountsd cloudServiceEnableLog.plist',
+ 'category': 'Photos-Z-Settings',
+ 'notes': '',
+ 'paths': ('*/com.apple.accountsd/cloudServiceEnableLog.plist',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
+import datetime
import os
import plistlib
-import biplist
import nska_deserialize as nd
import scripts.artifacts.artGlobals
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, logdevinfo, tsv, is_platform_windows
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, logfunc, device_info, get_file_path
-
-def get_ph85accountsdcldservenalogplist(files_found, report_folder, seeker, wrap_text, timezone_offset):
+@artifact_processor
+def Ph85accountsdcloudServiceEnableLogPlist(files_found, report_folder, seeker, wrap_text, timezone_offset):
data_list = []
- file_found = str(files_found[0])
- with open(file_found, "rb") as fp:
+ source_path = str(files_found[0])
+
+ with open(source_path, "rb") as fp:
pl = plistlib.load(fp)
if len(pl) > 0:
for key in pl:
@@ -37,35 +48,8 @@ def get_ph85accountsdcldservenalogplist(files_found, report_folder, seeker, wrap
data_list.append((timestamputc, servicetype, enabledstate))
- description = ('Parses basic data from */PhotoData/private/com.apple.accountsd/cloudServiceEnableLog.plist'
- ' which is a plist that tracks when Cloud Photos Library (CPL) and Shared Albums have been'
- ' enabled. Based on research and published blogs written by Scott Koenig'
- ' https://theforensicscooter.com/')
- report = ArtifactHtmlReport('Ph85-accountsd-cloud-Service-Enable-Log-Plist')
- report.start_artifact_report(report_folder, 'Ph85-accountsd-cloud-Service-Enable-Log-Plist', description)
- report.add_script()
- data_headers = ('TimestampUTC', 'Service-Type', 'Enabled-State')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph85-accountsd-cloud-Service-Enable-Log-Plist'
- tsv(report_folder, data_headers, data_list, tsvname)
-
-
-__artifacts_v2__ = {
- 'Ph85-accountsd-cloud-Service-Enable-Log-Plist': {
- 'name': 'Accountsd Ph85 cloud Services Enable Log Plist',
- 'description': 'Parses basic data from */PhotoData/private/com.apple.accountsd/cloudServiceEnableLog.plist'
- ' which is a plist that tracks when Cloud Photos Library (CPL) and Shared Albums have been'
- ' enabled. Based on research and published blogs written by Scott Koenig'
- ' https://theforensicscooter.com/',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '1.0',
- 'date': '2024-06-20',
- 'requirements': 'Acquisition that contains accountsd cloudServiceEnableLog.plist',
- 'category': 'Photos-Z-Settings',
- 'notes': '',
- 'paths': '*/com.apple.accountsd/cloudServiceEnableLog.plist',
- 'function': 'get_ph85accountsdcldservenalogplist'
- }
-}
+ data_headers = (
+ 'TimestampUTC',
+ 'Service-Type',
+ 'Enabled-State')
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph86astsdcloudServiceEnableLogplist.py b/scripts/artifacts/Ph86astsdcloudServiceEnableLogplist.py
index 5b27c7ab..d87c2c17 100644
--- a/scripts/artifacts/Ph86astsdcloudServiceEnableLogplist.py
+++ b/scripts/artifacts/Ph86astsdcloudServiceEnableLogplist.py
@@ -1,24 +1,34 @@
-# Author: Scott Koenig https://theforensicscooter.com/
-# Version: 1.0
-#
-# Description:
-# Parses basic data from */PhotoData/private/com.apple.assetsd/cloudServiceEnableLog.plist which is a plist that
-# tracks when Cloud Photos Library (CPL) has been enabled.
-# Based on research and published blogs written by Scott Koenig https://theforensicscooter.com/
+__artifacts_v2__ = {
+ 'Ph86assetsdcloudServiceEnableLogPlist': {
+ 'name': 'Ph86-assetsd-cloud-Service-Enable-Log-Plist',
+ 'description': 'Parses basic data from */PhotoData/private/com.apple.accountsd/cloudServiceEnableLog.plist'
+ ' which is a plist that tracks when Cloud Photos Library (CPL) has been enabled.'
+ ' Based on research and published blogs written by Scott Koenig https://theforensicscooter.com/',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains assetsd cloudServiceEnableLog.plist',
+ 'category': 'Photos-Z-Settings',
+ 'notes': '',
+ 'paths': ('*/com.apple.assetsd/cloudServiceEnableLog.plist',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
+import datetime
import os
import plistlib
-import biplist
import nska_deserialize as nd
import scripts.artifacts.artGlobals
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, logdevinfo, tsv, is_platform_windows
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, logfunc, device_info, get_file_path
-
-def get_ph86assetsdcldservenalogplist(files_found, report_folder, seeker, wrap_text, timezone_offset):
+@artifact_processor
+def Ph86assetsdcloudServiceEnableLogPlist(files_found, report_folder, seeker, wrap_text, timezone_offset):
data_list = []
- file_found = str(files_found[0])
- with open(file_found, "rb") as fp:
+ source_path = str(files_found[0])
+
+ with open(source_path, "rb") as fp:
pl = plistlib.load(fp)
if len(pl) > 0:
for key in pl:
@@ -37,33 +47,8 @@ def get_ph86assetsdcldservenalogplist(files_found, report_folder, seeker, wrap_t
data_list.append((timestamputc, servicetype, enabledstate))
- description = ('Parses basic data from */PhotoData/private/com.apple.assetsd/cloudServiceEnableLog.plist'
- ' which is a plist that tracks when Cloud Photos Library (CPL) has been enabled.'
- ' Based on research and published blogs written by Scott Koenig https://theforensicscooter.com/')
- report = ArtifactHtmlReport('Ph86-assetsd-cloud-Service-Enable-Log-Plist')
- report.start_artifact_report(report_folder, 'Ph86-assetsd-cloud-Service-Enable-Log-Plist', description)
- report.add_script()
- data_headers = ('TimestampUTC', 'Service-Type', 'Enabled-State')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph86-assetsd-cloud-Service-Enable-Log-Plist'
- tsv(report_folder, data_headers, data_list, tsvname)
-
-
-__artifacts_v2__ = {
- 'Ph86-assetsd-cloud-Service-Enable-Log-Plist': {
- 'name': 'Assetsd Ph86 cloud Services Enable Log Plist',
- 'description': 'Parses basic data from */PhotoData/private/com.apple.accountsd/cloudServiceEnableLog.plist'
- ' which is a plist that tracks when Cloud Photos Library (CPL) has been enabled.'
- ' Based on research and published blogs written by Scott Koenig https://theforensicscooter.com/',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '1.0',
- 'date': '2024-06-20',
- 'requirements': 'Acquisition that contains assetsd cloudServiceEnableLog.plist',
- 'category': 'Photos-Z-Settings',
- 'notes': '',
- 'paths': '*/com.apple.assetsd/cloudServiceEnableLog.plist',
- 'function': 'get_ph86assetsdcldservenalogplist'
- }
-}
+ data_headers = (
+ 'TimestampUTC',
+ 'Service-Type',
+ 'Enabled-State')
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph8HasAdjustment.py b/scripts/artifacts/Ph8HasAdjustment.py
index 71a246b3..7d6ec635 100644
--- a/scripts/artifacts/Ph8HasAdjustment.py
+++ b/scripts/artifacts/Ph8HasAdjustment.py
@@ -1,40 +1,48 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 2.0
-#
-# Description:
-# Parses basic asset record data from Photos.sqlite for adjusted assets and supports iOS 11-18.
-# The results for this script will contain one record per ZASSET table Z_PK value.
-# This parser is based on research and SQLite queries written by Scott Koenig
-# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347
-#
+__artifacts_v2__ = {
+ 'Ph8HasAdjustmentPhDaPsql': {
+ 'name': 'Ph8-Has Adjustment-PhDaPsql',
+ 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite for adjusted assets'
+ ' and supports iOS 11-18. The results for this script will contain'
+ ' one row per ZASSET table Z_PK value.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-B-Interaction_Artifacts',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, \
- open_sqlite_db_readonly
-
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
-def get_ph8hasadjustmentphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
+@artifact_processor
+def Ph8HasAdjustmentPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("10.3.4"):
- logfunc("Unsupported version for PhotoData-Photos.sqlite adjusted assets from iOS " + iosversion)
+ logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("14")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zUnmAdj.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zUnmAdj-Adjustment Timestamp',
CASE zAsset.ZHASADJUSTMENTS
@@ -82,62 +90,41 @@ def get_ph8hasadjustmentphdapsql(files_found, report_folder, seeker, wrap_text,
LEFT JOIN ZUNMANAGEDADJUSTMENT zUnmAdj ON zAddAssetAttr.ZUNMANAGEDADJUSTMENT = zUnmAdj.Z_PK
WHERE zAsset.ZHASADJUSTMENTS = 1
ORDER BY zUnmAdj.ZADJUSTMENTTIMESTAMP
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for adjusted assets' \
- ' and supports iOS 11-13. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph8-Has Adjustment-PhDaPsq')
- report.start_artifact_report(report_folder, 'Ph8-Has Adjustment-PhDaPsql', description)
- report.add_script()
- data_headers = ('zUnmAdj-Adjustment Timestamp',
- 'zAsset-Has Adjustments-Camera-Effects-Filters',
- 'zAddAssetAttr-Editor Bundle ID',
- 'zUnmAdj-Editor Localized Name',
- 'zUnmAdj-Adjustment Format ID',
- 'zUnmAdj-Adjustment Render Types',
- 'zUnmAdj-Adjustment Format Version',
- 'zAsset-Directory-Path',
- 'zAsset-Filename',
- 'zAddAssetAttr- Original Filename',
- 'zCldMast- Original Filename',
- 'zCldMast-Import Session ID- AirDrop-StillTesting',
- 'zAsset-zPK',
- 'zAddAssetAttr-zPK',
- 'zAsset-UUID = store.cloudphotodb',
- 'zAddAssetAttr-Master Fingerprint')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph8-Has Adjustment-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph8-Has Adjustment-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Adjusted Assets')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15]))
+
+ data_headers = (('zUnmAdj-Adjustment Timestamp', 'datetime'),
+ 'zAsset-Has Adjustments-Camera-Effects-Filters',
+ 'zAddAssetAttr-Editor Bundle ID',
+ 'zUnmAdj-Editor Localized Name',
+ 'zUnmAdj-Adjustment Format ID',
+ 'zUnmAdj-Adjustment Render Types',
+ 'zUnmAdj-Adjustment Format Version',
+ 'zAsset-Directory-Path',
+ 'zAsset-Filename',
+ 'zAddAssetAttr- Original Filename',
+ 'zCldMast- Original Filename',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting',
+ 'zAsset-zPK',
+ 'zAddAssetAttr-zPK',
+ 'zAsset-UUID = store.cloudphotodb',
+ 'zAddAssetAttr-Master Fingerprint')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zUnmAdj.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zUnmAdj-Adjustment Timestamp',
CASE zAsset.ZHASADJUSTMENTS
@@ -186,76 +173,55 @@ def get_ph8hasadjustmentphdapsql(files_found, report_folder, seeker, wrap_text,
LEFT JOIN ZUNMANAGEDADJUSTMENT zUnmAdj ON zAddAssetAttr.ZUNMANAGEDADJUSTMENT = zUnmAdj.Z_PK
WHERE zAsset.ZHASADJUSTMENTS = 1
ORDER BY zUnmAdj.ZADJUSTMENTTIMESTAMP
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for adjusted assets' \
- ' and supports iOS 14-17. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph8-Has Adjustment-PhDaPsq')
- report.start_artifact_report(report_folder, 'Ph8-Has Adjustment-PhDaPsql', description)
- report.add_script()
- data_headers = ('zUnmAdj-Adjustment Timestamp-0',
- 'zAsset-Has Adjustments-Camera-Effects-Filters-1',
- 'zAddAssetAttr-Editor Bundle ID-2',
- 'zUnmAdj-Editor Localized Name-3',
- 'zUnmAdj-Adjustment Format ID-4',
- 'zUnmAdj-Adjustment Render Types-5',
- 'zUnmAdj-Adjustment Format Version-6',
- 'zAsset-Directory-Path-7',
- 'zAsset-Filename-8',
- 'zAddAssetAttr- Original Filename-9',
- 'zCldMast- Original Filename-10',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-11',
- 'zAsset-zPK-12',
- 'zAddAssetAttr-zPK-13',
- 'zAsset-UUID = store.cloudphotodb-14',
- 'zAddAssetAttr-Master Fingerprint-15',
- 'zAddAssetAttr.Adjusted Fingerprint-16')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph8-Has Adjustment-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph8-Has Adjustment-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Adjusted Assets')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16]))
+
+ data_headers = (('zUnmAdj-Adjustment Timestamp-0', 'datetime'),
+ 'zAsset-Has Adjustments-Camera-Effects-Filters-1',
+ 'zAddAssetAttr-Editor Bundle ID-2',
+ 'zUnmAdj-Editor Localized Name-3',
+ 'zUnmAdj-Adjustment Format ID-4',
+ 'zUnmAdj-Adjustment Render Types-5',
+ 'zUnmAdj-Adjustment Format Version-6',
+ 'zAsset-Directory-Path-7',
+ 'zAsset-Filename-8',
+ 'zAddAssetAttr- Original Filename-9',
+ 'zCldMast- Original Filename-10',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-11',
+ 'zAsset-zPK-12',
+ 'zAddAssetAttr-zPK-13',
+ 'zAsset-UUID = store.cloudphotodb-14',
+ 'zAddAssetAttr-Master Fingerprint-15',
+ 'zAddAssetAttr.Adjusted Fingerprint-16')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zUnmAdj.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zUnmAdj-Adjustment Timestamp',
CASE zAsset.ZADJUSTMENTSSTATE
WHEN 0 THEN '0-No-Adjustments-0'
- WHEN 2 THEN '2-Yes-Adjustments iOS18_needs_update_Decoding-2'
- WHEN 3 THEN '3-Yes-Adjustments iOS18_needs_update_Decoding-3'
+ WHEN 2 THEN '2-Adjusted-PhotosAppEdit-2'
+ WHEN 3 THEN '3-Adjusted-Camera-lens-3'
ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || ''
- END AS 'zAsset-Adjustments_State/Camera-Effects-Filters-iOS18',
- DateTime(zCompSyncAttr.ZCLOUDCOMPUTESTATELASTUPDATEDDATE + 978307200, 'UNIXEPOCH') AS 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18',
+ END AS 'zAsset-Adjustments_State',
+ DateTime(zCompSyncAttr.ZCLOUDCOMPUTESTATELASTUPDATEDDATE + 978307200, 'UNIXEPOCH') AS 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date',
CASE zCompSyncAttr.ZLOCALANALYSISMAJORVERSION
WHEN 1 THEN '1-Is_Local_Analysis_Major_Version-1'
ELSE 'Unknown-New-Value!: ' || zCompSyncAttr.ZLOCALANALYSISMAJORVERSION || ''
- END AS 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18',
+ END AS 'zCompSyncAttr-Local_Analysis_Major_Version',
zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID',
zUnmAdj.ZEDITORLOCALIZEDNAME AS 'zUnmAdj-Editor Localized Name',
zUnmAdj.ZADJUSTMENTFORMATIDENTIFIER AS 'zUnmAdj-Adjustment Format ID',
@@ -282,39 +248,41 @@ def get_ph8hasadjustmentphdapsql(files_found, report_folder, seeker, wrap_text,
ELSE 'Unknown-New-Value!: ' || zUnmAdj.ZADJUSTMENTFORMATVERSION || ''
END AS 'zUnmAdj-Adjustment Format Version',
CASE zAsset.ZISDETECTEDSCREENSHOT
- WHEN 0 THEN '0-Not_Detected_Screenshot iOS18_Still_Testing-0'
- WHEN 1 THEN '1-Detected_Screenshot iOS18_Still_Testing-1'
+ WHEN 0 THEN '0-Not_Screenshot-0'
+ WHEN 1 THEN '1-Screenshot-1'
ELSE 'Unknown-New-Value!: ' || zAsset.ZISDETECTEDSCREENSHOT || ''
- END AS 'zAsset-Is_Detected_Screenshot-iOS18',
+ END AS 'zAsset-Is_Detected_Screenshot',
CASE zAsset.ZISRECENTLYSAVED
- WHEN 0 THEN '0-Not_Recently_Saved iOS18_Still_Testing-0'
- WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1'
+ WHEN 0 THEN '0-Not_Recently_Saved-0'
+ WHEN 1 THEN '1-Recently_Saved-1'
ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || ''
- END AS 'zAsset-Is_Recently_Saved-iOS18',
+ END AS 'zAsset-Is_Recently_Saved',
zAsset.ZDIRECTORY AS 'zAsset-Directory-Path',
zAsset.ZFILENAME AS 'zAsset-Filename',
zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename',
zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename',
zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting',
- zCompSyncAttr.ZLOCALANALYSISSTAGE AS 'zCompSyncAttr-Local_Analysis_Stage-iOS18',
- zCompSyncAttr.ZCLOUDCOMPUTESTATEVERSION AS 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18',
+ zCompSyncAttr.ZLOCALANALYSISSTAGE AS 'zCompSyncAttr-Local_Analysis_Stage',
+ zCompSyncAttr.ZCLOUDCOMPUTESTATEVERSION AS 'zCompSyncAttr-Cloud_Compute_State_Version',
zAsset.Z_PK AS 'zAsset-zPK',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
- zAsset.ZCOMPUTESYNCATTRIBUTES AS 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-iOS18',
- zCompSyncAttr.Z_PK AS 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18',
- zCompSyncAttr.ZASSET AS 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18',
- zCompSyncAttr.Z_ENT AS 'zCompSyncAttr-zENT-iOS18',
- zCompSyncAttr.Z_OPT AS 'zCompSyncAttr-zOPT-iOS18',
+ zAsset.ZCOMPUTESYNCATTRIBUTES AS 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK',
+ zCompSyncAttr.Z_PK AS 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr',
+ zCompSyncAttr.ZASSET AS 'zCompSyncAttr-zAsset= zAsset-zPK',
+ zCompSyncAttr.Z_ENT AS 'zCompSyncAttr-zENT',
+ zCompSyncAttr.Z_OPT AS 'zCompSyncAttr-zOPT',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18',
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash',
zUnmAdj.ZOTHERADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Other Adjustments Fingerprint',
zUnmAdj.ZSIMILARTOORIGINALADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Similar to Orig Adjustments Fingerprint',
- zCompSyncAttr.ZCLOUDCOMPUTESTATEADJUSTMENTFINGERPRINT AS 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18',
- CASE zExtAttr.ZGENERATIVEAITYPE
- WHEN 0 THEN '0-Not_Generative_AI iOS18_Still_Testing-0'
- ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || ''
- END AS 'zExtAttr-Generative_AI_Type-iOS18'
+ zCompSyncAttr.ZCLOUDCOMPUTESTATEADJUSTMENTFINGERPRINT AS 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint',
+ CASE zExtAttr.ZGENERATIVEAITYPE
+ WHEN 0 THEN '0-Gen_AI_Type_Not_Detected-0'
+ WHEN 2 THEN '2-CleanUp-SafetyFilter-2'
+ ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || ''
+ END AS 'zExtAttr-Generative_AI_Type',
+ zExtAttr.ZCREDIT AS 'zExtAttr-Credit'
FROM ZASSET zAsset
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES
@@ -323,88 +291,48 @@ def get_ph8hasadjustmentphdapsql(files_found, report_folder, seeker, wrap_text,
LEFT JOIN ZCOMPUTESYNCATTRIBUTES zCompSyncAttr ON zCompSyncAttr.Z_PK = zAsset.ZCOMPUTESYNCATTRIBUTES
WHERE zAsset.ZADJUSTMENTSSTATE > 0
ORDER BY zUnmAdj.ZADJUSTMENTTIMESTAMP
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for adjusted assets' \
- ' and supports iOS 18. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph8-Has Adjustment-PhDaPsq')
- report.start_artifact_report(report_folder, 'Ph8-Has Adjustment-PhDaPsql', description)
- report.add_script()
- data_headers = ('zUnmAdj-Adjustment Timestamp-0',
- 'zAsset-Adjustments_State/Camera-Effects-Filters-iOS18-1',
- 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18-2',
- 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18-3',
- 'zAddAssetAttr-Editor Bundle ID-4',
- 'zUnmAdj-Editor Localized Name-5',
- 'zUnmAdj-Adjustment Format ID-6',
- 'zUnmAdj-Adjustment Render Types-7',
- 'zUnmAdj-Adjustment Format Version-8',
- 'zAsset-Is_Detected_Screenshot-iOS18-9',
- 'zAsset-Is_Recently_Saved-iOS18-10',
- 'zAsset-Directory-Path-11',
- 'zAsset-Filename-12',
- 'zAddAssetAttr- Original Filename-13',
- 'zCldMast- Original Filename-14',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-15',
- 'zCompSyncAttr-Local_Analysis_Stage-iOS18-16',
- 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18-17',
- 'zAsset-zPK-18',
- 'zAddAssetAttr-zPK-19',
- 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-iOS18-20',
- 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18-21',
- 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18-22',
- 'zCompSyncAttr-zENT-iOS18-23',
- 'zCompSyncAttr-zOPT-iOS18-24',
- 'zAsset-UUID = store.cloudphotodb-25',
- 'zAddAssetAttr-Original Stable Hash-iOS18-26',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-27',
- 'zUnmAdj-Other Adjustments Fingerprint-28',
- 'zUnmAdj-Similar to Orig Adjustments Fingerprint-29',
- 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18-30',
- 'zExtAttr-Generative_AI_Type-iOS18-31')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph8-Has Adjustment-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph8-Has Adjustment-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Adjusted Assets')
-
- db.close()
- return
-
-
-__artifacts_v2__ = {
- 'Ph8-Has Adjustment-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite Ph8 Adjusted Assets',
- 'description': 'Parses basic asset record data from PhotoData-Photos.sqlite for adjusted assets'
- ' and supports iOS 11-18. The results for this script will contain'
- ' one record per ZASSET table Z_PK value.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-14',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-B-Interaction_Artifacts',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph8hasadjustmentphdapsql'
- }
-}
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32]))
+
+ data_headers = (('zUnmAdj-Adjustment Timestamp-0', 'datetime'),
+ 'zAsset-Adjustments_State/Camera-Effects-Filters-1',
+ 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-2',
+ 'zCompSyncAttr-Local_Analysis_Major_Version-3',
+ 'zAddAssetAttr-Editor Bundle ID-4',
+ 'zUnmAdj-Editor Localized Name-5',
+ 'zUnmAdj-Adjustment Format ID-6',
+ 'zUnmAdj-Adjustment Render Types-7',
+ 'zUnmAdj-Adjustment Format Version-8',
+ 'zAsset-Is_Detected_Screenshot-9',
+ 'zAsset-Is_Recently_Saved-10',
+ 'zAsset-Directory-Path-11',
+ 'zAsset-Filename-12',
+ 'zAddAssetAttr- Original Filename-13',
+ 'zCldMast- Original Filename-14',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-15',
+ 'zCompSyncAttr-Local_Analysis_Stage-16',
+ 'zCompSyncAttr-Cloud_Compute_State_Version-17',
+ 'zAsset-zPK-18',
+ 'zAddAssetAttr-zPK-19',
+ 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-20',
+ 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-21',
+ 'zCompSyncAttr-zAsset= zAsset-zPK-22',
+ 'zCompSyncAttr-zENT-23',
+ 'zCompSyncAttr-zOPT-24',
+ 'zAsset-UUID = store.cloudphotodb-25',
+ 'zAddAssetAttr-Original Stable Hash-26',
+ 'zAddAssetAttr.Adjusted Stable Hash-27',
+ 'zUnmAdj-Other Adjustments Fingerprint-28',
+ 'zUnmAdj-Similar to Orig Adjustments Fingerprint-29',
+ 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-30',
+ 'zExtAttr-Generative_AI_Type-31',
+ 'zExtAttr-Credit-32')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph94Ios14REFforAssetAnalysis.py b/scripts/artifacts/Ph94Ios14REFforAssetAnalysis.py
index 75a3ad6f..bd5c7327 100644
--- a/scripts/artifacts/Ph94Ios14REFforAssetAnalysis.py
+++ b/scripts/artifacts/Ph94Ios14REFforAssetAnalysis.py
@@ -1,41 +1,66 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 1.0
-#
-# Description:
-# Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest set of decoded data based on
-# testing and research conducted by Scott Koenig https://theforensicscooter.com/ and
-# queries found at https://github.com/ScottKjr3347.
-# I recommend opening the TSV generated reports with Zimmerman's Tools https://ericzimmerman.github.io/#!index.md
-# TimelineExplorer to view, search and filter the results.
-#
+__artifacts_v2__ = {
+ 'Ph94_1iOS14RefforAssetAnalysisPhDaPsql': {
+ 'name': 'Ph94.1-iOS14_Ref_for_Asset_Analysis-PhDaPsql',
+ 'description': 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest'
+ ' set of decoded data based on testing and research conducted by Scott Koenig'
+ ' https://theforensicscooter.com/. I recommend opening the TSV generated reports'
+ ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer'
+ ' to view, search and filter the results.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv"]
+ },
+ 'Ph94_2iOS14RefforAssetAnalysisSyndPL': {
+ 'name': 'Ph94.2-iOS14_Ref_for_Asset_Analysis-SyndPL',
+ 'description': 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.'
+ ' This parser includes the largest set of decoded data based on testing and research'
+ ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the'
+ ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md'
+ ' TimelineExplorer to view, search and filter the results.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains Syndication.photoslibrary-database-Photos.sqlite',
+ 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis',
+ 'notes': '',
+ 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
-
-
-def get_ph94ios14refforassetanalysisphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
- for file_found in files_found:
- file_found = str(file_found)
+@artifact_processor
+def Ph94_1iOS14RefforAssetAnalysisPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if (version.parse(iosversion) <= version.parse("13.7")) or (version.parse(iosversion) >= version.parse("15")):
- logfunc("Unsupported version for PhotoData-Photos.sqlite reference for asset analysis from iOS " + iosversion)
+ logfunc("Unsupported version for PhotoData-Photos.sqlite for iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found, "Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -2801,7 +2826,7 @@ def get_ph94ios14refforassetanalysisphdapsql(files_found, report_folder, seeker,
zAssetAnalyState.ZWORKERTYPE AS 'zAssetAnalyState-Worker Type',
DateTime(zAssetAnalyState.ZIGNOREUNTILDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Ignore Until Date',
DateTime(zAssetAnalyState.ZLASTIGNOREDDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Last Ignored Date',
- zAssetAnalyState.ZSORTTOKEN AS 'zAssetAnalyState-Sort Token',
+ DateTime(zAssetAnalyState.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Sort Token',
zAsset.ZOVERALLAESTHETICSCORE AS 'zAsset-Overall Aesthetic Score',
zCompAssetAttr.ZBEHAVIORALSCORE AS 'zCompAssetAttr-Behavioral Score',
zCompAssetAttr.ZFAILURESCORE AS 'zCompAssetAttr-Failure Score zCompAssetAttr',
@@ -3091,1492 +3116,1470 @@ def get_ph94ios14refforassetanalysisphdapsql(files_found, report_folder, seeker,
LEFT JOIN Z_3SUGGESTIONSBEINGREPRESENTATIVEASSETS z3SuggBRA ON z3SuggBRA.Z_3REPRESENTATIVEASSETS1 = zAsset.Z_PK
LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_55SUGGESTIONSBEINGREPRESENTATIVEASSETS
ORDER BY zAsset.ZADDEDDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
- row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
- row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
- row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
- row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
- row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
- row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
- row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
- row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
- row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
- row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
- row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
- row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
- row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
- row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
- row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
- row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
- row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
- row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
- row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
- row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307],
- row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315],
- row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323],
- row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331],
- row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339],
- row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347],
- row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355],
- row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363],
- row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371],
- row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379],
- row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387],
- row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395],
- row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403],
- row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411],
- row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419],
- row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427],
- row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435],
- row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443],
- row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451],
- row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459],
- row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467],
- row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475],
- row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483],
- row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491],
- row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499],
- row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507],
- row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515],
- row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523],
- row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531],
- row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539],
- row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547],
- row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555],
- row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563],
- row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571],
- row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579],
- row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587],
- row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595],
- row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603],
- row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611],
- row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619],
- row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627],
- row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635],
- row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643],
- row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651],
- row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659],
- row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667],
- row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675],
- row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683],
- row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691],
- row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699],
- row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707],
- row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715],
- row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723],
- row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731],
- row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739],
- row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747],
- row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755],
- row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763],
- row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771],
- row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779],
- row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787],
- row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795],
- row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803],
- row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811],
- row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819],
- row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827],
- row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835],
- row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843],
- row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851],
- row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859],
- row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867],
- row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875],
- row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883],
- row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891],
- row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899],
- row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907],
- row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915],
- row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923],
- row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931],
- row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939],
- row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947],
- row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955],
- row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963],
- row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971],
- row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979],
- row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987],
- row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995],
- row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002],
- row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009],
- row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016],
- row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023],
- row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030],
- row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037],
- row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044],
- row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051],
- row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058],
- row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065],
- row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072],
- row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079],
- row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086],
- row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093],
- row[1094], row[1095], row[1096], row[1097], row[1098], row[1099], row[1100],
- row[1101], row[1102], row[1103], row[1104], row[1105], row[1106], row[1107],
- row[1108], row[1109], row[1110], row[1111], row[1112], row[1113], row[1114],
- row[1115], row[1116], row[1117], row[1118], row[1119], row[1120], row[1121],
- row[1122], row[1123], row[1124], row[1125], row[1126], row[1127], row[1128],
- row[1129], row[1130], row[1131], row[1132], row[1133], row[1134], row[1135],
- row[1136], row[1137], row[1138], row[1139], row[1140], row[1141], row[1142],
- row[1143], row[1144], row[1145], row[1146], row[1147], row[1148], row[1149],
- row[1150], row[1151], row[1152], row[1153], row[1154], row[1155], row[1156],
- row[1157], row[1158], row[1159], row[1160], row[1161], row[1162], row[1163],
- row[1164], row[1165], row[1166], row[1167], row[1168], row[1169], row[1170],
- row[1171], row[1172], row[1173], row[1174], row[1175], row[1176], row[1177],
- row[1178], row[1179], row[1180], row[1181], row[1182], row[1183], row[1184],
- row[1185], row[1186], row[1187], row[1188], row[1189], row[1190], row[1191],
- row[1192], row[1193], row[1194], row[1195], row[1196], row[1197], row[1198],
- row[1199], row[1200], row[1201], row[1202], row[1203], row[1204], row[1205],
- row[1206], row[1207], row[1208], row[1209], row[1210], row[1211], row[1212],
- row[1213], row[1214], row[1215], row[1216], row[1217], row[1218], row[1219],
- row[1220], row[1221], row[1222], row[1223], row[1224], row[1225], row[1226],
- row[1227], row[1228], row[1229], row[1230], row[1231], row[1232], row[1233],
- row[1234], row[1235], row[1236], row[1237], row[1238], row[1239], row[1240],
- row[1241], row[1242], row[1243], row[1244], row[1245], row[1246], row[1247],
- row[1248], row[1249], row[1250], row[1251], row[1252], row[1253], row[1254],
- row[1255], row[1256], row[1257], row[1258], row[1259], row[1260], row[1261],
- row[1262], row[1263], row[1264], row[1265], row[1266], row[1267], row[1268],
- row[1269]))
-
- counter += 1
-
- description = 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest' \
-' set of decoded data based on testing and research conducted by Scott Koenig' \
-' https://theforensicscooter.com/. I recommend opening the TSV generated reports' \
-' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer' \
-' to view, search and filter the results.'
- report = ArtifactHtmlReport('Ph94.1-iOS14_Ref_for_Asset_Analysis-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph94.1-iOS14_Ref_for_Asset_Analysis-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Added Date-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset Complete-2',
- 'zAsset-zPK-4QueryStart-3',
- 'zAddAssetAttr-zPK-4QueryStart-4',
- 'zAsset-UUID = store.cloudphotodb-4QueryStart-5',
- 'zAddAssetAttr-Master Fingerprint-4TableStart-6',
- 'zIntResou-Fingerprint-4TableStart-7',
- 'zAsset-Cloud is My Asset-8',
- 'zAsset-Cloud is deletable-Asset-9',
- 'zAsset-Cloud_Local_State-10',
- 'zAsset-Visibility State-11',
- 'zExtAttr-Camera Make-12',
- 'zExtAttr-Camera Model-13',
- 'zExtAttr-Lens Model-14',
- 'zExtAttr-Flash Fired-15',
- 'zExtAttr-Focal Lenght-16',
- 'zAsset-Derived Camera Capture Device-17',
- 'zAddAssetAttr-Camera Captured Device-18',
- 'zAddAssetAttr-Imported by-19',
- 'zCldMast-Imported By-20',
- 'zAddAssetAttr-Creator Bundle ID-21',
- 'zAddAssetAttr-Imported By Display Name-22',
- 'zCldMast-Imported by Bundle ID-23',
- 'zCldMast-Imported by Display Name-24',
- 'zAsset-Saved Asset Type-25',
- 'zAsset-Directory-Path-26',
- 'zAsset-Filename-27',
- 'zAddAssetAttr- Original Filename-28',
- 'zCldMast- Original Filename-29',
- 'zAsset-Date Created-30',
- 'zCldMast-Creation Date-31',
- 'zIntResou-CldMst Date Created-32',
- 'zAddAssetAttr-Time Zone Name-33',
- 'zAddAssetAttr-Time Zone Offset-34',
- 'zAddAssetAttr-Inferred Time Zone Offset-35',
- 'zAddAssetAttr-EXIF-String-36',
- 'zAsset-Modification Date-37',
- 'zAsset-Last Shared Date-38',
- 'zCldMast-Cloud Local State-39',
- 'zCldMast-Import Date-40',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-41',
- 'zAddAssetAttr-Import Session ID-4QueryStart-42',
- 'zAddAssetAttr-Alt Import Image Date-43',
- 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-44',
- 'zAsset-Cloud Batch Publish Date-45',
- 'zAsset-Cloud Server Publish Date-46',
- 'zAsset-Cloud Download Requests-47',
- 'zAsset-Cloud Batch ID-48',
- 'zAddAssetAttr-Upload Attempts-49',
- 'zAsset-Latitude-50',
- 'zExtAttr-Latitude-51',
- 'zAsset-Longitude-52',
- 'zExtAttr-Longitude-53',
- 'zAddAssetAttr-GPS Horizontal Accuracy-54',
- 'zAddAssetAttr-Location Hash-55',
- 'zAddAssetAttr-Shifted Location Valid-56',
- 'zAddAssetAttr-Shifted Location Data-57',
- 'zAddAssetAttr-Reverse Location Is Valid-58',
- 'zAddAssetAttr-Reverse Location Data-59',
- 'ParentzGenAlbum-UUID-4QueryStart-60',
- 'zGenAlbum-UUID-4QueryStart-61',
- 'ParentzGenAlbum-Cloud GUID-4QueryStart-62',
- 'zGenAlbum-Cloud GUID-4QueryStart-63',
- 'zCldShareAlbumInvRec-Album GUID-4QueryStart-64',
- 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-65',
- 'zGenAlbum-Project Render UUID-4QueryStart-66',
- 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-67',
- 'zGenAlbum-Cloud_Local_State-4QueryStart-68',
- 'ParentzGenAlbum- Creation Date- 4QueryStart-69',
- 'zGenAlbum- Creation Date- 4QueryStart-70',
- 'zGenAlbum- Cloud Creation Date- 4QueryStart-71',
- 'zGenAlbum- Start Date- 4QueryStart-72',
- 'zGenAlbum- End Date- 4QueryStart-73',
- 'zGenAlbum-Cloud Subscription Date- 4QueryStart-74',
- 'ParentzGenAlbum- Title- 4QueryStart-75',
- 'zGenAlbum- Title-User&System Applied- 4QueryStart-76',
- 'zGenAlbum-Import Session ID-SWY- 4QueryStart-77',
- 'zGenAlbum-Creator Bundle ID- 4QueryStart-78',
- 'zGenAlbum-zENT- Entity- 4QueryStart-79',
- 'ParentzGenAlbum- Kind- 4QueryStart-80',
- 'zGenAlbum-Album Kind- 4QueryStart-81',
- 'AAAzCldMastMedData-zOPT-82',
- 'zAddAssetAttr-Media Metadata Type-83',
- 'AAAzCldMastMedData-Data-84',
- 'CldMasterzCldMastMedData-zOPT-85',
- 'zCldMast-Media Metadata Type-86',
- 'CMzCldMastMedData-Data-87',
- 'zAsset-Orientation-88',
- 'zAddAssetAttr-Original Orientation-89',
- 'zAsset-Kind-90',
- 'zAsset-Kind-Sub-Type-91',
- 'zAddAssetAttr-Cloud Kind Sub Type-92',
- 'zAsset-Playback Style-93',
- 'zAsset-Playback Variation-94',
- 'zAsset-Video Duration-95',
- 'zExtAttr-Duration-96',
- 'zAsset-Video CP Duration-97',
- 'zAddAssetAttr-Video CP Duration Time Scale-98',
- 'zAsset-Video CP Visibility State-99',
- 'zAddAssetAttr-Video CP Display Value-100',
- 'zAddAssetAttr-Video CP Display Time Scale-101',
- 'zIntResou-Datastore Class ID-102',
- 'zAsset-Cloud Placeholder Kind-103',
- 'zIntResou-Local Availability-104',
- 'zIntResou-Local Availability Target-105',
- 'zIntResou-Cloud Local State-106',
- 'zIntResou-Remote Availability-107',
- 'zIntResou-Remote Availability Target-108',
- 'zIntResou-Transient Cloud Master-109',
- 'zIntResou-Side Car Index-110',
- 'zIntResou- File ID-111',
- 'zIntResou-Version-112',
- 'zAddAssetAttr- Original-File-Size-113',
- 'zIntResou-Resource Type-114',
- 'zIntResou-Datastore Sub-Type-115',
- 'zIntResou-Cloud Source Type-116',
- 'zIntResou-Data Length-117',
- 'zIntResou-Recipe ID-118',
- 'zIntResou-Cloud Last Prefetch Date-119',
- 'zIntResou-Cloud Prefetch Count-120',
- 'zIntResou- Cloud-Last-OnDemand Download-Date-121',
- 'zAsset-Uniform Type ID-122',
- 'zAsset-Original Color Space-123',
- 'zCldMast-Uniform_Type_ID-124',
- 'zCldMast-Full Size JPEG Source-125',
- 'zAsset-HDR Gain-126',
- 'zExtAttr-Codec-127',
- 'zCldMast-Codec Name-128',
- 'zCldMast-Video Frame Rate-129',
- 'zCldMast-Placeholder State-130',
- 'zAsset-Depth_Type-131',
- 'zAsset-Avalanche UUID-4TableStart-132',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-133',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-134',
- 'zAddAssetAttr-Cloud Recovery State-135',
- 'zAddAssetAttr-Cloud State Recovery Attempts Count-136',
- 'zAsset-Deferred Processing Needed-137',
- 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-138',
- 'zAddAssetAttr-Deferred Processing Candidate Options-139',
- 'zAsset-Has Adjustments-Camera-Effects-Filters-140',
- 'zUnmAdj-UUID-4TableStart-141',
- 'zAsset-Adjustment Timestamp-142',
- 'zUnmAdj-Adjustment Timestamp-143',
- 'zAddAssetAttr-Editor Bundle ID-144',
- 'zUnmAdj-Editor Localized Name-145',
- 'zUnmAdj-Adjustment Format ID-146',
- 'zAddAssetAttr-Montage-147',
- 'zUnmAdj-Adjustment Render Types-148',
- 'zUnmAdj-Adjustment Format Version-149',
- 'zUnmAdj-Adjustment Base Image Format-150',
- 'zAsset-Favorite-151',
- 'zAsset-Hidden-152',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-153',
- 'zAsset-Trashed Date-154',
- 'zIntResou-Trash State-155',
- 'zIntResou-Trashed Date-156',
- 'zAsset-Cloud Delete State-157',
- 'zIntResou-Cloud Delete State-158',
- 'zAddAssetAttr-PTP Trashed State-159',
- 'zIntResou-PTP Trashed State-160',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-161',
- 'zMedAnlyAstAttr-Media Analysis Timestamp-162',
- 'zAsset-Analysis State Modificaion Date-163',
- 'zAddAssetAttr- Pending View Count-164',
- 'zAddAssetAttr- View Count-165',
- 'zAddAssetAttr- Pending Play Count-166',
- 'zAddAssetAttr- Play Count-167',
- 'zAddAssetAttr- Pending Share Count-168',
- 'zAddAssetAttr- Share Count-169',
- 'zAddAssetAttr-Allowed for Analysis-170',
- 'zAddAssetAttr-Scene Analysis Version-171',
- 'zAddAssetAttr-Scene Analysis Timestamp-172',
- 'zAddAssetAttr-Destination Asset Copy State-173',
- 'zAddAssetAttr-Variation Suggestions States-174',
- 'zAsset-High Frame Rate State-175',
- 'zAsset-Video Key Frame Time Scale-176',
- 'zAsset-Video Key Frame Value-177',
- 'zExtAttr-ISO-178',
- 'zExtAttr-Metering Mode-179',
- 'zExtAttr-Sample Rate-180',
- 'zExtAttr-Track Format-181',
- 'zExtAttr-White Balance-182',
- 'zExtAttr-Aperture-183',
- 'zExtAttr-BitRate-184',
- 'zExtAttr-Exposure Bias-185',
- 'zExtAttr-Frames Per Second-186',
- 'zExtAttr-Shutter Speed-187',
- 'zAsset-Height-188',
- 'zAddAssetAttr-Original Height-189',
- 'zIntResou-Unoriented Height-190',
- 'zAsset-Width-191',
- 'zAddAssetAttr-Original Width-192',
- 'zIntResou-Unoriented Width-193',
- 'zShare-Thumbnail Image Data-194',
- 'SPLzShare-Thumbnail Image Data-195',
- 'zAsset-Thumbnail Index-196',
- 'zAddAssetAttr-Embedded Thumbnail Height-197',
- 'zAddAssetAttr-Embedded Thumbnail Length-198',
- 'zAddAssetAttr-Embedded Thumbnail Offset-199',
- 'zAddAssetAttr-Embedded Thumbnail Width-200',
- 'zAsset-Packed Acceptable Crop Rect-201',
- 'zAsset-Packed Badge Attributes-202',
- 'zAsset-Packed Preferred Crop Rect-203',
- 'zAsset-Curation Score-204',
- 'zAsset-Camera Processing Adjustment State-205',
- 'zAsset-Depth Type-206',
- 'zAddAssetAttr-Orig Resource Choice-207',
- 'zAddAssetAttr-Spatial Over Capture Group ID-208',
- 'zAddAssetAttr-Place Annotation Data-209',
- 'zAddAssetAttr-Distance Identity-210',
- 'zAddAssetAttr-Edited IPTC Attributes-211',
- 'zAssetDes-Long Description-212',
- 'zAddAssetAttr-Asset Description-213',
- 'zAddAssetAttr-Title-Comments via Cloud Website-214',
- 'zAddAssetAttr-Accessibility Description-215',
- 'zAddAssetAttr-Photo Stream Tag ID-216',
- 'zCldFeedEnt-Entry Date-217',
- 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-218',
- 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-219',
- 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-220',
- 'zCldFeedEnt-Entry Priority Number-221',
- 'zCldFeedEnt-Entry Type Number-222',
- 'zCldSharedComment-Cloud GUID-4TableStart-223',
- 'zCldSharedComment-Date-224',
- 'zCldSharedComment-Comment Client Date-225',
- 'zAsset-Cloud Last Viewed Comment Date-226',
- 'zCldSharedComment-Type-227',
- 'zCldSharedComment-Comment Text-228',
- 'zCldSharedComment-Commenter Hashed Person ID-229',
- 'zCldSharedComment-Batch Comment-230',
- 'zCldSharedComment-Is a Caption-231',
- 'zAsset-Cloud Has Comments by Me-232',
- 'zCldSharedComment-Is My Comment-233',
- 'zCldSharedComment-Is Deletable-234',
- 'zAsset-Cloud Has Comments Conversation-235',
- 'zAsset-Cloud Has Unseen Comments-236',
- 'zCldSharedComment-Liked-237',
- 'zAddAssetAttr-Share Type-238',
- 'zShare-UUID-CMM-4TableStart-239',
- 'SPLzShare-UUID-SPL-4TableStart-240',
- 'zShare-zENT-CMM-241',
- 'SPLzShare-zENT-SPL-242',
- 'zShare-Status-CMM-243',
- 'SPLzShare-Status-SPL-244',
- 'zShare-Scope Type-CMM-245',
- 'SPLzShare-Scope Type-SPL-246',
- 'zShare-Local Publish State-CMM-247',
- 'SPLzShare-Local Publish State-SPL-248',
- 'zShare-Public Permission-CMM-249',
- 'SPLzShare-Public Permission-SPL-250',
- 'zShare-Originating Scope ID-CMM-251',
- 'SPLzShare-Originating Scope ID-SPL-252',
- 'zShare-Scope ID-CMM-253',
- 'SPLzShare-Scope ID-SPL-254',
- 'zShare-Title-CMM-255',
- 'SPLzShare-Title-SPL-256',
- 'zShare-Share URL-CMM-257',
- 'SPLzShare-Share URL-SPL-258',
- 'zShare-Creation Date-CMM-259',
- 'SPLzShare-Creation Date-SPL-260',
- 'zShare-Start Date-CMM-261',
- 'SPLzShare-Start Date-SPL-262',
- 'zShare-End Date-CMM-263',
- 'SPLzShare-End Date-SPL-264',
- 'zShare-Expiry Date-CMM-265',
- 'SPLzShare-Expiry Date-SPL-266',
- 'zShare-Asset Count-CMM-267',
- 'SPLzShare-Asset Count-SPL-268',
- 'zShare-Photos Count-CMM-269',
- 'SPLzShare-Photos Count-CMM-SPL-270',
- 'zShare-Uploaded Photos Count-CMM-271',
- 'SPLzShare-Uploaded Photos Count-SPL-272',
- 'zShare-Videos Count-CMM-273',
- 'SPLzShare-Videos Count-SPL-274',
- 'zShare-Uploaded Videos Count-CMM-275',
- 'SPLzShare-Uploaded Videos Count-SPL-276',
- 'zShare-Force Sync Attempted-CMM-277',
- 'SPLzShare-Force Sync Attempted-SPL-278',
- 'zShare-Should Notify On Upload Completion-CMM-279',
- 'SPLzShare-Should Notify On Upload Completion-SPL-280',
- 'zShare-Trashed State-CMM-281',
- 'SPLzShare-Trashed State-SPL-282',
- 'zShare-Cloud Delete State-CMM-283',
- 'SPLzShare-Cloud Delete State-SPL-284',
- 'zShare-Should Ignor Budgets-CMM-285',
- 'SPLzShare-Should Ignor Budgets-SPL-286',
- 'zSharePartic-UUID-4TableStart-287',
- 'SPLzSharePartic-UUID-4TableStart-288',
- 'zSharePartic-Acceptance Status-289',
- 'SPLzSharePartic-Acceptance Status-290',
- 'zSharePartic-Is Current User-291',
- 'SPLzSharePartic-Is Current User-292',
- 'zSharePartic-Role-293',
- 'SPLzSharePartic-Role-294',
- 'zSharePartic-Premission-295',
- 'SPLzSharePartic-Premission-296',
- 'zSharePartic-User ID-297',
- 'SPLzSharePartic-User ID-298',
- 'SPLzSharePartic-zPK-4TableStart-299',
- 'zSharePartic-zPK-4TableStart-300',
- 'zSharePartic-Email Address-301',
- 'SPLzSharePartic-Email Address-302',
- 'zSharePartic-Phone Number-303',
- 'SPLzSharePartic-Phone Number-304',
- 'ParentzGenAlbum-UUID-4TableStart-305',
- 'zGenAlbum-UUID-4TableStart-306',
- 'ParentzGenAlbum-Cloud GUID-4TableStart-307',
- 'zGenAlbum-Cloud GUID-4TableStart-308',
- 'zCldShareAlbumInvRec-Album GUID-4TableStart-309',
- 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-310',
- 'zGenAlbum-Project Render UUID-4TableStart-311',
- 'zAlbumList-Needs Reordering Number-312',
- 'zGenAlbum-zENT- Entity-313',
- 'ParentzGenAlbum-Kind-314',
- 'zGenAlbum-Album Kind-315',
- 'ParentzGenAlbum-Cloud-Local-State-316',
- 'zGenAlbum-Cloud_Local_State-317',
- 'ParentzGenAlbum- Title-318',
- 'zGenAlbum- Title-User&System Applied-319',
- 'zGenAlbum-Import Session ID-SWY-320',
- 'zGenAlbum-Creator Bundle ID-321',
- 'ParentzGenAlbum-Creation Date-322',
- 'zGenAlbum-Creation Date-323',
- 'zGenAlbum-Cloud Creation Date-324',
- 'zGenAlbum-Start Date-325',
- 'zGenAlbum-End Date-326',
- 'zGenAlbum-Cloud Subscription Date-327',
- 'ParentzGenAlbum-Pending Items Count-328',
- 'zGenAlbum-Pending Items Count-329',
- 'ParentzGenAlbum-Pending Items Type-330',
- 'zGenAlbum-Pending Items Type-331',
- 'zGenAlbum- Cached Photos Count-332',
- 'zGenAlbum- Cached Videos Count-333',
- 'zGenAlbum- Cached Count-334',
- 'ParentzGenAlbum-Sync Event Order Key-335',
- 'zGenAlbum-Sync Event Order Key-336',
- 'zGenAlbum-Has Unseen Content-337',
- 'zGenAlbum-Unseen Asset Count-338',
- 'zGenAlbum-is Owned-339',
- 'zGenAlbum-Cloud Relationship State-340',
- 'zGenAlbum-Cloud Relationship State Local-341',
- 'zGenAlbum-Cloud Owner Mail Key-342',
- 'zGenAlbum-Cloud Owner Frist Name-343',
- 'zGenAlbum-Cloud Owner Last Name-344',
- 'zGenAlbum-Cloud Owner Full Name-345',
- 'zGenAlbum-Cloud Person ID-346',
- 'zAsset-Cloud Owner Hashed Person ID-347',
- 'zGenAlbum-Cloud Owner Hashed Person ID-348',
- 'zGenAlbum-Local Cloud Multi-Contributors Enabled-349',
- 'zGenAlbum-Cloud Multi-Contributors Enabled-350',
- 'zGenAlbum-Cloud Album Sub Type-351',
- 'zGenAlbum-Cloud Contribution Date-352',
- 'zGenAlbum-Cloud Last Interesting Change Date-353',
- 'zGenAlbum-Cloud Notification Enabled-354',
- 'ParentzGenAlbum-Pinned-355',
- 'zGenAlbum-Pinned-356',
- 'ParentzGenAlbum-Custom Sort Key-357',
- 'zGenAlbum-Custom Sort Key-358',
- 'ParentzGenAlbum-Custom Sort Ascending-359',
- 'zGenAlbum-Custom Sort Ascending-360',
- 'ParentzGenAlbum-Is Prototype-361',
- 'zGenAlbum-Is Prototype-362',
- 'ParentzGenAlbum-Project Document Type-363',
- 'zGenAlbum-Project Document Type-364',
- 'ParentzGenAlbum-Custom Query Type-365',
- 'zGenAlbum-Custom Query Type-366',
- 'ParentzGenAlbum-Trashed State-367',
- 'ParentzGenAlbum-Trash Date-368',
- 'zGenAlbum-Trashed State-369',
- 'zGenAlbum-Trash Date-370',
- 'ParentzGenAlbum-Cloud Delete State-371',
- 'zGenAlbum-Cloud Delete State-372',
- 'zGenAlbum-Cloud Owner Whitelisted-373',
- 'zGenAlbum-Cloud Local Public URL Enabled-374',
- 'zGenAlbum-Cloud Public URL Enabled-375',
- 'zGenAlbum-Public URL-376',
- 'zGenAlbum-Key Asset Face Thumb Index-377',
- 'zGenAlbum-Project Text Extension ID-378',
- 'zGenAlbum-User Query Data-379',
- 'zGenAlbum-Custom Query Parameters-380',
- 'zGenAlbum-Project Data-381',
- 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-382',
- 'zCldShareAlbumInvRec-Invitation State Local-383',
- 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-384',
- 'zCldShareAlbumInvRec-Subscription Date-385',
- 'zCldShareAlbumInvRec-Invitee First Name-386',
- 'zCldShareAlbumInvRec-Invitee Last Name-387',
- 'zCldShareAlbumInvRec-Invitee Full Name-388',
- 'zCldShareAlbumInvRec-Invitee Hashed Person ID-389',
- 'zCldShareAlbumInvRec-Invitee Email Key-390',
- 'zGenAlbum-Key Asset Face ID-391',
- 'zFaceCrop-Face Area Points-392',
- 'zAsset-Face Adjustment Version-393',
- 'zDetFace-Asset Visible-394',
- 'zPerson-Face Count-395',
- 'zDetFace-Face Crop-396',
- 'zDetFace-Face Algorithm Version-397',
- 'zDetFace-Adjustment Version-398',
- 'zDetFace-UUID-4TableStart-399',
- 'zPerson-Person UUID-4TableStart-400',
- 'zDetFace-Confirmed Face Crop Generation State-401',
- 'zDetFace-Manual-402',
- 'zDetFace-VIP Model Type-403',
- 'zDetFace-Name Source-404',
- 'zDetFace-Cloud Name Source-405',
- 'zPerson-Person URI-406',
- 'zPerson-Display Name-407',
- 'zPerson-Full Name-408',
- 'zPerson-Cloud Verified Type-409',
- 'zFaceCrop-State-410',
- 'zFaceCrop-Type-411',
- 'zFaceCrop-UUID-4TableStart-412',
- 'zPerson-Type-413',
- 'zPerson-Verified Type-414',
- 'zPerson-Gender Type-415',
- 'zDetFace-Gender Type-416',
- 'zDetFace-Center X-417',
- 'zDetFace-Center Y-418',
- 'zPerson-Age Type Estimate-419',
- 'zDetFace-Age Type Estimate-420',
- 'zDetFace-Hair Color Type-421',
- 'zDetFace-Facial Hair Type-422',
- 'zDetFace-Has Smile-423',
- 'zDetFace-Smile Type-424',
- 'zDetFace-Lip Makeup Type-425',
- 'zDetFace-Eyes State-426',
- 'zDetFace-Is Left Eye Closed-427',
- 'zDetFace-Is Right Eye Closed-428',
- 'zDetFace-Eye Glasses Type-429',
- 'zDetFace-Eye Makeup Type-430',
- 'zDetFace-Cluster Squence Number Key-431',
- 'zDetFace-Grouping ID-432',
- 'zDetFace-Master ID-433',
- 'zDetFace-Quality-434',
- 'zDetFace-Quality Measure-435',
- 'zDetFace-Source Height-436',
- 'zDetFace-Source Width-437',
- 'zDetFace-Hidden-Asset Hidden-438',
- 'zDetFace-In Trash-Recently Deleted-439',
- 'zDetFace-Cloud Local State-440',
- 'zDetFace-Training Type-441',
- 'zDetFace.Pose Yaw-442',
- 'zDetFace-Roll-443',
- 'zDetFace-Size-444',
- 'zDetFace-Cluster Squence Number-445',
- 'zDetFace-Blur Score-446',
- 'zDetFacePrint-Face Print Version-447',
- 'zMedAnlyAstAttr-Face Count-448',
- 'zDetFaceGroup-UUID-4TableStart-449',
- 'zDetFaceGroup-Person Builder State-450',
- 'zDetFaceGroup-UnNamed Face Count-451',
- 'zPerson-In Person Naming Model-452',
- 'zPerson-Key Face Pick Source Key-453',
- 'zPerson-Manual Order Key-454',
- 'zPerson-Question Type-455',
- 'zPerson-Suggested For Client Type-456',
- 'zPerson-Merge Target Person-457',
- 'zPerson-Cloud Local State-458',
- 'zFaceCrop-Cloud Local State-459',
- 'zFaceCrop-Cloud Type-460',
- 'zPerson-Cloud Delete State-461',
- 'zFaceCrop-Cloud Delete State-462',
- 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-463',
- 'zMemory-zPK-464',
- 'z3MemoryBCAs-3CuratedAssets = zAsset-zPK-465',
- 'z3MemoryBCAs-40MemoriesBeingCuratedAssets = zMemory-zPK-466',
- 'z3MemoryBECAs-3ExtCuratedAssets = zAsset-zPK-467',
- 'z3MemoryBECAs-40MemoriesBeingExtCuratedAssets = zMemory-zPK-468',
- 'z3MemoryBMCAs-3MovieCuratedAssets = zAsset-zPK-469',
- 'z3MemoryBMCAs-40MemoriesBeingMovieCuratedAssets = zMemory-zPK-470',
- 'z3MemoryBRAs-3RepresentativeAssets = zAsset-zPK-471',
- 'z3MemoryBRAs-40RepresentativeAssets = zMemory-zPK-472',
- 'zMemory-Key Asset = zAsset-zPK-473',
- 'zMemory-UUID-474',
- 'zMemory-SubTitle-475',
- 'zMemory-Title-476',
- 'zMemory-Category-477',
- 'zMemory-SubCategory-478',
- 'zMemory-Creation Date-479',
- 'zMemory-User Created-480',
- 'zMemory-Favorite Memory-481',
- 'zMemory-Score-482',
- 'zMemory-View Count-483',
- 'zMemory-Play Count-484',
- 'zMemory-Rejected-485',
- 'zMemory-Share Count-486',
- 'zMemory-Last Movie Play Date-487',
- 'zMemory-Last Viewed Date-488',
- 'zMemory-Pending-489',
- 'zMemory-Pending Play Count Memory-490',
- 'zMemory-Pending Share Count Memory-491',
- 'zMemory-Pending View Count Memory-492',
- 'zMemory-Featured State-493',
- 'zMemory-Photos Graph Version-494',
- 'zMemory-AssetListPredicte-495',
- 'zMemory-Notification State-496',
- 'zMemory-Cloud Local State-497',
- 'zMemory-Cloud Delete State-498',
- 'YearzMomentList-UUID-499',
- 'YearzMomentList-zPK-500',
- 'zMoment-Year Moment List-501',
- 'YearzMomentList-Sort Index-502',
- 'YearzMomentList-Granularity Level-503',
- 'YearzMomentList-Start Date-504',
- 'YearzMomentList-Representative Date-505',
- 'YearzMomentList-End Date-506',
- 'YearzMomentList-Trashed State-507',
- 'MegaYMzMomentList-UUID-508',
- 'MegaYMzMomentList-zPK-509',
- 'zMoment-Mega Moment List-510',
- 'MegaYMzMomentList-Sort Index-511',
- 'MegaYMzMomentList-Granularity Level-512',
- 'MegaYMzMomentList-Start Date-513',
- 'MegaYMzMomentList-Representative Date-514',
- 'MegaYMzMomentList-End Date-515',
- 'MegaYMzMomentList-Trashed State-516',
- 'zMoment-UUID-517',
- 'zMoment-zPK-518',
- 'zMoment-Aggregation Score-519',
- 'zMoment-Start Date-520',
- 'zMoment-Representative Date-521',
- 'zMoment-Timezone Offset-522',
- 'zMoment-Modification Date-523',
- 'zMoment-End Date-524',
- 'zMoment-SubTitle-525',
- 'zMoment-Title-526',
- 'zMoment-Processed Location-527',
- 'zMoment-Approx Latitude-528',
- 'zMoment-Approx Longitude-529',
- 'zMoment-GPS Horizontal Accuracy-530',
- 'zMoment-Cache Count-531',
- 'zMoment-Cached Photos Count-532',
- 'zMoment-Cached Videos Count-533',
- 'zMoment-Trashed State-534',
- 'zMoment-Highlight Key-535',
- 'zAsset-Highlight Visibility Score-536',
- 'YearParzPhotosHigh-UUID-537',
- 'YearParzPhotosHigh-zPK-538',
- 'YearParzPhotosHigh-zENT-539',
- 'YearParzPhotosHigh-zOPT-540',
- 'YearParzPhotosHigh-Promotion Score-541',
- 'YearParzPhotosHigh-Title-542',
- 'YearParzPhotosHigh-Verbose Smart Description-543',
- 'YearParzPhotosHigh-Start Date-544',
- 'YearParzPhotosHigh-End Date-545',
- 'YearParzPhotosHigh-Year Key Asset-546',
- 'YearParzPhotosHigh-Is Curated-547',
- 'YearParzPhotosHigh-Kind-548',
- 'YearParzPhotosHigh-Category-549',
- 'YearParzPhotosHigh-Visibility State-550',
- 'YearParzPhotosHigh-Enrichment State-551',
- 'YearParzPhotosHigh-Enrichment Version-552',
- 'YearParzPhotosHigh-Highlight Version-553',
- 'YMParzPhotosHigh-UUID-554',
- 'YMParzPhotosHigh-zPK-555',
- 'YMParzPhotosHigh-Parent PH Key-556',
- 'YMParzPhotosHigh-zENT-557',
- 'YMParzPhotosHigh-zOPT-558',
- 'YMParzPhotosHigh-Promotion Score-559',
- 'YMParzPhotosHigh-Title-560',
- 'YMParzPhotosHigh-Subtitle-561',
- 'YMParzPhotosHigh-Verbose Smart Description-562',
- 'YMParzPhotosHigh-Start Date-563',
- 'YMParzPhotosHigh-End Date-564',
- 'YMParzPhotosHigh-Month First Asset-565',
- 'YMParzPhotosHigh-Month Key Asset-566',
- 'YMParzPhotosHigh-Is Curated-567',
- 'YMParzPhotosHigh-Kind-568',
- 'YMParzPhotosHigh-Category-569',
- 'YMParzPhotosHigh-Visibility State-570',
- 'YMParzPhotosHigh-Enrichment State-571',
- 'YMParzPhotosHigh-Enrichment Version-572',
- 'YMParzPhotosHigh-Highlight Version-573',
- 'DGParzPhotosHigh-UUID-574',
- 'DGParzPhotosHigh-zPK-575',
- 'DGParzPhotosHigh-Parent PH Key-576',
- 'DGParzPhotosHigh-zENT-577',
- 'DGParzPhotosHigh-zOPT-578',
- 'DGParzPhotosHigh-Promotion Score-579',
- 'DGParzPhotosHigh-Title-580',
- 'DGParzPhotosHigh-Subtitle-581',
- 'DGParzPhotosHigh-Verbose Smart Description-582',
- 'DGParzPhotosHigh-Start Date-583',
- 'DGParzPhotosHigh-End Date-584',
- 'DGParzPhotosHigh-Month First Asset-585',
- 'DGParzPhotosHigh-Month Key Asset-586',
- 'DGParzPhotosHigh-Is Curated-587',
- 'DGParzPhotosHigh-Kind-588',
- 'DGParzPhotosHigh-Category-589',
- 'DGParzPhotosHigh-Visibility State-590',
- 'DGParzPhotosHigh-Enrichment State-591',
- 'DGParzPhotosHigh-Enrichment Version-592',
- 'DGParzPhotosHigh-Highlight Version-593',
- 'zAsset-Highlight Being Assets Key-594',
- 'HBAzPhotosHigh-UUID-595',
- 'HBAzPhotosHigh-zPK-596',
- 'HBAzPhotosHigh-Parent PH Key-597',
- 'HBAzPhotosHigh-zENT-598',
- 'HBAzPhotosHigh-zOPT-599',
- 'HBAzPhotosHigh-Promotion Score-600',
- 'HBAzPhotosHigh-Title-601',
- 'HBAzPhotosHigh-Subtitle-602',
- 'HBAzPhotosHigh-Verbose Smart Description-603',
- 'HBAzPhotosHigh-Start Date-604',
- 'HBAzPhotosHigh Start-Timezone Offset-605',
- 'HBAzPhotosHigh-End Timezone Offset-606',
- 'HBAzPhotosHigh-End Date-607',
- 'HBAzPhotosHigh-Asset Count-608',
- 'HBAzPhotosHigh-Summary Count-609',
- 'HBAzPhotosHigh-Extended Count-610',
- 'HBAzPhotosHigh-Day Group Assets Count-611',
- 'HBAzPhotosHigh-Day Group Ext Assets Count-612',
- 'HBAzPhotosHigh-Day Group Summary Assets Count-613',
- 'HBAzPhotosHigh-Key Asset-614',
- 'HBAzPhotosHigh-Is Curated-615',
- 'HBAzPhotosHigh-Type-616',
- 'HBAzPhotosHigh-Kind-617',
- 'HBAzPhotosHigh-Category-618',
- 'HBAzPhotosHigh-Visibility State-619',
- 'HBAzPhotosHigh-Mood-620',
- 'HBAzPhotosHigh-Enrichment State-621',
- 'HBAzPhotosHigh-Enrichment Version-622',
- 'HBAzPhotosHigh-Highlight Version-623',
- 'zAsset-Highlight Being Extended Assets Key-624',
- 'HBEAzPhotosHigh-UUID-625',
- 'HBEAzPhotosHigh-zPK-626',
- 'HBEAzPhotosHigh-zENT-627',
- 'HBEAzPhotosHigh-zOPT-628',
- 'HBEAzPhotosHigh-Promotion Score-629',
- 'HBEAzPhotosHigh-Title-630',
- 'HBEAzPhotosHigh-Subtitle-631',
- 'HBEAzPhotosHigh-Verbose Smart Description-632',
- 'HBEAzPhotosHigh-Start Date-633',
- 'HBEAzPhotosHigh-Start Timezone Offset-634',
- 'HBEAzPhotosHigh-End Timezone Offset-635',
- 'HBEAzPhotosHigh-End Date-636',
- 'HBEAzPhotosHigh-Asset Count-637',
- 'HBEAzPhotosHigh-Summary Count-638',
- 'HBEAzPhotosHigh-Extended Count-639',
- 'HBEAzPhotosHigh-Day Group Assets Count-640',
- 'HBEAzPhotosHigh-Day Group Ext Assets Count-641',
- 'HBEAzPhotosHigh-Day Group Summary Assets Count-642',
- 'HBEAzPhotosHigh-Parent PH Key-643',
- 'HBEAzPhotosHigh-Year Key Asset-644',
- 'HBEAzPhotosHigh-Month First Asset-645',
- 'HBEAzPhotosHigh-Month Key Asset-646',
- 'HBEAzPhotosHigh-Key Asset-647',
- 'HBEAzPhotosHigh-Parent Day Group PH Key-648',
- 'HBEAzPhotosHigh-Day Group Key Asset-649',
- 'HBEAzPhotosHigh-is Curated-650',
- 'HBEAzPhotosHigh-Type-651',
- 'HBEAzPhotosHigh-Kind-652',
- 'HBEAzPhotosHigh-Category-653',
- 'HBEAzPhotosHigh-Visibility State-654',
- 'HBEAzPhotosHigh-Mood-655',
- 'HBEAzPhotosHigh-Enrichment State-656',
- 'HBEAzPhotosHigh-Enrichment Version-657',
- 'HBEAzPhotosHigh-Highlight Version-658',
- 'zAsset-Highlight Being Summary Assets Key-659',
- 'HBSAzPhotosHigh-UUID-660',
- 'HBSAzPhotosHigh-zPK-661',
- 'HBSAzPhotosHigh-zENT-662',
- 'HBSAzPhotosHigh-zOPT-663',
- 'HBSAzPhotosHigh-Promotion Score-664',
- 'HBSAzPhotosHigh-Title-665',
- 'HBSAzPhotosHigh-Subtitle-666',
- 'HBSAzPhotosHigh-Verbose Smart Description-667',
- 'HBSAzPhotosHigh-Start Date-668',
- 'HBSAzPhotosHigh-Start Timezone Offset-669',
- 'HBSAzPhotosHigh-End Timezone Offset-670',
- 'HBSAzPhotosHigh-End Date-671',
- 'HBSAzPhotosHigh-Asset Count-672',
- 'HBSAzPhotosHigh-Summary Count-673',
- 'HBSAzPhotosHigh-Extended Count-674',
- 'HBSAzPhotosHigh-Day Group Assets Count-675',
- 'HBSAzPhotosHigh-Day Group Ext Assets Count-676',
- 'HBSAzPhotosHigh-Day Group Summary Assets Count-677',
- 'HBSAzPhotosHigh-Parent PH Key-678',
- 'HBSAzPhotosHigh-Year Key Asset-679',
- 'HBSAzPhotosHigh-Month First Asset-680',
- 'HBSAzPhotosHigh-Month Key Asset-681',
- 'HBSAzPhotosHigh-Key Asset-682',
- 'HBSAzPhotosHigh-Parent Day Group PH Key-683',
- 'HBSAzPhotosHigh-Day Group Key Asset-684',
- 'HBSAzPhotosHigh-is Curated-685',
- 'HBSAzPhotosHigh-Type-686',
- 'HBSAzPhotosHigh-Kind-687',
- 'HBSAzPhotosHigh-Category-688',
- 'HBSAzPhotosHigh-Visibility State-689',
- 'HBSAzPhotosHigh-Mood-690',
- 'HBSAzPhotosHigh-Enrichment State-691',
- 'HBSAzPhotosHigh-Enrichment Version-692',
- 'HBSAzPhotosHigh-Highlight Version-693',
- 'zAsset-Highlight Being Key Asset Key-694',
- 'HBKAzPhotosHigh-UUID-695',
- 'HBKAzPhotosHigh-zPK-696',
- 'HBKAzPhotosHigh-zENT-697',
- 'HBKAzPhotosHigh-zOPT-698',
- 'HBKAzPhotosHigh-Promotion Score-699',
- 'HBKAzPhotosHigh-Title-700',
- 'HBKAzPhotosHigh-Subtitle-701',
- 'HBKAzPhotosHigh-Verbose Smart Description-702',
- 'HBKAzPhotosHigh-Start Date-703',
- 'HBKAzPhotosHigh-Start Timezone Offset-704',
- 'HBKAzPhotosHigh-End Timezone Offset-705',
- 'HBKAzPhotosHigh-End Date-706',
- 'HBKAzPhotosHigh-Asset Count-707',
- 'HBKAzPhotosHigh-Summary Count-708',
- 'HBKAzPhotosHigh-Extended Count-709',
- 'HBKAzPhotosHigh-Day Group Assets Count-710',
- 'HBKAzPhotosHigh-Day Group Ext Assets Count-711',
- 'HBKAzPhotosHigh-Day Group Summary Assets Count-712',
- 'HBKAzPhotosHigh-Parent PH Key-713',
- 'HBKAzPhotosHigh-Year Key Asset-714',
- 'HBKAzPhotosHigh-Month First Asset-715',
- 'HBKAzPhotosHigh-Month Key Asset-716',
- 'HBKAzPhotosHigh-Key Asset-717',
- 'HBKAzPhotosHigh-Parent Day Group PH Key-718',
- 'HBKAzPhotosHigh-Day Group Key Asset-719',
- 'HBKAzPhotosHigh-is Curated-720',
- 'HBKAzPhotosHigh-Type-721',
- 'HBKAzPhotosHigh-Kind-722',
- 'HBKAzPhotosHigh-Category-723',
- 'HBKAzPhotosHigh-Visibility State-724',
- 'HBKAzPhotosHigh-Mood-725',
- 'HBKAzPhotosHigh-Enrichment State-726',
- 'HBKAzPhotosHigh-Enrichment Version-727',
- 'HBKAzPhotosHigh-Highlight Version-728',
- 'zAsset-Day Group Highlight Being Assets Key-729',
- 'DGHBAzPhotosHigh-UUID-730',
- 'DGHBAzPhotosHigh-zPK-731',
- 'DGHBAzPhotosHigh-zENT-732',
- 'DGHBAzPhotosHigh-zOPT-733',
- 'DGHBAzPhotosHigh-Promotion Score-734',
- 'DGHBAzPhotosHigh-Title-735',
- 'DGHBAzPhotosHigh-Subtitle-736',
- 'DGHBAzPhotosHigh-Verbose Smart Description-737',
- 'DGHBAzPhotosHigh-Start Date-738',
- 'DGHBAzPhotosHigh-Start Timezone Offset-739',
- 'DGHBAzPhotosHigh-End Timezone Offset-740',
- 'DGHBAzPhotosHigh-End Date-741',
- 'DGHBAzPhotosHigh-Asset Count-742',
- 'DGHBAzPhotosHigh-Summary Count-743',
- 'DGHBAzPhotosHigh-Extended Count-744',
- 'DGHBAzPhotosHigh-Day Group Assets Count-745',
- 'DGHBAzPhotosHigh-Day Group Ext Assets Count-746',
- 'DGHBAzPhotosHigh-Day Group Summary Assets Count-747',
- 'DGHBAzPhotosHigh-Parent PH Key-748',
- 'DGHBAzPhotosHigh-Year Key Asset-749',
- 'DGHBAzPhotosHigh-Month First Asset-750',
- 'DGHBAzPhotosHigh-Month Key Asset-751',
- 'DGHBAzPhotosHigh-Key Asset-752',
- 'DGHBAzPhotosHigh-Parent Day Group PH Key-753',
- 'DGHBAzPhotosHigh-Day Group Key Asset-754',
- 'DGHBAzPhotosHigh-is Curated-755',
- 'DGHBAzPhotosHigh-Type-756',
- 'DGHBAzPhotosHigh-Kind-757',
- 'DGHBAzPhotosHigh-Category-758',
- 'DGHBAzPhotosHigh-Visibility State-759',
- 'DGHBAzPhotosHigh-Mood-760',
- 'DGHBAzPhotosHigh-Enrichment State-761',
- 'DGHBAzPhotosHigh-Enrichment Version-762',
- 'DGHBAzPhotosHigh-Highlight Version-763',
- 'zAsset-Day Group Highlight Being Extended Assets Key-764',
- 'DGHBEAzPhotosHigh-UUID-765',
- 'DGHBEAzPhotosHigh-zPK-766',
- 'DGHBEAzPhotosHigh-zENT-767',
- 'DGHBEAzPhotosHigh-zOPT-768',
- 'DGHBEAzPhotosHigh-Promotion Score-769',
- 'DGHBEAzPhotosHigh-Title-770',
- 'DGHBEAzPhotosHigh-Subtitle-771',
- 'DGHBEAzPhotosHigh-Verbose Smart Description-772',
- 'DGHBEAzPhotosHigh-Start Date-773',
- 'DGHBEAzPhotosHigh-Start Timezone Offset-774',
- 'DGHBEAzPhotosHigh-End Timezone Offset-775',
- 'DGHBEAzPhotosHigh-End Date-776',
- 'DGHBEAzPhotosHigh-Asset Count-777',
- 'DGHBEAzPhotosHigh-Summary Count-778',
- 'DGHBEAzPhotosHigh-Extended Count-779',
- 'DGHBEAzPhotosHigh-Day Group Assets Count-780',
- 'DGHBEAzPhotosHigh-Day Group Ext Assets Count-781',
- 'DGHBEAzPhotosHigh-Day Group Summary Assets Count-782',
- 'DGHBEAzPhotosHigh-Parent PH Key-783',
- 'DGHBEAzPhotosHigh-Year Key Asset-784',
- 'DGHBEAzPhotosHigh-Month First Asset-785',
- 'DGHBEAzPhotosHigh-Month Key Asset-786',
- 'DGHBEAzPhotosHigh-Key Asset-787',
- 'DGHBEAzPhotosHigh-Parent Day Group PH Key-788',
- 'DGHBEAzPhotosHigh-Day Group Key Asset-789',
- 'DGHBEAzPhotosHigh-is Curated-790',
- 'DGHBEAzPhotosHigh-Type-791',
- 'DGHBEAzPhotosHigh-Kind-792',
- 'DGHBEAzPhotosHigh-Category-793',
- 'DGHBEAzPhotosHigh-Visibility State-794',
- 'DGHBEAzPhotosHigh-Mood-795',
- 'DGHBEAzPhotosHigh-Enrichment State-796',
- 'DGHBEAzPhotosHigh-Enrichment Version-797',
- 'DGHBEAzPhotosHigh-Highlight Version-798',
- 'zAsset-Day Group Highlight Being Key Asset-799',
- 'DGHBKAzPhotosHigh-UUID-800',
- 'DGHBKAzPhotosHigh-zPK-801',
- 'DGHBKAzPhotosHigh-zENT-802',
- 'DGHBKAzPhotosHigh-zOPT-803',
- 'DGHBKAzPhotosHigh-Promotion Score-804',
- 'DGHBKAzPhotosHigh-Title-805',
- 'DGHBKAzPhotosHigh-Subtitle-806',
- 'DGHBKAzPhotosHigh-Verbose Smart Description-807',
- 'DGHBKAzPhotosHigh-Start Date-808',
- 'DGHBKAzPhotosHigh-Start Timezone Offset-809',
- 'DGHBKAzPhotosHigh-End Timezone Offset-810',
- 'DGHBKAzPhotosHigh-End Date-811',
- 'DGHBKAzPhotosHigh-Asset Count-812',
- 'DGHBKAzPhotosHigh-Summary Count-813',
- 'DGHBKAzPhotosHigh-Extended Count-814',
- 'DGHBKAzPhotosHigh-Day Group Assets Count-815',
- 'DGHBKAzPhotosHigh-Day Group Ext Assets Count-816',
- 'DGHBKAzPhotosHigh-Day Group Summary Assets Count-817',
- 'DGHBKAzPhotosHigh-Parent PH Key-818',
- 'DGHBKAzPhotosHigh-Year Key Asset-819',
- 'DGHBKAzPhotosHigh-Month First Asset-820',
- 'DGHBKAzPhotosHigh-Month Key Asset-821',
- 'DGHBKAzPhotosHigh-Key Asset-822',
- 'DGHBKAzPhotosHigh-Parent Day Group PH Key-823',
- 'DGHBKAzPhotosHigh-Day Group Key Asset-824',
- 'DGHBKAzPhotosHigh-is Curated-825',
- 'DGHBKAzPhotosHigh-Type-826',
- 'DGHBKAzPhotosHigh-Kind-827',
- 'DGHBKAzPhotosHigh-Category-828',
- 'DGHBKAzPhotosHigh-Visibility State-829',
- 'DGHBKAzPhotosHigh-Mood-830',
- 'DGHBKAzPhotosHigh-Enrichment State-831',
- 'DGHBKAzPhotosHigh-Enrichment Version-832',
- 'DGHBKAzPhotosHigh-Highlight Version-833',
- 'zAsset-Day Group Highlight Being Summary Assets Key-834',
- 'DGHBSAzPhotosHigh-UUID-835',
- 'DGHBSAzPhotosHigh-zPK-836',
- 'DGHBSAzPhotosHigh-zENT-837',
- 'DGHBSAzPhotosHigh-zOPT-838',
- 'DGHBSAzPhotosHigh-Promotion Score-839',
- 'DGHBSAzPhotosHigh-Title-840',
- 'DGHBSAzPhotosHigh-Subtitle-841',
- 'DGHBSAzPhotosHigh-Verbose Smart Description-842',
- 'DGHBSAzPhotosHigh-Start Date-843',
- 'DGHBSAzPhotosHigh-Start Timezone Offset-844',
- 'DGHBSAzPhotosHigh-End Timezone Offset-845',
- 'DGHBSAzPhotosHigh-End Date-846',
- 'DGHBSAzPhotosHigh-Asset Count-847',
- 'DGHBSAzPhotosHigh-Summary Count-848',
- 'DGHBSAzPhotosHigh-Extended Count-849',
- 'DGHBSAzPhotosHigh-Day Group Assets Count-850',
- 'DGHBSAzPhotosHigh-Day Group Ext Assets Count-851',
- 'DGHBSAzPhotosHigh-Day Group Summary Assets Count-852',
- 'DGHBSAzPhotosHigh-Parent PH Key-853',
- 'DGHBSAzPhotosHigh-Year Key Asset-854',
- 'DGHBSAzPhotosHigh-Month First Asset-855',
- 'DGHBSAzPhotosHigh-Month Key Asset-856',
- 'DGHBSAzPhotosHigh-Key Asset-857',
- 'DGHBSAzPhotosHigh-Parent Day Group PH Key-858',
- 'DGHBSAzPhotosHigh-Day Group Key Asset-859',
- 'DGHBSAzPhotosHigh-is Curated-860',
- 'DGHBSAzPhotosHigh-Type-861',
- 'DGHBSAzPhotosHigh-Kind-862',
- 'DGHBSAzPhotosHigh-Category-863',
- 'DGHBSAzPhotosHigh-Visibility State-864',
- 'DGHBSAzPhotosHigh-Mood-865',
- 'DGHBSAzPhotosHigh-Enrichment State-866',
- 'DGHBSAzPhotosHigh-Enrichment Version-867',
- 'DGHBSAzPhotosHigh-Highlight Version-868',
- 'zAsset-Month Highlight Being First Asset Key-869',
- 'MHBFAzPhotosHigh-UUID-870',
- 'MHBFAzPhotosHigh-zPK-871',
- 'MHBFAzPhotosHigh-zENT-872',
- 'MHBFAzPhotosHigh-zOPT-873',
- 'MHBFAzPhotosHigh-Promotion Score-874',
- 'MHBFAzPhotosHigh-Title-875',
- 'MHBFAzPhotosHigh-Subtitle-876',
- 'MHBFAzPhotosHigh-Verbose Smart Description-877',
- 'MHBFAzPhotosHigh-Start Date-878',
- 'MHBFAzPhotosHigh-Start Timezone Offset-879',
- 'MHBFAzPhotosHigh-End Timezone Offset-880',
- 'MHBFAzPhotosHigh-End Date-881',
- 'MHBFAzPhotosHigh-Asset Count-882',
- 'MHBFAzPhotosHigh-Summary Count-883',
- 'MHBFAzPhotosHigh-Extended Count-884',
- 'MHBFAzPhotosHigh-Day Group Assets Count-885',
- 'MHBFAzPhotosHigh-Day Group Ext Assets Count-886',
- 'MHBFAzPhotosHigh-Day Group Summary Assets Count-887',
- 'MHBFAzPhotosHigh-Parent PH Key-888',
- 'MHBFAzPhotosHigh-Year Key Asset-889',
- 'MHBFAzPhotosHigh-Month First Asset-890',
- 'MHBFAzPhotosHigh-Month Key Asset-891',
- 'MHBFAzPhotosHigh-Key Asset-892',
- 'MHBFAzPhotosHigh-Parent Day Group PH Key-893',
- 'MHBFAzPhotosHigh-Day Group Key Asset-894',
- 'MHBFAzPhotosHigh-is Curated-895',
- 'MHBFAzPhotosHigh-Type-896',
- 'MHBFAzPhotosHigh-Kind-897',
- 'MHBFAzPhotosHigh-Category-898',
- 'MHBFAzPhotosHigh-Visibility State-899',
- 'MHBFAzPhotosHigh-Mood-900',
- 'MHBFAzPhotosHigh-Enrichment State-901',
- 'MHBFAzPhotosHigh-Enrichment Version-902',
- 'MHBFAzPhotosHigh-Highlight Version-903',
- 'zAsset-Month Highlight Being Key Asset-904',
- 'MHBKAzPhotosHigh-UUID-905',
- 'MHBKAzPhotosHigh-zPK-906',
- 'MHBKAzPhotosHigh-zENT-907',
- 'MHBKAzPhotosHigh-zOPT-908',
- 'MHBKAzPhotosHigh-Promotion Score-909',
- 'MHBKAzPhotosHigh-Title-910',
- 'MHBKAzPhotosHigh-Subtitle-911',
- 'MHBKAzPhotosHigh-Verbose Smart Description-912',
- 'MHBKAzPhotosHigh-Start Date-913',
- 'MHBKAzPhotosHigh-Start Timezone Offset-914',
- 'MHBKAzPhotosHigh-End Timezone Offset-915',
- 'MHBKAzPhotosHigh-End Date-916',
- 'MHBKAzPhotosHigh-Asset Count-917',
- 'MHBKAzPhotosHigh-Summary Count-918',
- 'MHBKAzPhotosHigh-Extended Count-919',
- 'MHBKAzPhotosHigh-Day Group Assets Count-920',
- 'MHBKAzPhotosHigh-Day Group Ext Assets Count-921',
- 'MHBKAzPhotosHigh-Day Group Summary Assets Count-922',
- 'MHBKAzPhotosHigh-Parent PH Key-923',
- 'MHBKAzPhotosHigh-Year Key Asset-924',
- 'MHBKAzPhotosHigh-Month First Asset-925',
- 'MHBKAzPhotosHigh-Month Key Asset-926',
- 'MHBKAzPhotosHigh-Key Asset-927',
- 'MHBKAzPhotosHigh-Parent Day Group PH Key-928',
- 'MHBKAzPhotosHigh-Day Group Key Asset-929',
- 'MHBKAzPhotosHigh-is Curated-930',
- 'MHBKAzPhotosHigh-Type-931',
- 'MHBKAzPhotosHigh-Kind-932',
- 'MHBKAzPhotosHigh-Category-933',
- 'MHBKAzPhotosHigh-Visibility State-934',
- 'MHBKAzPhotosHigh-Mood-935',
- 'MHBKAzPhotosHigh-Enrichment State-936',
- 'MHBKAzPhotosHigh-Enrichment Version-937',
- 'MHBKAzPhotosHigh-Highlight Version-938',
- 'zAsset-Year Highlight Being Key Asset-939',
- 'YHBKAzPhotosHigh-UUID-940',
- 'YHBKAzPhotosHigh-zPK-941',
- 'YHBKAzPhotosHigh-zENT-942',
- 'YHBKAzPhotosHigh-zOPT-943',
- 'YHBKAzPhotosHigh-Promotion Score-944',
- 'YHBKAzPhotosHigh-Title-945',
- 'YHBKAzPhotosHigh-Subtitle-946',
- 'YHBKAzPhotosHigh-Verbose Smart Description-947',
- 'YHBKAzPhotosHigh-Start Date-948',
- 'YHBKAzPhotosHigh-Start Timezone Offset-949',
- 'YHBKAzPhotosHigh-End Timezone Offset-950',
- 'YHBKAzPhotosHigh-End Date-951',
- 'YHBKAzPhotosHigh-Asset Count-952',
- 'YHBKAzPhotosHigh-Summary Count-953',
- 'YHBKAzPhotosHigh-Extended Count-954',
- 'YHBKAzPhotosHigh-Day Group Assets Count-955',
- 'YHBKAzPhotosHigh-Day Group Ext Assets Count-956',
- 'YHBKAzPhotosHigh-Day Group Summary Assets Count-957',
- 'YHBKAzPhotosHigh-Parent PH Key-958',
- 'YHBKAzPhotosHigh-Year Key Asset-959',
- 'YHBKAzPhotosHigh-Month First Asset-960',
- 'YHBKAzPhotosHigh-Month Key Asset-961',
- 'YHBKAzPhotosHigh-Key Asset-962',
- 'YHBKAzPhotosHigh-Parent Day Group PH Key-963',
- 'YHBKAzPhotosHigh-Day Group Key Asset-964',
- 'YHBKAzPhotosHigh-is Curated-965',
- 'YHBKAzPhotosHigh-Type-966',
- 'YHBKAzPhotosHigh-Kind-967',
- 'YHBKAzPhotosHigh-Category-968',
- 'YHBKAzPhotosHigh-Visibility State-969',
- 'YHBKAzPhotosHigh-Mood-970',
- 'YHBKAzPhotosHigh-Enrichment State-971',
- 'YHBKAzPhotosHigh-Enrichment Version-972',
- 'YHBKAzPhotosHigh-Highlight Version-973',
- 'z3SuggBKA-3KeyAssets = zAsset-zPK-974',
- 'z3SuggBKA-55SuggBeingKeyAssets = zSugg-zPK-975',
- 'SBKAzSugg-zPK-976',
- 'SBKAzSugg-UUID-977',
- 'SBKAzSugg-Start Date-978',
- 'SBKAzSugg-State-979',
- 'SBKAzSugg-Featured State-980',
- 'SBKAzSugg-Notification State-981',
- 'SBKAzSugg-Creation Date-982',
- 'SBKAzSugg-End Date-983',
- 'SBKAzSugg-Activation Date-984',
- 'SBKAzSugg-Expunge Date-985',
- 'SBKAzSugg-Relevant Until Date-986',
- 'SBKAzSugg-Title-987',
- 'SBKAzSugg-Sub Title-988',
- 'SBKAzSugg-Cached Count-989',
- 'SBKAzSugg-Cahed Photos Count-990',
- 'SBKAzSugg-Cached Videos Count-991',
- 'SBKAzSugg-Type-992',
- 'SBKAzSugg-Sub Type-993',
- 'SBKAzSugg-Version-994',
- 'SBKAzSugg-Cloud Local State-995',
- 'SBKAzSugg-Cloud Delete State-996',
- 'z3SuggBRA-3RepAssets1-997',
- 'z3SuggBRA-55SuggBeingRepAssets-998',
- 'SBRAzSugg-zPK-999',
- 'SBRAzSugg-UUID-1000',
- 'SBRAzSugg-Start Date-1001',
- 'SBRAzSugg-State-1002',
- 'SBRAzSugg-Featured State-1003',
- 'SBRAzSugg-Notification State-1004',
- 'SBRAzSugg-Creation Date-1005',
- 'SBRAzSugg-End Date-1006',
- 'SBRAzSugg-Activation Date-1007',
- 'SBRAzSugg-Expunge Date-1008',
- 'SBRAzSugg-Relevant Until Date-1009',
- 'SBRAzSugg-Title-1010',
- 'SBRAzSugg-Sub Title-1011',
- 'SBRAzSugg-Cached Count-1012',
- 'SBRAzSugg-Cahed Photos Count-1013',
- 'SBRAzSugg-Cached Videos Count-1014',
- 'SBRAzSugg-Type-1015',
- 'SBRAzSugg-Sub Type-1016',
- 'SBRAzSugg-Version-1017',
- 'SBRAzSugg-Cloud Local State-1018',
- 'SBRAzSugg-Cloud Delete State-1019',
- 'zAsset-Highlight Visibility Score-1020',
- 'zMedAnlyAstAttr-Media Analysis Version-1021',
- 'zMedAnlyAstAttr-Audio Classification-1022',
- 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-1023',
- 'zMedAnlyAstAttr-Best Video Range Start Time Scale-1024',
- 'zMedAnlyAstAttr-Best Video Range Duration Value-1025',
- 'zMedAnlyAstAttr-Best Video Range Start Value-1026',
- 'zMedAnlyAstAttr-Packed Best Playback Rect-1027',
- 'zMedAnlyAstAttr-Activity Score-1028',
- 'zMedAnlyAstAttr-Video Score-1029',
- 'zMedAnlyAstAttr-AutoPlay Suggestion Score-1030',
- 'zMedAnlyAstAttr-Blurriness Score-1031',
- 'zMedAnlyAstAttr-Exposure Score-1032',
- 'zAssetAnalyState-Asset UUID-4TableStart-1033',
- 'zAssetAnalyState-Analyisis State-1034',
- 'zAssetAnalyState-Worker Flags-1035',
- 'zAssetAnalyState-Worker Type-1036',
- 'zAssetAnalyState-Ignore Until Date-1037',
- 'zAssetAnalyState-Last Ignored Date-1038',
- 'zAssetAnalyState-Sort Token-1039',
- 'zAsset-Overall Aesthetic Score-1040',
- 'zCompAssetAttr-Behavioral Score-1041',
- 'zCompAssetAttr-Failure Score zCompAssetAttr-1042',
- 'zCompAssetAttr-Harmonious Color Score-1043',
- 'zCompAssetAttr-Immersiveness Score-1044',
- 'zCompAssetAttr-Interaction Score-1045',
- 'zCompAssetAttr-Intersting Subject Score-1046',
- 'zCompAssetAttr-Intrusive Object Presence Score-1047',
- 'zCompAssetAttr-Lively Color Score-1048',
- 'zCompAssetAttr-Low Light-1049',
- 'zCompAssetAttr-Noise Score-1050',
- 'zCompAssetAttr-Pleasant Camera Tilt Score-1051',
- 'zCompAssetAttr-Pleasant Composition Score-1052',
- 'zCompAssetAttr-Pleasant Lighting Score-1053',
- 'zCompAssetAttr-Pleasant Pattern Score-1054',
- 'zCompAssetAttr-Pleasant Perspective Score-1055',
- 'zCompAssetAttr-Pleasant Post Processing Score-1056',
- 'zCompAssetAttr-Pleasant Reflection Score-1057',
- 'zCompAssetAttrPleasant Symmetry Score-1058',
- 'zCompAssetAttr-Sharply Focused Subject Score-1059',
- 'zCompAssetAttr-Tastfully Blurred Score-1060',
- 'zCompAssetAttr-Well Chosen Subject Score-1061',
- 'zCompAssetAttr-Well Framed Subject Score-1062',
- 'zCompAssetAttr-Well Timeed Shot Score-1063',
- 'zCldRes-Asset UUID-4TableStart-1064',
- 'zCldRes-Cloud Local State-1065',
- 'zCldRes-File Size-1066',
- 'zCldRes-Height-1067',
- 'zCldRes-Is Available-1068',
- 'zCldRes-Is Locally Available-1069',
- 'zCldRes-Prefetch Count-1070',
- 'zCldRes-Source Type-1071',
- 'zCldRes-Type-1072',
- 'zCldRes-Width-1073',
- 'zCldRes-Date Created-1074',
- 'zCldRes-Last OnDemand Download Date-1075',
- 'zCldRes-Last Prefetch Date-1076',
- 'zCldRes-Prunedat-1077',
- 'zCldRes-File Path-1078',
- 'zCldRes-Fingerprint-1079',
- 'zCldRes-Item ID-1080',
- 'zCldRes-UniID-1081',
- 'zAddAssetAttr-zPK-1082',
- 'zAddAssetAttr-zENT-1083',
- 'ZAddAssetAttr-zOPT-1084',
- 'zAddAssetAttr-zAsset= zAsset_zPK-1085',
- 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-1086',
- 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-1087',
- 'zAddAssetAttr-Master Fingerprint-1088',
- 'zAddAssetAttr-Public Global UUID-1089',
- 'zAddAssetAttr-Deferred Photo Identifier-1090',
- 'zAddAssetAttr-Original Assets UUID-1091',
- 'zAddAssetAttr-Import Session ID-1092',
- 'zAddAssetAttr-Originating Asset Identifier-1093',
- 'zAddAssetAttr.Adjusted Fingerprint-1094',
- 'zAlbumList-zPK= Album List Key-1095',
- 'zAlbumList-zENT-1096',
- 'zAlbumList-zOPT-1097',
- 'zAlbumList-ID Key-1098',
- 'zAlbumList-UUID-1099',
- 'zAsset-zPK-1100',
- 'zAsset-zENT-1101',
- 'zAsset-zOPT-1102',
- 'zAsset-Master= zCldMast-zPK-1103',
- 'zAsset-Extended Attributes= zExtAttr-zPK-1104',
- 'zAsset-Import Session Key-1105',
- 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-1106',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-1107',
- 'zAsset-Moment Share Key= zShare-zPK-1108',
- 'zAsset-zMoment Key= zMoment-zPK-1109',
- 'zAsset-Computed Attributes Asset Key-1110',
- 'zAsset-Highlight Being Assets-HBA Key-1111',
- 'zAsset-Highlight Being Extended Assets-HBEA Key-1112',
- 'zAsset-Highligh Being Summary Assets-HBSA Key-1113',
- 'zAsset-Day Group Highlight Being Assets-DGHBA Key-1114',
- 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-1115',
- 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-1116',
- 'zAsset-Promotion Score-1117',
- 'zAsset-Media Analysis Attributes Key-1118',
- 'zAsset-Media Group UUID-1119',
- 'zAsset-UUID = store.cloudphotodb-1120',
- 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-1121',
- 'zAsset.Cloud Collection GUID-1122',
- 'zAsset-Avalanche UUID-1123',
- 'zAssetAnalyState-zPK-1124',
- 'zAssetAnalyState-zEnt-1125',
- 'zAssetAnalyState-zOpt-1126',
- 'zAssetAnalyState-Asset= zAsset-zPK-1127',
- 'zAssetAnalyState-Asset UUID-1128',
- 'zAssetDes-zPK-1129',
- 'zAssetDes-zENT-1130',
- 'zAssetDes-zOPT-1131',
- 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-1132',
- 'zCldFeedEnt-zPK= zCldShared keys-1133',
- 'zCldFeedEnt-zENT-1134',
- 'zCldFeedEnt-zOPT-1135',
- 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-1136',
- 'zCldFeedEnt-Entry Invitation Record GUID-1137',
- 'zCldFeedEnt-Entry Cloud Asset GUID-1138',
- 'zCldMast-zPK= zAsset-Master-1139',
- 'zCldMast-zENT-1140',
- 'zCldMast-zOPT-1141',
- 'zCldMast-Moment Share Key= zShare-zPK-1142',
- 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-1143',
- 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-1144',
- 'zCldMast-Originating Asset ID-1145',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-1146',
- 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-1147',
- 'CMzCldMastMedData-zENT-1148',
- 'CMzCldMastMedData-zOPT-1149',
- 'CMzCldMastMedData-CldMast= zCldMast-zPK-1150',
- 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-1151',
- 'AAAzCldMastMedData-zENT-1152',
- 'AAAzCldMastMedData-zOPT-1153',
- 'AAAzCldMastMedData-CldMast key-1154',
- 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-1155',
- 'zCldRes-zPK-1156',
- 'zCldRes-zENT-1157',
- 'zCldRes-zOPT-1158',
- 'zCldRes-Asset= zAsset-zPK-1159',
- 'zCldRes-Cloud Master= zCldMast-zPK-1160',
- 'zCldRes-Asset UUID-1161',
- 'zCldShareAlbumInvRec-zPK-1162',
- 'zCldShareAlbumInvRec-zEnt-1163',
- 'zCldShareAlbumInvRec-zOpt-1164',
- 'zCldShareAlbumInvRec-Album Key-1165',
- 'zCldShareAlbumInvRec-FOK Album Key-1166',
- 'zCldShareAlbumInvRec-Album GUID-1167',
- 'zCldShareAlbumInvRec-Cloud GUID-1168',
- 'zCldSharedComment-zPK-1169',
- 'zCldSharedComment-zENT-1170',
- 'zCldSharedComment-zOPT-1171',
- 'zCldSharedComment-Commented Asset Key= zAsset-zPK-1172',
- 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-1173',
- 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-1174',
- 'zCldSharedComment-Liked Asset Key= zAsset-zPK-1175',
- 'zCldSharedComment-CldFeedLikeCommentEntry Key-1176',
- 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-1177',
- 'zCldSharedComment-Cloud GUID-1178',
- 'zCompAssetAttr-zPK-1179',
- 'zCompAssetAttr-zEnt-1180',
- 'zCompAssetAttr-zOpt-1181',
- 'zCompAssetAttr-Asset Key-1182',
- 'zDetFace-zPK-1183',
- 'zDetFace-zEnt-1184',
- 'zDetFace.zOpt-1185',
- 'zDetFace-Asset= zAsset-zPK or Asset Containing Face-1186',
- 'zDetFace-Person= zPerson-zPK-1187',
- 'zDetFace-Person Being Key Face-1188',
- 'zDetFace-Face Print-1189',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-1190',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-1191',
- 'zDetFace-UUID-1192',
- 'zDetFaceGroup-zPK-1193',
- 'zDetFaceGroup-zENT-1194',
- 'zDetFaceGroup-zOPT-1195',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-1196',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-1197',
- 'zDetFaceGroup-UUID-1198',
- 'zDetFacePrint-zPK-1199',
- 'zDetFacePrint-zEnt-1200',
- 'zDetFacePrint-zOpt-1201',
- 'zDetFacePrint-Face Key-1202',
- 'zExtAttr-zPK= zAsset-zExtendedAttributes-1203',
- 'zExtAttr-zENT-1204',
- 'zExtAttr-zOPT-1205',
- 'zExtAttr-Asset Key-1206',
- 'zFaceCrop-zPK-1207',
- 'zFaceCrop-zEnt-1208',
- 'zFaceCrop-zOpt-1209',
- 'zFaceCrop-Asset Key-1210',
- 'zFaceCrop-Invalid Merge Canidate Person UUID-1211',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-1212',
- 'zFaceCrop-Face Key-1213',
- 'zFaceCrop-UUID-1214',
- 'zGenAlbum-zPK=26AlbumLists= 26Albums-1215',
- 'zGenAlbum-zENT-1216',
- 'zGenAlbum-zOpt-1217',
- 'zGenAlbum-Key Asset-Key zAsset-zPK-1218',
- 'zGenAlbum-Secondary Key Asset-1219',
- 'zGenAlbum-Tertiary Key Asset-1220',
- 'zGenAlbum-Custom Key Asset-1221',
- 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-1222',
- 'zGenAlbum-FOK Parent Folder-1223',
- 'zGenAlbum-UUID-1224',
- 'zGenAlbum-Cloud_GUID = store.cloudphotodb-1225',
- 'zGenAlbum-Project Render UUID-1226',
- 'zIntResou-zPK-1227',
- 'zIntResou-zENT-1228',
- 'zIntResou-zOPT-1229',
- 'zIntResou-Asset= zAsset_zPK-1230',
- 'zIntResou-Fingerprint-1231',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-1232',
- 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1233',
- 'zMedAnlyAstAttr-zEnt-1234',
- 'zMedAnlyAstAttr-zOpt-1235',
- 'zMedAnlyAstAttr-Asset= zAsset-zPK-1236',
- 'zPerson-zPK=zDetFace-Person-1237',
- 'zPerson-zEnt-1238',
- 'zPerson-zOpt-1239',
- 'zPerson-KeyFace=zDetFace-zPK-1240',
- 'zPerson-Assoc Face Group Key-1241',
- 'zPerson-Person UUID-1242',
- 'zSceneP-zPK-1243',
- 'zSceneP-zENT-1244',
- 'zSceneP-zOPT-1245',
- 'zShare-zPK-1246',
- 'zShare-zENT-1247',
- 'zShare-zOPT-1248',
- 'zShare-UUID-1249',
- 'SPLzShare-UUID-1250',
- 'zShare-Scope ID = store.cloudphotodb-1251',
- 'zSharePartic-zPK-1252',
- 'zSharePartic-zENT-1253',
- 'zSharePartic-zOPT-1254',
- 'zSharePartic-Share Key= zShare-zPK-1255',
- 'zSharePartic-UUID-1256',
- 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1257',
- 'zUnmAdj-zOPT-1258',
- 'zUnmAdj-zENT-1259',
- 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1260',
- 'zUnmAdj-UUID-1261',
- 'zUnmAdj-Other Adjustments Fingerprint-1262',
- 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1263',
- 'z25AlbumList-25Albums= zGenAlbum-zPK-1264',
- 'z25AlbumList-Album List Key-1265',
- 'z25AlbumList-FOK25Albums Key-1266',
- 'z26Assets-26Albums= zGenAlbum-zPK-1267',
- 'z26Assets-3Asset Key= zAsset-zPK in the Album-1268',
- 'z26Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1269')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph94.1-iOS14_Ref_for_Asset_Analysis-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph94.1-iOS14_Ref_for_Asset_Analysis-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ '''
- else:
- logfunc('No data available for iOS 14 PhotoData-Photos.sqlite')
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
+ row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
+ row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
+ row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
+ row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
+ row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
+ row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
+ row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
+ row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
+ row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
+ row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
+ row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
+ row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
+ row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
+ row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
+ row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
+ row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
+ row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
+ row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
+ row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
+ row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307],
+ row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315],
+ row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323],
+ row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331],
+ row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339],
+ row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347],
+ row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355],
+ row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363],
+ row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371],
+ row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379],
+ row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387],
+ row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395],
+ row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403],
+ row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411],
+ row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419],
+ row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427],
+ row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435],
+ row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443],
+ row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451],
+ row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459],
+ row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467],
+ row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475],
+ row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483],
+ row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491],
+ row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499],
+ row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507],
+ row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515],
+ row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523],
+ row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531],
+ row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539],
+ row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547],
+ row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555],
+ row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563],
+ row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571],
+ row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579],
+ row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587],
+ row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595],
+ row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603],
+ row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611],
+ row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619],
+ row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627],
+ row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635],
+ row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643],
+ row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651],
+ row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659],
+ row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667],
+ row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675],
+ row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683],
+ row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691],
+ row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699],
+ row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707],
+ row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715],
+ row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723],
+ row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731],
+ row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739],
+ row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747],
+ row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755],
+ row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763],
+ row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771],
+ row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779],
+ row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787],
+ row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795],
+ row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803],
+ row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811],
+ row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819],
+ row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827],
+ row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835],
+ row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843],
+ row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851],
+ row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859],
+ row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867],
+ row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875],
+ row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883],
+ row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891],
+ row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899],
+ row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907],
+ row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915],
+ row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923],
+ row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931],
+ row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939],
+ row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947],
+ row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955],
+ row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963],
+ row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971],
+ row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979],
+ row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987],
+ row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995],
+ row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002],
+ row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009],
+ row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016],
+ row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023],
+ row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030],
+ row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037],
+ row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044],
+ row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051],
+ row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058],
+ row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065],
+ row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072],
+ row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079],
+ row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086],
+ row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093],
+ row[1094], row[1095], row[1096], row[1097], row[1098], row[1099], row[1100],
+ row[1101], row[1102], row[1103], row[1104], row[1105], row[1106], row[1107],
+ row[1108], row[1109], row[1110], row[1111], row[1112], row[1113], row[1114],
+ row[1115], row[1116], row[1117], row[1118], row[1119], row[1120], row[1121],
+ row[1122], row[1123], row[1124], row[1125], row[1126], row[1127], row[1128],
+ row[1129], row[1130], row[1131], row[1132], row[1133], row[1134], row[1135],
+ row[1136], row[1137], row[1138], row[1139], row[1140], row[1141], row[1142],
+ row[1143], row[1144], row[1145], row[1146], row[1147], row[1148], row[1149],
+ row[1150], row[1151], row[1152], row[1153], row[1154], row[1155], row[1156],
+ row[1157], row[1158], row[1159], row[1160], row[1161], row[1162], row[1163],
+ row[1164], row[1165], row[1166], row[1167], row[1168], row[1169], row[1170],
+ row[1171], row[1172], row[1173], row[1174], row[1175], row[1176], row[1177],
+ row[1178], row[1179], row[1180], row[1181], row[1182], row[1183], row[1184],
+ row[1185], row[1186], row[1187], row[1188], row[1189], row[1190], row[1191],
+ row[1192], row[1193], row[1194], row[1195], row[1196], row[1197], row[1198],
+ row[1199], row[1200], row[1201], row[1202], row[1203], row[1204], row[1205],
+ row[1206], row[1207], row[1208], row[1209], row[1210], row[1211], row[1212],
+ row[1213], row[1214], row[1215], row[1216], row[1217], row[1218], row[1219],
+ row[1220], row[1221], row[1222], row[1223], row[1224], row[1225], row[1226],
+ row[1227], row[1228], row[1229], row[1230], row[1231], row[1232], row[1233],
+ row[1234], row[1235], row[1236], row[1237], row[1238], row[1239], row[1240],
+ row[1241], row[1242], row[1243], row[1244], row[1245], row[1246], row[1247],
+ row[1248], row[1249], row[1250], row[1251], row[1252], row[1253], row[1254],
+ row[1255], row[1256], row[1257], row[1258], row[1259], row[1260], row[1261],
+ row[1262], row[1263], row[1264], row[1265], row[1266], row[1267], row[1268],
+ row[1269]))
- db.close()
- return
+ data_headers = (('zAsset-Added Date-0', 'datetime'),
+ 'zAsset- SortToken -CameraRoll-1',
+ 'zAsset Complete-2',
+ 'zAsset-zPK-4QueryStart-3',
+ 'zAddAssetAttr-zPK-4QueryStart-4',
+ 'zAsset-UUID = store.cloudphotodb-4QueryStart-5',
+ 'zAddAssetAttr-Master Fingerprint-4TableStart-6',
+ 'zIntResou-Fingerprint-4TableStart-7',
+ 'zAsset-Cloud is My Asset-8',
+ 'zAsset-Cloud is deletable-Asset-9',
+ 'zAsset-Cloud_Local_State-10',
+ 'zAsset-Visibility State-11',
+ 'zExtAttr-Camera Make-12',
+ 'zExtAttr-Camera Model-13',
+ 'zExtAttr-Lens Model-14',
+ 'zExtAttr-Flash Fired-15',
+ 'zExtAttr-Focal Lenght-16',
+ 'zAsset-Derived Camera Capture Device-17',
+ 'zAddAssetAttr-Camera Captured Device-18',
+ 'zAddAssetAttr-Imported by-19',
+ 'zCldMast-Imported By-20',
+ 'zAddAssetAttr-Creator Bundle ID-21',
+ 'zAddAssetAttr-Imported By Display Name-22',
+ 'zCldMast-Imported by Bundle ID-23',
+ 'zCldMast-Imported by Display Name-24',
+ 'zAsset-Saved Asset Type-25',
+ 'zAsset-Directory-Path-26',
+ 'zAsset-Filename-27',
+ 'zAddAssetAttr- Original Filename-28',
+ 'zCldMast- Original Filename-29',
+ ('zAsset-Date Created-30', 'datetime'),
+ ('zCldMast-Creation Date-31', 'datetime'),
+ ('zIntResou-CldMst Date Created-32', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-33',
+ 'zAddAssetAttr-Time Zone Offset-34',
+ 'zAddAssetAttr-Inferred Time Zone Offset-35',
+ 'zAddAssetAttr-EXIF-String-36',
+ ('zAsset-Modification Date-37', 'datetime'),
+ ('zAsset-Last Shared Date-38', 'datetime'),
+ 'zCldMast-Cloud Local State-39',
+ ('zCldMast-Import Date-40', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-41', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-4QueryStart-42',
+ ('zAddAssetAttr-Alt Import Image Date-43', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-44',
+ ('zAsset-Cloud Batch Publish Date-45', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-46', 'datetime'),
+ 'zAsset-Cloud Download Requests-47',
+ 'zAsset-Cloud Batch ID-48',
+ 'zAddAssetAttr-Upload Attempts-49',
+ 'zAsset-Latitude-50',
+ 'zExtAttr-Latitude-51',
+ 'zAsset-Longitude-52',
+ 'zExtAttr-Longitude-53',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-54',
+ 'zAddAssetAttr-Location Hash-55',
+ 'zAddAssetAttr-Shifted Location Valid-56',
+ 'zAddAssetAttr-Shifted Location Data-57',
+ 'zAddAssetAttr-Reverse Location Is Valid-58',
+ 'zAddAssetAttr-Reverse Location Data-59',
+ 'ParentzGenAlbum-UUID-4QueryStart-60',
+ 'zGenAlbum-UUID-4QueryStart-61',
+ 'ParentzGenAlbum-Cloud GUID-4QueryStart-62',
+ 'zGenAlbum-Cloud GUID-4QueryStart-63',
+ 'zCldShareAlbumInvRec-Album GUID-4QueryStart-64',
+ 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-65',
+ 'zGenAlbum-Project Render UUID-4QueryStart-66',
+ 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-67',
+ 'zGenAlbum-Cloud_Local_State-4QueryStart-68',
+ ('ParentzGenAlbum- Creation Date- 4QueryStart-69', 'datetime'),
+ ('zGenAlbum- Creation Date- 4QueryStart-70', 'datetime'),
+ ('zGenAlbum- Cloud Creation Date- 4QueryStart-71', 'datetime'),
+ ('zGenAlbum- Start Date- 4QueryStart-72', 'datetime'),
+ ('zGenAlbum- End Date- 4QueryStart-73', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date- 4QueryStart-74', 'datetime'),
+ 'ParentzGenAlbum- Title- 4QueryStart-75',
+ 'zGenAlbum- Title-User&System Applied- 4QueryStart-76',
+ 'zGenAlbum-Import Session ID-SWY- 4QueryStart-77',
+ 'zGenAlbum-Creator Bundle ID- 4QueryStart-78',
+ 'zGenAlbum-zENT- Entity- 4QueryStart-79',
+ 'ParentzGenAlbum- Kind- 4QueryStart-80',
+ 'zGenAlbum-Album Kind- 4QueryStart-81',
+ 'AAAzCldMastMedData-zOPT-82',
+ 'zAddAssetAttr-Media Metadata Type-83',
+ 'AAAzCldMastMedData-Data-84',
+ 'CldMasterzCldMastMedData-zOPT-85',
+ 'zCldMast-Media Metadata Type-86',
+ 'CMzCldMastMedData-Data-87',
+ 'zAsset-Orientation-88',
+ 'zAddAssetAttr-Original Orientation-89',
+ 'zAsset-Kind-90',
+ 'zAsset-Kind-Sub-Type-91',
+ 'zAddAssetAttr-Cloud Kind Sub Type-92',
+ 'zAsset-Playback Style-93',
+ 'zAsset-Playback Variation-94',
+ 'zAsset-Video Duration-95',
+ 'zExtAttr-Duration-96',
+ 'zAsset-Video CP Duration-97',
+ 'zAddAssetAttr-Video CP Duration Time Scale-98',
+ 'zAsset-Video CP Visibility State-99',
+ 'zAddAssetAttr-Video CP Display Value-100',
+ 'zAddAssetAttr-Video CP Display Time Scale-101',
+ 'zIntResou-Datastore Class ID-102',
+ 'zAsset-Cloud Placeholder Kind-103',
+ 'zIntResou-Local Availability-104',
+ 'zIntResou-Local Availability Target-105',
+ 'zIntResou-Cloud Local State-106',
+ 'zIntResou-Remote Availability-107',
+ 'zIntResou-Remote Availability Target-108',
+ 'zIntResou-Transient Cloud Master-109',
+ 'zIntResou-Side Car Index-110',
+ 'zIntResou- File ID-111',
+ 'zIntResou-Version-112',
+ 'zAddAssetAttr- Original-File-Size-113',
+ 'zIntResou-Resource Type-114',
+ 'zIntResou-Datastore Sub-Type-115',
+ 'zIntResou-Cloud Source Type-116',
+ 'zIntResou-Data Length-117',
+ 'zIntResou-Recipe ID-118',
+ ('zIntResou-Cloud Last Prefetch Date-119', 'datetime'),
+ 'zIntResou-Cloud Prefetch Count-120',
+ ('zIntResou- Cloud-Last-OnDemand Download-Date-121', 'datetime'),
+ 'zAsset-Uniform Type ID-122',
+ 'zAsset-Original Color Space-123',
+ 'zCldMast-Uniform_Type_ID-124',
+ 'zCldMast-Full Size JPEG Source-125',
+ 'zAsset-HDR Gain-126',
+ 'zExtAttr-Codec-127',
+ 'zCldMast-Codec Name-128',
+ 'zCldMast-Video Frame Rate-129',
+ 'zCldMast-Placeholder State-130',
+ 'zAsset-Depth_Type-131',
+ 'zAsset-Avalanche UUID-4TableStart-132',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-133',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-134',
+ 'zAddAssetAttr-Cloud Recovery State-135',
+ 'zAddAssetAttr-Cloud State Recovery Attempts Count-136',
+ 'zAsset-Deferred Processing Needed-137',
+ 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-138',
+ 'zAddAssetAttr-Deferred Processing Candidate Options-139',
+ 'zAsset-Has Adjustments-Camera-Effects-Filters-140',
+ 'zUnmAdj-UUID-4TableStart-141',
+ 'zAsset-Adjustment Timestamp-142',
+ 'zUnmAdj-Adjustment Timestamp-143',
+ 'zAddAssetAttr-Editor Bundle ID-144',
+ 'zUnmAdj-Editor Localized Name-145',
+ 'zUnmAdj-Adjustment Format ID-146',
+ 'zAddAssetAttr-Montage-147',
+ 'zUnmAdj-Adjustment Render Types-148',
+ 'zUnmAdj-Adjustment Format Version-149',
+ 'zUnmAdj-Adjustment Base Image Format-150',
+ 'zAsset-Favorite-151',
+ 'zAsset-Hidden-152',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-153',
+ ('zAsset-Trashed Date-154', 'datetime'),
+ 'zIntResou-Trash State-155',
+ ('zIntResou-Trashed Date-156', 'datetime'),
+ 'zAsset-Cloud Delete State-157',
+ 'zIntResou-Cloud Delete State-158',
+ 'zAddAssetAttr-PTP Trashed State-159',
+ 'zIntResou-PTP Trashed State-160',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-161',
+ 'zMedAnlyAstAttr-Media Analysis Timestamp-162',
+ ('zAsset-Analysis State Modification Date-163', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-164',
+ 'zAddAssetAttr- View Count-165',
+ 'zAddAssetAttr- Pending Play Count-166',
+ 'zAddAssetAttr- Play Count-167',
+ 'zAddAssetAttr- Pending Share Count-168',
+ 'zAddAssetAttr- Share Count-169',
+ 'zAddAssetAttr-Allowed for Analysis-170',
+ 'zAddAssetAttr-Scene Analysis Version-171',
+ 'zAddAssetAttr-Scene Analysis Timestamp-172',
+ 'zAddAssetAttr-Destination Asset Copy State-173',
+ 'zAddAssetAttr-Variation Suggestions States-174',
+ 'zAsset-High Frame Rate State-175',
+ 'zAsset-Video Key Frame Time Scale-176',
+ 'zAsset-Video Key Frame Value-177',
+ 'zExtAttr-ISO-178',
+ 'zExtAttr-Metering Mode-179',
+ 'zExtAttr-Sample Rate-180',
+ 'zExtAttr-Track Format-181',
+ 'zExtAttr-White Balance-182',
+ 'zExtAttr-Aperture-183',
+ 'zExtAttr-BitRate-184',
+ 'zExtAttr-Exposure Bias-185',
+ 'zExtAttr-Frames Per Second-186',
+ 'zExtAttr-Shutter Speed-187',
+ 'zAsset-Height-188',
+ 'zAddAssetAttr-Original Height-189',
+ 'zIntResou-Unoriented Height-190',
+ 'zAsset-Width-191',
+ 'zAddAssetAttr-Original Width-192',
+ 'zIntResou-Unoriented Width-193',
+ 'zShare-Thumbnail Image Data-194',
+ 'SPLzShare-Thumbnail Image Data-195',
+ 'zAsset-Thumbnail Index-196',
+ 'zAddAssetAttr-Embedded Thumbnail Height-197',
+ 'zAddAssetAttr-Embedded Thumbnail Length-198',
+ 'zAddAssetAttr-Embedded Thumbnail Offset-199',
+ 'zAddAssetAttr-Embedded Thumbnail Width-200',
+ 'zAsset-Packed Acceptable Crop Rect-201',
+ 'zAsset-Packed Badge Attributes-202',
+ 'zAsset-Packed Preferred Crop Rect-203',
+ 'zAsset-Curation Score-204',
+ 'zAsset-Camera Processing Adjustment State-205',
+ 'zAsset-Depth Type-206',
+ 'zAddAssetAttr-Orig Resource Choice-207',
+ 'zAddAssetAttr-Spatial Over Capture Group ID-208',
+ 'zAddAssetAttr-Place Annotation Data-209',
+ 'zAddAssetAttr-Distance Identity-210',
+ 'zAddAssetAttr-Edited IPTC Attributes-211',
+ 'zAssetDes-Long Description-212',
+ 'zAddAssetAttr-Asset Description-213',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-214',
+ 'zAddAssetAttr-Accessibility Description-215',
+ 'zAddAssetAttr-Photo Stream Tag ID-216',
+ ('zCldFeedEnt-Entry Date-217', 'datetime'),
+ 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-218',
+ 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-219',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-220',
+ 'zCldFeedEnt-Entry Priority Number-221',
+ 'zCldFeedEnt-Entry Type Number-222',
+ 'zCldSharedComment-Cloud GUID-4TableStart-223',
+ ('zCldSharedComment-Date-224', 'datetime'),
+ ('zCldSharedComment-Comment Client Date-225', 'datetime'),
+ ('zAsset-Cloud Last Viewed Comment Date-226', 'datetime'),
+ 'zCldSharedComment-Type-227',
+ 'zCldSharedComment-Comment Text-228',
+ 'zCldSharedComment-Commenter Hashed Person ID-229',
+ 'zCldSharedComment-Batch Comment-230',
+ 'zCldSharedComment-Is a Caption-231',
+ 'zAsset-Cloud Has Comments by Me-232',
+ 'zCldSharedComment-Is My Comment-233',
+ 'zCldSharedComment-Is Deletable-234',
+ 'zAsset-Cloud Has Comments Conversation-235',
+ 'zAsset-Cloud Has Unseen Comments-236',
+ 'zCldSharedComment-Liked-237',
+ 'zAddAssetAttr-Share Type-238',
+ 'zShare-UUID-CMM-4TableStart-239',
+ 'SPLzShare-UUID-SPL-4TableStart-240',
+ 'zShare-zENT-CMM-241',
+ 'SPLzShare-zENT-SPL-242',
+ 'zShare-Status-CMM-243',
+ 'SPLzShare-Status-SPL-244',
+ 'zShare-Scope Type-CMM-245',
+ 'SPLzShare-Scope Type-SPL-246',
+ 'zShare-Local Publish State-CMM-247',
+ 'SPLzShare-Local Publish State-SPL-248',
+ 'zShare-Public Permission-CMM-249',
+ 'SPLzShare-Public Permission-SPL-250',
+ 'zShare-Originating Scope ID-CMM-251',
+ 'SPLzShare-Originating Scope ID-SPL-252',
+ 'zShare-Scope ID-CMM-253',
+ 'SPLzShare-Scope ID-SPL-254',
+ 'zShare-Title-CMM-255',
+ 'SPLzShare-Title-SPL-256',
+ 'zShare-Share URL-CMM-257',
+ 'SPLzShare-Share URL-SPL-258',
+ ('zShare-Creation Date-CMM-259', 'datetime'),
+ ('SPLzShare-Creation Date-SPL-260', 'datetime'),
+ ('zShare-Start Date-CMM-261', 'datetime'),
+ ('SPLzShare-Start Date-SPL-262', 'datetime'),
+ ('zShare-End Date-CMM-263', 'datetime'),
+ ('SPLzShare-End Date-SPL-264', 'datetime'),
+ ('zShare-Expiry Date-CMM-265', 'datetime'),
+ ('SPLzShare-Expiry Date-SPL-266', 'datetime'),
+ 'zShare-Asset Count-CMM-267',
+ 'SPLzShare-Asset Count-SPL-268',
+ 'zShare-Photos Count-CMM-269',
+ 'SPLzShare-Photos Count-CMM-SPL-270',
+ 'zShare-Uploaded Photos Count-CMM-271',
+ 'SPLzShare-Uploaded Photos Count-SPL-272',
+ 'zShare-Videos Count-CMM-273',
+ 'SPLzShare-Videos Count-SPL-274',
+ 'zShare-Uploaded Videos Count-CMM-275',
+ 'SPLzShare-Uploaded Videos Count-SPL-276',
+ 'zShare-Force Sync Attempted-CMM-277',
+ 'SPLzShare-Force Sync Attempted-SPL-278',
+ 'zShare-Should Notify On Upload Completion-CMM-279',
+ 'SPLzShare-Should Notify On Upload Completion-SPL-280',
+ 'zShare-Trashed State-CMM-281',
+ 'SPLzShare-Trashed State-SPL-282',
+ 'zShare-Cloud Delete State-CMM-283',
+ 'SPLzShare-Cloud Delete State-SPL-284',
+ 'zShare-Should Ignor Budgets-CMM-285',
+ 'SPLzShare-Should Ignor Budgets-SPL-286',
+ 'zSharePartic-UUID-4TableStart-287',
+ 'SPLzSharePartic-UUID-4TableStart-288',
+ 'zSharePartic-Acceptance Status-289',
+ 'SPLzSharePartic-Acceptance Status-290',
+ 'zSharePartic-Is Current User-291',
+ 'SPLzSharePartic-Is Current User-292',
+ 'zSharePartic-Role-293',
+ 'SPLzSharePartic-Role-294',
+ 'zSharePartic-Premission-295',
+ 'SPLzSharePartic-Premission-296',
+ 'zSharePartic-User ID-297',
+ 'SPLzSharePartic-User ID-298',
+ 'SPLzSharePartic-zPK-4TableStart-299',
+ 'zSharePartic-zPK-4TableStart-300',
+ 'zSharePartic-Email Address-301',
+ 'SPLzSharePartic-Email Address-302',
+ 'zSharePartic-Phone Number-303',
+ 'SPLzSharePartic-Phone Number-304',
+ 'ParentzGenAlbum-UUID-4TableStart-305',
+ 'zGenAlbum-UUID-4TableStart-306',
+ 'ParentzGenAlbum-Cloud GUID-4TableStart-307',
+ 'zGenAlbum-Cloud GUID-4TableStart-308',
+ 'zCldShareAlbumInvRec-Album GUID-4TableStart-309',
+ 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-310',
+ 'zGenAlbum-Project Render UUID-4TableStart-311',
+ 'zAlbumList-Needs Reordering Number-312',
+ 'zGenAlbum-zENT- Entity-313',
+ 'ParentzGenAlbum-Kind-314',
+ 'zGenAlbum-Album Kind-315',
+ 'ParentzGenAlbum-Cloud-Local-State-316',
+ 'zGenAlbum-Cloud_Local_State-317',
+ 'ParentzGenAlbum- Title-318',
+ 'zGenAlbum- Title-User&System Applied-319',
+ 'zGenAlbum-Import Session ID-SWY-320',
+ 'zGenAlbum-Creator Bundle ID-321',
+ ('ParentzGenAlbum-Creation Date-322', 'datetime'),
+ ('zGenAlbum-Creation Date-323', 'datetime'),
+ ('zGenAlbum-Cloud Creation Date-324', 'datetime'),
+ ('zGenAlbum-Start Date-325', 'datetime'),
+ ('zGenAlbum-End Date-326', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-327', 'datetime'),
+ 'ParentzGenAlbum-Pending Items Count-328',
+ 'zGenAlbum-Pending Items Count-329',
+ 'ParentzGenAlbum-Pending Items Type-330',
+ 'zGenAlbum-Pending Items Type-331',
+ 'zGenAlbum- Cached Photos Count-332',
+ 'zGenAlbum- Cached Videos Count-333',
+ 'zGenAlbum- Cached Count-334',
+ 'ParentzGenAlbum-Sync Event Order Key-335',
+ 'zGenAlbum-Sync Event Order Key-336',
+ 'zGenAlbum-Has Unseen Content-337',
+ 'zGenAlbum-Unseen Asset Count-338',
+ 'zGenAlbum-is Owned-339',
+ 'zGenAlbum-Cloud Relationship State-340',
+ 'zGenAlbum-Cloud Relationship State Local-341',
+ 'zGenAlbum-Cloud Owner Mail Key-342',
+ 'zGenAlbum-Cloud Owner Frist Name-343',
+ 'zGenAlbum-Cloud Owner Last Name-344',
+ 'zGenAlbum-Cloud Owner Full Name-345',
+ 'zGenAlbum-Cloud Person ID-346',
+ 'zAsset-Cloud Owner Hashed Person ID-347',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-348',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-349',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-350',
+ 'zGenAlbum-Cloud Album Sub Type-351',
+ ('zGenAlbum-Cloud Contribution Date-352', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-353', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-354',
+ 'ParentzGenAlbum-Pinned-355',
+ 'zGenAlbum-Pinned-356',
+ 'ParentzGenAlbum-Custom Sort Key-357',
+ 'zGenAlbum-Custom Sort Key-358',
+ 'ParentzGenAlbum-Custom Sort Ascending-359',
+ 'zGenAlbum-Custom Sort Ascending-360',
+ 'ParentzGenAlbum-Is Prototype-361',
+ 'zGenAlbum-Is Prototype-362',
+ 'ParentzGenAlbum-Project Document Type-363',
+ 'zGenAlbum-Project Document Type-364',
+ 'ParentzGenAlbum-Custom Query Type-365',
+ 'zGenAlbum-Custom Query Type-366',
+ 'ParentzGenAlbum-Trashed State-367',
+ ('ParentzGenAlbum-Trash Date-368', 'datetime'),
+ 'zGenAlbum-Trashed State-369',
+ ('zGenAlbum-Trash Date-370', 'datetime'),
+ 'ParentzGenAlbum-Cloud Delete State-371',
+ 'zGenAlbum-Cloud Delete State-372',
+ 'zGenAlbum-Cloud Owner Whitelisted-373',
+ 'zGenAlbum-Cloud Local Public URL Enabled-374',
+ 'zGenAlbum-Cloud Public URL Enabled-375',
+ 'zGenAlbum-Public URL-376',
+ 'zGenAlbum-Key Asset Face Thumb Index-377',
+ 'zGenAlbum-Project Text Extension ID-378',
+ 'zGenAlbum-User Query Data-379',
+ 'zGenAlbum-Custom Query Parameters-380',
+ 'zGenAlbum-Project Data-381',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-382',
+ 'zCldShareAlbumInvRec-Invitation State Local-383',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-384',
+ ('zCldShareAlbumInvRec-Subscription Date-385', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-386',
+ 'zCldShareAlbumInvRec-Invitee Last Name-387',
+ 'zCldShareAlbumInvRec-Invitee Full Name-388',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-389',
+ 'zCldShareAlbumInvRec-Invitee Email Key-390',
+ 'zGenAlbum-Key Asset Face ID-391',
+ 'zFaceCrop-Face Area Points-392',
+ 'zAsset-Face Adjustment Version-393',
+ 'zDetFace-Asset Visible-394',
+ 'zPerson-Face Count-395',
+ 'zDetFace-Face Crop-396',
+ 'zDetFace-Face Algorithm Version-397',
+ 'zDetFace-Adjustment Version-398',
+ 'zDetFace-UUID-4TableStart-399',
+ 'zPerson-Person UUID-4TableStart-400',
+ 'zDetFace-Confirmed Face Crop Generation State-401',
+ 'zDetFace-Manual-402',
+ 'zDetFace-VIP Model Type-403',
+ 'zDetFace-Name Source-404',
+ 'zDetFace-Cloud Name Source-405',
+ 'zPerson-Person URI-406',
+ 'zPerson-Display Name-407',
+ 'zPerson-Full Name-408',
+ 'zPerson-Cloud Verified Type-409',
+ 'zFaceCrop-State-410',
+ 'zFaceCrop-Type-411',
+ 'zFaceCrop-UUID-4TableStart-412',
+ 'zPerson-Type-413',
+ 'zPerson-Verified Type-414',
+ 'zPerson-Gender Type-415',
+ 'zDetFace-Gender Type-416',
+ 'zDetFace-Center X-417',
+ 'zDetFace-Center Y-418',
+ 'zPerson-Age Type Estimate-419',
+ 'zDetFace-Age Type Estimate-420',
+ 'zDetFace-Hair Color Type-421',
+ 'zDetFace-Facial Hair Type-422',
+ 'zDetFace-Has Smile-423',
+ 'zDetFace-Smile Type-424',
+ 'zDetFace-Lip Makeup Type-425',
+ 'zDetFace-Eyes State-426',
+ 'zDetFace-Is Left Eye Closed-427',
+ 'zDetFace-Is Right Eye Closed-428',
+ 'zDetFace-Eye Glasses Type-429',
+ 'zDetFace-Eye Makeup Type-430',
+ 'zDetFace-Cluster Squence Number Key-431',
+ 'zDetFace-Grouping ID-432',
+ 'zDetFace-Master ID-433',
+ 'zDetFace-Quality-434',
+ 'zDetFace-Quality Measure-435',
+ 'zDetFace-Source Height-436',
+ 'zDetFace-Source Width-437',
+ 'zDetFace-Hidden-Asset Hidden-438',
+ 'zDetFace-In Trash-Recently Deleted-439',
+ 'zDetFace-Cloud Local State-440',
+ 'zDetFace-Training Type-441',
+ 'zDetFace.Pose Yaw-442',
+ 'zDetFace-Roll-443',
+ 'zDetFace-Size-444',
+ 'zDetFace-Cluster Squence Number-445',
+ 'zDetFace-Blur Score-446',
+ 'zDetFacePrint-Face Print Version-447',
+ 'zMedAnlyAstAttr-Face Count-448',
+ 'zDetFaceGroup-UUID-4TableStart-449',
+ 'zDetFaceGroup-Person Builder State-450',
+ 'zDetFaceGroup-UnNamed Face Count-451',
+ 'zPerson-In Person Naming Model-452',
+ 'zPerson-Key Face Pick Source Key-453',
+ 'zPerson-Manual Order Key-454',
+ 'zPerson-Question Type-455',
+ 'zPerson-Suggested For Client Type-456',
+ 'zPerson-Merge Target Person-457',
+ 'zPerson-Cloud Local State-458',
+ 'zFaceCrop-Cloud Local State-459',
+ 'zFaceCrop-Cloud Type-460',
+ 'zPerson-Cloud Delete State-461',
+ 'zFaceCrop-Cloud Delete State-462',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-463',
+ 'zMemory-zPK-464',
+ 'z3MemoryBCAs-3CuratedAssets = zAsset-zPK-465',
+ 'z3MemoryBCAs-40MemoriesBeingCuratedAssets = zMemory-zPK-466',
+ 'z3MemoryBECAs-3ExtCuratedAssets = zAsset-zPK-467',
+ 'z3MemoryBECAs-40MemoriesBeingExtCuratedAssets = zMemory-zPK-468',
+ 'z3MemoryBMCAs-3MovieCuratedAssets = zAsset-zPK-469',
+ 'z3MemoryBMCAs-40MemoriesBeingMovieCuratedAssets = zMemory-zPK-470',
+ 'z3MemoryBRAs-3RepresentativeAssets = zAsset-zPK-471',
+ 'z3MemoryBRAs-40RepresentativeAssets = zMemory-zPK-472',
+ 'zMemory-Key Asset = zAsset-zPK-473',
+ 'zMemory-UUID-474',
+ 'zMemory-SubTitle-475',
+ 'zMemory-Title-476',
+ 'zMemory-Category-477',
+ 'zMemory-SubCategory-478',
+ ('zMemory-Creation Date-479', 'datetime'),
+ 'zMemory-User Created-480',
+ 'zMemory-Favorite Memory-481',
+ 'zMemory-Score-482',
+ 'zMemory-View Count-483',
+ 'zMemory-Play Count-484',
+ 'zMemory-Rejected-485',
+ 'zMemory-Share Count-486',
+ ('zMemory-Last Movie Play Date-487', 'datetime'),
+ ('zMemory-Last Viewed Date-488', 'datetime'),
+ 'zMemory-Pending-489',
+ 'zMemory-Pending Play Count Memory-490',
+ 'zMemory-Pending Share Count Memory-491',
+ 'zMemory-Pending View Count Memory-492',
+ 'zMemory-Featured State-493',
+ 'zMemory-Photos Graph Version-494',
+ 'zMemory-AssetListPredicte-495',
+ 'zMemory-Notification State-496',
+ 'zMemory-Cloud Local State-497',
+ 'zMemory-Cloud Delete State-498',
+ 'YearzMomentList-UUID-499',
+ 'YearzMomentList-zPK-500',
+ 'zMoment-Year Moment List-501',
+ 'YearzMomentList-Sort Index-502',
+ 'YearzMomentList-Granularity Level-503',
+ ('YearzMomentList-Start Date-504', 'datetime'),
+ ('YearzMomentList-Representative Date-505', 'datetime'),
+ ('YearzMomentList-End Date-506', 'datetime'),
+ 'YearzMomentList-Trashed State-507',
+ 'MegaYMzMomentList-UUID-508',
+ 'MegaYMzMomentList-zPK-509',
+ 'zMoment-Mega Moment List-510',
+ 'MegaYMzMomentList-Sort Index-511',
+ 'MegaYMzMomentList-Granularity Level-512',
+ ('MegaYMzMomentList-Start Date-513', 'datetime'),
+ ('MegaYMzMomentList-Representative Date-514', 'datetime'),
+ ('MegaYMzMomentList-End Date-515', 'datetime'),
+ 'MegaYMzMomentList-Trashed State-516',
+ 'zMoment-UUID-517',
+ 'zMoment-zPK-518',
+ 'zMoment-Aggregation Score-519',
+ ('zMoment-Start Date-520', 'datetime'),
+ ('zMoment-Representative Date-521', 'datetime'),
+ 'zMoment-Timezone Offset-522',
+ ('zMoment-Modification Date-523', 'datetime'),
+ ('zMoment-End Date-524', 'datetime'),
+ 'zMoment-SubTitle-525',
+ 'zMoment-Title-526',
+ 'zMoment-Processed Location-527',
+ 'zMoment-Approx Latitude-528',
+ 'zMoment-Approx Longitude-529',
+ 'zMoment-GPS Horizontal Accuracy-530',
+ 'zMoment-Cache Count-531',
+ 'zMoment-Cached Photos Count-532',
+ 'zMoment-Cached Videos Count-533',
+ 'zMoment-Trashed State-534',
+ 'zMoment-Highlight Key-535',
+ 'zAsset-Highlight Visibility Score-536',
+ 'YearParzPhotosHigh-UUID-537',
+ 'YearParzPhotosHigh-zPK-538',
+ 'YearParzPhotosHigh-zENT-539',
+ 'YearParzPhotosHigh-zOPT-540',
+ 'YearParzPhotosHigh-Promotion Score-541',
+ 'YearParzPhotosHigh-Title-542',
+ 'YearParzPhotosHigh-Verbose Smart Description-543',
+ ('YearParzPhotosHigh-Start Date-544', 'datetime'),
+ ('YearParzPhotosHigh-End Date-545', 'datetime'),
+ 'YearParzPhotosHigh-Year Key Asset-546',
+ 'YearParzPhotosHigh-Is Curated-547',
+ 'YearParzPhotosHigh-Kind-548',
+ 'YearParzPhotosHigh-Category-549',
+ 'YearParzPhotosHigh-Visibility State-550',
+ 'YearParzPhotosHigh-Enrichment State-551',
+ 'YearParzPhotosHigh-Enrichment Version-552',
+ 'YearParzPhotosHigh-Highlight Version-553',
+ 'YMParzPhotosHigh-UUID-554',
+ 'YMParzPhotosHigh-zPK-555',
+ 'YMParzPhotosHigh-Parent PH Key-556',
+ 'YMParzPhotosHigh-zENT-557',
+ 'YMParzPhotosHigh-zOPT-558',
+ 'YMParzPhotosHigh-Promotion Score-559',
+ 'YMParzPhotosHigh-Title-560',
+ 'YMParzPhotosHigh-Subtitle-561',
+ 'YMParzPhotosHigh-Verbose Smart Description-562',
+ ('YMParzPhotosHigh-Start Date-563', 'datetime'),
+ ('YMParzPhotosHigh-End Date-564', 'datetime'),
+ 'YMParzPhotosHigh-Month First Asset-565',
+ 'YMParzPhotosHigh-Month Key Asset-566',
+ 'YMParzPhotosHigh-Is Curated-567',
+ 'YMParzPhotosHigh-Kind-568',
+ 'YMParzPhotosHigh-Category-569',
+ 'YMParzPhotosHigh-Visibility State-570',
+ 'YMParzPhotosHigh-Enrichment State-571',
+ 'YMParzPhotosHigh-Enrichment Version-572',
+ 'YMParzPhotosHigh-Highlight Version-573',
+ 'DGParzPhotosHigh-UUID-574',
+ 'DGParzPhotosHigh-zPK-575',
+ 'DGParzPhotosHigh-Parent PH Key-576',
+ 'DGParzPhotosHigh-zENT-577',
+ 'DGParzPhotosHigh-zOPT-578',
+ 'DGParzPhotosHigh-Promotion Score-579',
+ 'DGParzPhotosHigh-Title-580',
+ 'DGParzPhotosHigh-Subtitle-581',
+ 'DGParzPhotosHigh-Verbose Smart Description-582',
+ ('DGParzPhotosHigh-Start Date-583', 'datetime'),
+ ('DGParzPhotosHigh-End Date-584', 'datetime'),
+ 'DGParzPhotosHigh-Month First Asset-585',
+ 'DGParzPhotosHigh-Month Key Asset-586',
+ 'DGParzPhotosHigh-Is Curated-587',
+ 'DGParzPhotosHigh-Kind-588',
+ 'DGParzPhotosHigh-Category-589',
+ 'DGParzPhotosHigh-Visibility State-590',
+ 'DGParzPhotosHigh-Enrichment State-591',
+ 'DGParzPhotosHigh-Enrichment Version-592',
+ 'DGParzPhotosHigh-Highlight Version-593',
+ 'zAsset-Highlight Being Assets Key-594',
+ 'HBAzPhotosHigh-UUID-595',
+ 'HBAzPhotosHigh-zPK-596',
+ 'HBAzPhotosHigh-Parent PH Key-597',
+ 'HBAzPhotosHigh-zENT-598',
+ 'HBAzPhotosHigh-zOPT-599',
+ 'HBAzPhotosHigh-Promotion Score-600',
+ 'HBAzPhotosHigh-Title-601',
+ 'HBAzPhotosHigh-Subtitle-602',
+ 'HBAzPhotosHigh-Verbose Smart Description-603',
+ ('HBAzPhotosHigh-Start Date-604', 'datetime'),
+ 'HBAzPhotosHigh Start-Timezone Offset-605',
+ 'HBAzPhotosHigh-End Timezone Offset-606',
+ ('HBAzPhotosHigh-End Date-607', 'datetime'),
+ 'HBAzPhotosHigh-Asset Count-608',
+ 'HBAzPhotosHigh-Summary Count-609',
+ 'HBAzPhotosHigh-Extended Count-610',
+ 'HBAzPhotosHigh-Day Group Assets Count-611',
+ 'HBAzPhotosHigh-Day Group Ext Assets Count-612',
+ 'HBAzPhotosHigh-Day Group Summary Assets Count-613',
+ 'HBAzPhotosHigh-Key Asset-614',
+ 'HBAzPhotosHigh-Is Curated-615',
+ 'HBAzPhotosHigh-Type-616',
+ 'HBAzPhotosHigh-Kind-617',
+ 'HBAzPhotosHigh-Category-618',
+ 'HBAzPhotosHigh-Visibility State-619',
+ 'HBAzPhotosHigh-Mood-620',
+ 'HBAzPhotosHigh-Enrichment State-621',
+ 'HBAzPhotosHigh-Enrichment Version-622',
+ 'HBAzPhotosHigh-Highlight Version-623',
+ 'zAsset-Highlight Being Extended Assets Key-624',
+ 'HBEAzPhotosHigh-UUID-625',
+ 'HBEAzPhotosHigh-zPK-626',
+ 'HBEAzPhotosHigh-zENT-627',
+ 'HBEAzPhotosHigh-zOPT-628',
+ 'HBEAzPhotosHigh-Promotion Score-629',
+ 'HBEAzPhotosHigh-Title-630',
+ 'HBEAzPhotosHigh-Subtitle-631',
+ 'HBEAzPhotosHigh-Verbose Smart Description-632',
+ ('HBEAzPhotosHigh-Start Date-633', 'datetime'),
+ 'HBEAzPhotosHigh-Start Timezone Offset-634',
+ 'HBEAzPhotosHigh-End Timezone Offset-635',
+ ('HBEAzPhotosHigh-End Date-636', 'datetime'),
+ 'HBEAzPhotosHigh-Asset Count-637',
+ 'HBEAzPhotosHigh-Summary Count-638',
+ 'HBEAzPhotosHigh-Extended Count-639',
+ 'HBEAzPhotosHigh-Day Group Assets Count-640',
+ 'HBEAzPhotosHigh-Day Group Ext Assets Count-641',
+ 'HBEAzPhotosHigh-Day Group Summary Assets Count-642',
+ 'HBEAzPhotosHigh-Parent PH Key-643',
+ 'HBEAzPhotosHigh-Year Key Asset-644',
+ 'HBEAzPhotosHigh-Month First Asset-645',
+ 'HBEAzPhotosHigh-Month Key Asset-646',
+ 'HBEAzPhotosHigh-Key Asset-647',
+ 'HBEAzPhotosHigh-Parent Day Group PH Key-648',
+ 'HBEAzPhotosHigh-Day Group Key Asset-649',
+ 'HBEAzPhotosHigh-is Curated-650',
+ 'HBEAzPhotosHigh-Type-651',
+ 'HBEAzPhotosHigh-Kind-652',
+ 'HBEAzPhotosHigh-Category-653',
+ 'HBEAzPhotosHigh-Visibility State-654',
+ 'HBEAzPhotosHigh-Mood-655',
+ 'HBEAzPhotosHigh-Enrichment State-656',
+ 'HBEAzPhotosHigh-Enrichment Version-657',
+ 'HBEAzPhotosHigh-Highlight Version-658',
+ 'zAsset-Highlight Being Summary Assets Key-659',
+ 'HBSAzPhotosHigh-UUID-660',
+ 'HBSAzPhotosHigh-zPK-661',
+ 'HBSAzPhotosHigh-zENT-662',
+ 'HBSAzPhotosHigh-zOPT-663',
+ 'HBSAzPhotosHigh-Promotion Score-664',
+ 'HBSAzPhotosHigh-Title-665',
+ 'HBSAzPhotosHigh-Subtitle-666',
+ 'HBSAzPhotosHigh-Verbose Smart Description-667',
+ ('HBSAzPhotosHigh-Start Date-668', 'datetime'),
+ 'HBSAzPhotosHigh-Start Timezone Offset-669',
+ 'HBSAzPhotosHigh-End Timezone Offset-670',
+ ('HBSAzPhotosHigh-End Date-671', 'datetime'),
+ 'HBSAzPhotosHigh-Asset Count-672',
+ 'HBSAzPhotosHigh-Summary Count-673',
+ 'HBSAzPhotosHigh-Extended Count-674',
+ 'HBSAzPhotosHigh-Day Group Assets Count-675',
+ 'HBSAzPhotosHigh-Day Group Ext Assets Count-676',
+ 'HBSAzPhotosHigh-Day Group Summary Assets Count-677',
+ 'HBSAzPhotosHigh-Parent PH Key-678',
+ 'HBSAzPhotosHigh-Year Key Asset-679',
+ 'HBSAzPhotosHigh-Month First Asset-680',
+ 'HBSAzPhotosHigh-Month Key Asset-681',
+ 'HBSAzPhotosHigh-Key Asset-682',
+ 'HBSAzPhotosHigh-Parent Day Group PH Key-683',
+ 'HBSAzPhotosHigh-Day Group Key Asset-684',
+ 'HBSAzPhotosHigh-is Curated-685',
+ 'HBSAzPhotosHigh-Type-686',
+ 'HBSAzPhotosHigh-Kind-687',
+ 'HBSAzPhotosHigh-Category-688',
+ 'HBSAzPhotosHigh-Visibility State-689',
+ 'HBSAzPhotosHigh-Mood-690',
+ 'HBSAzPhotosHigh-Enrichment State-691',
+ 'HBSAzPhotosHigh-Enrichment Version-692',
+ 'HBSAzPhotosHigh-Highlight Version-693',
+ 'zAsset-Highlight Being Key Asset Key-694',
+ 'HBKAzPhotosHigh-UUID-695',
+ 'HBKAzPhotosHigh-zPK-696',
+ 'HBKAzPhotosHigh-zENT-697',
+ 'HBKAzPhotosHigh-zOPT-698',
+ 'HBKAzPhotosHigh-Promotion Score-699',
+ 'HBKAzPhotosHigh-Title-700',
+ 'HBKAzPhotosHigh-Subtitle-701',
+ 'HBKAzPhotosHigh-Verbose Smart Description-702',
+ ('HBKAzPhotosHigh-Start Date-703', 'datetime'),
+ 'HBKAzPhotosHigh-Start Timezone Offset-704',
+ 'HBKAzPhotosHigh-End Timezone Offset-705',
+ ('HBKAzPhotosHigh-End Date-706', 'datetime'),
+ 'HBKAzPhotosHigh-Asset Count-707',
+ 'HBKAzPhotosHigh-Summary Count-708',
+ 'HBKAzPhotosHigh-Extended Count-709',
+ 'HBKAzPhotosHigh-Day Group Assets Count-710',
+ 'HBKAzPhotosHigh-Day Group Ext Assets Count-711',
+ 'HBKAzPhotosHigh-Day Group Summary Assets Count-712',
+ 'HBKAzPhotosHigh-Parent PH Key-713',
+ 'HBKAzPhotosHigh-Year Key Asset-714',
+ 'HBKAzPhotosHigh-Month First Asset-715',
+ 'HBKAzPhotosHigh-Month Key Asset-716',
+ 'HBKAzPhotosHigh-Key Asset-717',
+ 'HBKAzPhotosHigh-Parent Day Group PH Key-718',
+ 'HBKAzPhotosHigh-Day Group Key Asset-719',
+ 'HBKAzPhotosHigh-is Curated-720',
+ 'HBKAzPhotosHigh-Type-721',
+ 'HBKAzPhotosHigh-Kind-722',
+ 'HBKAzPhotosHigh-Category-723',
+ 'HBKAzPhotosHigh-Visibility State-724',
+ 'HBKAzPhotosHigh-Mood-725',
+ 'HBKAzPhotosHigh-Enrichment State-726',
+ 'HBKAzPhotosHigh-Enrichment Version-727',
+ 'HBKAzPhotosHigh-Highlight Version-728',
+ 'zAsset-Day Group Highlight Being Assets Key-729',
+ 'DGHBAzPhotosHigh-UUID-730',
+ 'DGHBAzPhotosHigh-zPK-731',
+ 'DGHBAzPhotosHigh-zENT-732',
+ 'DGHBAzPhotosHigh-zOPT-733',
+ 'DGHBAzPhotosHigh-Promotion Score-734',
+ 'DGHBAzPhotosHigh-Title-735',
+ 'DGHBAzPhotosHigh-Subtitle-736',
+ 'DGHBAzPhotosHigh-Verbose Smart Description-737',
+ ('DGHBAzPhotosHigh-Start Date-738', 'datetime'),
+ 'DGHBAzPhotosHigh-Start Timezone Offset-739',
+ 'DGHBAzPhotosHigh-End Timezone Offset-740',
+ ('DGHBAzPhotosHigh-End Date-741', 'datetime'),
+ 'DGHBAzPhotosHigh-Asset Count-742',
+ 'DGHBAzPhotosHigh-Summary Count-743',
+ 'DGHBAzPhotosHigh-Extended Count-744',
+ 'DGHBAzPhotosHigh-Day Group Assets Count-745',
+ 'DGHBAzPhotosHigh-Day Group Ext Assets Count-746',
+ 'DGHBAzPhotosHigh-Day Group Summary Assets Count-747',
+ 'DGHBAzPhotosHigh-Parent PH Key-748',
+ 'DGHBAzPhotosHigh-Year Key Asset-749',
+ 'DGHBAzPhotosHigh-Month First Asset-750',
+ 'DGHBAzPhotosHigh-Month Key Asset-751',
+ 'DGHBAzPhotosHigh-Key Asset-752',
+ 'DGHBAzPhotosHigh-Parent Day Group PH Key-753',
+ 'DGHBAzPhotosHigh-Day Group Key Asset-754',
+ 'DGHBAzPhotosHigh-is Curated-755',
+ 'DGHBAzPhotosHigh-Type-756',
+ 'DGHBAzPhotosHigh-Kind-757',
+ 'DGHBAzPhotosHigh-Category-758',
+ 'DGHBAzPhotosHigh-Visibility State-759',
+ 'DGHBAzPhotosHigh-Mood-760',
+ 'DGHBAzPhotosHigh-Enrichment State-761',
+ 'DGHBAzPhotosHigh-Enrichment Version-762',
+ 'DGHBAzPhotosHigh-Highlight Version-763',
+ 'zAsset-Day Group Highlight Being Extended Assets Key-764',
+ 'DGHBEAzPhotosHigh-UUID-765',
+ 'DGHBEAzPhotosHigh-zPK-766',
+ 'DGHBEAzPhotosHigh-zENT-767',
+ 'DGHBEAzPhotosHigh-zOPT-768',
+ 'DGHBEAzPhotosHigh-Promotion Score-769',
+ 'DGHBEAzPhotosHigh-Title-770',
+ 'DGHBEAzPhotosHigh-Subtitle-771',
+ 'DGHBEAzPhotosHigh-Verbose Smart Description-772',
+ ('DGHBEAzPhotosHigh-Start Date-773', 'datetime'),
+ 'DGHBEAzPhotosHigh-Start Timezone Offset-774',
+ 'DGHBEAzPhotosHigh-End Timezone Offset-775',
+ ('DGHBEAzPhotosHigh-End Date-776', 'datetime'),
+ 'DGHBEAzPhotosHigh-Asset Count-777',
+ 'DGHBEAzPhotosHigh-Summary Count-778',
+ 'DGHBEAzPhotosHigh-Extended Count-779',
+ 'DGHBEAzPhotosHigh-Day Group Assets Count-780',
+ 'DGHBEAzPhotosHigh-Day Group Ext Assets Count-781',
+ 'DGHBEAzPhotosHigh-Day Group Summary Assets Count-782',
+ 'DGHBEAzPhotosHigh-Parent PH Key-783',
+ 'DGHBEAzPhotosHigh-Year Key Asset-784',
+ 'DGHBEAzPhotosHigh-Month First Asset-785',
+ 'DGHBEAzPhotosHigh-Month Key Asset-786',
+ 'DGHBEAzPhotosHigh-Key Asset-787',
+ 'DGHBEAzPhotosHigh-Parent Day Group PH Key-788',
+ 'DGHBEAzPhotosHigh-Day Group Key Asset-789',
+ 'DGHBEAzPhotosHigh-is Curated-790',
+ 'DGHBEAzPhotosHigh-Type-791',
+ 'DGHBEAzPhotosHigh-Kind-792',
+ 'DGHBEAzPhotosHigh-Category-793',
+ 'DGHBEAzPhotosHigh-Visibility State-794',
+ 'DGHBEAzPhotosHigh-Mood-795',
+ 'DGHBEAzPhotosHigh-Enrichment State-796',
+ 'DGHBEAzPhotosHigh-Enrichment Version-797',
+ 'DGHBEAzPhotosHigh-Highlight Version-798',
+ 'zAsset-Day Group Highlight Being Key Asset-799',
+ 'DGHBKAzPhotosHigh-UUID-800',
+ 'DGHBKAzPhotosHigh-zPK-801',
+ 'DGHBKAzPhotosHigh-zENT-802',
+ 'DGHBKAzPhotosHigh-zOPT-803',
+ 'DGHBKAzPhotosHigh-Promotion Score-804',
+ 'DGHBKAzPhotosHigh-Title-805',
+ 'DGHBKAzPhotosHigh-Subtitle-806',
+ 'DGHBKAzPhotosHigh-Verbose Smart Description-807',
+ ('DGHBKAzPhotosHigh-Start Date-808', 'datetime'),
+ 'DGHBKAzPhotosHigh-Start Timezone Offset-809',
+ 'DGHBKAzPhotosHigh-End Timezone Offset-810',
+ ('DGHBKAzPhotosHigh-End Date-811', 'datetime'),
+ 'DGHBKAzPhotosHigh-Asset Count-812',
+ 'DGHBKAzPhotosHigh-Summary Count-813',
+ 'DGHBKAzPhotosHigh-Extended Count-814',
+ 'DGHBKAzPhotosHigh-Day Group Assets Count-815',
+ 'DGHBKAzPhotosHigh-Day Group Ext Assets Count-816',
+ 'DGHBKAzPhotosHigh-Day Group Summary Assets Count-817',
+ 'DGHBKAzPhotosHigh-Parent PH Key-818',
+ 'DGHBKAzPhotosHigh-Year Key Asset-819',
+ 'DGHBKAzPhotosHigh-Month First Asset-820',
+ 'DGHBKAzPhotosHigh-Month Key Asset-821',
+ 'DGHBKAzPhotosHigh-Key Asset-822',
+ 'DGHBKAzPhotosHigh-Parent Day Group PH Key-823',
+ 'DGHBKAzPhotosHigh-Day Group Key Asset-824',
+ 'DGHBKAzPhotosHigh-is Curated-825',
+ 'DGHBKAzPhotosHigh-Type-826',
+ 'DGHBKAzPhotosHigh-Kind-827',
+ 'DGHBKAzPhotosHigh-Category-828',
+ 'DGHBKAzPhotosHigh-Visibility State-829',
+ 'DGHBKAzPhotosHigh-Mood-830',
+ 'DGHBKAzPhotosHigh-Enrichment State-831',
+ 'DGHBKAzPhotosHigh-Enrichment Version-832',
+ 'DGHBKAzPhotosHigh-Highlight Version-833',
+ 'zAsset-Day Group Highlight Being Summary Assets Key-834',
+ 'DGHBSAzPhotosHigh-UUID-835',
+ 'DGHBSAzPhotosHigh-zPK-836',
+ 'DGHBSAzPhotosHigh-zENT-837',
+ 'DGHBSAzPhotosHigh-zOPT-838',
+ 'DGHBSAzPhotosHigh-Promotion Score-839',
+ 'DGHBSAzPhotosHigh-Title-840',
+ 'DGHBSAzPhotosHigh-Subtitle-841',
+ 'DGHBSAzPhotosHigh-Verbose Smart Description-842',
+ ('DGHBSAzPhotosHigh-Start Date-843', 'datetime'),
+ 'DGHBSAzPhotosHigh-Start Timezone Offset-844',
+ 'DGHBSAzPhotosHigh-End Timezone Offset-845',
+ ('DGHBSAzPhotosHigh-End Date-846', 'datetime'),
+ 'DGHBSAzPhotosHigh-Asset Count-847',
+ 'DGHBSAzPhotosHigh-Summary Count-848',
+ 'DGHBSAzPhotosHigh-Extended Count-849',
+ 'DGHBSAzPhotosHigh-Day Group Assets Count-850',
+ 'DGHBSAzPhotosHigh-Day Group Ext Assets Count-851',
+ 'DGHBSAzPhotosHigh-Day Group Summary Assets Count-852',
+ 'DGHBSAzPhotosHigh-Parent PH Key-853',
+ 'DGHBSAzPhotosHigh-Year Key Asset-854',
+ 'DGHBSAzPhotosHigh-Month First Asset-855',
+ 'DGHBSAzPhotosHigh-Month Key Asset-856',
+ 'DGHBSAzPhotosHigh-Key Asset-857',
+ 'DGHBSAzPhotosHigh-Parent Day Group PH Key-858',
+ 'DGHBSAzPhotosHigh-Day Group Key Asset-859',
+ 'DGHBSAzPhotosHigh-is Curated-860',
+ 'DGHBSAzPhotosHigh-Type-861',
+ 'DGHBSAzPhotosHigh-Kind-862',
+ 'DGHBSAzPhotosHigh-Category-863',
+ 'DGHBSAzPhotosHigh-Visibility State-864',
+ 'DGHBSAzPhotosHigh-Mood-865',
+ 'DGHBSAzPhotosHigh-Enrichment State-866',
+ 'DGHBSAzPhotosHigh-Enrichment Version-867',
+ 'DGHBSAzPhotosHigh-Highlight Version-868',
+ 'zAsset-Month Highlight Being First Asset Key-869',
+ 'MHBFAzPhotosHigh-UUID-870',
+ 'MHBFAzPhotosHigh-zPK-871',
+ 'MHBFAzPhotosHigh-zENT-872',
+ 'MHBFAzPhotosHigh-zOPT-873',
+ 'MHBFAzPhotosHigh-Promotion Score-874',
+ 'MHBFAzPhotosHigh-Title-875',
+ 'MHBFAzPhotosHigh-Subtitle-876',
+ 'MHBFAzPhotosHigh-Verbose Smart Description-877',
+ ('MHBFAzPhotosHigh-Start Date-878', 'datetime'),
+ 'MHBFAzPhotosHigh-Start Timezone Offset-879',
+ 'MHBFAzPhotosHigh-End Timezone Offset-880',
+ ('MHBFAzPhotosHigh-End Date-881', 'datetime'),
+ 'MHBFAzPhotosHigh-Asset Count-882',
+ 'MHBFAzPhotosHigh-Summary Count-883',
+ 'MHBFAzPhotosHigh-Extended Count-884',
+ 'MHBFAzPhotosHigh-Day Group Assets Count-885',
+ 'MHBFAzPhotosHigh-Day Group Ext Assets Count-886',
+ 'MHBFAzPhotosHigh-Day Group Summary Assets Count-887',
+ 'MHBFAzPhotosHigh-Parent PH Key-888',
+ 'MHBFAzPhotosHigh-Year Key Asset-889',
+ 'MHBFAzPhotosHigh-Month First Asset-890',
+ 'MHBFAzPhotosHigh-Month Key Asset-891',
+ 'MHBFAzPhotosHigh-Key Asset-892',
+ 'MHBFAzPhotosHigh-Parent Day Group PH Key-893',
+ 'MHBFAzPhotosHigh-Day Group Key Asset-894',
+ 'MHBFAzPhotosHigh-is Curated-895',
+ 'MHBFAzPhotosHigh-Type-896',
+ 'MHBFAzPhotosHigh-Kind-897',
+ 'MHBFAzPhotosHigh-Category-898',
+ 'MHBFAzPhotosHigh-Visibility State-899',
+ 'MHBFAzPhotosHigh-Mood-900',
+ 'MHBFAzPhotosHigh-Enrichment State-901',
+ 'MHBFAzPhotosHigh-Enrichment Version-902',
+ 'MHBFAzPhotosHigh-Highlight Version-903',
+ 'zAsset-Month Highlight Being Key Asset-904',
+ 'MHBKAzPhotosHigh-UUID-905',
+ 'MHBKAzPhotosHigh-zPK-906',
+ 'MHBKAzPhotosHigh-zENT-907',
+ 'MHBKAzPhotosHigh-zOPT-908',
+ 'MHBKAzPhotosHigh-Promotion Score-909',
+ 'MHBKAzPhotosHigh-Title-910',
+ 'MHBKAzPhotosHigh-Subtitle-911',
+ 'MHBKAzPhotosHigh-Verbose Smart Description-912',
+ ('MHBKAzPhotosHigh-Start Date-913', 'datetime'),
+ 'MHBKAzPhotosHigh-Start Timezone Offset-914',
+ 'MHBKAzPhotosHigh-End Timezone Offset-915',
+ ('MHBKAzPhotosHigh-End Date-916', 'datetime'),
+ 'MHBKAzPhotosHigh-Asset Count-917',
+ 'MHBKAzPhotosHigh-Summary Count-918',
+ 'MHBKAzPhotosHigh-Extended Count-919',
+ 'MHBKAzPhotosHigh-Day Group Assets Count-920',
+ 'MHBKAzPhotosHigh-Day Group Ext Assets Count-921',
+ 'MHBKAzPhotosHigh-Day Group Summary Assets Count-922',
+ 'MHBKAzPhotosHigh-Parent PH Key-923',
+ 'MHBKAzPhotosHigh-Year Key Asset-924',
+ 'MHBKAzPhotosHigh-Month First Asset-925',
+ 'MHBKAzPhotosHigh-Month Key Asset-926',
+ 'MHBKAzPhotosHigh-Key Asset-927',
+ 'MHBKAzPhotosHigh-Parent Day Group PH Key-928',
+ 'MHBKAzPhotosHigh-Day Group Key Asset-929',
+ 'MHBKAzPhotosHigh-is Curated-930',
+ 'MHBKAzPhotosHigh-Type-931',
+ 'MHBKAzPhotosHigh-Kind-932',
+ 'MHBKAzPhotosHigh-Category-933',
+ 'MHBKAzPhotosHigh-Visibility State-934',
+ 'MHBKAzPhotosHigh-Mood-935',
+ 'MHBKAzPhotosHigh-Enrichment State-936',
+ 'MHBKAzPhotosHigh-Enrichment Version-937',
+ 'MHBKAzPhotosHigh-Highlight Version-938',
+ 'zAsset-Year Highlight Being Key Asset-939',
+ 'YHBKAzPhotosHigh-UUID-940',
+ 'YHBKAzPhotosHigh-zPK-941',
+ 'YHBKAzPhotosHigh-zENT-942',
+ 'YHBKAzPhotosHigh-zOPT-943',
+ 'YHBKAzPhotosHigh-Promotion Score-944',
+ 'YHBKAzPhotosHigh-Title-945',
+ 'YHBKAzPhotosHigh-Subtitle-946',
+ 'YHBKAzPhotosHigh-Verbose Smart Description-947',
+ ('YHBKAzPhotosHigh-Start Date-948', 'datetime'),
+ 'YHBKAzPhotosHigh-Start Timezone Offset-949',
+ 'YHBKAzPhotosHigh-End Timezone Offset-950',
+ ('YHBKAzPhotosHigh-End Date-951', 'datetime'),
+ 'YHBKAzPhotosHigh-Asset Count-952',
+ 'YHBKAzPhotosHigh-Summary Count-953',
+ 'YHBKAzPhotosHigh-Extended Count-954',
+ 'YHBKAzPhotosHigh-Day Group Assets Count-955',
+ 'YHBKAzPhotosHigh-Day Group Ext Assets Count-956',
+ 'YHBKAzPhotosHigh-Day Group Summary Assets Count-957',
+ 'YHBKAzPhotosHigh-Parent PH Key-958',
+ 'YHBKAzPhotosHigh-Year Key Asset-959',
+ 'YHBKAzPhotosHigh-Month First Asset-960',
+ 'YHBKAzPhotosHigh-Month Key Asset-961',
+ 'YHBKAzPhotosHigh-Key Asset-962',
+ 'YHBKAzPhotosHigh-Parent Day Group PH Key-963',
+ 'YHBKAzPhotosHigh-Day Group Key Asset-964',
+ 'YHBKAzPhotosHigh-is Curated-965',
+ 'YHBKAzPhotosHigh-Type-966',
+ 'YHBKAzPhotosHigh-Kind-967',
+ 'YHBKAzPhotosHigh-Category-968',
+ 'YHBKAzPhotosHigh-Visibility State-969',
+ 'YHBKAzPhotosHigh-Mood-970',
+ 'YHBKAzPhotosHigh-Enrichment State-971',
+ 'YHBKAzPhotosHigh-Enrichment Version-972',
+ 'YHBKAzPhotosHigh-Highlight Version-973',
+ 'z3SuggBKA-3KeyAssets = zAsset-zPK-974',
+ 'z3SuggBKA-55SuggBeingKeyAssets = zSugg-zPK-975',
+ 'SBKAzSugg-zPK-976',
+ 'SBKAzSugg-UUID-977',
+ ('SBKAzSugg-Start Date-978', 'datetime'),
+ 'SBKAzSugg-State-979',
+ 'SBKAzSugg-Featured State-980',
+ 'SBKAzSugg-Notification State-981',
+ ('SBKAzSugg-Creation Date-982', 'datetime'),
+ ('SBKAzSugg-End Date-983', 'datetime'),
+ ('SBKAzSugg-Activation Date-984', 'datetime'),
+ ('SBKAzSugg-Expunge Date-985', 'datetime'),
+ ('SBKAzSugg-Relevant Until Date-986', 'datetime'),
+ 'SBKAzSugg-Title-987',
+ 'SBKAzSugg-Sub Title-988',
+ 'SBKAzSugg-Cached Count-989',
+ 'SBKAzSugg-Cahed Photos Count-990',
+ 'SBKAzSugg-Cached Videos Count-991',
+ 'SBKAzSugg-Type-992',
+ 'SBKAzSugg-Sub Type-993',
+ 'SBKAzSugg-Version-994',
+ 'SBKAzSugg-Cloud Local State-995',
+ 'SBKAzSugg-Cloud Delete State-996',
+ 'z3SuggBRA-3RepAssets1-997',
+ 'z3SuggBRA-55SuggBeingRepAssets-998',
+ 'SBRAzSugg-zPK-999',
+ 'SBRAzSugg-UUID-1000',
+ ('SBRAzSugg-Start Date-1001', 'datetime'),
+ 'SBRAzSugg-State-1002',
+ 'SBRAzSugg-Featured State-1003',
+ 'SBRAzSugg-Notification State-1004',
+ ('SBRAzSugg-Creation Date-1005', 'datetime'),
+ ('SBRAzSugg-End Date-1006', 'datetime'),
+ ('SBRAzSugg-Activation Date-1007', 'datetime'),
+ ('SBRAzSugg-Expunge Date-1008', 'datetime'),
+ ('SBRAzSugg-Relevant Until Date-1009', 'datetime'),
+ 'SBRAzSugg-Title-1010',
+ 'SBRAzSugg-Sub Title-1011',
+ 'SBRAzSugg-Cached Count-1012',
+ 'SBRAzSugg-Cahed Photos Count-1013',
+ 'SBRAzSugg-Cached Videos Count-1014',
+ 'SBRAzSugg-Type-1015',
+ 'SBRAzSugg-Sub Type-1016',
+ 'SBRAzSugg-Version-1017',
+ 'SBRAzSugg-Cloud Local State-1018',
+ 'SBRAzSugg-Cloud Delete State-1019',
+ 'zAsset-Highlight Visibility Score-1020',
+ 'zMedAnlyAstAttr-Media Analysis Version-1021',
+ 'zMedAnlyAstAttr-Audio Classification-1022',
+ 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-1023',
+ 'zMedAnlyAstAttr-Best Video Range Start Time Scale-1024',
+ 'zMedAnlyAstAttr-Best Video Range Duration Value-1025',
+ 'zMedAnlyAstAttr-Best Video Range Start Value-1026',
+ 'zMedAnlyAstAttr-Packed Best Playback Rect-1027',
+ 'zMedAnlyAstAttr-Activity Score-1028',
+ 'zMedAnlyAstAttr-Video Score-1029',
+ 'zMedAnlyAstAttr-AutoPlay Suggestion Score-1030',
+ 'zMedAnlyAstAttr-Blurriness Score-1031',
+ 'zMedAnlyAstAttr-Exposure Score-1032',
+ 'zAssetAnalyState-Asset UUID-4TableStart-1033',
+ 'zAssetAnalyState-Analyisis State-1034',
+ 'zAssetAnalyState-Worker Flags-1035',
+ 'zAssetAnalyState-Worker Type-1036',
+ ('zAssetAnalyState-Ignore Until Date-1037', 'datetime'),
+ ('zAssetAnalyState-Last Ignored Date-1038', 'datetime'),
+ ('zAssetAnalyState-Sort Token-1039', 'datetime'),
+ 'zAsset-Overall Aesthetic Score-1040',
+ 'zCompAssetAttr-Behavioral Score-1041',
+ 'zCompAssetAttr-Failure Score zCompAssetAttr-1042',
+ 'zCompAssetAttr-Harmonious Color Score-1043',
+ 'zCompAssetAttr-Immersiveness Score-1044',
+ 'zCompAssetAttr-Interaction Score-1045',
+ 'zCompAssetAttr-Intersting Subject Score-1046',
+ 'zCompAssetAttr-Intrusive Object Presence Score-1047',
+ 'zCompAssetAttr-Lively Color Score-1048',
+ 'zCompAssetAttr-Low Light-1049',
+ 'zCompAssetAttr-Noise Score-1050',
+ 'zCompAssetAttr-Pleasant Camera Tilt Score-1051',
+ 'zCompAssetAttr-Pleasant Composition Score-1052',
+ 'zCompAssetAttr-Pleasant Lighting Score-1053',
+ 'zCompAssetAttr-Pleasant Pattern Score-1054',
+ 'zCompAssetAttr-Pleasant Perspective Score-1055',
+ 'zCompAssetAttr-Pleasant Post Processing Score-1056',
+ 'zCompAssetAttr-Pleasant Reflection Score-1057',
+ 'zCompAssetAttrPleasant Symmetry Score-1058',
+ 'zCompAssetAttr-Sharply Focused Subject Score-1059',
+ 'zCompAssetAttr-Tastfully Blurred Score-1060',
+ 'zCompAssetAttr-Well Chosen Subject Score-1061',
+ 'zCompAssetAttr-Well Framed Subject Score-1062',
+ 'zCompAssetAttr-Well Timeed Shot Score-1063',
+ 'zCldRes-Asset UUID-4TableStart-1064',
+ 'zCldRes-Cloud Local State-1065',
+ 'zCldRes-File Size-1066',
+ 'zCldRes-Height-1067',
+ 'zCldRes-Is Available-1068',
+ 'zCldRes-Is Locally Available-1069',
+ 'zCldRes-Prefetch Count-1070',
+ 'zCldRes-Source Type-1071',
+ 'zCldRes-Type-1072',
+ 'zCldRes-Width-1073',
+ ('zCldRes-Date Created-1074', 'datetime'),
+ ('zCldRes-Last OnDemand Download Date-1075', 'datetime'),
+ ('zCldRes-Last Prefetch Date-1076', 'datetime'),
+ 'zCldRes-Prunedat-1077',
+ 'zCldRes-File Path-1078',
+ 'zCldRes-Fingerprint-1079',
+ 'zCldRes-Item ID-1080',
+ 'zCldRes-UniID-1081',
+ 'zAddAssetAttr-zPK-1082',
+ 'zAddAssetAttr-zENT-1083',
+ 'ZAddAssetAttr-zOPT-1084',
+ 'zAddAssetAttr-zAsset= zAsset_zPK-1085',
+ 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-1086',
+ 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-1087',
+ 'zAddAssetAttr-Master Fingerprint-1088',
+ 'zAddAssetAttr-Public Global UUID-1089',
+ 'zAddAssetAttr-Deferred Photo Identifier-1090',
+ 'zAddAssetAttr-Original Assets UUID-1091',
+ 'zAddAssetAttr-Import Session ID-1092',
+ 'zAddAssetAttr-Originating Asset Identifier-1093',
+ 'zAddAssetAttr.Adjusted Fingerprint-1094',
+ 'zAlbumList-zPK= Album List Key-1095',
+ 'zAlbumList-zENT-1096',
+ 'zAlbumList-zOPT-1097',
+ 'zAlbumList-ID Key-1098',
+ 'zAlbumList-UUID-1099',
+ 'zAsset-zPK-1100',
+ 'zAsset-zENT-1101',
+ 'zAsset-zOPT-1102',
+ 'zAsset-Master= zCldMast-zPK-1103',
+ 'zAsset-Extended Attributes= zExtAttr-zPK-1104',
+ 'zAsset-Import Session Key-1105',
+ 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-1106',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-1107',
+ 'zAsset-Moment Share Key= zShare-zPK-1108',
+ 'zAsset-zMoment Key= zMoment-zPK-1109',
+ 'zAsset-Computed Attributes Asset Key-1110',
+ 'zAsset-Highlight Being Assets-HBA Key-1111',
+ 'zAsset-Highlight Being Extended Assets-HBEA Key-1112',
+ 'zAsset-Highligh Being Summary Assets-HBSA Key-1113',
+ 'zAsset-Day Group Highlight Being Assets-DGHBA Key-1114',
+ 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-1115',
+ 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-1116',
+ 'zAsset-Promotion Score-1117',
+ 'zAsset-Media Analysis Attributes Key-1118',
+ 'zAsset-Media Group UUID-1119',
+ 'zAsset-UUID = store.cloudphotodb-1120',
+ 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-1121',
+ 'zAsset.Cloud Collection GUID-1122',
+ 'zAsset-Avalanche UUID-1123',
+ 'zAssetAnalyState-zPK-1124',
+ 'zAssetAnalyState-zEnt-1125',
+ 'zAssetAnalyState-zOpt-1126',
+ 'zAssetAnalyState-Asset= zAsset-zPK-1127',
+ 'zAssetAnalyState-Asset UUID-1128',
+ 'zAssetDes-zPK-1129',
+ 'zAssetDes-zENT-1130',
+ 'zAssetDes-zOPT-1131',
+ 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-1132',
+ 'zCldFeedEnt-zPK= zCldShared keys-1133',
+ 'zCldFeedEnt-zENT-1134',
+ 'zCldFeedEnt-zOPT-1135',
+ 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-1136',
+ 'zCldFeedEnt-Entry Invitation Record GUID-1137',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-1138',
+ 'zCldMast-zPK= zAsset-Master-1139',
+ 'zCldMast-zENT-1140',
+ 'zCldMast-zOPT-1141',
+ 'zCldMast-Moment Share Key= zShare-zPK-1142',
+ 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-1143',
+ 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-1144',
+ 'zCldMast-Originating Asset ID-1145',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-1146',
+ 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-1147',
+ 'CMzCldMastMedData-zENT-1148',
+ 'CMzCldMastMedData-zOPT-1149',
+ 'CMzCldMastMedData-CldMast= zCldMast-zPK-1150',
+ 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-1151',
+ 'AAAzCldMastMedData-zENT-1152',
+ 'AAAzCldMastMedData-zOPT-1153',
+ 'AAAzCldMastMedData-CldMast key-1154',
+ 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-1155',
+ 'zCldRes-zPK-1156',
+ 'zCldRes-zENT-1157',
+ 'zCldRes-zOPT-1158',
+ 'zCldRes-Asset= zAsset-zPK-1159',
+ 'zCldRes-Cloud Master= zCldMast-zPK-1160',
+ 'zCldRes-Asset UUID-1161',
+ 'zCldShareAlbumInvRec-zPK-1162',
+ 'zCldShareAlbumInvRec-zEnt-1163',
+ 'zCldShareAlbumInvRec-zOpt-1164',
+ 'zCldShareAlbumInvRec-Album Key-1165',
+ 'zCldShareAlbumInvRec-FOK Album Key-1166',
+ 'zCldShareAlbumInvRec-Album GUID-1167',
+ 'zCldShareAlbumInvRec-Cloud GUID-1168',
+ 'zCldSharedComment-zPK-1169',
+ 'zCldSharedComment-zENT-1170',
+ 'zCldSharedComment-zOPT-1171',
+ 'zCldSharedComment-Commented Asset Key= zAsset-zPK-1172',
+ 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-1173',
+ 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-1174',
+ 'zCldSharedComment-Liked Asset Key= zAsset-zPK-1175',
+ 'zCldSharedComment-CldFeedLikeCommentEntry Key-1176',
+ 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-1177',
+ 'zCldSharedComment-Cloud GUID-1178',
+ 'zCompAssetAttr-zPK-1179',
+ 'zCompAssetAttr-zEnt-1180',
+ 'zCompAssetAttr-zOpt-1181',
+ 'zCompAssetAttr-Asset Key-1182',
+ 'zDetFace-zPK-1183',
+ 'zDetFace-zEnt-1184',
+ 'zDetFace.zOpt-1185',
+ 'zDetFace-Asset= zAsset-zPK or Asset Containing Face-1186',
+ 'zDetFace-Person= zPerson-zPK-1187',
+ 'zDetFace-Person Being Key Face-1188',
+ 'zDetFace-Face Print-1189',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-1190',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-1191',
+ 'zDetFace-UUID-1192',
+ 'zDetFaceGroup-zPK-1193',
+ 'zDetFaceGroup-zENT-1194',
+ 'zDetFaceGroup-zOPT-1195',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-1196',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-1197',
+ 'zDetFaceGroup-UUID-1198',
+ 'zDetFacePrint-zPK-1199',
+ 'zDetFacePrint-zEnt-1200',
+ 'zDetFacePrint-zOpt-1201',
+ 'zDetFacePrint-Face Key-1202',
+ 'zExtAttr-zPK= zAsset-zExtendedAttributes-1203',
+ 'zExtAttr-zENT-1204',
+ 'zExtAttr-zOPT-1205',
+ 'zExtAttr-Asset Key-1206',
+ 'zFaceCrop-zPK-1207',
+ 'zFaceCrop-zEnt-1208',
+ 'zFaceCrop-zOpt-1209',
+ 'zFaceCrop-Asset Key-1210',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-1211',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-1212',
+ 'zFaceCrop-Face Key-1213',
+ 'zFaceCrop-UUID-1214',
+ 'zGenAlbum-zPK=26AlbumLists= 26Albums-1215',
+ 'zGenAlbum-zENT-1216',
+ 'zGenAlbum-zOpt-1217',
+ 'zGenAlbum-Key Asset-Key zAsset-zPK-1218',
+ 'zGenAlbum-Secondary Key Asset-1219',
+ 'zGenAlbum-Tertiary Key Asset-1220',
+ 'zGenAlbum-Custom Key Asset-1221',
+ 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-1222',
+ 'zGenAlbum-FOK Parent Folder-1223',
+ 'zGenAlbum-UUID-1224',
+ 'zGenAlbum-Cloud_GUID = store.cloudphotodb-1225',
+ 'zGenAlbum-Project Render UUID-1226',
+ 'zIntResou-zPK-1227',
+ 'zIntResou-zENT-1228',
+ 'zIntResou-zOPT-1229',
+ 'zIntResou-Asset= zAsset_zPK-1230',
+ 'zIntResou-Fingerprint-1231',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-1232',
+ 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1233',
+ 'zMedAnlyAstAttr-zEnt-1234',
+ 'zMedAnlyAstAttr-zOpt-1235',
+ 'zMedAnlyAstAttr-Asset= zAsset-zPK-1236',
+ 'zPerson-zPK=zDetFace-Person-1237',
+ 'zPerson-zEnt-1238',
+ 'zPerson-zOpt-1239',
+ 'zPerson-KeyFace=zDetFace-zPK-1240',
+ 'zPerson-Assoc Face Group Key-1241',
+ 'zPerson-Person UUID-1242',
+ 'zSceneP-zPK-1243',
+ 'zSceneP-zENT-1244',
+ 'zSceneP-zOPT-1245',
+ 'zShare-zPK-1246',
+ 'zShare-zENT-1247',
+ 'zShare-zOPT-1248',
+ 'zShare-UUID-1249',
+ 'SPLzShare-UUID-1250',
+ 'zShare-Scope ID = store.cloudphotodb-1251',
+ 'zSharePartic-zPK-1252',
+ 'zSharePartic-zENT-1253',
+ 'zSharePartic-zOPT-1254',
+ 'zSharePartic-Share Key= zShare-zPK-1255',
+ 'zSharePartic-UUID-1256',
+ 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1257',
+ 'zUnmAdj-zOPT-1258',
+ 'zUnmAdj-zENT-1259',
+ 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1260',
+ 'zUnmAdj-UUID-1261',
+ 'zUnmAdj-Other Adjustments Fingerprint-1262',
+ 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1263',
+ 'z25AlbumList-25Albums= zGenAlbum-zPK-1264',
+ 'z25AlbumList-Album List Key-1265',
+ 'z25AlbumList-FOK25Albums Key-1266',
+ 'z26Assets-26Albums= zGenAlbum-zPK-1267',
+ 'z26Assets-3Asset Key= zAsset-zPK in the Album-1268',
+ 'z26Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1269')
+ data_list = get_sqlite_db_records(source_path, query)
+ return data_headers, data_list, source_path
-def get_ph94ios14refforassetanalysissyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
+@artifact_processor
+def Ph94_2iOS14RefforAssetAnalysisSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if (version.parse(iosversion) <= version.parse("13.7")) or (version.parse(iosversion) >= version.parse("15")):
- logfunc("Unsupported version for Syndication.photoslibrary-database-Photos.sqlite reference for asset analysis from iOS " + iosversion)
+ logfunc("Unsupported version for Syndication.photoslibrary for iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found, "Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -7342,7 +7345,7 @@ def get_ph94ios14refforassetanalysissyndpl(files_found, report_folder, seeker, w
zAssetAnalyState.ZWORKERTYPE AS 'zAssetAnalyState-Worker Type',
DateTime(zAssetAnalyState.ZIGNOREUNTILDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Ignore Until Date',
DateTime(zAssetAnalyState.ZLASTIGNOREDDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Last Ignored Date',
- zAssetAnalyState.ZSORTTOKEN AS 'zAssetAnalyState-Sort Token',
+ DateTime(zAssetAnalyState.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Sort Token',
zAsset.ZOVERALLAESTHETICSCORE AS 'zAsset-Overall Aesthetic Score',
zCompAssetAttr.ZBEHAVIORALSCORE AS 'zCompAssetAttr-Behavioral Score',
zCompAssetAttr.ZFAILURESCORE AS 'zCompAssetAttr-Failure Score zCompAssetAttr',
@@ -7632,1505 +7635,1444 @@ def get_ph94ios14refforassetanalysissyndpl(files_found, report_folder, seeker, w
LEFT JOIN Z_3SUGGESTIONSBEINGREPRESENTATIVEASSETS z3SuggBRA ON z3SuggBRA.Z_3REPRESENTATIVEASSETS1 = zAsset.Z_PK
LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_55SUGGESTIONSBEINGREPRESENTATIVEASSETS
ORDER BY zAsset.ZADDEDDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
- row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
- row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
- row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
- row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
- row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
- row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
- row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
- row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
- row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
- row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
- row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
- row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
- row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
- row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
- row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
- row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
- row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
- row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
- row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
- row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307],
- row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315],
- row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323],
- row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331],
- row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339],
- row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347],
- row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355],
- row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363],
- row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371],
- row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379],
- row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387],
- row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395],
- row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403],
- row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411],
- row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419],
- row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427],
- row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435],
- row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443],
- row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451],
- row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459],
- row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467],
- row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475],
- row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483],
- row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491],
- row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499],
- row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507],
- row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515],
- row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523],
- row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531],
- row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539],
- row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547],
- row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555],
- row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563],
- row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571],
- row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579],
- row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587],
- row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595],
- row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603],
- row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611],
- row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619],
- row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627],
- row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635],
- row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643],
- row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651],
- row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659],
- row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667],
- row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675],
- row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683],
- row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691],
- row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699],
- row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707],
- row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715],
- row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723],
- row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731],
- row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739],
- row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747],
- row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755],
- row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763],
- row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771],
- row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779],
- row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787],
- row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795],
- row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803],
- row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811],
- row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819],
- row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827],
- row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835],
- row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843],
- row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851],
- row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859],
- row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867],
- row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875],
- row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883],
- row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891],
- row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899],
- row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907],
- row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915],
- row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923],
- row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931],
- row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939],
- row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947],
- row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955],
- row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963],
- row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971],
- row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979],
- row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987],
- row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995],
- row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002],
- row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009],
- row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016],
- row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023],
- row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030],
- row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037],
- row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044],
- row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051],
- row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058],
- row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065],
- row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072],
- row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079],
- row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086],
- row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093],
- row[1094], row[1095], row[1096], row[1097], row[1098], row[1099], row[1100],
- row[1101], row[1102], row[1103], row[1104], row[1105], row[1106], row[1107],
- row[1108], row[1109], row[1110], row[1111], row[1112], row[1113], row[1114],
- row[1115], row[1116], row[1117], row[1118], row[1119], row[1120], row[1121],
- row[1122], row[1123], row[1124], row[1125], row[1126], row[1127], row[1128],
- row[1129], row[1130], row[1131], row[1132], row[1133], row[1134], row[1135],
- row[1136], row[1137], row[1138], row[1139], row[1140], row[1141], row[1142],
- row[1143], row[1144], row[1145], row[1146], row[1147], row[1148], row[1149],
- row[1150], row[1151], row[1152], row[1153], row[1154], row[1155], row[1156],
- row[1157], row[1158], row[1159], row[1160], row[1161], row[1162], row[1163],
- row[1164], row[1165], row[1166], row[1167], row[1168], row[1169], row[1170],
- row[1171], row[1172], row[1173], row[1174], row[1175], row[1176], row[1177],
- row[1178], row[1179], row[1180], row[1181], row[1182], row[1183], row[1184],
- row[1185], row[1186], row[1187], row[1188], row[1189], row[1190], row[1191],
- row[1192], row[1193], row[1194], row[1195], row[1196], row[1197], row[1198],
- row[1199], row[1200], row[1201], row[1202], row[1203], row[1204], row[1205],
- row[1206], row[1207], row[1208], row[1209], row[1210], row[1211], row[1212],
- row[1213], row[1214], row[1215], row[1216], row[1217], row[1218], row[1219],
- row[1220], row[1221], row[1222], row[1223], row[1224], row[1225], row[1226],
- row[1227], row[1228], row[1229], row[1230], row[1231], row[1232], row[1233],
- row[1234], row[1235], row[1236], row[1237], row[1238], row[1239], row[1240],
- row[1241], row[1242], row[1243], row[1244], row[1245], row[1246], row[1247],
- row[1248], row[1249], row[1250], row[1251], row[1252], row[1253], row[1254],
- row[1255], row[1256], row[1257], row[1258], row[1259], row[1260], row[1261],
- row[1262], row[1263], row[1264], row[1265], row[1266], row[1267], row[1268],
- row[1269]))
-
- counter += 1
-
- description = 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.' \
- ' This parser includes the largest set of decoded data based on testing and research' \
- ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the' \
- ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md' \
- ' TimelineExplorer to view, search and filter the results.'
- report = ArtifactHtmlReport('Ph94.2-iOS14_Ref_for_Asset_Analysis-SyndPL')
- report.start_artifact_report(report_folder, 'Ph94.2-iOS14_Ref_for_Asset_Analysis-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Added Date-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset Complete-2',
- 'zAsset-zPK-4QueryStart-3',
- 'zAddAssetAttr-zPK-4QueryStart-4',
- 'zAsset-UUID = store.cloudphotodb-4QueryStart-5',
- 'zAddAssetAttr-Master Fingerprint-4TableStart-6',
- 'zIntResou-Fingerprint-4TableStart-7',
- 'zAsset-Cloud is My Asset-8',
- 'zAsset-Cloud is deletable-Asset-9',
- 'zAsset-Cloud_Local_State-10',
- 'zAsset-Visibility State-11',
- 'zExtAttr-Camera Make-12',
- 'zExtAttr-Camera Model-13',
- 'zExtAttr-Lens Model-14',
- 'zExtAttr-Flash Fired-15',
- 'zExtAttr-Focal Lenght-16',
- 'zAsset-Derived Camera Capture Device-17',
- 'zAddAssetAttr-Camera Captured Device-18',
- 'zAddAssetAttr-Imported by-19',
- 'zCldMast-Imported By-20',
- 'zAddAssetAttr-Creator Bundle ID-21',
- 'zAddAssetAttr-Imported By Display Name-22',
- 'zCldMast-Imported by Bundle ID-23',
- 'zCldMast-Imported by Display Name-24',
- 'zAsset-Saved Asset Type-25',
- 'zAsset-Directory-Path-26',
- 'zAsset-Filename-27',
- 'zAddAssetAttr- Original Filename-28',
- 'zCldMast- Original Filename-29',
- 'zAsset-Date Created-30',
- 'zCldMast-Creation Date-31',
- 'zIntResou-CldMst Date Created-32',
- 'zAddAssetAttr-Time Zone Name-33',
- 'zAddAssetAttr-Time Zone Offset-34',
- 'zAddAssetAttr-Inferred Time Zone Offset-35',
- 'zAddAssetAttr-EXIF-String-36',
- 'zAsset-Modification Date-37',
- 'zAsset-Last Shared Date-38',
- 'zCldMast-Cloud Local State-39',
- 'zCldMast-Import Date-40',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-41',
- 'zAddAssetAttr-Import Session ID-4QueryStart-42',
- 'zAddAssetAttr-Alt Import Image Date-43',
- 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-44',
- 'zAsset-Cloud Batch Publish Date-45',
- 'zAsset-Cloud Server Publish Date-46',
- 'zAsset-Cloud Download Requests-47',
- 'zAsset-Cloud Batch ID-48',
- 'zAddAssetAttr-Upload Attempts-49',
- 'zAsset-Latitude-50',
- 'zExtAttr-Latitude-51',
- 'zAsset-Longitude-52',
- 'zExtAttr-Longitude-53',
- 'zAddAssetAttr-GPS Horizontal Accuracy-54',
- 'zAddAssetAttr-Location Hash-55',
- 'zAddAssetAttr-Shifted Location Valid-56',
- 'zAddAssetAttr-Shifted Location Data-57',
- 'zAddAssetAttr-Reverse Location Is Valid-58',
- 'zAddAssetAttr-Reverse Location Data-59',
- 'ParentzGenAlbum-UUID-4QueryStart-60',
- 'zGenAlbum-UUID-4QueryStart-61',
- 'ParentzGenAlbum-Cloud GUID-4QueryStart-62',
- 'zGenAlbum-Cloud GUID-4QueryStart-63',
- 'zCldShareAlbumInvRec-Album GUID-4QueryStart-64',
- 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-65',
- 'zGenAlbum-Project Render UUID-4QueryStart-66',
- 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-67',
- 'zGenAlbum-Cloud_Local_State-4QueryStart-68',
- 'ParentzGenAlbum- Creation Date- 4QueryStart-69',
- 'zGenAlbum- Creation Date- 4QueryStart-70',
- 'zGenAlbum- Cloud Creation Date- 4QueryStart-71',
- 'zGenAlbum- Start Date- 4QueryStart-72',
- 'zGenAlbum- End Date- 4QueryStart-73',
- 'zGenAlbum-Cloud Subscription Date- 4QueryStart-74',
- 'ParentzGenAlbum- Title- 4QueryStart-75',
- 'zGenAlbum- Title-User&System Applied- 4QueryStart-76',
- 'zGenAlbum-Import Session ID-SWY- 4QueryStart-77',
- 'zGenAlbum-Creator Bundle ID- 4QueryStart-78',
- 'zGenAlbum-zENT- Entity- 4QueryStart-79',
- 'ParentzGenAlbum- Kind- 4QueryStart-80',
- 'zGenAlbum-Album Kind- 4QueryStart-81',
- 'AAAzCldMastMedData-zOPT-82',
- 'zAddAssetAttr-Media Metadata Type-83',
- 'AAAzCldMastMedData-Data-84',
- 'CldMasterzCldMastMedData-zOPT-85',
- 'zCldMast-Media Metadata Type-86',
- 'CMzCldMastMedData-Data-87',
- 'zAsset-Orientation-88',
- 'zAddAssetAttr-Original Orientation-89',
- 'zAsset-Kind-90',
- 'zAsset-Kind-Sub-Type-91',
- 'zAddAssetAttr-Cloud Kind Sub Type-92',
- 'zAsset-Playback Style-93',
- 'zAsset-Playback Variation-94',
- 'zAsset-Video Duration-95',
- 'zExtAttr-Duration-96',
- 'zAsset-Video CP Duration-97',
- 'zAddAssetAttr-Video CP Duration Time Scale-98',
- 'zAsset-Video CP Visibility State-99',
- 'zAddAssetAttr-Video CP Display Value-100',
- 'zAddAssetAttr-Video CP Display Time Scale-101',
- 'zIntResou-Datastore Class ID-102',
- 'zAsset-Cloud Placeholder Kind-103',
- 'zIntResou-Local Availability-104',
- 'zIntResou-Local Availability Target-105',
- 'zIntResou-Cloud Local State-106',
- 'zIntResou-Remote Availability-107',
- 'zIntResou-Remote Availability Target-108',
- 'zIntResou-Transient Cloud Master-109',
- 'zIntResou-Side Car Index-110',
- 'zIntResou- File ID-111',
- 'zIntResou-Version-112',
- 'zAddAssetAttr- Original-File-Size-113',
- 'zIntResou-Resource Type-114',
- 'zIntResou-Datastore Sub-Type-115',
- 'zIntResou-Cloud Source Type-116',
- 'zIntResou-Data Length-117',
- 'zIntResou-Recipe ID-118',
- 'zIntResou-Cloud Last Prefetch Date-119',
- 'zIntResou-Cloud Prefetch Count-120',
- 'zIntResou- Cloud-Last-OnDemand Download-Date-121',
- 'zAsset-Uniform Type ID-122',
- 'zAsset-Original Color Space-123',
- 'zCldMast-Uniform_Type_ID-124',
- 'zCldMast-Full Size JPEG Source-125',
- 'zAsset-HDR Gain-126',
- 'zExtAttr-Codec-127',
- 'zCldMast-Codec Name-128',
- 'zCldMast-Video Frame Rate-129',
- 'zCldMast-Placeholder State-130',
- 'zAsset-Depth_Type-131',
- 'zAsset-Avalanche UUID-4TableStart-132',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-133',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-134',
- 'zAddAssetAttr-Cloud Recovery State-135',
- 'zAddAssetAttr-Cloud State Recovery Attempts Count-136',
- 'zAsset-Deferred Processing Needed-137',
- 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-138',
- 'zAddAssetAttr-Deferred Processing Candidate Options-139',
- 'zAsset-Has Adjustments-Camera-Effects-Filters-140',
- 'zUnmAdj-UUID-4TableStart-141',
- 'zAsset-Adjustment Timestamp-142',
- 'zUnmAdj-Adjustment Timestamp-143',
- 'zAddAssetAttr-Editor Bundle ID-144',
- 'zUnmAdj-Editor Localized Name-145',
- 'zUnmAdj-Adjustment Format ID-146',
- 'zAddAssetAttr-Montage-147',
- 'zUnmAdj-Adjustment Render Types-148',
- 'zUnmAdj-Adjustment Format Version-149',
- 'zUnmAdj-Adjustment Base Image Format-150',
- 'zAsset-Favorite-151',
- 'zAsset-Hidden-152',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-153',
- 'zAsset-Trashed Date-154',
- 'zIntResou-Trash State-155',
- 'zIntResou-Trashed Date-156',
- 'zAsset-Cloud Delete State-157',
- 'zIntResou-Cloud Delete State-158',
- 'zAddAssetAttr-PTP Trashed State-159',
- 'zIntResou-PTP Trashed State-160',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-161',
- 'zMedAnlyAstAttr-Media Analysis Timestamp-162',
- 'zAsset-Analysis State Modificaion Date-163',
- 'zAddAssetAttr- Pending View Count-164',
- 'zAddAssetAttr- View Count-165',
- 'zAddAssetAttr- Pending Play Count-166',
- 'zAddAssetAttr- Play Count-167',
- 'zAddAssetAttr- Pending Share Count-168',
- 'zAddAssetAttr- Share Count-169',
- 'zAddAssetAttr-Allowed for Analysis-170',
- 'zAddAssetAttr-Scene Analysis Version-171',
- 'zAddAssetAttr-Scene Analysis Timestamp-172',
- 'zAddAssetAttr-Destination Asset Copy State-173',
- 'zAddAssetAttr-Variation Suggestions States-174',
- 'zAsset-High Frame Rate State-175',
- 'zAsset-Video Key Frame Time Scale-176',
- 'zAsset-Video Key Frame Value-177',
- 'zExtAttr-ISO-178',
- 'zExtAttr-Metering Mode-179',
- 'zExtAttr-Sample Rate-180',
- 'zExtAttr-Track Format-181',
- 'zExtAttr-White Balance-182',
- 'zExtAttr-Aperture-183',
- 'zExtAttr-BitRate-184',
- 'zExtAttr-Exposure Bias-185',
- 'zExtAttr-Frames Per Second-186',
- 'zExtAttr-Shutter Speed-187',
- 'zAsset-Height-188',
- 'zAddAssetAttr-Original Height-189',
- 'zIntResou-Unoriented Height-190',
- 'zAsset-Width-191',
- 'zAddAssetAttr-Original Width-192',
- 'zIntResou-Unoriented Width-193',
- 'zShare-Thumbnail Image Data-194',
- 'SPLzShare-Thumbnail Image Data-195',
- 'zAsset-Thumbnail Index-196',
- 'zAddAssetAttr-Embedded Thumbnail Height-197',
- 'zAddAssetAttr-Embedded Thumbnail Length-198',
- 'zAddAssetAttr-Embedded Thumbnail Offset-199',
- 'zAddAssetAttr-Embedded Thumbnail Width-200',
- 'zAsset-Packed Acceptable Crop Rect-201',
- 'zAsset-Packed Badge Attributes-202',
- 'zAsset-Packed Preferred Crop Rect-203',
- 'zAsset-Curation Score-204',
- 'zAsset-Camera Processing Adjustment State-205',
- 'zAsset-Depth Type-206',
- 'zAddAssetAttr-Orig Resource Choice-207',
- 'zAddAssetAttr-Spatial Over Capture Group ID-208',
- 'zAddAssetAttr-Place Annotation Data-209',
- 'zAddAssetAttr-Distance Identity-210',
- 'zAddAssetAttr-Edited IPTC Attributes-211',
- 'zAssetDes-Long Description-212',
- 'zAddAssetAttr-Asset Description-213',
- 'zAddAssetAttr-Title-Comments via Cloud Website-214',
- 'zAddAssetAttr-Accessibility Description-215',
- 'zAddAssetAttr-Photo Stream Tag ID-216',
- 'zCldFeedEnt-Entry Date-217',
- 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-218',
- 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-219',
- 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-220',
- 'zCldFeedEnt-Entry Priority Number-221',
- 'zCldFeedEnt-Entry Type Number-222',
- 'zCldSharedComment-Cloud GUID-4TableStart-223',
- 'zCldSharedComment-Date-224',
- 'zCldSharedComment-Comment Client Date-225',
- 'zAsset-Cloud Last Viewed Comment Date-226',
- 'zCldSharedComment-Type-227',
- 'zCldSharedComment-Comment Text-228',
- 'zCldSharedComment-Commenter Hashed Person ID-229',
- 'zCldSharedComment-Batch Comment-230',
- 'zCldSharedComment-Is a Caption-231',
- 'zAsset-Cloud Has Comments by Me-232',
- 'zCldSharedComment-Is My Comment-233',
- 'zCldSharedComment-Is Deletable-234',
- 'zAsset-Cloud Has Comments Conversation-235',
- 'zAsset-Cloud Has Unseen Comments-236',
- 'zCldSharedComment-Liked-237',
- 'zAddAssetAttr-Share Type-238',
- 'zShare-UUID-CMM-4TableStart-239',
- 'SPLzShare-UUID-SPL-4TableStart-240',
- 'zShare-zENT-CMM-241',
- 'SPLzShare-zENT-SPL-242',
- 'zShare-Status-CMM-243',
- 'SPLzShare-Status-SPL-244',
- 'zShare-Scope Type-CMM-245',
- 'SPLzShare-Scope Type-SPL-246',
- 'zShare-Local Publish State-CMM-247',
- 'SPLzShare-Local Publish State-SPL-248',
- 'zShare-Public Permission-CMM-249',
- 'SPLzShare-Public Permission-SPL-250',
- 'zShare-Originating Scope ID-CMM-251',
- 'SPLzShare-Originating Scope ID-SPL-252',
- 'zShare-Scope ID-CMM-253',
- 'SPLzShare-Scope ID-SPL-254',
- 'zShare-Title-CMM-255',
- 'SPLzShare-Title-SPL-256',
- 'zShare-Share URL-CMM-257',
- 'SPLzShare-Share URL-SPL-258',
- 'zShare-Creation Date-CMM-259',
- 'SPLzShare-Creation Date-SPL-260',
- 'zShare-Start Date-CMM-261',
- 'SPLzShare-Start Date-SPL-262',
- 'zShare-End Date-CMM-263',
- 'SPLzShare-End Date-SPL-264',
- 'zShare-Expiry Date-CMM-265',
- 'SPLzShare-Expiry Date-SPL-266',
- 'zShare-Asset Count-CMM-267',
- 'SPLzShare-Asset Count-SPL-268',
- 'zShare-Photos Count-CMM-269',
- 'SPLzShare-Photos Count-CMM-SPL-270',
- 'zShare-Uploaded Photos Count-CMM-271',
- 'SPLzShare-Uploaded Photos Count-SPL-272',
- 'zShare-Videos Count-CMM-273',
- 'SPLzShare-Videos Count-SPL-274',
- 'zShare-Uploaded Videos Count-CMM-275',
- 'SPLzShare-Uploaded Videos Count-SPL-276',
- 'zShare-Force Sync Attempted-CMM-277',
- 'SPLzShare-Force Sync Attempted-SPL-278',
- 'zShare-Should Notify On Upload Completion-CMM-279',
- 'SPLzShare-Should Notify On Upload Completion-SPL-280',
- 'zShare-Trashed State-CMM-281',
- 'SPLzShare-Trashed State-SPL-282',
- 'zShare-Cloud Delete State-CMM-283',
- 'SPLzShare-Cloud Delete State-SPL-284',
- 'zShare-Should Ignor Budgets-CMM-285',
- 'SPLzShare-Should Ignor Budgets-SPL-286',
- 'zSharePartic-UUID-4TableStart-287',
- 'SPLzSharePartic-UUID-4TableStart-288',
- 'zSharePartic-Acceptance Status-289',
- 'SPLzSharePartic-Acceptance Status-290',
- 'zSharePartic-Is Current User-291',
- 'SPLzSharePartic-Is Current User-292',
- 'zSharePartic-Role-293',
- 'SPLzSharePartic-Role-294',
- 'zSharePartic-Premission-295',
- 'SPLzSharePartic-Premission-296',
- 'zSharePartic-User ID-297',
- 'SPLzSharePartic-User ID-298',
- 'SPLzSharePartic-zPK-4TableStart-299',
- 'zSharePartic-zPK-4TableStart-300',
- 'zSharePartic-Email Address-301',
- 'SPLzSharePartic-Email Address-302',
- 'zSharePartic-Phone Number-303',
- 'SPLzSharePartic-Phone Number-304',
- 'ParentzGenAlbum-UUID-4TableStart-305',
- 'zGenAlbum-UUID-4TableStart-306',
- 'ParentzGenAlbum-Cloud GUID-4TableStart-307',
- 'zGenAlbum-Cloud GUID-4TableStart-308',
- 'zCldShareAlbumInvRec-Album GUID-4TableStart-309',
- 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-310',
- 'zGenAlbum-Project Render UUID-4TableStart-311',
- 'zAlbumList-Needs Reordering Number-312',
- 'zGenAlbum-zENT- Entity-313',
- 'ParentzGenAlbum-Kind-314',
- 'zGenAlbum-Album Kind-315',
- 'ParentzGenAlbum-Cloud-Local-State-316',
- 'zGenAlbum-Cloud_Local_State-317',
- 'ParentzGenAlbum- Title-318',
- 'zGenAlbum- Title-User&System Applied-319',
- 'zGenAlbum-Import Session ID-SWY-320',
- 'zGenAlbum-Creator Bundle ID-321',
- 'ParentzGenAlbum-Creation Date-322',
- 'zGenAlbum-Creation Date-323',
- 'zGenAlbum-Cloud Creation Date-324',
- 'zGenAlbum-Start Date-325',
- 'zGenAlbum-End Date-326',
- 'zGenAlbum-Cloud Subscription Date-327',
- 'ParentzGenAlbum-Pending Items Count-328',
- 'zGenAlbum-Pending Items Count-329',
- 'ParentzGenAlbum-Pending Items Type-330',
- 'zGenAlbum-Pending Items Type-331',
- 'zGenAlbum- Cached Photos Count-332',
- 'zGenAlbum- Cached Videos Count-333',
- 'zGenAlbum- Cached Count-334',
- 'ParentzGenAlbum-Sync Event Order Key-335',
- 'zGenAlbum-Sync Event Order Key-336',
- 'zGenAlbum-Has Unseen Content-337',
- 'zGenAlbum-Unseen Asset Count-338',
- 'zGenAlbum-is Owned-339',
- 'zGenAlbum-Cloud Relationship State-340',
- 'zGenAlbum-Cloud Relationship State Local-341',
- 'zGenAlbum-Cloud Owner Mail Key-342',
- 'zGenAlbum-Cloud Owner Frist Name-343',
- 'zGenAlbum-Cloud Owner Last Name-344',
- 'zGenAlbum-Cloud Owner Full Name-345',
- 'zGenAlbum-Cloud Person ID-346',
- 'zAsset-Cloud Owner Hashed Person ID-347',
- 'zGenAlbum-Cloud Owner Hashed Person ID-348',
- 'zGenAlbum-Local Cloud Multi-Contributors Enabled-349',
- 'zGenAlbum-Cloud Multi-Contributors Enabled-350',
- 'zGenAlbum-Cloud Album Sub Type-351',
- 'zGenAlbum-Cloud Contribution Date-352',
- 'zGenAlbum-Cloud Last Interesting Change Date-353',
- 'zGenAlbum-Cloud Notification Enabled-354',
- 'ParentzGenAlbum-Pinned-355',
- 'zGenAlbum-Pinned-356',
- 'ParentzGenAlbum-Custom Sort Key-357',
- 'zGenAlbum-Custom Sort Key-358',
- 'ParentzGenAlbum-Custom Sort Ascending-359',
- 'zGenAlbum-Custom Sort Ascending-360',
- 'ParentzGenAlbum-Is Prototype-361',
- 'zGenAlbum-Is Prototype-362',
- 'ParentzGenAlbum-Project Document Type-363',
- 'zGenAlbum-Project Document Type-364',
- 'ParentzGenAlbum-Custom Query Type-365',
- 'zGenAlbum-Custom Query Type-366',
- 'ParentzGenAlbum-Trashed State-367',
- 'ParentzGenAlbum-Trash Date-368',
- 'zGenAlbum-Trashed State-369',
- 'zGenAlbum-Trash Date-370',
- 'ParentzGenAlbum-Cloud Delete State-371',
- 'zGenAlbum-Cloud Delete State-372',
- 'zGenAlbum-Cloud Owner Whitelisted-373',
- 'zGenAlbum-Cloud Local Public URL Enabled-374',
- 'zGenAlbum-Cloud Public URL Enabled-375',
- 'zGenAlbum-Public URL-376',
- 'zGenAlbum-Key Asset Face Thumb Index-377',
- 'zGenAlbum-Project Text Extension ID-378',
- 'zGenAlbum-User Query Data-379',
- 'zGenAlbum-Custom Query Parameters-380',
- 'zGenAlbum-Project Data-381',
- 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-382',
- 'zCldShareAlbumInvRec-Invitation State Local-383',
- 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-384',
- 'zCldShareAlbumInvRec-Subscription Date-385',
- 'zCldShareAlbumInvRec-Invitee First Name-386',
- 'zCldShareAlbumInvRec-Invitee Last Name-387',
- 'zCldShareAlbumInvRec-Invitee Full Name-388',
- 'zCldShareAlbumInvRec-Invitee Hashed Person ID-389',
- 'zCldShareAlbumInvRec-Invitee Email Key-390',
- 'zGenAlbum-Key Asset Face ID-391',
- 'zFaceCrop-Face Area Points-392',
- 'zAsset-Face Adjustment Version-393',
- 'zDetFace-Asset Visible-394',
- 'zPerson-Face Count-395',
- 'zDetFace-Face Crop-396',
- 'zDetFace-Face Algorithm Version-397',
- 'zDetFace-Adjustment Version-398',
- 'zDetFace-UUID-4TableStart-399',
- 'zPerson-Person UUID-4TableStart-400',
- 'zDetFace-Confirmed Face Crop Generation State-401',
- 'zDetFace-Manual-402',
- 'zDetFace-VIP Model Type-403',
- 'zDetFace-Name Source-404',
- 'zDetFace-Cloud Name Source-405',
- 'zPerson-Person URI-406',
- 'zPerson-Display Name-407',
- 'zPerson-Full Name-408',
- 'zPerson-Cloud Verified Type-409',
- 'zFaceCrop-State-410',
- 'zFaceCrop-Type-411',
- 'zFaceCrop-UUID-4TableStart-412',
- 'zPerson-Type-413',
- 'zPerson-Verified Type-414',
- 'zPerson-Gender Type-415',
- 'zDetFace-Gender Type-416',
- 'zDetFace-Center X-417',
- 'zDetFace-Center Y-418',
- 'zPerson-Age Type Estimate-419',
- 'zDetFace-Age Type Estimate-420',
- 'zDetFace-Hair Color Type-421',
- 'zDetFace-Facial Hair Type-422',
- 'zDetFace-Has Smile-423',
- 'zDetFace-Smile Type-424',
- 'zDetFace-Lip Makeup Type-425',
- 'zDetFace-Eyes State-426',
- 'zDetFace-Is Left Eye Closed-427',
- 'zDetFace-Is Right Eye Closed-428',
- 'zDetFace-Eye Glasses Type-429',
- 'zDetFace-Eye Makeup Type-430',
- 'zDetFace-Cluster Squence Number Key-431',
- 'zDetFace-Grouping ID-432',
- 'zDetFace-Master ID-433',
- 'zDetFace-Quality-434',
- 'zDetFace-Quality Measure-435',
- 'zDetFace-Source Height-436',
- 'zDetFace-Source Width-437',
- 'zDetFace-Hidden-Asset Hidden-438',
- 'zDetFace-In Trash-Recently Deleted-439',
- 'zDetFace-Cloud Local State-440',
- 'zDetFace-Training Type-441',
- 'zDetFace.Pose Yaw-442',
- 'zDetFace-Roll-443',
- 'zDetFace-Size-444',
- 'zDetFace-Cluster Squence Number-445',
- 'zDetFace-Blur Score-446',
- 'zDetFacePrint-Face Print Version-447',
- 'zMedAnlyAstAttr-Face Count-448',
- 'zDetFaceGroup-UUID-4TableStart-449',
- 'zDetFaceGroup-Person Builder State-450',
- 'zDetFaceGroup-UnNamed Face Count-451',
- 'zPerson-In Person Naming Model-452',
- 'zPerson-Key Face Pick Source Key-453',
- 'zPerson-Manual Order Key-454',
- 'zPerson-Question Type-455',
- 'zPerson-Suggested For Client Type-456',
- 'zPerson-Merge Target Person-457',
- 'zPerson-Cloud Local State-458',
- 'zFaceCrop-Cloud Local State-459',
- 'zFaceCrop-Cloud Type-460',
- 'zPerson-Cloud Delete State-461',
- 'zFaceCrop-Cloud Delete State-462',
- 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-463',
- 'zMemory-zPK-464',
- 'z3MemoryBCAs-3CuratedAssets = zAsset-zPK-465',
- 'z3MemoryBCAs-40MemoriesBeingCuratedAssets = zMemory-zPK-466',
- 'z3MemoryBECAs-3ExtCuratedAssets = zAsset-zPK-467',
- 'z3MemoryBECAs-40MemoriesBeingExtCuratedAssets = zMemory-zPK-468',
- 'z3MemoryBMCAs-3MovieCuratedAssets = zAsset-zPK-469',
- 'z3MemoryBMCAs-40MemoriesBeingMovieCuratedAssets = zMemory-zPK-470',
- 'z3MemoryBRAs-3RepresentativeAssets = zAsset-zPK-471',
- 'z3MemoryBRAs-40RepresentativeAssets = zMemory-zPK-472',
- 'zMemory-Key Asset = zAsset-zPK-473',
- 'zMemory-UUID-474',
- 'zMemory-SubTitle-475',
- 'zMemory-Title-476',
- 'zMemory-Category-477',
- 'zMemory-SubCategory-478',
- 'zMemory-Creation Date-479',
- 'zMemory-User Created-480',
- 'zMemory-Favorite Memory-481',
- 'zMemory-Score-482',
- 'zMemory-View Count-483',
- 'zMemory-Play Count-484',
- 'zMemory-Rejected-485',
- 'zMemory-Share Count-486',
- 'zMemory-Last Movie Play Date-487',
- 'zMemory-Last Viewed Date-488',
- 'zMemory-Pending-489',
- 'zMemory-Pending Play Count Memory-490',
- 'zMemory-Pending Share Count Memory-491',
- 'zMemory-Pending View Count Memory-492',
- 'zMemory-Featured State-493',
- 'zMemory-Photos Graph Version-494',
- 'zMemory-AssetListPredicte-495',
- 'zMemory-Notification State-496',
- 'zMemory-Cloud Local State-497',
- 'zMemory-Cloud Delete State-498',
- 'YearzMomentList-UUID-499',
- 'YearzMomentList-zPK-500',
- 'zMoment-Year Moment List-501',
- 'YearzMomentList-Sort Index-502',
- 'YearzMomentList-Granularity Level-503',
- 'YearzMomentList-Start Date-504',
- 'YearzMomentList-Representative Date-505',
- 'YearzMomentList-End Date-506',
- 'YearzMomentList-Trashed State-507',
- 'MegaYMzMomentList-UUID-508',
- 'MegaYMzMomentList-zPK-509',
- 'zMoment-Mega Moment List-510',
- 'MegaYMzMomentList-Sort Index-511',
- 'MegaYMzMomentList-Granularity Level-512',
- 'MegaYMzMomentList-Start Date-513',
- 'MegaYMzMomentList-Representative Date-514',
- 'MegaYMzMomentList-End Date-515',
- 'MegaYMzMomentList-Trashed State-516',
- 'zMoment-UUID-517',
- 'zMoment-zPK-518',
- 'zMoment-Aggregation Score-519',
- 'zMoment-Start Date-520',
- 'zMoment-Representative Date-521',
- 'zMoment-Timezone Offset-522',
- 'zMoment-Modification Date-523',
- 'zMoment-End Date-524',
- 'zMoment-SubTitle-525',
- 'zMoment-Title-526',
- 'zMoment-Processed Location-527',
- 'zMoment-Approx Latitude-528',
- 'zMoment-Approx Longitude-529',
- 'zMoment-GPS Horizontal Accuracy-530',
- 'zMoment-Cache Count-531',
- 'zMoment-Cached Photos Count-532',
- 'zMoment-Cached Videos Count-533',
- 'zMoment-Trashed State-534',
- 'zMoment-Highlight Key-535',
- 'zAsset-Highlight Visibility Score-536',
- 'YearParzPhotosHigh-UUID-537',
- 'YearParzPhotosHigh-zPK-538',
- 'YearParzPhotosHigh-zENT-539',
- 'YearParzPhotosHigh-zOPT-540',
- 'YearParzPhotosHigh-Promotion Score-541',
- 'YearParzPhotosHigh-Title-542',
- 'YearParzPhotosHigh-Verbose Smart Description-543',
- 'YearParzPhotosHigh-Start Date-544',
- 'YearParzPhotosHigh-End Date-545',
- 'YearParzPhotosHigh-Year Key Asset-546',
- 'YearParzPhotosHigh-Is Curated-547',
- 'YearParzPhotosHigh-Kind-548',
- 'YearParzPhotosHigh-Category-549',
- 'YearParzPhotosHigh-Visibility State-550',
- 'YearParzPhotosHigh-Enrichment State-551',
- 'YearParzPhotosHigh-Enrichment Version-552',
- 'YearParzPhotosHigh-Highlight Version-553',
- 'YMParzPhotosHigh-UUID-554',
- 'YMParzPhotosHigh-zPK-555',
- 'YMParzPhotosHigh-Parent PH Key-556',
- 'YMParzPhotosHigh-zENT-557',
- 'YMParzPhotosHigh-zOPT-558',
- 'YMParzPhotosHigh-Promotion Score-559',
- 'YMParzPhotosHigh-Title-560',
- 'YMParzPhotosHigh-Subtitle-561',
- 'YMParzPhotosHigh-Verbose Smart Description-562',
- 'YMParzPhotosHigh-Start Date-563',
- 'YMParzPhotosHigh-End Date-564',
- 'YMParzPhotosHigh-Month First Asset-565',
- 'YMParzPhotosHigh-Month Key Asset-566',
- 'YMParzPhotosHigh-Is Curated-567',
- 'YMParzPhotosHigh-Kind-568',
- 'YMParzPhotosHigh-Category-569',
- 'YMParzPhotosHigh-Visibility State-570',
- 'YMParzPhotosHigh-Enrichment State-571',
- 'YMParzPhotosHigh-Enrichment Version-572',
- 'YMParzPhotosHigh-Highlight Version-573',
- 'DGParzPhotosHigh-UUID-574',
- 'DGParzPhotosHigh-zPK-575',
- 'DGParzPhotosHigh-Parent PH Key-576',
- 'DGParzPhotosHigh-zENT-577',
- 'DGParzPhotosHigh-zOPT-578',
- 'DGParzPhotosHigh-Promotion Score-579',
- 'DGParzPhotosHigh-Title-580',
- 'DGParzPhotosHigh-Subtitle-581',
- 'DGParzPhotosHigh-Verbose Smart Description-582',
- 'DGParzPhotosHigh-Start Date-583',
- 'DGParzPhotosHigh-End Date-584',
- 'DGParzPhotosHigh-Month First Asset-585',
- 'DGParzPhotosHigh-Month Key Asset-586',
- 'DGParzPhotosHigh-Is Curated-587',
- 'DGParzPhotosHigh-Kind-588',
- 'DGParzPhotosHigh-Category-589',
- 'DGParzPhotosHigh-Visibility State-590',
- 'DGParzPhotosHigh-Enrichment State-591',
- 'DGParzPhotosHigh-Enrichment Version-592',
- 'DGParzPhotosHigh-Highlight Version-593',
- 'zAsset-Highlight Being Assets Key-594',
- 'HBAzPhotosHigh-UUID-595',
- 'HBAzPhotosHigh-zPK-596',
- 'HBAzPhotosHigh-Parent PH Key-597',
- 'HBAzPhotosHigh-zENT-598',
- 'HBAzPhotosHigh-zOPT-599',
- 'HBAzPhotosHigh-Promotion Score-600',
- 'HBAzPhotosHigh-Title-601',
- 'HBAzPhotosHigh-Subtitle-602',
- 'HBAzPhotosHigh-Verbose Smart Description-603',
- 'HBAzPhotosHigh-Start Date-604',
- 'HBAzPhotosHigh Start-Timezone Offset-605',
- 'HBAzPhotosHigh-End Timezone Offset-606',
- 'HBAzPhotosHigh-End Date-607',
- 'HBAzPhotosHigh-Asset Count-608',
- 'HBAzPhotosHigh-Summary Count-609',
- 'HBAzPhotosHigh-Extended Count-610',
- 'HBAzPhotosHigh-Day Group Assets Count-611',
- 'HBAzPhotosHigh-Day Group Ext Assets Count-612',
- 'HBAzPhotosHigh-Day Group Summary Assets Count-613',
- 'HBAzPhotosHigh-Key Asset-614',
- 'HBAzPhotosHigh-Is Curated-615',
- 'HBAzPhotosHigh-Type-616',
- 'HBAzPhotosHigh-Kind-617',
- 'HBAzPhotosHigh-Category-618',
- 'HBAzPhotosHigh-Visibility State-619',
- 'HBAzPhotosHigh-Mood-620',
- 'HBAzPhotosHigh-Enrichment State-621',
- 'HBAzPhotosHigh-Enrichment Version-622',
- 'HBAzPhotosHigh-Highlight Version-623',
- 'zAsset-Highlight Being Extended Assets Key-624',
- 'HBEAzPhotosHigh-UUID-625',
- 'HBEAzPhotosHigh-zPK-626',
- 'HBEAzPhotosHigh-zENT-627',
- 'HBEAzPhotosHigh-zOPT-628',
- 'HBEAzPhotosHigh-Promotion Score-629',
- 'HBEAzPhotosHigh-Title-630',
- 'HBEAzPhotosHigh-Subtitle-631',
- 'HBEAzPhotosHigh-Verbose Smart Description-632',
- 'HBEAzPhotosHigh-Start Date-633',
- 'HBEAzPhotosHigh-Start Timezone Offset-634',
- 'HBEAzPhotosHigh-End Timezone Offset-635',
- 'HBEAzPhotosHigh-End Date-636',
- 'HBEAzPhotosHigh-Asset Count-637',
- 'HBEAzPhotosHigh-Summary Count-638',
- 'HBEAzPhotosHigh-Extended Count-639',
- 'HBEAzPhotosHigh-Day Group Assets Count-640',
- 'HBEAzPhotosHigh-Day Group Ext Assets Count-641',
- 'HBEAzPhotosHigh-Day Group Summary Assets Count-642',
- 'HBEAzPhotosHigh-Parent PH Key-643',
- 'HBEAzPhotosHigh-Year Key Asset-644',
- 'HBEAzPhotosHigh-Month First Asset-645',
- 'HBEAzPhotosHigh-Month Key Asset-646',
- 'HBEAzPhotosHigh-Key Asset-647',
- 'HBEAzPhotosHigh-Parent Day Group PH Key-648',
- 'HBEAzPhotosHigh-Day Group Key Asset-649',
- 'HBEAzPhotosHigh-is Curated-650',
- 'HBEAzPhotosHigh-Type-651',
- 'HBEAzPhotosHigh-Kind-652',
- 'HBEAzPhotosHigh-Category-653',
- 'HBEAzPhotosHigh-Visibility State-654',
- 'HBEAzPhotosHigh-Mood-655',
- 'HBEAzPhotosHigh-Enrichment State-656',
- 'HBEAzPhotosHigh-Enrichment Version-657',
- 'HBEAzPhotosHigh-Highlight Version-658',
- 'zAsset-Highlight Being Summary Assets Key-659',
- 'HBSAzPhotosHigh-UUID-660',
- 'HBSAzPhotosHigh-zPK-661',
- 'HBSAzPhotosHigh-zENT-662',
- 'HBSAzPhotosHigh-zOPT-663',
- 'HBSAzPhotosHigh-Promotion Score-664',
- 'HBSAzPhotosHigh-Title-665',
- 'HBSAzPhotosHigh-Subtitle-666',
- 'HBSAzPhotosHigh-Verbose Smart Description-667',
- 'HBSAzPhotosHigh-Start Date-668',
- 'HBSAzPhotosHigh-Start Timezone Offset-669',
- 'HBSAzPhotosHigh-End Timezone Offset-670',
- 'HBSAzPhotosHigh-End Date-671',
- 'HBSAzPhotosHigh-Asset Count-672',
- 'HBSAzPhotosHigh-Summary Count-673',
- 'HBSAzPhotosHigh-Extended Count-674',
- 'HBSAzPhotosHigh-Day Group Assets Count-675',
- 'HBSAzPhotosHigh-Day Group Ext Assets Count-676',
- 'HBSAzPhotosHigh-Day Group Summary Assets Count-677',
- 'HBSAzPhotosHigh-Parent PH Key-678',
- 'HBSAzPhotosHigh-Year Key Asset-679',
- 'HBSAzPhotosHigh-Month First Asset-680',
- 'HBSAzPhotosHigh-Month Key Asset-681',
- 'HBSAzPhotosHigh-Key Asset-682',
- 'HBSAzPhotosHigh-Parent Day Group PH Key-683',
- 'HBSAzPhotosHigh-Day Group Key Asset-684',
- 'HBSAzPhotosHigh-is Curated-685',
- 'HBSAzPhotosHigh-Type-686',
- 'HBSAzPhotosHigh-Kind-687',
- 'HBSAzPhotosHigh-Category-688',
- 'HBSAzPhotosHigh-Visibility State-689',
- 'HBSAzPhotosHigh-Mood-690',
- 'HBSAzPhotosHigh-Enrichment State-691',
- 'HBSAzPhotosHigh-Enrichment Version-692',
- 'HBSAzPhotosHigh-Highlight Version-693',
- 'zAsset-Highlight Being Key Asset Key-694',
- 'HBKAzPhotosHigh-UUID-695',
- 'HBKAzPhotosHigh-zPK-696',
- 'HBKAzPhotosHigh-zENT-697',
- 'HBKAzPhotosHigh-zOPT-698',
- 'HBKAzPhotosHigh-Promotion Score-699',
- 'HBKAzPhotosHigh-Title-700',
- 'HBKAzPhotosHigh-Subtitle-701',
- 'HBKAzPhotosHigh-Verbose Smart Description-702',
- 'HBKAzPhotosHigh-Start Date-703',
- 'HBKAzPhotosHigh-Start Timezone Offset-704',
- 'HBKAzPhotosHigh-End Timezone Offset-705',
- 'HBKAzPhotosHigh-End Date-706',
- 'HBKAzPhotosHigh-Asset Count-707',
- 'HBKAzPhotosHigh-Summary Count-708',
- 'HBKAzPhotosHigh-Extended Count-709',
- 'HBKAzPhotosHigh-Day Group Assets Count-710',
- 'HBKAzPhotosHigh-Day Group Ext Assets Count-711',
- 'HBKAzPhotosHigh-Day Group Summary Assets Count-712',
- 'HBKAzPhotosHigh-Parent PH Key-713',
- 'HBKAzPhotosHigh-Year Key Asset-714',
- 'HBKAzPhotosHigh-Month First Asset-715',
- 'HBKAzPhotosHigh-Month Key Asset-716',
- 'HBKAzPhotosHigh-Key Asset-717',
- 'HBKAzPhotosHigh-Parent Day Group PH Key-718',
- 'HBKAzPhotosHigh-Day Group Key Asset-719',
- 'HBKAzPhotosHigh-is Curated-720',
- 'HBKAzPhotosHigh-Type-721',
- 'HBKAzPhotosHigh-Kind-722',
- 'HBKAzPhotosHigh-Category-723',
- 'HBKAzPhotosHigh-Visibility State-724',
- 'HBKAzPhotosHigh-Mood-725',
- 'HBKAzPhotosHigh-Enrichment State-726',
- 'HBKAzPhotosHigh-Enrichment Version-727',
- 'HBKAzPhotosHigh-Highlight Version-728',
- 'zAsset-Day Group Highlight Being Assets Key-729',
- 'DGHBAzPhotosHigh-UUID-730',
- 'DGHBAzPhotosHigh-zPK-731',
- 'DGHBAzPhotosHigh-zENT-732',
- 'DGHBAzPhotosHigh-zOPT-733',
- 'DGHBAzPhotosHigh-Promotion Score-734',
- 'DGHBAzPhotosHigh-Title-735',
- 'DGHBAzPhotosHigh-Subtitle-736',
- 'DGHBAzPhotosHigh-Verbose Smart Description-737',
- 'DGHBAzPhotosHigh-Start Date-738',
- 'DGHBAzPhotosHigh-Start Timezone Offset-739',
- 'DGHBAzPhotosHigh-End Timezone Offset-740',
- 'DGHBAzPhotosHigh-End Date-741',
- 'DGHBAzPhotosHigh-Asset Count-742',
- 'DGHBAzPhotosHigh-Summary Count-743',
- 'DGHBAzPhotosHigh-Extended Count-744',
- 'DGHBAzPhotosHigh-Day Group Assets Count-745',
- 'DGHBAzPhotosHigh-Day Group Ext Assets Count-746',
- 'DGHBAzPhotosHigh-Day Group Summary Assets Count-747',
- 'DGHBAzPhotosHigh-Parent PH Key-748',
- 'DGHBAzPhotosHigh-Year Key Asset-749',
- 'DGHBAzPhotosHigh-Month First Asset-750',
- 'DGHBAzPhotosHigh-Month Key Asset-751',
- 'DGHBAzPhotosHigh-Key Asset-752',
- 'DGHBAzPhotosHigh-Parent Day Group PH Key-753',
- 'DGHBAzPhotosHigh-Day Group Key Asset-754',
- 'DGHBAzPhotosHigh-is Curated-755',
- 'DGHBAzPhotosHigh-Type-756',
- 'DGHBAzPhotosHigh-Kind-757',
- 'DGHBAzPhotosHigh-Category-758',
- 'DGHBAzPhotosHigh-Visibility State-759',
- 'DGHBAzPhotosHigh-Mood-760',
- 'DGHBAzPhotosHigh-Enrichment State-761',
- 'DGHBAzPhotosHigh-Enrichment Version-762',
- 'DGHBAzPhotosHigh-Highlight Version-763',
- 'zAsset-Day Group Highlight Being Extended Assets Key-764',
- 'DGHBEAzPhotosHigh-UUID-765',
- 'DGHBEAzPhotosHigh-zPK-766',
- 'DGHBEAzPhotosHigh-zENT-767',
- 'DGHBEAzPhotosHigh-zOPT-768',
- 'DGHBEAzPhotosHigh-Promotion Score-769',
- 'DGHBEAzPhotosHigh-Title-770',
- 'DGHBEAzPhotosHigh-Subtitle-771',
- 'DGHBEAzPhotosHigh-Verbose Smart Description-772',
- 'DGHBEAzPhotosHigh-Start Date-773',
- 'DGHBEAzPhotosHigh-Start Timezone Offset-774',
- 'DGHBEAzPhotosHigh-End Timezone Offset-775',
- 'DGHBEAzPhotosHigh-End Date-776',
- 'DGHBEAzPhotosHigh-Asset Count-777',
- 'DGHBEAzPhotosHigh-Summary Count-778',
- 'DGHBEAzPhotosHigh-Extended Count-779',
- 'DGHBEAzPhotosHigh-Day Group Assets Count-780',
- 'DGHBEAzPhotosHigh-Day Group Ext Assets Count-781',
- 'DGHBEAzPhotosHigh-Day Group Summary Assets Count-782',
- 'DGHBEAzPhotosHigh-Parent PH Key-783',
- 'DGHBEAzPhotosHigh-Year Key Asset-784',
- 'DGHBEAzPhotosHigh-Month First Asset-785',
- 'DGHBEAzPhotosHigh-Month Key Asset-786',
- 'DGHBEAzPhotosHigh-Key Asset-787',
- 'DGHBEAzPhotosHigh-Parent Day Group PH Key-788',
- 'DGHBEAzPhotosHigh-Day Group Key Asset-789',
- 'DGHBEAzPhotosHigh-is Curated-790',
- 'DGHBEAzPhotosHigh-Type-791',
- 'DGHBEAzPhotosHigh-Kind-792',
- 'DGHBEAzPhotosHigh-Category-793',
- 'DGHBEAzPhotosHigh-Visibility State-794',
- 'DGHBEAzPhotosHigh-Mood-795',
- 'DGHBEAzPhotosHigh-Enrichment State-796',
- 'DGHBEAzPhotosHigh-Enrichment Version-797',
- 'DGHBEAzPhotosHigh-Highlight Version-798',
- 'zAsset-Day Group Highlight Being Key Asset-799',
- 'DGHBKAzPhotosHigh-UUID-800',
- 'DGHBKAzPhotosHigh-zPK-801',
- 'DGHBKAzPhotosHigh-zENT-802',
- 'DGHBKAzPhotosHigh-zOPT-803',
- 'DGHBKAzPhotosHigh-Promotion Score-804',
- 'DGHBKAzPhotosHigh-Title-805',
- 'DGHBKAzPhotosHigh-Subtitle-806',
- 'DGHBKAzPhotosHigh-Verbose Smart Description-807',
- 'DGHBKAzPhotosHigh-Start Date-808',
- 'DGHBKAzPhotosHigh-Start Timezone Offset-809',
- 'DGHBKAzPhotosHigh-End Timezone Offset-810',
- 'DGHBKAzPhotosHigh-End Date-811',
- 'DGHBKAzPhotosHigh-Asset Count-812',
- 'DGHBKAzPhotosHigh-Summary Count-813',
- 'DGHBKAzPhotosHigh-Extended Count-814',
- 'DGHBKAzPhotosHigh-Day Group Assets Count-815',
- 'DGHBKAzPhotosHigh-Day Group Ext Assets Count-816',
- 'DGHBKAzPhotosHigh-Day Group Summary Assets Count-817',
- 'DGHBKAzPhotosHigh-Parent PH Key-818',
- 'DGHBKAzPhotosHigh-Year Key Asset-819',
- 'DGHBKAzPhotosHigh-Month First Asset-820',
- 'DGHBKAzPhotosHigh-Month Key Asset-821',
- 'DGHBKAzPhotosHigh-Key Asset-822',
- 'DGHBKAzPhotosHigh-Parent Day Group PH Key-823',
- 'DGHBKAzPhotosHigh-Day Group Key Asset-824',
- 'DGHBKAzPhotosHigh-is Curated-825',
- 'DGHBKAzPhotosHigh-Type-826',
- 'DGHBKAzPhotosHigh-Kind-827',
- 'DGHBKAzPhotosHigh-Category-828',
- 'DGHBKAzPhotosHigh-Visibility State-829',
- 'DGHBKAzPhotosHigh-Mood-830',
- 'DGHBKAzPhotosHigh-Enrichment State-831',
- 'DGHBKAzPhotosHigh-Enrichment Version-832',
- 'DGHBKAzPhotosHigh-Highlight Version-833',
- 'zAsset-Day Group Highlight Being Summary Assets Key-834',
- 'DGHBSAzPhotosHigh-UUID-835',
- 'DGHBSAzPhotosHigh-zPK-836',
- 'DGHBSAzPhotosHigh-zENT-837',
- 'DGHBSAzPhotosHigh-zOPT-838',
- 'DGHBSAzPhotosHigh-Promotion Score-839',
- 'DGHBSAzPhotosHigh-Title-840',
- 'DGHBSAzPhotosHigh-Subtitle-841',
- 'DGHBSAzPhotosHigh-Verbose Smart Description-842',
- 'DGHBSAzPhotosHigh-Start Date-843',
- 'DGHBSAzPhotosHigh-Start Timezone Offset-844',
- 'DGHBSAzPhotosHigh-End Timezone Offset-845',
- 'DGHBSAzPhotosHigh-End Date-846',
- 'DGHBSAzPhotosHigh-Asset Count-847',
- 'DGHBSAzPhotosHigh-Summary Count-848',
- 'DGHBSAzPhotosHigh-Extended Count-849',
- 'DGHBSAzPhotosHigh-Day Group Assets Count-850',
- 'DGHBSAzPhotosHigh-Day Group Ext Assets Count-851',
- 'DGHBSAzPhotosHigh-Day Group Summary Assets Count-852',
- 'DGHBSAzPhotosHigh-Parent PH Key-853',
- 'DGHBSAzPhotosHigh-Year Key Asset-854',
- 'DGHBSAzPhotosHigh-Month First Asset-855',
- 'DGHBSAzPhotosHigh-Month Key Asset-856',
- 'DGHBSAzPhotosHigh-Key Asset-857',
- 'DGHBSAzPhotosHigh-Parent Day Group PH Key-858',
- 'DGHBSAzPhotosHigh-Day Group Key Asset-859',
- 'DGHBSAzPhotosHigh-is Curated-860',
- 'DGHBSAzPhotosHigh-Type-861',
- 'DGHBSAzPhotosHigh-Kind-862',
- 'DGHBSAzPhotosHigh-Category-863',
- 'DGHBSAzPhotosHigh-Visibility State-864',
- 'DGHBSAzPhotosHigh-Mood-865',
- 'DGHBSAzPhotosHigh-Enrichment State-866',
- 'DGHBSAzPhotosHigh-Enrichment Version-867',
- 'DGHBSAzPhotosHigh-Highlight Version-868',
- 'zAsset-Month Highlight Being First Asset Key-869',
- 'MHBFAzPhotosHigh-UUID-870',
- 'MHBFAzPhotosHigh-zPK-871',
- 'MHBFAzPhotosHigh-zENT-872',
- 'MHBFAzPhotosHigh-zOPT-873',
- 'MHBFAzPhotosHigh-Promotion Score-874',
- 'MHBFAzPhotosHigh-Title-875',
- 'MHBFAzPhotosHigh-Subtitle-876',
- 'MHBFAzPhotosHigh-Verbose Smart Description-877',
- 'MHBFAzPhotosHigh-Start Date-878',
- 'MHBFAzPhotosHigh-Start Timezone Offset-879',
- 'MHBFAzPhotosHigh-End Timezone Offset-880',
- 'MHBFAzPhotosHigh-End Date-881',
- 'MHBFAzPhotosHigh-Asset Count-882',
- 'MHBFAzPhotosHigh-Summary Count-883',
- 'MHBFAzPhotosHigh-Extended Count-884',
- 'MHBFAzPhotosHigh-Day Group Assets Count-885',
- 'MHBFAzPhotosHigh-Day Group Ext Assets Count-886',
- 'MHBFAzPhotosHigh-Day Group Summary Assets Count-887',
- 'MHBFAzPhotosHigh-Parent PH Key-888',
- 'MHBFAzPhotosHigh-Year Key Asset-889',
- 'MHBFAzPhotosHigh-Month First Asset-890',
- 'MHBFAzPhotosHigh-Month Key Asset-891',
- 'MHBFAzPhotosHigh-Key Asset-892',
- 'MHBFAzPhotosHigh-Parent Day Group PH Key-893',
- 'MHBFAzPhotosHigh-Day Group Key Asset-894',
- 'MHBFAzPhotosHigh-is Curated-895',
- 'MHBFAzPhotosHigh-Type-896',
- 'MHBFAzPhotosHigh-Kind-897',
- 'MHBFAzPhotosHigh-Category-898',
- 'MHBFAzPhotosHigh-Visibility State-899',
- 'MHBFAzPhotosHigh-Mood-900',
- 'MHBFAzPhotosHigh-Enrichment State-901',
- 'MHBFAzPhotosHigh-Enrichment Version-902',
- 'MHBFAzPhotosHigh-Highlight Version-903',
- 'zAsset-Month Highlight Being Key Asset-904',
- 'MHBKAzPhotosHigh-UUID-905',
- 'MHBKAzPhotosHigh-zPK-906',
- 'MHBKAzPhotosHigh-zENT-907',
- 'MHBKAzPhotosHigh-zOPT-908',
- 'MHBKAzPhotosHigh-Promotion Score-909',
- 'MHBKAzPhotosHigh-Title-910',
- 'MHBKAzPhotosHigh-Subtitle-911',
- 'MHBKAzPhotosHigh-Verbose Smart Description-912',
- 'MHBKAzPhotosHigh-Start Date-913',
- 'MHBKAzPhotosHigh-Start Timezone Offset-914',
- 'MHBKAzPhotosHigh-End Timezone Offset-915',
- 'MHBKAzPhotosHigh-End Date-916',
- 'MHBKAzPhotosHigh-Asset Count-917',
- 'MHBKAzPhotosHigh-Summary Count-918',
- 'MHBKAzPhotosHigh-Extended Count-919',
- 'MHBKAzPhotosHigh-Day Group Assets Count-920',
- 'MHBKAzPhotosHigh-Day Group Ext Assets Count-921',
- 'MHBKAzPhotosHigh-Day Group Summary Assets Count-922',
- 'MHBKAzPhotosHigh-Parent PH Key-923',
- 'MHBKAzPhotosHigh-Year Key Asset-924',
- 'MHBKAzPhotosHigh-Month First Asset-925',
- 'MHBKAzPhotosHigh-Month Key Asset-926',
- 'MHBKAzPhotosHigh-Key Asset-927',
- 'MHBKAzPhotosHigh-Parent Day Group PH Key-928',
- 'MHBKAzPhotosHigh-Day Group Key Asset-929',
- 'MHBKAzPhotosHigh-is Curated-930',
- 'MHBKAzPhotosHigh-Type-931',
- 'MHBKAzPhotosHigh-Kind-932',
- 'MHBKAzPhotosHigh-Category-933',
- 'MHBKAzPhotosHigh-Visibility State-934',
- 'MHBKAzPhotosHigh-Mood-935',
- 'MHBKAzPhotosHigh-Enrichment State-936',
- 'MHBKAzPhotosHigh-Enrichment Version-937',
- 'MHBKAzPhotosHigh-Highlight Version-938',
- 'zAsset-Year Highlight Being Key Asset-939',
- 'YHBKAzPhotosHigh-UUID-940',
- 'YHBKAzPhotosHigh-zPK-941',
- 'YHBKAzPhotosHigh-zENT-942',
- 'YHBKAzPhotosHigh-zOPT-943',
- 'YHBKAzPhotosHigh-Promotion Score-944',
- 'YHBKAzPhotosHigh-Title-945',
- 'YHBKAzPhotosHigh-Subtitle-946',
- 'YHBKAzPhotosHigh-Verbose Smart Description-947',
- 'YHBKAzPhotosHigh-Start Date-948',
- 'YHBKAzPhotosHigh-Start Timezone Offset-949',
- 'YHBKAzPhotosHigh-End Timezone Offset-950',
- 'YHBKAzPhotosHigh-End Date-951',
- 'YHBKAzPhotosHigh-Asset Count-952',
- 'YHBKAzPhotosHigh-Summary Count-953',
- 'YHBKAzPhotosHigh-Extended Count-954',
- 'YHBKAzPhotosHigh-Day Group Assets Count-955',
- 'YHBKAzPhotosHigh-Day Group Ext Assets Count-956',
- 'YHBKAzPhotosHigh-Day Group Summary Assets Count-957',
- 'YHBKAzPhotosHigh-Parent PH Key-958',
- 'YHBKAzPhotosHigh-Year Key Asset-959',
- 'YHBKAzPhotosHigh-Month First Asset-960',
- 'YHBKAzPhotosHigh-Month Key Asset-961',
- 'YHBKAzPhotosHigh-Key Asset-962',
- 'YHBKAzPhotosHigh-Parent Day Group PH Key-963',
- 'YHBKAzPhotosHigh-Day Group Key Asset-964',
- 'YHBKAzPhotosHigh-is Curated-965',
- 'YHBKAzPhotosHigh-Type-966',
- 'YHBKAzPhotosHigh-Kind-967',
- 'YHBKAzPhotosHigh-Category-968',
- 'YHBKAzPhotosHigh-Visibility State-969',
- 'YHBKAzPhotosHigh-Mood-970',
- 'YHBKAzPhotosHigh-Enrichment State-971',
- 'YHBKAzPhotosHigh-Enrichment Version-972',
- 'YHBKAzPhotosHigh-Highlight Version-973',
- 'z3SuggBKA-3KeyAssets = zAsset-zPK-974',
- 'z3SuggBKA-55SuggBeingKeyAssets = zSugg-zPK-975',
- 'SBKAzSugg-zPK-976',
- 'SBKAzSugg-UUID-977',
- 'SBKAzSugg-Start Date-978',
- 'SBKAzSugg-State-979',
- 'SBKAzSugg-Featured State-980',
- 'SBKAzSugg-Notification State-981',
- 'SBKAzSugg-Creation Date-982',
- 'SBKAzSugg-End Date-983',
- 'SBKAzSugg-Activation Date-984',
- 'SBKAzSugg-Expunge Date-985',
- 'SBKAzSugg-Relevant Until Date-986',
- 'SBKAzSugg-Title-987',
- 'SBKAzSugg-Sub Title-988',
- 'SBKAzSugg-Cached Count-989',
- 'SBKAzSugg-Cahed Photos Count-990',
- 'SBKAzSugg-Cached Videos Count-991',
- 'SBKAzSugg-Type-992',
- 'SBKAzSugg-Sub Type-993',
- 'SBKAzSugg-Version-994',
- 'SBKAzSugg-Cloud Local State-995',
- 'SBKAzSugg-Cloud Delete State-996',
- 'z3SuggBRA-3RepAssets1-997',
- 'z3SuggBRA-55SuggBeingRepAssets-998',
- 'SBRAzSugg-zPK-999',
- 'SBRAzSugg-UUID-1000',
- 'SBRAzSugg-Start Date-1001',
- 'SBRAzSugg-State-1002',
- 'SBRAzSugg-Featured State-1003',
- 'SBRAzSugg-Notification State-1004',
- 'SBRAzSugg-Creation Date-1005',
- 'SBRAzSugg-End Date-1006',
- 'SBRAzSugg-Activation Date-1007',
- 'SBRAzSugg-Expunge Date-1008',
- 'SBRAzSugg-Relevant Until Date-1009',
- 'SBRAzSugg-Title-1010',
- 'SBRAzSugg-Sub Title-1011',
- 'SBRAzSugg-Cached Count-1012',
- 'SBRAzSugg-Cahed Photos Count-1013',
- 'SBRAzSugg-Cached Videos Count-1014',
- 'SBRAzSugg-Type-1015',
- 'SBRAzSugg-Sub Type-1016',
- 'SBRAzSugg-Version-1017',
- 'SBRAzSugg-Cloud Local State-1018',
- 'SBRAzSugg-Cloud Delete State-1019',
- 'zAsset-Highlight Visibility Score-1020',
- 'zMedAnlyAstAttr-Media Analysis Version-1021',
- 'zMedAnlyAstAttr-Audio Classification-1022',
- 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-1023',
- 'zMedAnlyAstAttr-Best Video Range Start Time Scale-1024',
- 'zMedAnlyAstAttr-Best Video Range Duration Value-1025',
- 'zMedAnlyAstAttr-Best Video Range Start Value-1026',
- 'zMedAnlyAstAttr-Packed Best Playback Rect-1027',
- 'zMedAnlyAstAttr-Activity Score-1028',
- 'zMedAnlyAstAttr-Video Score-1029',
- 'zMedAnlyAstAttr-AutoPlay Suggestion Score-1030',
- 'zMedAnlyAstAttr-Blurriness Score-1031',
- 'zMedAnlyAstAttr-Exposure Score-1032',
- 'zAssetAnalyState-Asset UUID-4TableStart-1033',
- 'zAssetAnalyState-Analyisis State-1034',
- 'zAssetAnalyState-Worker Flags-1035',
- 'zAssetAnalyState-Worker Type-1036',
- 'zAssetAnalyState-Ignore Until Date-1037',
- 'zAssetAnalyState-Last Ignored Date-1038',
- 'zAssetAnalyState-Sort Token-1039',
- 'zAsset-Overall Aesthetic Score-1040',
- 'zCompAssetAttr-Behavioral Score-1041',
- 'zCompAssetAttr-Failure Score zCompAssetAttr-1042',
- 'zCompAssetAttr-Harmonious Color Score-1043',
- 'zCompAssetAttr-Immersiveness Score-1044',
- 'zCompAssetAttr-Interaction Score-1045',
- 'zCompAssetAttr-Intersting Subject Score-1046',
- 'zCompAssetAttr-Intrusive Object Presence Score-1047',
- 'zCompAssetAttr-Lively Color Score-1048',
- 'zCompAssetAttr-Low Light-1049',
- 'zCompAssetAttr-Noise Score-1050',
- 'zCompAssetAttr-Pleasant Camera Tilt Score-1051',
- 'zCompAssetAttr-Pleasant Composition Score-1052',
- 'zCompAssetAttr-Pleasant Lighting Score-1053',
- 'zCompAssetAttr-Pleasant Pattern Score-1054',
- 'zCompAssetAttr-Pleasant Perspective Score-1055',
- 'zCompAssetAttr-Pleasant Post Processing Score-1056',
- 'zCompAssetAttr-Pleasant Reflection Score-1057',
- 'zCompAssetAttrPleasant Symmetry Score-1058',
- 'zCompAssetAttr-Sharply Focused Subject Score-1059',
- 'zCompAssetAttr-Tastfully Blurred Score-1060',
- 'zCompAssetAttr-Well Chosen Subject Score-1061',
- 'zCompAssetAttr-Well Framed Subject Score-1062',
- 'zCompAssetAttr-Well Timeed Shot Score-1063',
- 'zCldRes-Asset UUID-4TableStart-1064',
- 'zCldRes-Cloud Local State-1065',
- 'zCldRes-File Size-1066',
- 'zCldRes-Height-1067',
- 'zCldRes-Is Available-1068',
- 'zCldRes-Is Locally Available-1069',
- 'zCldRes-Prefetch Count-1070',
- 'zCldRes-Source Type-1071',
- 'zCldRes-Type-1072',
- 'zCldRes-Width-1073',
- 'zCldRes-Date Created-1074',
- 'zCldRes-Last OnDemand Download Date-1075',
- 'zCldRes-Last Prefetch Date-1076',
- 'zCldRes-Prunedat-1077',
- 'zCldRes-File Path-1078',
- 'zCldRes-Fingerprint-1079',
- 'zCldRes-Item ID-1080',
- 'zCldRes-UniID-1081',
- 'zAddAssetAttr-zPK-1082',
- 'zAddAssetAttr-zENT-1083',
- 'ZAddAssetAttr-zOPT-1084',
- 'zAddAssetAttr-zAsset= zAsset_zPK-1085',
- 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-1086',
- 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-1087',
- 'zAddAssetAttr-Master Fingerprint-1088',
- 'zAddAssetAttr-Public Global UUID-1089',
- 'zAddAssetAttr-Deferred Photo Identifier-1090',
- 'zAddAssetAttr-Original Assets UUID-1091',
- 'zAddAssetAttr-Import Session ID-1092',
- 'zAddAssetAttr-Originating Asset Identifier-1093',
- 'zAddAssetAttr.Adjusted Fingerprint-1094',
- 'zAlbumList-zPK= Album List Key-1095',
- 'zAlbumList-zENT-1096',
- 'zAlbumList-zOPT-1097',
- 'zAlbumList-ID Key-1098',
- 'zAlbumList-UUID-1099',
- 'zAsset-zPK-1100',
- 'zAsset-zENT-1101',
- 'zAsset-zOPT-1102',
- 'zAsset-Master= zCldMast-zPK-1103',
- 'zAsset-Extended Attributes= zExtAttr-zPK-1104',
- 'zAsset-Import Session Key-1105',
- 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-1106',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-1107',
- 'zAsset-Moment Share Key= zShare-zPK-1108',
- 'zAsset-zMoment Key= zMoment-zPK-1109',
- 'zAsset-Computed Attributes Asset Key-1110',
- 'zAsset-Highlight Being Assets-HBA Key-1111',
- 'zAsset-Highlight Being Extended Assets-HBEA Key-1112',
- 'zAsset-Highligh Being Summary Assets-HBSA Key-1113',
- 'zAsset-Day Group Highlight Being Assets-DGHBA Key-1114',
- 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-1115',
- 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-1116',
- 'zAsset-Promotion Score-1117',
- 'zAsset-Media Analysis Attributes Key-1118',
- 'zAsset-Media Group UUID-1119',
- 'zAsset-UUID = store.cloudphotodb-1120',
- 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-1121',
- 'zAsset.Cloud Collection GUID-1122',
- 'zAsset-Avalanche UUID-1123',
- 'zAssetAnalyState-zPK-1124',
- 'zAssetAnalyState-zEnt-1125',
- 'zAssetAnalyState-zOpt-1126',
- 'zAssetAnalyState-Asset= zAsset-zPK-1127',
- 'zAssetAnalyState-Asset UUID-1128',
- 'zAssetDes-zPK-1129',
- 'zAssetDes-zENT-1130',
- 'zAssetDes-zOPT-1131',
- 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-1132',
- 'zCldFeedEnt-zPK= zCldShared keys-1133',
- 'zCldFeedEnt-zENT-1134',
- 'zCldFeedEnt-zOPT-1135',
- 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-1136',
- 'zCldFeedEnt-Entry Invitation Record GUID-1137',
- 'zCldFeedEnt-Entry Cloud Asset GUID-1138',
- 'zCldMast-zPK= zAsset-Master-1139',
- 'zCldMast-zENT-1140',
- 'zCldMast-zOPT-1141',
- 'zCldMast-Moment Share Key= zShare-zPK-1142',
- 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-1143',
- 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-1144',
- 'zCldMast-Originating Asset ID-1145',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-1146',
- 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-1147',
- 'CMzCldMastMedData-zENT-1148',
- 'CMzCldMastMedData-zOPT-1149',
- 'CMzCldMastMedData-CldMast= zCldMast-zPK-1150',
- 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-1151',
- 'AAAzCldMastMedData-zENT-1152',
- 'AAAzCldMastMedData-zOPT-1153',
- 'AAAzCldMastMedData-CldMast key-1154',
- 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-1155',
- 'zCldRes-zPK-1156',
- 'zCldRes-zENT-1157',
- 'zCldRes-zOPT-1158',
- 'zCldRes-Asset= zAsset-zPK-1159',
- 'zCldRes-Cloud Master= zCldMast-zPK-1160',
- 'zCldRes-Asset UUID-1161',
- 'zCldShareAlbumInvRec-zPK-1162',
- 'zCldShareAlbumInvRec-zEnt-1163',
- 'zCldShareAlbumInvRec-zOpt-1164',
- 'zCldShareAlbumInvRec-Album Key-1165',
- 'zCldShareAlbumInvRec-FOK Album Key-1166',
- 'zCldShareAlbumInvRec-Album GUID-1167',
- 'zCldShareAlbumInvRec-Cloud GUID-1168',
- 'zCldSharedComment-zPK-1169',
- 'zCldSharedComment-zENT-1170',
- 'zCldSharedComment-zOPT-1171',
- 'zCldSharedComment-Commented Asset Key= zAsset-zPK-1172',
- 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-1173',
- 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-1174',
- 'zCldSharedComment-Liked Asset Key= zAsset-zPK-1175',
- 'zCldSharedComment-CldFeedLikeCommentEntry Key-1176',
- 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-1177',
- 'zCldSharedComment-Cloud GUID-1178',
- 'zCompAssetAttr-zPK-1179',
- 'zCompAssetAttr-zEnt-1180',
- 'zCompAssetAttr-zOpt-1181',
- 'zCompAssetAttr-Asset Key-1182',
- 'zDetFace-zPK-1183',
- 'zDetFace-zEnt-1184',
- 'zDetFace.zOpt-1185',
- 'zDetFace-Asset= zAsset-zPK or Asset Containing Face-1186',
- 'zDetFace-Person= zPerson-zPK-1187',
- 'zDetFace-Person Being Key Face-1188',
- 'zDetFace-Face Print-1189',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-1190',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-1191',
- 'zDetFace-UUID-1192',
- 'zDetFaceGroup-zPK-1193',
- 'zDetFaceGroup-zENT-1194',
- 'zDetFaceGroup-zOPT-1195',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-1196',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-1197',
- 'zDetFaceGroup-UUID-1198',
- 'zDetFacePrint-zPK-1199',
- 'zDetFacePrint-zEnt-1200',
- 'zDetFacePrint-zOpt-1201',
- 'zDetFacePrint-Face Key-1202',
- 'zExtAttr-zPK= zAsset-zExtendedAttributes-1203',
- 'zExtAttr-zENT-1204',
- 'zExtAttr-zOPT-1205',
- 'zExtAttr-Asset Key-1206',
- 'zFaceCrop-zPK-1207',
- 'zFaceCrop-zEnt-1208',
- 'zFaceCrop-zOpt-1209',
- 'zFaceCrop-Asset Key-1210',
- 'zFaceCrop-Invalid Merge Canidate Person UUID-1211',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-1212',
- 'zFaceCrop-Face Key-1213',
- 'zFaceCrop-UUID-1214',
- 'zGenAlbum-zPK=26AlbumLists= 26Albums-1215',
- 'zGenAlbum-zENT-1216',
- 'zGenAlbum-zOpt-1217',
- 'zGenAlbum-Key Asset-Key zAsset-zPK-1218',
- 'zGenAlbum-Secondary Key Asset-1219',
- 'zGenAlbum-Tertiary Key Asset-1220',
- 'zGenAlbum-Custom Key Asset-1221',
- 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-1222',
- 'zGenAlbum-FOK Parent Folder-1223',
- 'zGenAlbum-UUID-1224',
- 'zGenAlbum-Cloud_GUID = store.cloudphotodb-1225',
- 'zGenAlbum-Project Render UUID-1226',
- 'zIntResou-zPK-1227',
- 'zIntResou-zENT-1228',
- 'zIntResou-zOPT-1229',
- 'zIntResou-Asset= zAsset_zPK-1230',
- 'zIntResou-Fingerprint-1231',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-1232',
- 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1233',
- 'zMedAnlyAstAttr-zEnt-1234',
- 'zMedAnlyAstAttr-zOpt-1235',
- 'zMedAnlyAstAttr-Asset= zAsset-zPK-1236',
- 'zPerson-zPK=zDetFace-Person-1237',
- 'zPerson-zEnt-1238',
- 'zPerson-zOpt-1239',
- 'zPerson-KeyFace=zDetFace-zPK-1240',
- 'zPerson-Assoc Face Group Key-1241',
- 'zPerson-Person UUID-1242',
- 'zSceneP-zPK-1243',
- 'zSceneP-zENT-1244',
- 'zSceneP-zOPT-1245',
- 'zShare-zPK-1246',
- 'zShare-zENT-1247',
- 'zShare-zOPT-1248',
- 'zShare-UUID-1249',
- 'SPLzShare-UUID-1250',
- 'zShare-Scope ID = store.cloudphotodb-1251',
- 'zSharePartic-zPK-1252',
- 'zSharePartic-zENT-1253',
- 'zSharePartic-zOPT-1254',
- 'zSharePartic-Share Key= zShare-zPK-1255',
- 'zSharePartic-UUID-1256',
- 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1257',
- 'zUnmAdj-zOPT-1258',
- 'zUnmAdj-zENT-1259',
- 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1260',
- 'zUnmAdj-UUID-1261',
- 'zUnmAdj-Other Adjustments Fingerprint-1262',
- 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1263',
- 'z25AlbumList-25Albums= zGenAlbum-zPK-1264',
- 'z25AlbumList-Album List Key-1265',
- 'z25AlbumList-FOK25Albums Key-1266',
- 'z26Assets-26Albums= zGenAlbum-zPK-1267',
- 'z26Assets-3Asset Key= zAsset-zPK in the Album-1268',
- 'z26Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1269')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph94.2-iOS14_Ref_for_Asset_Analysis-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph94.2-iOS14_Ref_for_Asset_Analysis-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ '''
- else:
- logfunc('No data available for iOS 14 Syndication.photoslibrary-database-Photos.sqlite')
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
+ row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
+ row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
+ row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
+ row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
+ row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
+ row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
+ row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
+ row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
+ row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
+ row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
+ row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
+ row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
+ row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
+ row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
+ row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
+ row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
+ row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
+ row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
+ row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
+ row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307],
+ row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315],
+ row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323],
+ row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331],
+ row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339],
+ row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347],
+ row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355],
+ row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363],
+ row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371],
+ row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379],
+ row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387],
+ row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395],
+ row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403],
+ row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411],
+ row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419],
+ row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427],
+ row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435],
+ row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443],
+ row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451],
+ row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459],
+ row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467],
+ row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475],
+ row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483],
+ row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491],
+ row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499],
+ row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507],
+ row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515],
+ row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523],
+ row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531],
+ row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539],
+ row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547],
+ row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555],
+ row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563],
+ row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571],
+ row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579],
+ row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587],
+ row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595],
+ row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603],
+ row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611],
+ row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619],
+ row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627],
+ row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635],
+ row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643],
+ row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651],
+ row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659],
+ row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667],
+ row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675],
+ row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683],
+ row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691],
+ row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699],
+ row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707],
+ row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715],
+ row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723],
+ row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731],
+ row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739],
+ row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747],
+ row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755],
+ row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763],
+ row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771],
+ row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779],
+ row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787],
+ row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795],
+ row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803],
+ row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811],
+ row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819],
+ row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827],
+ row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835],
+ row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843],
+ row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851],
+ row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859],
+ row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867],
+ row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875],
+ row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883],
+ row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891],
+ row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899],
+ row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907],
+ row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915],
+ row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923],
+ row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931],
+ row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939],
+ row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947],
+ row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955],
+ row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963],
+ row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971],
+ row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979],
+ row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987],
+ row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995],
+ row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002],
+ row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009],
+ row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016],
+ row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023],
+ row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030],
+ row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037],
+ row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044],
+ row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051],
+ row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058],
+ row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065],
+ row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072],
+ row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079],
+ row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086],
+ row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093],
+ row[1094], row[1095], row[1096], row[1097], row[1098], row[1099], row[1100],
+ row[1101], row[1102], row[1103], row[1104], row[1105], row[1106], row[1107],
+ row[1108], row[1109], row[1110], row[1111], row[1112], row[1113], row[1114],
+ row[1115], row[1116], row[1117], row[1118], row[1119], row[1120], row[1121],
+ row[1122], row[1123], row[1124], row[1125], row[1126], row[1127], row[1128],
+ row[1129], row[1130], row[1131], row[1132], row[1133], row[1134], row[1135],
+ row[1136], row[1137], row[1138], row[1139], row[1140], row[1141], row[1142],
+ row[1143], row[1144], row[1145], row[1146], row[1147], row[1148], row[1149],
+ row[1150], row[1151], row[1152], row[1153], row[1154], row[1155], row[1156],
+ row[1157], row[1158], row[1159], row[1160], row[1161], row[1162], row[1163],
+ row[1164], row[1165], row[1166], row[1167], row[1168], row[1169], row[1170],
+ row[1171], row[1172], row[1173], row[1174], row[1175], row[1176], row[1177],
+ row[1178], row[1179], row[1180], row[1181], row[1182], row[1183], row[1184],
+ row[1185], row[1186], row[1187], row[1188], row[1189], row[1190], row[1191],
+ row[1192], row[1193], row[1194], row[1195], row[1196], row[1197], row[1198],
+ row[1199], row[1200], row[1201], row[1202], row[1203], row[1204], row[1205],
+ row[1206], row[1207], row[1208], row[1209], row[1210], row[1211], row[1212],
+ row[1213], row[1214], row[1215], row[1216], row[1217], row[1218], row[1219],
+ row[1220], row[1221], row[1222], row[1223], row[1224], row[1225], row[1226],
+ row[1227], row[1228], row[1229], row[1230], row[1231], row[1232], row[1233],
+ row[1234], row[1235], row[1236], row[1237], row[1238], row[1239], row[1240],
+ row[1241], row[1242], row[1243], row[1244], row[1245], row[1246], row[1247],
+ row[1248], row[1249], row[1250], row[1251], row[1252], row[1253], row[1254],
+ row[1255], row[1256], row[1257], row[1258], row[1259], row[1260], row[1261],
+ row[1262], row[1263], row[1264], row[1265], row[1266], row[1267], row[1268],
+ row[1269]))
- db.close()
- return
+ data_headers = (('zAsset-Added Date-0', 'datetime'),
+ 'zAsset- SortToken -CameraRoll-1',
+ 'zAsset Complete-2',
+ 'zAsset-zPK-4QueryStart-3',
+ 'zAddAssetAttr-zPK-4QueryStart-4',
+ 'zAsset-UUID = store.cloudphotodb-4QueryStart-5',
+ 'zAddAssetAttr-Master Fingerprint-4TableStart-6',
+ 'zIntResou-Fingerprint-4TableStart-7',
+ 'zAsset-Cloud is My Asset-8',
+ 'zAsset-Cloud is deletable-Asset-9',
+ 'zAsset-Cloud_Local_State-10',
+ 'zAsset-Visibility State-11',
+ 'zExtAttr-Camera Make-12',
+ 'zExtAttr-Camera Model-13',
+ 'zExtAttr-Lens Model-14',
+ 'zExtAttr-Flash Fired-15',
+ 'zExtAttr-Focal Lenght-16',
+ 'zAsset-Derived Camera Capture Device-17',
+ 'zAddAssetAttr-Camera Captured Device-18',
+ 'zAddAssetAttr-Imported by-19',
+ 'zCldMast-Imported By-20',
+ 'zAddAssetAttr-Creator Bundle ID-21',
+ 'zAddAssetAttr-Imported By Display Name-22',
+ 'zCldMast-Imported by Bundle ID-23',
+ 'zCldMast-Imported by Display Name-24',
+ 'zAsset-Saved Asset Type-25',
+ 'zAsset-Directory-Path-26',
+ 'zAsset-Filename-27',
+ 'zAddAssetAttr- Original Filename-28',
+ 'zCldMast- Original Filename-29',
+ ('zAsset-Date Created-30', 'datetime'),
+ ('zCldMast-Creation Date-31', 'datetime'),
+ ('zIntResou-CldMst Date Created-32', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-33',
+ 'zAddAssetAttr-Time Zone Offset-34',
+ 'zAddAssetAttr-Inferred Time Zone Offset-35',
+ 'zAddAssetAttr-EXIF-String-36',
+ ('zAsset-Modification Date-37', 'datetime'),
+ ('zAsset-Last Shared Date-38', 'datetime'),
+ 'zCldMast-Cloud Local State-39',
+ ('zCldMast-Import Date-40', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-41', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-4QueryStart-42',
+ ('zAddAssetAttr-Alt Import Image Date-43', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-44',
+ ('zAsset-Cloud Batch Publish Date-45', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-46', 'datetime'),
+ 'zAsset-Cloud Download Requests-47',
+ 'zAsset-Cloud Batch ID-48',
+ 'zAddAssetAttr-Upload Attempts-49',
+ 'zAsset-Latitude-50',
+ 'zExtAttr-Latitude-51',
+ 'zAsset-Longitude-52',
+ 'zExtAttr-Longitude-53',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-54',
+ 'zAddAssetAttr-Location Hash-55',
+ 'zAddAssetAttr-Shifted Location Valid-56',
+ 'zAddAssetAttr-Shifted Location Data-57',
+ 'zAddAssetAttr-Reverse Location Is Valid-58',
+ 'zAddAssetAttr-Reverse Location Data-59',
+ 'ParentzGenAlbum-UUID-4QueryStart-60',
+ 'zGenAlbum-UUID-4QueryStart-61',
+ 'ParentzGenAlbum-Cloud GUID-4QueryStart-62',
+ 'zGenAlbum-Cloud GUID-4QueryStart-63',
+ 'zCldShareAlbumInvRec-Album GUID-4QueryStart-64',
+ 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-65',
+ 'zGenAlbum-Project Render UUID-4QueryStart-66',
+ 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-67',
+ 'zGenAlbum-Cloud_Local_State-4QueryStart-68',
+ ('ParentzGenAlbum- Creation Date- 4QueryStart-69', 'datetime'),
+ ('zGenAlbum- Creation Date- 4QueryStart-70', 'datetime'),
+ ('zGenAlbum- Cloud Creation Date- 4QueryStart-71', 'datetime'),
+ ('zGenAlbum- Start Date- 4QueryStart-72', 'datetime'),
+ ('zGenAlbum- End Date- 4QueryStart-73', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date- 4QueryStart-74', 'datetime'),
+ 'ParentzGenAlbum- Title- 4QueryStart-75',
+ 'zGenAlbum- Title-User&System Applied- 4QueryStart-76',
+ 'zGenAlbum-Import Session ID-SWY- 4QueryStart-77',
+ 'zGenAlbum-Creator Bundle ID- 4QueryStart-78',
+ 'zGenAlbum-zENT- Entity- 4QueryStart-79',
+ 'ParentzGenAlbum- Kind- 4QueryStart-80',
+ 'zGenAlbum-Album Kind- 4QueryStart-81',
+ 'AAAzCldMastMedData-zOPT-82',
+ 'zAddAssetAttr-Media Metadata Type-83',
+ 'AAAzCldMastMedData-Data-84',
+ 'CldMasterzCldMastMedData-zOPT-85',
+ 'zCldMast-Media Metadata Type-86',
+ 'CMzCldMastMedData-Data-87',
+ 'zAsset-Orientation-88',
+ 'zAddAssetAttr-Original Orientation-89',
+ 'zAsset-Kind-90',
+ 'zAsset-Kind-Sub-Type-91',
+ 'zAddAssetAttr-Cloud Kind Sub Type-92',
+ 'zAsset-Playback Style-93',
+ 'zAsset-Playback Variation-94',
+ 'zAsset-Video Duration-95',
+ 'zExtAttr-Duration-96',
+ 'zAsset-Video CP Duration-97',
+ 'zAddAssetAttr-Video CP Duration Time Scale-98',
+ 'zAsset-Video CP Visibility State-99',
+ 'zAddAssetAttr-Video CP Display Value-100',
+ 'zAddAssetAttr-Video CP Display Time Scale-101',
+ 'zIntResou-Datastore Class ID-102',
+ 'zAsset-Cloud Placeholder Kind-103',
+ 'zIntResou-Local Availability-104',
+ 'zIntResou-Local Availability Target-105',
+ 'zIntResou-Cloud Local State-106',
+ 'zIntResou-Remote Availability-107',
+ 'zIntResou-Remote Availability Target-108',
+ 'zIntResou-Transient Cloud Master-109',
+ 'zIntResou-Side Car Index-110',
+ 'zIntResou- File ID-111',
+ 'zIntResou-Version-112',
+ 'zAddAssetAttr- Original-File-Size-113',
+ 'zIntResou-Resource Type-114',
+ 'zIntResou-Datastore Sub-Type-115',
+ 'zIntResou-Cloud Source Type-116',
+ 'zIntResou-Data Length-117',
+ 'zIntResou-Recipe ID-118',
+ ('zIntResou-Cloud Last Prefetch Date-119', 'datetime'),
+ 'zIntResou-Cloud Prefetch Count-120',
+ ('zIntResou- Cloud-Last-OnDemand Download-Date-121', 'datetime'),
+ 'zAsset-Uniform Type ID-122',
+ 'zAsset-Original Color Space-123',
+ 'zCldMast-Uniform_Type_ID-124',
+ 'zCldMast-Full Size JPEG Source-125',
+ 'zAsset-HDR Gain-126',
+ 'zExtAttr-Codec-127',
+ 'zCldMast-Codec Name-128',
+ 'zCldMast-Video Frame Rate-129',
+ 'zCldMast-Placeholder State-130',
+ 'zAsset-Depth_Type-131',
+ 'zAsset-Avalanche UUID-4TableStart-132',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-133',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-134',
+ 'zAddAssetAttr-Cloud Recovery State-135',
+ 'zAddAssetAttr-Cloud State Recovery Attempts Count-136',
+ 'zAsset-Deferred Processing Needed-137',
+ 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-138',
+ 'zAddAssetAttr-Deferred Processing Candidate Options-139',
+ 'zAsset-Has Adjustments-Camera-Effects-Filters-140',
+ 'zUnmAdj-UUID-4TableStart-141',
+ 'zAsset-Adjustment Timestamp-142',
+ 'zUnmAdj-Adjustment Timestamp-143',
+ 'zAddAssetAttr-Editor Bundle ID-144',
+ 'zUnmAdj-Editor Localized Name-145',
+ 'zUnmAdj-Adjustment Format ID-146',
+ 'zAddAssetAttr-Montage-147',
+ 'zUnmAdj-Adjustment Render Types-148',
+ 'zUnmAdj-Adjustment Format Version-149',
+ 'zUnmAdj-Adjustment Base Image Format-150',
+ 'zAsset-Favorite-151',
+ 'zAsset-Hidden-152',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-153',
+ ('zAsset-Trashed Date-154', 'datetime'),
+ 'zIntResou-Trash State-155',
+ ('zIntResou-Trashed Date-156', 'datetime'),
+ 'zAsset-Cloud Delete State-157',
+ 'zIntResou-Cloud Delete State-158',
+ 'zAddAssetAttr-PTP Trashed State-159',
+ 'zIntResou-PTP Trashed State-160',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-161',
+ 'zMedAnlyAstAttr-Media Analysis Timestamp-162',
+ ('zAsset-Analysis State Modificaion Date-163', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-164',
+ 'zAddAssetAttr- View Count-165',
+ 'zAddAssetAttr- Pending Play Count-166',
+ 'zAddAssetAttr- Play Count-167',
+ 'zAddAssetAttr- Pending Share Count-168',
+ 'zAddAssetAttr- Share Count-169',
+ 'zAddAssetAttr-Allowed for Analysis-170',
+ 'zAddAssetAttr-Scene Analysis Version-171',
+ 'zAddAssetAttr-Scene Analysis Timestamp-172',
+ 'zAddAssetAttr-Destination Asset Copy State-173',
+ 'zAddAssetAttr-Variation Suggestions States-174',
+ 'zAsset-High Frame Rate State-175',
+ 'zAsset-Video Key Frame Time Scale-176',
+ 'zAsset-Video Key Frame Value-177',
+ 'zExtAttr-ISO-178',
+ 'zExtAttr-Metering Mode-179',
+ 'zExtAttr-Sample Rate-180',
+ 'zExtAttr-Track Format-181',
+ 'zExtAttr-White Balance-182',
+ 'zExtAttr-Aperture-183',
+ 'zExtAttr-BitRate-184',
+ 'zExtAttr-Exposure Bias-185',
+ 'zExtAttr-Frames Per Second-186',
+ 'zExtAttr-Shutter Speed-187',
+ 'zAsset-Height-188',
+ 'zAddAssetAttr-Original Height-189',
+ 'zIntResou-Unoriented Height-190',
+ 'zAsset-Width-191',
+ 'zAddAssetAttr-Original Width-192',
+ 'zIntResou-Unoriented Width-193',
+ 'zShare-Thumbnail Image Data-194',
+ 'SPLzShare-Thumbnail Image Data-195',
+ 'zAsset-Thumbnail Index-196',
+ 'zAddAssetAttr-Embedded Thumbnail Height-197',
+ 'zAddAssetAttr-Embedded Thumbnail Length-198',
+ 'zAddAssetAttr-Embedded Thumbnail Offset-199',
+ 'zAddAssetAttr-Embedded Thumbnail Width-200',
+ 'zAsset-Packed Acceptable Crop Rect-201',
+ 'zAsset-Packed Badge Attributes-202',
+ 'zAsset-Packed Preferred Crop Rect-203',
+ 'zAsset-Curation Score-204',
+ 'zAsset-Camera Processing Adjustment State-205',
+ 'zAsset-Depth Type-206',
+ 'zAddAssetAttr-Orig Resource Choice-207',
+ 'zAddAssetAttr-Spatial Over Capture Group ID-208',
+ 'zAddAssetAttr-Place Annotation Data-209',
+ 'zAddAssetAttr-Distance Identity-210',
+ 'zAddAssetAttr-Edited IPTC Attributes-211',
+ 'zAssetDes-Long Description-212',
+ 'zAddAssetAttr-Asset Description-213',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-214',
+ 'zAddAssetAttr-Accessibility Description-215',
+ 'zAddAssetAttr-Photo Stream Tag ID-216',
+ ('zCldFeedEnt-Entry Date-217', 'datetime'),
+ 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-218',
+ 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-219',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-220',
+ 'zCldFeedEnt-Entry Priority Number-221',
+ 'zCldFeedEnt-Entry Type Number-222',
+ 'zCldSharedComment-Cloud GUID-4TableStart-223',
+ ('zCldSharedComment-Date-224', 'datetime'),
+ ('zCldSharedComment-Comment Client Date-225', 'datetime'),
+ ('zAsset-Cloud Last Viewed Comment Date-226', 'datetime'),
+ 'zCldSharedComment-Type-227',
+ 'zCldSharedComment-Comment Text-228',
+ 'zCldSharedComment-Commenter Hashed Person ID-229',
+ 'zCldSharedComment-Batch Comment-230',
+ 'zCldSharedComment-Is a Caption-231',
+ 'zAsset-Cloud Has Comments by Me-232',
+ 'zCldSharedComment-Is My Comment-233',
+ 'zCldSharedComment-Is Deletable-234',
+ 'zAsset-Cloud Has Comments Conversation-235',
+ 'zAsset-Cloud Has Unseen Comments-236',
+ 'zCldSharedComment-Liked-237',
+ 'zAddAssetAttr-Share Type-238',
+ 'zShare-UUID-CMM-4TableStart-239',
+ 'SPLzShare-UUID-SPL-4TableStart-240',
+ 'zShare-zENT-CMM-241',
+ 'SPLzShare-zENT-SPL-242',
+ 'zShare-Status-CMM-243',
+ 'SPLzShare-Status-SPL-244',
+ 'zShare-Scope Type-CMM-245',
+ 'SPLzShare-Scope Type-SPL-246',
+ 'zShare-Local Publish State-CMM-247',
+ 'SPLzShare-Local Publish State-SPL-248',
+ 'zShare-Public Permission-CMM-249',
+ 'SPLzShare-Public Permission-SPL-250',
+ 'zShare-Originating Scope ID-CMM-251',
+ 'SPLzShare-Originating Scope ID-SPL-252',
+ 'zShare-Scope ID-CMM-253',
+ 'SPLzShare-Scope ID-SPL-254',
+ 'zShare-Title-CMM-255',
+ 'SPLzShare-Title-SPL-256',
+ 'zShare-Share URL-CMM-257',
+ 'SPLzShare-Share URL-SPL-258',
+ ('zShare-Creation Date-CMM-259', 'datetime'),
+ ('SPLzShare-Creation Date-SPL-260', 'datetime'),
+ ('zShare-Start Date-CMM-261', 'datetime'),
+ ('SPLzShare-Start Date-SPL-262', 'datetime'),
+ ('zShare-End Date-CMM-263', 'datetime'),
+ ('SPLzShare-End Date-SPL-264', 'datetime'),
+ ('zShare-Expiry Date-CMM-265', 'datetime'),
+ ('SPLzShare-Expiry Date-SPL-266', 'datetime'),
+ 'zShare-Asset Count-CMM-267',
+ 'SPLzShare-Asset Count-SPL-268',
+ 'zShare-Photos Count-CMM-269',
+ 'SPLzShare-Photos Count-CMM-SPL-270',
+ 'zShare-Uploaded Photos Count-CMM-271',
+ 'SPLzShare-Uploaded Photos Count-SPL-272',
+ 'zShare-Videos Count-CMM-273',
+ 'SPLzShare-Videos Count-SPL-274',
+ 'zShare-Uploaded Videos Count-CMM-275',
+ 'SPLzShare-Uploaded Videos Count-SPL-276',
+ 'zShare-Force Sync Attempted-CMM-277',
+ 'SPLzShare-Force Sync Attempted-SPL-278',
+ 'zShare-Should Notify On Upload Completion-CMM-279',
+ 'SPLzShare-Should Notify On Upload Completion-SPL-280',
+ 'zShare-Trashed State-CMM-281',
+ 'SPLzShare-Trashed State-SPL-282',
+ 'zShare-Cloud Delete State-CMM-283',
+ 'SPLzShare-Cloud Delete State-SPL-284',
+ 'zShare-Should Ignor Budgets-CMM-285',
+ 'SPLzShare-Should Ignor Budgets-SPL-286',
+ 'zSharePartic-UUID-4TableStart-287',
+ 'SPLzSharePartic-UUID-4TableStart-288',
+ 'zSharePartic-Acceptance Status-289',
+ 'SPLzSharePartic-Acceptance Status-290',
+ 'zSharePartic-Is Current User-291',
+ 'SPLzSharePartic-Is Current User-292',
+ 'zSharePartic-Role-293',
+ 'SPLzSharePartic-Role-294',
+ 'zSharePartic-Premission-295',
+ 'SPLzSharePartic-Premission-296',
+ 'zSharePartic-User ID-297',
+ 'SPLzSharePartic-User ID-298',
+ 'SPLzSharePartic-zPK-4TableStart-299',
+ 'zSharePartic-zPK-4TableStart-300',
+ 'zSharePartic-Email Address-301',
+ 'SPLzSharePartic-Email Address-302',
+ 'zSharePartic-Phone Number-303',
+ 'SPLzSharePartic-Phone Number-304',
+ 'ParentzGenAlbum-UUID-4TableStart-305',
+ 'zGenAlbum-UUID-4TableStart-306',
+ 'ParentzGenAlbum-Cloud GUID-4TableStart-307',
+ 'zGenAlbum-Cloud GUID-4TableStart-308',
+ 'zCldShareAlbumInvRec-Album GUID-4TableStart-309',
+ 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-310',
+ 'zGenAlbum-Project Render UUID-4TableStart-311',
+ 'zAlbumList-Needs Reordering Number-312',
+ 'zGenAlbum-zENT- Entity-313',
+ 'ParentzGenAlbum-Kind-314',
+ 'zGenAlbum-Album Kind-315',
+ 'ParentzGenAlbum-Cloud-Local-State-316',
+ 'zGenAlbum-Cloud_Local_State-317',
+ 'ParentzGenAlbum- Title-318',
+ 'zGenAlbum- Title-User&System Applied-319',
+ 'zGenAlbum-Import Session ID-SWY-320',
+ 'zGenAlbum-Creator Bundle ID-321',
+ ('ParentzGenAlbum-Creation Date-322', 'datetime'),
+ ('zGenAlbum-Creation Date-323', 'datetime'),
+ ('zGenAlbum-Cloud Creation Date-324', 'datetime'),
+ ('zGenAlbum-Start Date-325', 'datetime'),
+ ('zGenAlbum-End Date-326', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-327', 'datetime'),
+ 'ParentzGenAlbum-Pending Items Count-328',
+ 'zGenAlbum-Pending Items Count-329',
+ 'ParentzGenAlbum-Pending Items Type-330',
+ 'zGenAlbum-Pending Items Type-331',
+ 'zGenAlbum- Cached Photos Count-332',
+ 'zGenAlbum- Cached Videos Count-333',
+ 'zGenAlbum- Cached Count-334',
+ 'ParentzGenAlbum-Sync Event Order Key-335',
+ 'zGenAlbum-Sync Event Order Key-336',
+ 'zGenAlbum-Has Unseen Content-337',
+ 'zGenAlbum-Unseen Asset Count-338',
+ 'zGenAlbum-is Owned-339',
+ 'zGenAlbum-Cloud Relationship State-340',
+ 'zGenAlbum-Cloud Relationship State Local-341',
+ 'zGenAlbum-Cloud Owner Mail Key-342',
+ 'zGenAlbum-Cloud Owner Frist Name-343',
+ 'zGenAlbum-Cloud Owner Last Name-344',
+ 'zGenAlbum-Cloud Owner Full Name-345',
+ 'zGenAlbum-Cloud Person ID-346',
+ 'zAsset-Cloud Owner Hashed Person ID-347',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-348',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-349',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-350',
+ 'zGenAlbum-Cloud Album Sub Type-351',
+ ('zGenAlbum-Cloud Contribution Date-352', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-353', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-354',
+ 'ParentzGenAlbum-Pinned-355',
+ 'zGenAlbum-Pinned-356',
+ 'ParentzGenAlbum-Custom Sort Key-357',
+ 'zGenAlbum-Custom Sort Key-358',
+ 'ParentzGenAlbum-Custom Sort Ascending-359',
+ 'zGenAlbum-Custom Sort Ascending-360',
+ 'ParentzGenAlbum-Is Prototype-361',
+ 'zGenAlbum-Is Prototype-362',
+ 'ParentzGenAlbum-Project Document Type-363',
+ 'zGenAlbum-Project Document Type-364',
+ 'ParentzGenAlbum-Custom Query Type-365',
+ 'zGenAlbum-Custom Query Type-366',
+ 'ParentzGenAlbum-Trashed State-367',
+ ('ParentzGenAlbum-Trash Date-368', 'datetime'),
+ 'zGenAlbum-Trashed State-369',
+ ('zGenAlbum-Trash Date-370', 'datetime'),
+ 'ParentzGenAlbum-Cloud Delete State-371',
+ 'zGenAlbum-Cloud Delete State-372',
+ 'zGenAlbum-Cloud Owner Whitelisted-373',
+ 'zGenAlbum-Cloud Local Public URL Enabled-374',
+ 'zGenAlbum-Cloud Public URL Enabled-375',
+ 'zGenAlbum-Public URL-376',
+ 'zGenAlbum-Key Asset Face Thumb Index-377',
+ 'zGenAlbum-Project Text Extension ID-378',
+ 'zGenAlbum-User Query Data-379',
+ 'zGenAlbum-Custom Query Parameters-380',
+ 'zGenAlbum-Project Data-381',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-382',
+ 'zCldShareAlbumInvRec-Invitation State Local-383',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-384',
+ ('zCldShareAlbumInvRec-Subscription Date-385', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-386',
+ 'zCldShareAlbumInvRec-Invitee Last Name-387',
+ 'zCldShareAlbumInvRec-Invitee Full Name-388',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-389',
+ 'zCldShareAlbumInvRec-Invitee Email Key-390',
+ 'zGenAlbum-Key Asset Face ID-391',
+ 'zFaceCrop-Face Area Points-392',
+ 'zAsset-Face Adjustment Version-393',
+ 'zDetFace-Asset Visible-394',
+ 'zPerson-Face Count-395',
+ 'zDetFace-Face Crop-396',
+ 'zDetFace-Face Algorithm Version-397',
+ 'zDetFace-Adjustment Version-398',
+ 'zDetFace-UUID-4TableStart-399',
+ 'zPerson-Person UUID-4TableStart-400',
+ 'zDetFace-Confirmed Face Crop Generation State-401',
+ 'zDetFace-Manual-402',
+ 'zDetFace-VIP Model Type-403',
+ 'zDetFace-Name Source-404',
+ 'zDetFace-Cloud Name Source-405',
+ 'zPerson-Person URI-406',
+ 'zPerson-Display Name-407',
+ 'zPerson-Full Name-408',
+ 'zPerson-Cloud Verified Type-409',
+ 'zFaceCrop-State-410',
+ 'zFaceCrop-Type-411',
+ 'zFaceCrop-UUID-4TableStart-412',
+ 'zPerson-Type-413',
+ 'zPerson-Verified Type-414',
+ 'zPerson-Gender Type-415',
+ 'zDetFace-Gender Type-416',
+ 'zDetFace-Center X-417',
+ 'zDetFace-Center Y-418',
+ 'zPerson-Age Type Estimate-419',
+ 'zDetFace-Age Type Estimate-420',
+ 'zDetFace-Hair Color Type-421',
+ 'zDetFace-Facial Hair Type-422',
+ 'zDetFace-Has Smile-423',
+ 'zDetFace-Smile Type-424',
+ 'zDetFace-Lip Makeup Type-425',
+ 'zDetFace-Eyes State-426',
+ 'zDetFace-Is Left Eye Closed-427',
+ 'zDetFace-Is Right Eye Closed-428',
+ 'zDetFace-Eye Glasses Type-429',
+ 'zDetFace-Eye Makeup Type-430',
+ 'zDetFace-Cluster Squence Number Key-431',
+ 'zDetFace-Grouping ID-432',
+ 'zDetFace-Master ID-433',
+ 'zDetFace-Quality-434',
+ 'zDetFace-Quality Measure-435',
+ 'zDetFace-Source Height-436',
+ 'zDetFace-Source Width-437',
+ 'zDetFace-Hidden-Asset Hidden-438',
+ 'zDetFace-In Trash-Recently Deleted-439',
+ 'zDetFace-Cloud Local State-440',
+ 'zDetFace-Training Type-441',
+ 'zDetFace.Pose Yaw-442',
+ 'zDetFace-Roll-443',
+ 'zDetFace-Size-444',
+ 'zDetFace-Cluster Squence Number-445',
+ 'zDetFace-Blur Score-446',
+ 'zDetFacePrint-Face Print Version-447',
+ 'zMedAnlyAstAttr-Face Count-448',
+ 'zDetFaceGroup-UUID-4TableStart-449',
+ 'zDetFaceGroup-Person Builder State-450',
+ 'zDetFaceGroup-UnNamed Face Count-451',
+ 'zPerson-In Person Naming Model-452',
+ 'zPerson-Key Face Pick Source Key-453',
+ 'zPerson-Manual Order Key-454',
+ 'zPerson-Question Type-455',
+ 'zPerson-Suggested For Client Type-456',
+ 'zPerson-Merge Target Person-457',
+ 'zPerson-Cloud Local State-458',
+ 'zFaceCrop-Cloud Local State-459',
+ 'zFaceCrop-Cloud Type-460',
+ 'zPerson-Cloud Delete State-461',
+ 'zFaceCrop-Cloud Delete State-462',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-463',
+ 'zMemory-zPK-464',
+ 'z3MemoryBCAs-3CuratedAssets = zAsset-zPK-465',
+ 'z3MemoryBCAs-40MemoriesBeingCuratedAssets = zMemory-zPK-466',
+ 'z3MemoryBECAs-3ExtCuratedAssets = zAsset-zPK-467',
+ 'z3MemoryBECAs-40MemoriesBeingExtCuratedAssets = zMemory-zPK-468',
+ 'z3MemoryBMCAs-3MovieCuratedAssets = zAsset-zPK-469',
+ 'z3MemoryBMCAs-40MemoriesBeingMovieCuratedAssets = zMemory-zPK-470',
+ 'z3MemoryBRAs-3RepresentativeAssets = zAsset-zPK-471',
+ 'z3MemoryBRAs-40RepresentativeAssets = zMemory-zPK-472',
+ 'zMemory-Key Asset = zAsset-zPK-473',
+ 'zMemory-UUID-474',
+ 'zMemory-SubTitle-475',
+ 'zMemory-Title-476',
+ 'zMemory-Category-477',
+ 'zMemory-SubCategory-478',
+ ('zMemory-Creation Date-479', 'datetime'),
+ 'zMemory-User Created-480',
+ 'zMemory-Favorite Memory-481',
+ 'zMemory-Score-482',
+ 'zMemory-View Count-483',
+ 'zMemory-Play Count-484',
+ 'zMemory-Rejected-485',
+ 'zMemory-Share Count-486',
+ ('zMemory-Last Movie Play Date-487', 'datetime'),
+ ('zMemory-Last Viewed Date-488', 'datetime'),
+ 'zMemory-Pending-489',
+ 'zMemory-Pending Play Count Memory-490',
+ 'zMemory-Pending Share Count Memory-491',
+ 'zMemory-Pending View Count Memory-492',
+ 'zMemory-Featured State-493',
+ 'zMemory-Photos Graph Version-494',
+ 'zMemory-AssetListPredicte-495',
+ 'zMemory-Notification State-496',
+ 'zMemory-Cloud Local State-497',
+ 'zMemory-Cloud Delete State-498',
+ 'YearzMomentList-UUID-499',
+ 'YearzMomentList-zPK-500',
+ 'zMoment-Year Moment List-501',
+ 'YearzMomentList-Sort Index-502',
+ 'YearzMomentList-Granularity Level-503',
+ ('YearzMomentList-Start Date-504', 'datetime'),
+ ('YearzMomentList-Representative Date-505', 'datetime'),
+ ('YearzMomentList-End Date-506', 'datetime'),
+ 'YearzMomentList-Trashed State-507',
+ 'MegaYMzMomentList-UUID-508',
+ 'MegaYMzMomentList-zPK-509',
+ 'zMoment-Mega Moment List-510',
+ 'MegaYMzMomentList-Sort Index-511',
+ 'MegaYMzMomentList-Granularity Level-512',
+ ('MegaYMzMomentList-Start Date-513', 'datetime'),
+ ('MegaYMzMomentList-Representative Date-514', 'datetime'),
+ ('MegaYMzMomentList-End Date-515', 'datetime'),
+ 'MegaYMzMomentList-Trashed State-516',
+ 'zMoment-UUID-517',
+ 'zMoment-zPK-518',
+ 'zMoment-Aggregation Score-519',
+ ('zMoment-Start Date-520', 'datetime'),
+ ('zMoment-Representative Date-521', 'datetime'),
+ 'zMoment-Timezone Offset-522',
+ ('zMoment-Modification Date-523', 'datetime'),
+ ('zMoment-End Date-524', 'datetime'),
+ 'zMoment-SubTitle-525',
+ 'zMoment-Title-526',
+ 'zMoment-Processed Location-527',
+ 'zMoment-Approx Latitude-528',
+ 'zMoment-Approx Longitude-529',
+ 'zMoment-GPS Horizontal Accuracy-530',
+ 'zMoment-Cache Count-531',
+ 'zMoment-Cached Photos Count-532',
+ 'zMoment-Cached Videos Count-533',
+ 'zMoment-Trashed State-534',
+ 'zMoment-Highlight Key-535',
+ 'zAsset-Highlight Visibility Score-536',
+ 'YearParzPhotosHigh-UUID-537',
+ 'YearParzPhotosHigh-zPK-538',
+ 'YearParzPhotosHigh-zENT-539',
+ 'YearParzPhotosHigh-zOPT-540',
+ 'YearParzPhotosHigh-Promotion Score-541',
+ 'YearParzPhotosHigh-Title-542',
+ 'YearParzPhotosHigh-Verbose Smart Description-543',
+ ('YearParzPhotosHigh-Start Date-544', 'datetime'),
+ ('YearParzPhotosHigh-End Date-545', 'datetime'),
+ 'YearParzPhotosHigh-Year Key Asset-546',
+ 'YearParzPhotosHigh-Is Curated-547',
+ 'YearParzPhotosHigh-Kind-548',
+ 'YearParzPhotosHigh-Category-549',
+ 'YearParzPhotosHigh-Visibility State-550',
+ 'YearParzPhotosHigh-Enrichment State-551',
+ 'YearParzPhotosHigh-Enrichment Version-552',
+ 'YearParzPhotosHigh-Highlight Version-553',
+ 'YMParzPhotosHigh-UUID-554',
+ 'YMParzPhotosHigh-zPK-555',
+ 'YMParzPhotosHigh-Parent PH Key-556',
+ 'YMParzPhotosHigh-zENT-557',
+ 'YMParzPhotosHigh-zOPT-558',
+ 'YMParzPhotosHigh-Promotion Score-559',
+ 'YMParzPhotosHigh-Title-560',
+ 'YMParzPhotosHigh-Subtitle-561',
+ 'YMParzPhotosHigh-Verbose Smart Description-562',
+ ('YMParzPhotosHigh-Start Date-563', 'datetime'),
+ ('YMParzPhotosHigh-End Date-564', 'datetime'),
+ 'YMParzPhotosHigh-Month First Asset-565',
+ 'YMParzPhotosHigh-Month Key Asset-566',
+ 'YMParzPhotosHigh-Is Curated-567',
+ 'YMParzPhotosHigh-Kind-568',
+ 'YMParzPhotosHigh-Category-569',
+ 'YMParzPhotosHigh-Visibility State-570',
+ 'YMParzPhotosHigh-Enrichment State-571',
+ 'YMParzPhotosHigh-Enrichment Version-572',
+ 'YMParzPhotosHigh-Highlight Version-573',
+ 'DGParzPhotosHigh-UUID-574',
+ 'DGParzPhotosHigh-zPK-575',
+ 'DGParzPhotosHigh-Parent PH Key-576',
+ 'DGParzPhotosHigh-zENT-577',
+ 'DGParzPhotosHigh-zOPT-578',
+ 'DGParzPhotosHigh-Promotion Score-579',
+ 'DGParzPhotosHigh-Title-580',
+ 'DGParzPhotosHigh-Subtitle-581',
+ 'DGParzPhotosHigh-Verbose Smart Description-582',
+ ('DGParzPhotosHigh-Start Date-583', 'datetime'),
+ ('DGParzPhotosHigh-End Date-584', 'datetime'),
+ 'DGParzPhotosHigh-Month First Asset-585',
+ 'DGParzPhotosHigh-Month Key Asset-586',
+ 'DGParzPhotosHigh-Is Curated-587',
+ 'DGParzPhotosHigh-Kind-588',
+ 'DGParzPhotosHigh-Category-589',
+ 'DGParzPhotosHigh-Visibility State-590',
+ 'DGParzPhotosHigh-Enrichment State-591',
+ 'DGParzPhotosHigh-Enrichment Version-592',
+ 'DGParzPhotosHigh-Highlight Version-593',
+ 'zAsset-Highlight Being Assets Key-594',
+ 'HBAzPhotosHigh-UUID-595',
+ 'HBAzPhotosHigh-zPK-596',
+ 'HBAzPhotosHigh-Parent PH Key-597',
+ 'HBAzPhotosHigh-zENT-598',
+ 'HBAzPhotosHigh-zOPT-599',
+ 'HBAzPhotosHigh-Promotion Score-600',
+ 'HBAzPhotosHigh-Title-601',
+ 'HBAzPhotosHigh-Subtitle-602',
+ 'HBAzPhotosHigh-Verbose Smart Description-603',
+ ('HBAzPhotosHigh-Start Date-604', 'datetime'),
+ 'HBAzPhotosHigh Start-Timezone Offset-605',
+ 'HBAzPhotosHigh-End Timezone Offset-606',
+ ('HBAzPhotosHigh-End Date-607', 'datetime'),
+ 'HBAzPhotosHigh-Asset Count-608',
+ 'HBAzPhotosHigh-Summary Count-609',
+ 'HBAzPhotosHigh-Extended Count-610',
+ 'HBAzPhotosHigh-Day Group Assets Count-611',
+ 'HBAzPhotosHigh-Day Group Ext Assets Count-612',
+ 'HBAzPhotosHigh-Day Group Summary Assets Count-613',
+ 'HBAzPhotosHigh-Key Asset-614',
+ 'HBAzPhotosHigh-Is Curated-615',
+ 'HBAzPhotosHigh-Type-616',
+ 'HBAzPhotosHigh-Kind-617',
+ 'HBAzPhotosHigh-Category-618',
+ 'HBAzPhotosHigh-Visibility State-619',
+ 'HBAzPhotosHigh-Mood-620',
+ 'HBAzPhotosHigh-Enrichment State-621',
+ 'HBAzPhotosHigh-Enrichment Version-622',
+ 'HBAzPhotosHigh-Highlight Version-623',
+ 'zAsset-Highlight Being Extended Assets Key-624',
+ 'HBEAzPhotosHigh-UUID-625',
+ 'HBEAzPhotosHigh-zPK-626',
+ 'HBEAzPhotosHigh-zENT-627',
+ 'HBEAzPhotosHigh-zOPT-628',
+ 'HBEAzPhotosHigh-Promotion Score-629',
+ 'HBEAzPhotosHigh-Title-630',
+ 'HBEAzPhotosHigh-Subtitle-631',
+ 'HBEAzPhotosHigh-Verbose Smart Description-632',
+ ('HBEAzPhotosHigh-Start Date-633', 'datetime'),
+ 'HBEAzPhotosHigh-Start Timezone Offset-634',
+ 'HBEAzPhotosHigh-End Timezone Offset-635',
+ ('HBEAzPhotosHigh-End Date-636', 'datetime'),
+ 'HBEAzPhotosHigh-Asset Count-637',
+ 'HBEAzPhotosHigh-Summary Count-638',
+ 'HBEAzPhotosHigh-Extended Count-639',
+ 'HBEAzPhotosHigh-Day Group Assets Count-640',
+ 'HBEAzPhotosHigh-Day Group Ext Assets Count-641',
+ 'HBEAzPhotosHigh-Day Group Summary Assets Count-642',
+ 'HBEAzPhotosHigh-Parent PH Key-643',
+ 'HBEAzPhotosHigh-Year Key Asset-644',
+ 'HBEAzPhotosHigh-Month First Asset-645',
+ 'HBEAzPhotosHigh-Month Key Asset-646',
+ 'HBEAzPhotosHigh-Key Asset-647',
+ 'HBEAzPhotosHigh-Parent Day Group PH Key-648',
+ 'HBEAzPhotosHigh-Day Group Key Asset-649',
+ 'HBEAzPhotosHigh-is Curated-650',
+ 'HBEAzPhotosHigh-Type-651',
+ 'HBEAzPhotosHigh-Kind-652',
+ 'HBEAzPhotosHigh-Category-653',
+ 'HBEAzPhotosHigh-Visibility State-654',
+ 'HBEAzPhotosHigh-Mood-655',
+ 'HBEAzPhotosHigh-Enrichment State-656',
+ 'HBEAzPhotosHigh-Enrichment Version-657',
+ 'HBEAzPhotosHigh-Highlight Version-658',
+ 'zAsset-Highlight Being Summary Assets Key-659',
+ 'HBSAzPhotosHigh-UUID-660',
+ 'HBSAzPhotosHigh-zPK-661',
+ 'HBSAzPhotosHigh-zENT-662',
+ 'HBSAzPhotosHigh-zOPT-663',
+ 'HBSAzPhotosHigh-Promotion Score-664',
+ 'HBSAzPhotosHigh-Title-665',
+ 'HBSAzPhotosHigh-Subtitle-666',
+ 'HBSAzPhotosHigh-Verbose Smart Description-667',
+ ('HBSAzPhotosHigh-Start Date-668', 'datetime'),
+ 'HBSAzPhotosHigh-Start Timezone Offset-669',
+ 'HBSAzPhotosHigh-End Timezone Offset-670',
+ ('HBSAzPhotosHigh-End Date-671', 'datetime'),
+ 'HBSAzPhotosHigh-Asset Count-672',
+ 'HBSAzPhotosHigh-Summary Count-673',
+ 'HBSAzPhotosHigh-Extended Count-674',
+ 'HBSAzPhotosHigh-Day Group Assets Count-675',
+ 'HBSAzPhotosHigh-Day Group Ext Assets Count-676',
+ 'HBSAzPhotosHigh-Day Group Summary Assets Count-677',
+ 'HBSAzPhotosHigh-Parent PH Key-678',
+ 'HBSAzPhotosHigh-Year Key Asset-679',
+ 'HBSAzPhotosHigh-Month First Asset-680',
+ 'HBSAzPhotosHigh-Month Key Asset-681',
+ 'HBSAzPhotosHigh-Key Asset-682',
+ 'HBSAzPhotosHigh-Parent Day Group PH Key-683',
+ 'HBSAzPhotosHigh-Day Group Key Asset-684',
+ 'HBSAzPhotosHigh-is Curated-685',
+ 'HBSAzPhotosHigh-Type-686',
+ 'HBSAzPhotosHigh-Kind-687',
+ 'HBSAzPhotosHigh-Category-688',
+ 'HBSAzPhotosHigh-Visibility State-689',
+ 'HBSAzPhotosHigh-Mood-690',
+ 'HBSAzPhotosHigh-Enrichment State-691',
+ 'HBSAzPhotosHigh-Enrichment Version-692',
+ 'HBSAzPhotosHigh-Highlight Version-693',
+ 'zAsset-Highlight Being Key Asset Key-694',
+ 'HBKAzPhotosHigh-UUID-695',
+ 'HBKAzPhotosHigh-zPK-696',
+ 'HBKAzPhotosHigh-zENT-697',
+ 'HBKAzPhotosHigh-zOPT-698',
+ 'HBKAzPhotosHigh-Promotion Score-699',
+ 'HBKAzPhotosHigh-Title-700',
+ 'HBKAzPhotosHigh-Subtitle-701',
+ 'HBKAzPhotosHigh-Verbose Smart Description-702',
+ ('HBKAzPhotosHigh-Start Date-703', 'datetime'),
+ 'HBKAzPhotosHigh-Start Timezone Offset-704',
+ 'HBKAzPhotosHigh-End Timezone Offset-705',
+ ('HBKAzPhotosHigh-End Date-706', 'datetime'),
+ 'HBKAzPhotosHigh-Asset Count-707',
+ 'HBKAzPhotosHigh-Summary Count-708',
+ 'HBKAzPhotosHigh-Extended Count-709',
+ 'HBKAzPhotosHigh-Day Group Assets Count-710',
+ 'HBKAzPhotosHigh-Day Group Ext Assets Count-711',
+ 'HBKAzPhotosHigh-Day Group Summary Assets Count-712',
+ 'HBKAzPhotosHigh-Parent PH Key-713',
+ 'HBKAzPhotosHigh-Year Key Asset-714',
+ 'HBKAzPhotosHigh-Month First Asset-715',
+ 'HBKAzPhotosHigh-Month Key Asset-716',
+ 'HBKAzPhotosHigh-Key Asset-717',
+ 'HBKAzPhotosHigh-Parent Day Group PH Key-718',
+ 'HBKAzPhotosHigh-Day Group Key Asset-719',
+ 'HBKAzPhotosHigh-is Curated-720',
+ 'HBKAzPhotosHigh-Type-721',
+ 'HBKAzPhotosHigh-Kind-722',
+ 'HBKAzPhotosHigh-Category-723',
+ 'HBKAzPhotosHigh-Visibility State-724',
+ 'HBKAzPhotosHigh-Mood-725',
+ 'HBKAzPhotosHigh-Enrichment State-726',
+ 'HBKAzPhotosHigh-Enrichment Version-727',
+ 'HBKAzPhotosHigh-Highlight Version-728',
+ 'zAsset-Day Group Highlight Being Assets Key-729',
+ 'DGHBAzPhotosHigh-UUID-730',
+ 'DGHBAzPhotosHigh-zPK-731',
+ 'DGHBAzPhotosHigh-zENT-732',
+ 'DGHBAzPhotosHigh-zOPT-733',
+ 'DGHBAzPhotosHigh-Promotion Score-734',
+ 'DGHBAzPhotosHigh-Title-735',
+ 'DGHBAzPhotosHigh-Subtitle-736',
+ 'DGHBAzPhotosHigh-Verbose Smart Description-737',
+ ('DGHBAzPhotosHigh-Start Date-738', 'datetime'),
+ 'DGHBAzPhotosHigh-Start Timezone Offset-739',
+ 'DGHBAzPhotosHigh-End Timezone Offset-740',
+ ('DGHBAzPhotosHigh-End Date-741', 'datetime'),
+ 'DGHBAzPhotosHigh-Asset Count-742',
+ 'DGHBAzPhotosHigh-Summary Count-743',
+ 'DGHBAzPhotosHigh-Extended Count-744',
+ 'DGHBAzPhotosHigh-Day Group Assets Count-745',
+ 'DGHBAzPhotosHigh-Day Group Ext Assets Count-746',
+ 'DGHBAzPhotosHigh-Day Group Summary Assets Count-747',
+ 'DGHBAzPhotosHigh-Parent PH Key-748',
+ 'DGHBAzPhotosHigh-Year Key Asset-749',
+ 'DGHBAzPhotosHigh-Month First Asset-750',
+ 'DGHBAzPhotosHigh-Month Key Asset-751',
+ 'DGHBAzPhotosHigh-Key Asset-752',
+ 'DGHBAzPhotosHigh-Parent Day Group PH Key-753',
+ 'DGHBAzPhotosHigh-Day Group Key Asset-754',
+ 'DGHBAzPhotosHigh-is Curated-755',
+ 'DGHBAzPhotosHigh-Type-756',
+ 'DGHBAzPhotosHigh-Kind-757',
+ 'DGHBAzPhotosHigh-Category-758',
+ 'DGHBAzPhotosHigh-Visibility State-759',
+ 'DGHBAzPhotosHigh-Mood-760',
+ 'DGHBAzPhotosHigh-Enrichment State-761',
+ 'DGHBAzPhotosHigh-Enrichment Version-762',
+ 'DGHBAzPhotosHigh-Highlight Version-763',
+ 'zAsset-Day Group Highlight Being Extended Assets Key-764',
+ 'DGHBEAzPhotosHigh-UUID-765',
+ 'DGHBEAzPhotosHigh-zPK-766',
+ 'DGHBEAzPhotosHigh-zENT-767',
+ 'DGHBEAzPhotosHigh-zOPT-768',
+ 'DGHBEAzPhotosHigh-Promotion Score-769',
+ 'DGHBEAzPhotosHigh-Title-770',
+ 'DGHBEAzPhotosHigh-Subtitle-771',
+ 'DGHBEAzPhotosHigh-Verbose Smart Description-772',
+ ('DGHBEAzPhotosHigh-Start Date-773', 'datetime'),
+ 'DGHBEAzPhotosHigh-Start Timezone Offset-774',
+ 'DGHBEAzPhotosHigh-End Timezone Offset-775',
+ ('DGHBEAzPhotosHigh-End Date-776', 'datetime'),
+ 'DGHBEAzPhotosHigh-Asset Count-777',
+ 'DGHBEAzPhotosHigh-Summary Count-778',
+ 'DGHBEAzPhotosHigh-Extended Count-779',
+ 'DGHBEAzPhotosHigh-Day Group Assets Count-780',
+ 'DGHBEAzPhotosHigh-Day Group Ext Assets Count-781',
+ 'DGHBEAzPhotosHigh-Day Group Summary Assets Count-782',
+ 'DGHBEAzPhotosHigh-Parent PH Key-783',
+ 'DGHBEAzPhotosHigh-Year Key Asset-784',
+ 'DGHBEAzPhotosHigh-Month First Asset-785',
+ 'DGHBEAzPhotosHigh-Month Key Asset-786',
+ 'DGHBEAzPhotosHigh-Key Asset-787',
+ 'DGHBEAzPhotosHigh-Parent Day Group PH Key-788',
+ 'DGHBEAzPhotosHigh-Day Group Key Asset-789',
+ 'DGHBEAzPhotosHigh-is Curated-790',
+ 'DGHBEAzPhotosHigh-Type-791',
+ 'DGHBEAzPhotosHigh-Kind-792',
+ 'DGHBEAzPhotosHigh-Category-793',
+ 'DGHBEAzPhotosHigh-Visibility State-794',
+ 'DGHBEAzPhotosHigh-Mood-795',
+ 'DGHBEAzPhotosHigh-Enrichment State-796',
+ 'DGHBEAzPhotosHigh-Enrichment Version-797',
+ 'DGHBEAzPhotosHigh-Highlight Version-798',
+ 'zAsset-Day Group Highlight Being Key Asset-799',
+ 'DGHBKAzPhotosHigh-UUID-800',
+ 'DGHBKAzPhotosHigh-zPK-801',
+ 'DGHBKAzPhotosHigh-zENT-802',
+ 'DGHBKAzPhotosHigh-zOPT-803',
+ 'DGHBKAzPhotosHigh-Promotion Score-804',
+ 'DGHBKAzPhotosHigh-Title-805',
+ 'DGHBKAzPhotosHigh-Subtitle-806',
+ 'DGHBKAzPhotosHigh-Verbose Smart Description-807',
+ ('DGHBKAzPhotosHigh-Start Date-808', 'datetime'),
+ 'DGHBKAzPhotosHigh-Start Timezone Offset-809',
+ 'DGHBKAzPhotosHigh-End Timezone Offset-810',
+ ('DGHBKAzPhotosHigh-End Date-811', 'datetime'),
+ 'DGHBKAzPhotosHigh-Asset Count-812',
+ 'DGHBKAzPhotosHigh-Summary Count-813',
+ 'DGHBKAzPhotosHigh-Extended Count-814',
+ 'DGHBKAzPhotosHigh-Day Group Assets Count-815',
+ 'DGHBKAzPhotosHigh-Day Group Ext Assets Count-816',
+ 'DGHBKAzPhotosHigh-Day Group Summary Assets Count-817',
+ 'DGHBKAzPhotosHigh-Parent PH Key-818',
+ 'DGHBKAzPhotosHigh-Year Key Asset-819',
+ 'DGHBKAzPhotosHigh-Month First Asset-820',
+ 'DGHBKAzPhotosHigh-Month Key Asset-821',
+ 'DGHBKAzPhotosHigh-Key Asset-822',
+ 'DGHBKAzPhotosHigh-Parent Day Group PH Key-823',
+ 'DGHBKAzPhotosHigh-Day Group Key Asset-824',
+ 'DGHBKAzPhotosHigh-is Curated-825',
+ 'DGHBKAzPhotosHigh-Type-826',
+ 'DGHBKAzPhotosHigh-Kind-827',
+ 'DGHBKAzPhotosHigh-Category-828',
+ 'DGHBKAzPhotosHigh-Visibility State-829',
+ 'DGHBKAzPhotosHigh-Mood-830',
+ 'DGHBKAzPhotosHigh-Enrichment State-831',
+ 'DGHBKAzPhotosHigh-Enrichment Version-832',
+ 'DGHBKAzPhotosHigh-Highlight Version-833',
+ 'zAsset-Day Group Highlight Being Summary Assets Key-834',
+ 'DGHBSAzPhotosHigh-UUID-835',
+ 'DGHBSAzPhotosHigh-zPK-836',
+ 'DGHBSAzPhotosHigh-zENT-837',
+ 'DGHBSAzPhotosHigh-zOPT-838',
+ 'DGHBSAzPhotosHigh-Promotion Score-839',
+ 'DGHBSAzPhotosHigh-Title-840',
+ 'DGHBSAzPhotosHigh-Subtitle-841',
+ 'DGHBSAzPhotosHigh-Verbose Smart Description-842',
+ ('DGHBSAzPhotosHigh-Start Date-843', 'datetime'),
+ 'DGHBSAzPhotosHigh-Start Timezone Offset-844',
+ 'DGHBSAzPhotosHigh-End Timezone Offset-845',
+ ('DGHBSAzPhotosHigh-End Date-846', 'datetime'),
+ 'DGHBSAzPhotosHigh-Asset Count-847',
+ 'DGHBSAzPhotosHigh-Summary Count-848',
+ 'DGHBSAzPhotosHigh-Extended Count-849',
+ 'DGHBSAzPhotosHigh-Day Group Assets Count-850',
+ 'DGHBSAzPhotosHigh-Day Group Ext Assets Count-851',
+ 'DGHBSAzPhotosHigh-Day Group Summary Assets Count-852',
+ 'DGHBSAzPhotosHigh-Parent PH Key-853',
+ 'DGHBSAzPhotosHigh-Year Key Asset-854',
+ 'DGHBSAzPhotosHigh-Month First Asset-855',
+ 'DGHBSAzPhotosHigh-Month Key Asset-856',
+ 'DGHBSAzPhotosHigh-Key Asset-857',
+ 'DGHBSAzPhotosHigh-Parent Day Group PH Key-858',
+ 'DGHBSAzPhotosHigh-Day Group Key Asset-859',
+ 'DGHBSAzPhotosHigh-is Curated-860',
+ 'DGHBSAzPhotosHigh-Type-861',
+ 'DGHBSAzPhotosHigh-Kind-862',
+ 'DGHBSAzPhotosHigh-Category-863',
+ 'DGHBSAzPhotosHigh-Visibility State-864',
+ 'DGHBSAzPhotosHigh-Mood-865',
+ 'DGHBSAzPhotosHigh-Enrichment State-866',
+ 'DGHBSAzPhotosHigh-Enrichment Version-867',
+ 'DGHBSAzPhotosHigh-Highlight Version-868',
+ 'zAsset-Month Highlight Being First Asset Key-869',
+ 'MHBFAzPhotosHigh-UUID-870',
+ 'MHBFAzPhotosHigh-zPK-871',
+ 'MHBFAzPhotosHigh-zENT-872',
+ 'MHBFAzPhotosHigh-zOPT-873',
+ 'MHBFAzPhotosHigh-Promotion Score-874',
+ 'MHBFAzPhotosHigh-Title-875',
+ 'MHBFAzPhotosHigh-Subtitle-876',
+ 'MHBFAzPhotosHigh-Verbose Smart Description-877',
+ ('MHBFAzPhotosHigh-Start Date-878', 'datetime'),
+ 'MHBFAzPhotosHigh-Start Timezone Offset-879',
+ 'MHBFAzPhotosHigh-End Timezone Offset-880',
+ ('MHBFAzPhotosHigh-End Date-881', 'datetime'),
+ 'MHBFAzPhotosHigh-Asset Count-882',
+ 'MHBFAzPhotosHigh-Summary Count-883',
+ 'MHBFAzPhotosHigh-Extended Count-884',
+ 'MHBFAzPhotosHigh-Day Group Assets Count-885',
+ 'MHBFAzPhotosHigh-Day Group Ext Assets Count-886',
+ 'MHBFAzPhotosHigh-Day Group Summary Assets Count-887',
+ 'MHBFAzPhotosHigh-Parent PH Key-888',
+ 'MHBFAzPhotosHigh-Year Key Asset-889',
+ 'MHBFAzPhotosHigh-Month First Asset-890',
+ 'MHBFAzPhotosHigh-Month Key Asset-891',
+ 'MHBFAzPhotosHigh-Key Asset-892',
+ 'MHBFAzPhotosHigh-Parent Day Group PH Key-893',
+ 'MHBFAzPhotosHigh-Day Group Key Asset-894',
+ 'MHBFAzPhotosHigh-is Curated-895',
+ 'MHBFAzPhotosHigh-Type-896',
+ 'MHBFAzPhotosHigh-Kind-897',
+ 'MHBFAzPhotosHigh-Category-898',
+ 'MHBFAzPhotosHigh-Visibility State-899',
+ 'MHBFAzPhotosHigh-Mood-900',
+ 'MHBFAzPhotosHigh-Enrichment State-901',
+ 'MHBFAzPhotosHigh-Enrichment Version-902',
+ 'MHBFAzPhotosHigh-Highlight Version-903',
+ 'zAsset-Month Highlight Being Key Asset-904',
+ 'MHBKAzPhotosHigh-UUID-905',
+ 'MHBKAzPhotosHigh-zPK-906',
+ 'MHBKAzPhotosHigh-zENT-907',
+ 'MHBKAzPhotosHigh-zOPT-908',
+ 'MHBKAzPhotosHigh-Promotion Score-909',
+ 'MHBKAzPhotosHigh-Title-910',
+ 'MHBKAzPhotosHigh-Subtitle-911',
+ 'MHBKAzPhotosHigh-Verbose Smart Description-912',
+ ('MHBKAzPhotosHigh-Start Date-913', 'datetime'),
+ 'MHBKAzPhotosHigh-Start Timezone Offset-914',
+ 'MHBKAzPhotosHigh-End Timezone Offset-915',
+ ('MHBKAzPhotosHigh-End Date-916', 'datetime'),
+ 'MHBKAzPhotosHigh-Asset Count-917',
+ 'MHBKAzPhotosHigh-Summary Count-918',
+ 'MHBKAzPhotosHigh-Extended Count-919',
+ 'MHBKAzPhotosHigh-Day Group Assets Count-920',
+ 'MHBKAzPhotosHigh-Day Group Ext Assets Count-921',
+ 'MHBKAzPhotosHigh-Day Group Summary Assets Count-922',
+ 'MHBKAzPhotosHigh-Parent PH Key-923',
+ 'MHBKAzPhotosHigh-Year Key Asset-924',
+ 'MHBKAzPhotosHigh-Month First Asset-925',
+ 'MHBKAzPhotosHigh-Month Key Asset-926',
+ 'MHBKAzPhotosHigh-Key Asset-927',
+ 'MHBKAzPhotosHigh-Parent Day Group PH Key-928',
+ 'MHBKAzPhotosHigh-Day Group Key Asset-929',
+ 'MHBKAzPhotosHigh-is Curated-930',
+ 'MHBKAzPhotosHigh-Type-931',
+ 'MHBKAzPhotosHigh-Kind-932',
+ 'MHBKAzPhotosHigh-Category-933',
+ 'MHBKAzPhotosHigh-Visibility State-934',
+ 'MHBKAzPhotosHigh-Mood-935',
+ 'MHBKAzPhotosHigh-Enrichment State-936',
+ 'MHBKAzPhotosHigh-Enrichment Version-937',
+ 'MHBKAzPhotosHigh-Highlight Version-938',
+ 'zAsset-Year Highlight Being Key Asset-939',
+ 'YHBKAzPhotosHigh-UUID-940',
+ 'YHBKAzPhotosHigh-zPK-941',
+ 'YHBKAzPhotosHigh-zENT-942',
+ 'YHBKAzPhotosHigh-zOPT-943',
+ 'YHBKAzPhotosHigh-Promotion Score-944',
+ 'YHBKAzPhotosHigh-Title-945',
+ 'YHBKAzPhotosHigh-Subtitle-946',
+ 'YHBKAzPhotosHigh-Verbose Smart Description-947',
+ ('YHBKAzPhotosHigh-Start Date-948', 'datetime'),
+ 'YHBKAzPhotosHigh-Start Timezone Offset-949',
+ 'YHBKAzPhotosHigh-End Timezone Offset-950',
+ ('YHBKAzPhotosHigh-End Date-951', 'datetime'),
+ 'YHBKAzPhotosHigh-Asset Count-952',
+ 'YHBKAzPhotosHigh-Summary Count-953',
+ 'YHBKAzPhotosHigh-Extended Count-954',
+ 'YHBKAzPhotosHigh-Day Group Assets Count-955',
+ 'YHBKAzPhotosHigh-Day Group Ext Assets Count-956',
+ 'YHBKAzPhotosHigh-Day Group Summary Assets Count-957',
+ 'YHBKAzPhotosHigh-Parent PH Key-958',
+ 'YHBKAzPhotosHigh-Year Key Asset-959',
+ 'YHBKAzPhotosHigh-Month First Asset-960',
+ 'YHBKAzPhotosHigh-Month Key Asset-961',
+ 'YHBKAzPhotosHigh-Key Asset-962',
+ 'YHBKAzPhotosHigh-Parent Day Group PH Key-963',
+ 'YHBKAzPhotosHigh-Day Group Key Asset-964',
+ 'YHBKAzPhotosHigh-is Curated-965',
+ 'YHBKAzPhotosHigh-Type-966',
+ 'YHBKAzPhotosHigh-Kind-967',
+ 'YHBKAzPhotosHigh-Category-968',
+ 'YHBKAzPhotosHigh-Visibility State-969',
+ 'YHBKAzPhotosHigh-Mood-970',
+ 'YHBKAzPhotosHigh-Enrichment State-971',
+ 'YHBKAzPhotosHigh-Enrichment Version-972',
+ 'YHBKAzPhotosHigh-Highlight Version-973',
+ 'z3SuggBKA-3KeyAssets = zAsset-zPK-974',
+ 'z3SuggBKA-55SuggBeingKeyAssets = zSugg-zPK-975',
+ 'SBKAzSugg-zPK-976',
+ 'SBKAzSugg-UUID-977',
+ ('SBKAzSugg-Start Date-978', 'datetime'),
+ 'SBKAzSugg-State-979',
+ 'SBKAzSugg-Featured State-980',
+ 'SBKAzSugg-Notification State-981',
+ ('SBKAzSugg-Creation Date-982', 'datetime'),
+ ('SBKAzSugg-End Date-983', 'datetime'),
+ ('SBKAzSugg-Activation Date-984', 'datetime'),
+ ('SBKAzSugg-Expunge Date-985', 'datetime'),
+ ('SBKAzSugg-Relevant Until Date-986', 'datetime'),
+ 'SBKAzSugg-Title-987',
+ 'SBKAzSugg-Sub Title-988',
+ 'SBKAzSugg-Cached Count-989',
+ 'SBKAzSugg-Cahed Photos Count-990',
+ 'SBKAzSugg-Cached Videos Count-991',
+ 'SBKAzSugg-Type-992',
+ 'SBKAzSugg-Sub Type-993',
+ 'SBKAzSugg-Version-994',
+ 'SBKAzSugg-Cloud Local State-995',
+ 'SBKAzSugg-Cloud Delete State-996',
+ 'z3SuggBRA-3RepAssets1-997',
+ 'z3SuggBRA-55SuggBeingRepAssets-998',
+ 'SBRAzSugg-zPK-999',
+ 'SBRAzSugg-UUID-1000',
+ ('SBRAzSugg-Start Date-1001', 'datetime'),
+ 'SBRAzSugg-State-1002',
+ 'SBRAzSugg-Featured State-1003',
+ 'SBRAzSugg-Notification State-1004',
+ ('SBRAzSugg-Creation Date-1005', 'datetime'),
+ ('SBRAzSugg-End Date-1006', 'datetime'),
+ ('SBRAzSugg-Activation Date-1007', 'datetime'),
+ ('SBRAzSugg-Expunge Date-1008', 'datetime'),
+ ('SBRAzSugg-Relevant Until Date-1009', 'datetime'),
+ 'SBRAzSugg-Title-1010',
+ 'SBRAzSugg-Sub Title-1011',
+ 'SBRAzSugg-Cached Count-1012',
+ 'SBRAzSugg-Cahed Photos Count-1013',
+ 'SBRAzSugg-Cached Videos Count-1014',
+ 'SBRAzSugg-Type-1015',
+ 'SBRAzSugg-Sub Type-1016',
+ 'SBRAzSugg-Version-1017',
+ 'SBRAzSugg-Cloud Local State-1018',
+ 'SBRAzSugg-Cloud Delete State-1019',
+ 'zAsset-Highlight Visibility Score-1020',
+ 'zMedAnlyAstAttr-Media Analysis Version-1021',
+ 'zMedAnlyAstAttr-Audio Classification-1022',
+ 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-1023',
+ 'zMedAnlyAstAttr-Best Video Range Start Time Scale-1024',
+ 'zMedAnlyAstAttr-Best Video Range Duration Value-1025',
+ 'zMedAnlyAstAttr-Best Video Range Start Value-1026',
+ 'zMedAnlyAstAttr-Packed Best Playback Rect-1027',
+ 'zMedAnlyAstAttr-Activity Score-1028',
+ 'zMedAnlyAstAttr-Video Score-1029',
+ 'zMedAnlyAstAttr-AutoPlay Suggestion Score-1030',
+ 'zMedAnlyAstAttr-Blurriness Score-1031',
+ 'zMedAnlyAstAttr-Exposure Score-1032',
+ 'zAssetAnalyState-Asset UUID-4TableStart-1033',
+ 'zAssetAnalyState-Analyisis State-1034',
+ 'zAssetAnalyState-Worker Flags-1035',
+ 'zAssetAnalyState-Worker Type-1036',
+ ('zAssetAnalyState-Ignore Until Date-1037', 'datetime'),
+ ('zAssetAnalyState-Last Ignored Date-1038', 'datetime'),
+ ('zAssetAnalyState-Sort Token-1039', 'datetime'),
+ 'zAsset-Overall Aesthetic Score-1040',
+ 'zCompAssetAttr-Behavioral Score-1041',
+ 'zCompAssetAttr-Failure Score zCompAssetAttr-1042',
+ 'zCompAssetAttr-Harmonious Color Score-1043',
+ 'zCompAssetAttr-Immersiveness Score-1044',
+ 'zCompAssetAttr-Interaction Score-1045',
+ 'zCompAssetAttr-Intersting Subject Score-1046',
+ 'zCompAssetAttr-Intrusive Object Presence Score-1047',
+ 'zCompAssetAttr-Lively Color Score-1048',
+ 'zCompAssetAttr-Low Light-1049',
+ 'zCompAssetAttr-Noise Score-1050',
+ 'zCompAssetAttr-Pleasant Camera Tilt Score-1051',
+ 'zCompAssetAttr-Pleasant Composition Score-1052',
+ 'zCompAssetAttr-Pleasant Lighting Score-1053',
+ 'zCompAssetAttr-Pleasant Pattern Score-1054',
+ 'zCompAssetAttr-Pleasant Perspective Score-1055',
+ 'zCompAssetAttr-Pleasant Post Processing Score-1056',
+ 'zCompAssetAttr-Pleasant Reflection Score-1057',
+ 'zCompAssetAttrPleasant Symmetry Score-1058',
+ 'zCompAssetAttr-Sharply Focused Subject Score-1059',
+ 'zCompAssetAttr-Tastfully Blurred Score-1060',
+ 'zCompAssetAttr-Well Chosen Subject Score-1061',
+ 'zCompAssetAttr-Well Framed Subject Score-1062',
+ 'zCompAssetAttr-Well Timeed Shot Score-1063',
+ 'zCldRes-Asset UUID-4TableStart-1064',
+ 'zCldRes-Cloud Local State-1065',
+ 'zCldRes-File Size-1066',
+ 'zCldRes-Height-1067',
+ 'zCldRes-Is Available-1068',
+ 'zCldRes-Is Locally Available-1069',
+ 'zCldRes-Prefetch Count-1070',
+ 'zCldRes-Source Type-1071',
+ 'zCldRes-Type-1072',
+ 'zCldRes-Width-1073',
+ ('zCldRes-Date Created-1074', 'datetime'),
+ ('zCldRes-Last OnDemand Download Date-1075', 'datetime'),
+ ('zCldRes-Last Prefetch Date-1076', 'datetime'),
+ 'zCldRes-Prunedat-1077',
+ 'zCldRes-File Path-1078',
+ 'zCldRes-Fingerprint-1079',
+ 'zCldRes-Item ID-1080',
+ 'zCldRes-UniID-1081',
+ 'zAddAssetAttr-zPK-1082',
+ 'zAddAssetAttr-zENT-1083',
+ 'ZAddAssetAttr-zOPT-1084',
+ 'zAddAssetAttr-zAsset= zAsset_zPK-1085',
+ 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-1086',
+ 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-1087',
+ 'zAddAssetAttr-Master Fingerprint-1088',
+ 'zAddAssetAttr-Public Global UUID-1089',
+ 'zAddAssetAttr-Deferred Photo Identifier-1090',
+ 'zAddAssetAttr-Original Assets UUID-1091',
+ 'zAddAssetAttr-Import Session ID-1092',
+ 'zAddAssetAttr-Originating Asset Identifier-1093',
+ 'zAddAssetAttr.Adjusted Fingerprint-1094',
+ 'zAlbumList-zPK= Album List Key-1095',
+ 'zAlbumList-zENT-1096',
+ 'zAlbumList-zOPT-1097',
+ 'zAlbumList-ID Key-1098',
+ 'zAlbumList-UUID-1099',
+ 'zAsset-zPK-1100',
+ 'zAsset-zENT-1101',
+ 'zAsset-zOPT-1102',
+ 'zAsset-Master= zCldMast-zPK-1103',
+ 'zAsset-Extended Attributes= zExtAttr-zPK-1104',
+ 'zAsset-Import Session Key-1105',
+ 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-1106',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-1107',
+ 'zAsset-Moment Share Key= zShare-zPK-1108',
+ 'zAsset-zMoment Key= zMoment-zPK-1109',
+ 'zAsset-Computed Attributes Asset Key-1110',
+ 'zAsset-Highlight Being Assets-HBA Key-1111',
+ 'zAsset-Highlight Being Extended Assets-HBEA Key-1112',
+ 'zAsset-Highligh Being Summary Assets-HBSA Key-1113',
+ 'zAsset-Day Group Highlight Being Assets-DGHBA Key-1114',
+ 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-1115',
+ 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-1116',
+ 'zAsset-Promotion Score-1117',
+ 'zAsset-Media Analysis Attributes Key-1118',
+ 'zAsset-Media Group UUID-1119',
+ 'zAsset-UUID = store.cloudphotodb-1120',
+ 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-1121',
+ 'zAsset.Cloud Collection GUID-1122',
+ 'zAsset-Avalanche UUID-1123',
+ 'zAssetAnalyState-zPK-1124',
+ 'zAssetAnalyState-zEnt-1125',
+ 'zAssetAnalyState-zOpt-1126',
+ 'zAssetAnalyState-Asset= zAsset-zPK-1127',
+ 'zAssetAnalyState-Asset UUID-1128',
+ 'zAssetDes-zPK-1129',
+ 'zAssetDes-zENT-1130',
+ 'zAssetDes-zOPT-1131',
+ 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-1132',
+ 'zCldFeedEnt-zPK= zCldShared keys-1133',
+ 'zCldFeedEnt-zENT-1134',
+ 'zCldFeedEnt-zOPT-1135',
+ 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-1136',
+ 'zCldFeedEnt-Entry Invitation Record GUID-1137',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-1138',
+ 'zCldMast-zPK= zAsset-Master-1139',
+ 'zCldMast-zENT-1140',
+ 'zCldMast-zOPT-1141',
+ 'zCldMast-Moment Share Key= zShare-zPK-1142',
+ 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-1143',
+ 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-1144',
+ 'zCldMast-Originating Asset ID-1145',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-1146',
+ 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-1147',
+ 'CMzCldMastMedData-zENT-1148',
+ 'CMzCldMastMedData-zOPT-1149',
+ 'CMzCldMastMedData-CldMast= zCldMast-zPK-1150',
+ 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-1151',
+ 'AAAzCldMastMedData-zENT-1152',
+ 'AAAzCldMastMedData-zOPT-1153',
+ 'AAAzCldMastMedData-CldMast key-1154',
+ 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-1155',
+ 'zCldRes-zPK-1156',
+ 'zCldRes-zENT-1157',
+ 'zCldRes-zOPT-1158',
+ 'zCldRes-Asset= zAsset-zPK-1159',
+ 'zCldRes-Cloud Master= zCldMast-zPK-1160',
+ 'zCldRes-Asset UUID-1161',
+ 'zCldShareAlbumInvRec-zPK-1162',
+ 'zCldShareAlbumInvRec-zEnt-1163',
+ 'zCldShareAlbumInvRec-zOpt-1164',
+ 'zCldShareAlbumInvRec-Album Key-1165',
+ 'zCldShareAlbumInvRec-FOK Album Key-1166',
+ 'zCldShareAlbumInvRec-Album GUID-1167',
+ 'zCldShareAlbumInvRec-Cloud GUID-1168',
+ 'zCldSharedComment-zPK-1169',
+ 'zCldSharedComment-zENT-1170',
+ 'zCldSharedComment-zOPT-1171',
+ 'zCldSharedComment-Commented Asset Key= zAsset-zPK-1172',
+ 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-1173',
+ 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-1174',
+ 'zCldSharedComment-Liked Asset Key= zAsset-zPK-1175',
+ 'zCldSharedComment-CldFeedLikeCommentEntry Key-1176',
+ 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-1177',
+ 'zCldSharedComment-Cloud GUID-1178',
+ 'zCompAssetAttr-zPK-1179',
+ 'zCompAssetAttr-zEnt-1180',
+ 'zCompAssetAttr-zOpt-1181',
+ 'zCompAssetAttr-Asset Key-1182',
+ 'zDetFace-zPK-1183',
+ 'zDetFace-zEnt-1184',
+ 'zDetFace.zOpt-1185',
+ 'zDetFace-Asset= zAsset-zPK or Asset Containing Face-1186',
+ 'zDetFace-Person= zPerson-zPK-1187',
+ 'zDetFace-Person Being Key Face-1188',
+ 'zDetFace-Face Print-1189',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-1190',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-1191',
+ 'zDetFace-UUID-1192',
+ 'zDetFaceGroup-zPK-1193',
+ 'zDetFaceGroup-zENT-1194',
+ 'zDetFaceGroup-zOPT-1195',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-1196',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-1197',
+ 'zDetFaceGroup-UUID-1198',
+ 'zDetFacePrint-zPK-1199',
+ 'zDetFacePrint-zEnt-1200',
+ 'zDetFacePrint-zOpt-1201',
+ 'zDetFacePrint-Face Key-1202',
+ 'zExtAttr-zPK= zAsset-zExtendedAttributes-1203',
+ 'zExtAttr-zENT-1204',
+ 'zExtAttr-zOPT-1205',
+ 'zExtAttr-Asset Key-1206',
+ 'zFaceCrop-zPK-1207',
+ 'zFaceCrop-zEnt-1208',
+ 'zFaceCrop-zOpt-1209',
+ 'zFaceCrop-Asset Key-1210',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-1211',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-1212',
+ 'zFaceCrop-Face Key-1213',
+ 'zFaceCrop-UUID-1214',
+ 'zGenAlbum-zPK=26AlbumLists= 26Albums-1215',
+ 'zGenAlbum-zENT-1216',
+ 'zGenAlbum-zOpt-1217',
+ 'zGenAlbum-Key Asset-Key zAsset-zPK-1218',
+ 'zGenAlbum-Secondary Key Asset-1219',
+ 'zGenAlbum-Tertiary Key Asset-1220',
+ 'zGenAlbum-Custom Key Asset-1221',
+ 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-1222',
+ 'zGenAlbum-FOK Parent Folder-1223',
+ 'zGenAlbum-UUID-1224',
+ 'zGenAlbum-Cloud_GUID = store.cloudphotodb-1225',
+ 'zGenAlbum-Project Render UUID-1226',
+ 'zIntResou-zPK-1227',
+ 'zIntResou-zENT-1228',
+ 'zIntResou-zOPT-1229',
+ 'zIntResou-Asset= zAsset_zPK-1230',
+ 'zIntResou-Fingerprint-1231',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-1232',
+ 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1233',
+ 'zMedAnlyAstAttr-zEnt-1234',
+ 'zMedAnlyAstAttr-zOpt-1235',
+ 'zMedAnlyAstAttr-Asset= zAsset-zPK-1236',
+ 'zPerson-zPK=zDetFace-Person-1237',
+ 'zPerson-zEnt-1238',
+ 'zPerson-zOpt-1239',
+ 'zPerson-KeyFace=zDetFace-zPK-1240',
+ 'zPerson-Assoc Face Group Key-1241',
+ 'zPerson-Person UUID-1242',
+ 'zSceneP-zPK-1243',
+ 'zSceneP-zENT-1244',
+ 'zSceneP-zOPT-1245',
+ 'zShare-zPK-1246',
+ 'zShare-zENT-1247',
+ 'zShare-zOPT-1248',
+ 'zShare-UUID-1249',
+ 'SPLzShare-UUID-1250',
+ 'zShare-Scope ID = store.cloudphotodb-1251',
+ 'zSharePartic-zPK-1252',
+ 'zSharePartic-zENT-1253',
+ 'zSharePartic-zOPT-1254',
+ 'zSharePartic-Share Key= zShare-zPK-1255',
+ 'zSharePartic-UUID-1256',
+ 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1257',
+ 'zUnmAdj-zOPT-1258',
+ 'zUnmAdj-zENT-1259',
+ 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1260',
+ 'zUnmAdj-UUID-1261',
+ 'zUnmAdj-Other Adjustments Fingerprint-1262',
+ 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1263',
+ 'z25AlbumList-25Albums= zGenAlbum-zPK-1264',
+ 'z25AlbumList-Album List Key-1265',
+ 'z25AlbumList-FOK25Albums Key-1266',
+ 'z26Assets-26Albums= zGenAlbum-zPK-1267',
+ 'z26Assets-3Asset Key= zAsset-zPK in the Album-1268',
+ 'z26Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1269')
+ data_list = get_sqlite_db_records(source_path, query)
-
-__artifacts_v2__ = {
- 'Ph94-1-iOS14_Ref_for_Asset_Analysis-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite 94.1 iOS14 Reference for Asset Analysis',
- 'description': 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest'
- ' set of decoded data based on testing and research conducted by Scott Koenig'
- ' https://theforensicscooter.com/. I recommend opening the TSV generated reports'
- ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer'
- ' to view, search and filter the results.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '1.0',
- 'date': '2024-04-19',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph94ios14refforassetanalysisphdapsql'
- },
- 'Ph94-2-iOS14_Ref_for_Asset_Analysis-SyndPL': {
- 'name': 'SyndPL Photos.sqlite 94.2 iOS14 Reference for Asset Analysis',
- 'description': 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.'
- ' This parser includes the largest set of decoded data based on testing and research'
- ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the'
- ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md'
- ' TimelineExplorer to view, search and filter the results.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '1.0',
- 'date': '2024-04-19',
- 'requirements': 'Acquisition that contains Syndication.photoslibrary-database-Photos.sqlite',
- 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis',
- 'notes': '',
- 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',
- 'function': 'get_ph94ios14refforassetanalysissyndpl'
- }
-}
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph95iOS15REFforAssetAnalysis.py b/scripts/artifacts/Ph95iOS15REFforAssetAnalysis.py
index de38abc8..ad23f6cc 100644
--- a/scripts/artifacts/Ph95iOS15REFforAssetAnalysis.py
+++ b/scripts/artifacts/Ph95iOS15REFforAssetAnalysis.py
@@ -1,41 +1,66 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 1.0
-#
-# Description:
-# Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest set of decoded data based on
-# testing and research conducted by Scott Koenig https://theforensicscooter.com/ and
-# queries found at https://github.com/ScottKjr3347.
-# I recommend opening the TSV generated reports with Zimmerman's Tools https://ericzimmerman.github.io/#!index.md
-# TimelineExplorer to view, search and filter the results.
-#
+__artifacts_v2__ = {
+ 'Ph95_1iOS15RefforAssetAnalysisPhDaPsql': {
+ 'name': 'Ph95.1-iOS15_Ref_for_Asset_Analysis-PhDaPsql',
+ 'description': 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest'
+ ' set of decoded data based on testing and research conducted by Scott Koenig'
+ ' https://theforensicscooter.com/. I recommend opening the TSV generated reports'
+ ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer'
+ ' to view, search and filter the results.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ },
+ 'Ph95_2iOS15RefforAssetAnalysisSyndPL': {
+ 'name': 'Ph95.2-iOS15_Ref_for_Asset_Analysis-SyndPL',
+ 'description': 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.'
+ ' This parser includes the largest set of decoded data based on testing and research'
+ ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the'
+ ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md'
+ ' TimelineExplorer to view, search and filter the results.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains Syndication.photoslibrary-database-Photos.sqlite',
+ 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis',
+ 'notes': '',
+ 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
-
-
-def get_ph95ios15refforassetanalysisphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
- for file_found in files_found:
- file_found = str(file_found)
+@artifact_processor
+def Ph95_1iOS15RefforAssetAnalysisPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if (version.parse(iosversion) <= version.parse("14.8.1")) or (version.parse(iosversion) >= version.parse("16")):
- logfunc(f"Unsupported version for PhotoData-Photos.sqlite reference for asset analysis from iOS " + iosversion)
+ logfunc(f"Unsupported version for PhotoData-Photos.sqlite for iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found, "Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -1830,7 +1855,7 @@ def get_ph95ios15refforassetanalysisphdapsql(files_found, report_folder, seeker,
zAssetAnalyState.ZWORKERTYPE AS 'zAssetAnalyState-Worker Type',
DateTime(zAssetAnalyState.ZIGNOREUNTILDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Ignore Until Date',
DateTime(zAssetAnalyState.ZLASTIGNOREDDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Last Ignored Date',
- zAssetAnalyState.ZSORTTOKEN AS 'zAssetAnalyState-Sort Token',
+ DateTime(zAssetAnalyState.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Sort Token',
zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES AS 'zMedAnlyAstAttr-Character Recognition Attr',
zCharRecogAttr.ZALGORITHMVERSION AS 'zCharRecogAttr-Algorithm Version',
zCharRecogAttr.ZADJUSTMENTVERSION AS 'zCharRecogAttr-Adjustment Version',
@@ -2115,1016 +2140,994 @@ def get_ph95ios15refforassetanalysisphdapsql(files_found, report_folder, seeker,
LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON
LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP
ORDER BY zAsset.ZADDEDDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
-
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
- row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
- row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
- row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
- row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
- row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
- row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
- row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
- row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
- row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
- row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
- row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
- row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
- row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
- row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
- row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
- row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
- row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
- row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
- row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
- row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307],
- row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315],
- row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323],
- row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331],
- row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339],
- row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347],
- row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355],
- row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363],
- row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371],
- row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379],
- row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387],
- row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395],
- row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403],
- row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411],
- row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419],
- row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427],
- row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435],
- row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443],
- row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451],
- row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459],
- row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467],
- row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475],
- row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483],
- row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491],
- row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499],
- row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507],
- row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515],
- row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523],
- row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531],
- row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539],
- row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547],
- row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555],
- row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563],
- row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571],
- row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579],
- row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587],
- row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595],
- row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603],
- row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611],
- row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619],
- row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627],
- row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635],
- row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643],
- row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651],
- row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659],
- row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667],
- row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675],
- row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683],
- row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691],
- row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699],
- row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707],
- row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715],
- row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723],
- row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731],
- row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739],
- row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747],
- row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755],
- row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763],
- row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771],
- row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779],
- row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787],
- row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795],
- row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803],
- row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811],
- row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819],
- row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827],
- row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835],
- row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843],
- row[844], row[845], row[846], row[847], row[848], row[849], row[850]))
-
- counter += 1
-
- description = 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest' \
- ' set of decoded data based on testing and research conducted by Scott Koenig' \
- ' https://theforensicscooter.com/. I recommend opening the TSV generated reports' \
- ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer' \
- ' to view, search and filter the results.'
- report = ArtifactHtmlReport('Ph95.1-iOS15_Ref_for_Asset_Analysis-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph95.1-iOS15_Ref_for_Asset_Analysis-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Added Date-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset Complete-2',
- 'zAsset-zPK-4QueryStart-3',
- 'zAddAssetAttr-zPK-4QueryStart-4',
- 'zAsset-UUID = store.cloudphotodb-4QueryStart-5',
- 'zAddAssetAttr-Master Fingerprint-4TableStart-6',
- 'zIntResou-Fingerprint-4TableStart-7',
- 'zAsset-Bundle Scope-8',
- 'zAsset-Syndication State-9',
- 'zAsset-Cloud is My Asset-10',
- 'zAsset-Cloud is deletable-Asset-11',
- 'zAsset-Cloud_Local_State-12',
- 'zAsset-Visibility State-13',
- 'zExtAttr-Camera Make-14',
- 'zExtAttr-Camera Model-15',
- 'zExtAttr-Lens Model-16',
- 'zExtAttr-Flash Fired-17',
- 'zExtAttr-Focal Lenght-18',
- 'zExtAttr-Focal Lenth in 35MM-19',
- 'zExtAttr-Digital Zoom Ratio-20',
- 'zAsset-Derived Camera Capture Device-21',
- 'zAddAssetAttr-Camera Captured Device-22',
- 'zAddAssetAttr-Imported by-23',
- 'zCldMast-Imported By-24',
- 'zAddAssetAttr.Imported by Bundle Identifier-25',
- 'zAddAssetAttr-Imported By Display Name-26',
- 'zCldMast-Imported by Bundle ID-27',
- 'zCldMast-Imported by Display Name-28',
- 'zAsset-Saved Asset Type-29',
- 'zAsset-Directory-Path-30',
- 'zAsset-Filename-31',
- 'zAddAssetAttr- Original Filename-32',
- 'zCldMast- Original Filename-33',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-34',
- 'zAddAssetAttr-Date Created Source-35',
- 'zAsset-Date Created-36',
- 'zCldMast-Creation Date-37',
- 'zIntResou-CldMst Date Created-38',
- 'zAddAssetAttr-Time Zone Name-39',
- 'zAddAssetAttr-Time Zone Offset-40',
- 'zAddAssetAttr-Inferred Time Zone Offset-41',
- 'zAddAssetAttr-EXIF-String-42',
- 'zAsset-Modification Date-43',
- 'zAsset-Last Shared Date-44',
- 'zCldMast-Cloud Local State-45',
- 'zCldMast-Import Date-46',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-47',
- 'zAddAssetAttr-Import Session ID-4QueryStart-48',
- 'zAddAssetAttr-Alt Import Image Date-49',
- 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-50',
- 'zAsset-Cloud Batch Publish Date-51',
- 'zAsset-Cloud Server Publish Date-52',
- 'zAsset-Cloud Download Requests-53',
- 'zAsset-Cloud Batch ID-54',
- 'zAddAssetAttr-Upload Attempts-55',
- 'zAsset-Latitude-56',
- 'zExtAttr-Latitude-57',
- 'zAsset-Longitude-58',
- 'zExtAttr-Longitude-59',
- 'zAddAssetAttr-GPS Horizontal Accuracy-60',
- 'zAddAssetAttr-Location Hash-61',
- 'zAddAssetAttr-Shifted Location Valid-62',
- 'zAddAssetAttr-Shifted Location Data-63',
- 'zAddAssetAttr-Reverse Location Is Valid-64',
- 'zAddAssetAttr-Reverse Location Data-65',
- 'ParentzGenAlbum-UUID-4QueryStart-66',
- 'zGenAlbum-UUID-4QueryStart-67',
- 'SWYConverszGenAlbum-UUID-4QueryStart-68',
- 'ParentzGenAlbum-Cloud GUID-4QueryStart-69',
- 'zGenAlbum-Cloud GUID-4QueryStart-70',
- 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-71',
- 'zCldShareAlbumInvRec-Album GUID-4QueryStart-72',
- 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-73',
- 'zGenAlbum-Project Render UUID-4QueryStart-74',
- 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-75',
- 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-76',
- 'zGenAlbum-Cloud_Local_State-4QueryStart-77',
- 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-78',
- 'ParentzGenAlbum- Creation Date- 4QueryStart-79',
- 'zGenAlbum- Creation Date- 4QueryStart-80',
- 'SWYConverszGenAlbum- Creation Date- 4QueryStart-81',
- 'zGenAlbum- Cloud Creation Date- 4QueryStart-82',
- 'SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-83',
- 'zGenAlbum- Start Date- 4QueryStart-84',
- 'SWYConverszGenAlbum- Start Date- 4QueryStart-85',
- 'zGenAlbum- End Date- 4QueryStart-86',
- 'SWYConverszGenAlbum- End Date- 4QueryStart-87',
- 'zGenAlbum-Cloud Subscription Date- 4QueryStart-88',
- 'SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-89',
- 'ParentzGenAlbum- Title- 4QueryStart-90',
- 'zGenAlbum- Title-User&System Applied- 4QueryStart-91',
- 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-92',
- 'zGenAlbum-Import Session ID-SWY- 4QueryStart-93',
- 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-94',
- 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-95',
- 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-96',
- 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-97',
- 'SWYConverszGenAlbum- Syndicate-4QueryStart-98',
- 'zGenAlbum-zENT- Entity- 4QueryStart-99',
- 'ParentzGenAlbum- Kind- 4QueryStart-100',
- 'zGenAlbum-Album Kind- 4QueryStart-101',
- 'SWYConverszGenAlbum-Album Kind- 4QueryStart-102',
- 'AAAzCldMastMedData-zOPT-103',
- 'zAddAssetAttr-Media Metadata Type-104',
- 'AAAzCldMastMedData-Data-105',
- 'CldMasterzCldMastMedData-zOPT-106',
- 'zCldMast-Media Metadata Type-107',
- 'CMzCldMastMedData-Data-108',
- 'zAddAssetAttr-Syndication History-109',
- 'zMedAnlyAstAttr-Syndication Processing Version-110',
- 'zMedAnlyAstAttr-Syndication Processing Value-111',
- 'zAsset-Orientation-112',
- 'zAddAssetAttr-Original Orientation-113',
- 'zAsset-Kind-114',
- 'zAsset-Kind-Sub-Type-115',
- 'zAddAssetAttr-Cloud Kind Sub Type-116',
- 'zAsset-Playback Style-117',
- 'zAsset-Playback Variation-118',
- 'zAsset-Video Duration-119',
- 'zExtAttr-Duration-120',
- 'zAsset-Video CP Duration-121',
- 'zAddAssetAttr-Video CP Duration Time Scale-122',
- 'zAsset-Video CP Visibility State-123',
- 'zAddAssetAttr-Video CP Display Value-124',
- 'zAddAssetAttr-Video CP Display Time Scale-125',
- 'zIntResou-Datastore Class ID-126',
- 'zAsset-Cloud Placeholder Kind-127',
- 'zIntResou-Local Availability-128',
- 'zIntResou-Local Availability Target-129',
- 'zIntResou-Cloud Local State-130',
- 'zIntResou-Remote Availability-131',
- 'zIntResou-Remote Availability Target-132',
- 'zIntResou-Transient Cloud Master-133',
- 'zIntResou-Side Car Index-134',
- 'zIntResou- File ID-135',
- 'zIntResou-Version-136',
- 'zAddAssetAttr- Original-File-Size-137',
- 'zIntResou-Resource Type-138',
- 'zIntResou-Datastore Sub-Type-139',
- 'zIntResou-Cloud Source Type-140',
- 'zIntResou-Data Length-141',
- 'zIntResou-Recipe ID-142',
- 'zIntResou-Cloud Last Prefetch Date-143',
- 'zIntResou-Cloud Prefetch Count-144',
- 'zIntResou- Cloud-Last-OnDemand Download-Date-145',
- 'zIntResou-UniformTypeID_UTI_Conformance_Hint-146',
- 'zIntResou-Compact-UTI-147',
- 'zAsset-Uniform Type ID-148',
- 'zAsset-Original Color Space-149',
- 'zCldMast-Uniform_Type_ID-150',
- 'zCldMast-Full Size JPEG Source-151',
- 'zAsset-HDR Gain-152',
- 'zAsset-zHDR_Type-153',
- 'zExtAttr-Codec-154',
- 'zIntResou-Codec Four Char Code Name-155',
- 'zCldMast-Codec Name-156',
- 'zCldMast-Video Frame Rate-157',
- 'zCldMast-Placeholder State-158',
- 'zAsset-Depth_Type-159',
- 'zAsset-Avalanche UUID-4TableStart-160',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-161',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-162',
- 'zAddAssetAttr-Cloud Recovery State-163',
- 'zAddAssetAttr-Cloud State Recovery Attempts Count-164',
- 'zAsset-Deferred Processing Needed-165',
- 'zAsset-Video Deferred Processing Needed-166',
- 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-167',
- 'zAddAssetAttr-Deferred Processing Candidate Options-168',
- 'zAsset-Has Adjustments-Camera-Effects-Filters-169',
- 'zUnmAdj-UUID-4TableStart-170',
- 'zAsset-Adjustment Timestamp-171',
- 'zUnmAdj-Adjustment Timestamp-172',
- 'zAddAssetAttr-Editor Bundle ID-173',
- 'zUnmAdj-Editor Localized Name-174',
- 'zUnmAdj-Adjustment Format ID-175',
- 'zAddAssetAttr-Montage-176',
- 'zUnmAdj-Adjustment Render Types-177',
- 'zUnmAdj-Adjustment Format Version-178',
- 'zUnmAdj-Adjustment Base Image Format-179',
- 'zAsset-Favorite-180',
- 'zAsset-Hidden-181',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-182',
- 'zAsset-Trashed Date-183',
- 'zIntResou-Trash State-184',
- 'zIntResou-Trashed Date-185',
- 'zAsset-Cloud Delete State-186',
- 'zIntResou-Cloud Delete State-187',
- 'zAddAssetAttr-PTP Trashed State-188',
- 'zIntResou-PTP Trashed State-189',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-190',
- 'zMedAnlyAstAttr-Media Analysis Timestamp-191',
- 'zAsset-Analysis State Modificaion Date-192',
- 'zAddAssetAttr- Pending View Count-193',
- 'zAddAssetAttr- View Count-194',
- 'zAddAssetAttr- Pending Play Count-195',
- 'zAddAssetAttr- Play Count-196',
- 'zAddAssetAttr- Pending Share Count-197',
- 'zAddAssetAttr- Share Count-198',
- 'zAddAssetAttr-Allowed for Analysis-199',
- 'zAddAssetAttr-Scene Analysis Version-200',
- 'zAddAssetAttr-Scene Analysis is From Preview-201',
- 'zAddAssetAttr-Scene Analysis Timestamp-202',
- 'zAddAssetAttr-Destination Asset Copy State-203',
- 'zAddAssetAttr-Source Asset for Duplication Scope ID-204',
- 'zCldMast-Source Master For Duplication Scope ID-205',
- 'zAddAssetAttr-Source Asset For Duplication ID-206',
- 'zCldMast-Source Master for Duplication ID-207',
- 'zAddAssetAttr-Variation Suggestions States-208',
- 'zAsset-High Frame Rate State-209',
- 'zAsset-Video Key Frame Time Scale-210',
- 'zAsset-Video Key Frame Value-211',
- 'zExtAttr-ISO-212',
- 'zExtAttr-Metering Mode-213',
- 'zExtAttr-Sample Rate-214',
- 'zExtAttr-Track Format-215',
- 'zExtAttr-White Balance-216',
- 'zExtAttr-Aperture-217',
- 'zExtAttr-BitRate-218',
- 'zExtAttr-Exposure Bias-219',
- 'zExtAttr-Frames Per Second-220',
- 'zExtAttr-Shutter Speed-221',
- 'zExtAttr-Slush Scene Bias-222',
- 'zExtAttr-Slush Version-223',
- 'zExtAttr-Slush Preset-224',
- 'zExtAttr-Slush Warm Bias-225',
- 'zAsset-Height-226',
- 'zAddAssetAttr-Original Height-227',
- 'zIntResou-Unoriented Height-228',
- 'zAsset-Width-229',
- 'zAddAssetAttr-Original Width-230',
- 'zIntResou-Unoriented Width-231',
- 'zShare-Thumbnail Image Data-232',
- 'SPLzShare-Thumbnail Image Data-233',
- 'zAsset-Thumbnail Index-234',
- 'zAddAssetAttr-Embedded Thumbnail Height-235',
- 'zAddAssetAttr-Embedded Thumbnail Length-236',
- 'zAddAssetAttr-Embedded Thumbnail Offset-237',
- 'zAddAssetAttr-Embedded Thumbnail Width-238',
- 'zAsset-Packed Acceptable Crop Rect-239',
- 'zAsset-Packed Badge Attributes-240',
- 'zAsset-Packed Preferred Crop Rect-241',
- 'zAsset-Curation Score-242',
- 'zAsset-Camera Processing Adjustment State-243',
- 'zAsset-Depth Type-244',
- 'zAsset-Is Magic Carpet-QuicktimeMOVfile-245',
- 'zAddAssetAttr-Orig Resource Choice-246',
- 'zAddAssetAttr-Spatial Over Capture Group ID-247',
- 'zAddAssetAttr-Place Annotation Data-248',
- 'zAddAssetAttr-Distance Identity-249',
- 'zAddAssetAttr-Edited IPTC Attributes-250',
- 'zAssetDes-Long Description-251',
- 'zAddAssetAttr-Asset Description-252',
- 'zAddAssetAttr-Title-Comments via Cloud Website-253',
- 'zAddAssetAttr-Accessibility Description-254',
- 'zAddAssetAttr-Photo Stream Tag ID-255',
- 'zCldFeedEnt-Entry Date-256',
- 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-257',
- 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-258',
- 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-259',
- 'zCldFeedEnt-Entry Priority Number-260',
- 'zCldFeedEnt-Entry Type Number-261',
- 'zCldSharedComment-Cloud GUID-4TableStart-262',
- 'zCldSharedComment-Date-263',
- 'zCldSharedComment-Comment Client Date-264',
- 'zAsset-Cloud Last Viewed Comment Date-265',
- 'zCldSharedComment-Type-266',
- 'zCldSharedComment-Comment Text-267',
- 'zCldSharedComment-Commenter Hashed Person ID-268',
- 'zCldSharedComment-Batch Comment-269',
- 'zCldSharedComment-Is a Caption-270',
- 'zAsset-Cloud Has Comments by Me-271',
- 'zCldSharedComment-Is My Comment-272',
- 'zCldSharedComment-Is Deletable-273',
- 'zAsset-Cloud Has Comments Conversation-274',
- 'zAsset-Cloud Has Unseen Comments-275',
- 'zCldSharedComment-Liked-276',
- 'zAddAssetAttr-Share Type-277',
- 'zShare-UUID-CMM-4TableStart-278',
- 'SPLzShare-UUID-SPL-4TableStart-279',
- 'zShare-zENT-CMM-280',
- 'SPLzShare-zENT-SPL-281',
- 'zShare-Status-CMM-282',
- 'SPLzShare-Status-SPL-283',
- 'zShare-Scope Type-CMM-284',
- 'SPLzShare-Scope Type-SPL-285',
- 'zShare-Local Publish State-CMM-286',
- 'SPLzShare-Local Publish State-SPL-287',
- 'zShare-Public Permission-CMM-288',
- 'SPLzShare-Public Permission-SPL-289',
- 'zShare-Originating Scope ID-CMM-290',
- 'SPLzShare-Originating Scope ID-SPL-291',
- 'zShare-Scope ID-CMM-292',
- 'SPLzShare-Scope ID-SPL-293',
- 'zShare-Title-CMM-294',
- 'SPLzShare-Title-SPL-295',
- 'zShare-Share URL-CMM-296',
- 'SPLzShare-Share URL-SPL-297',
- 'zShare-Creation Date-CMM-298',
- 'SPLzShare-Creation Date-SPL-299',
- 'zShare-Start Date-CMM-300',
- 'SPLzShare-Start Date-SPL-301',
- 'zShare-End Date-CMM-302',
- 'SPLzShare-End Date-SPL-303',
- 'zShare-Expiry Date-CMM-304',
- 'SPLzShare-Expiry Date-SPL-305',
- 'zShare-Asset Count-CMM-306',
- 'SPLzShare-Asset Count-SPL-307',
- 'zShare-Photos Count-CMM-308',
- 'SPLzShare-Photos Count-CMM-SPL-309',
- 'zShare-Uploaded Photos Count-CMM-310',
- 'SPLzShare-Uploaded Photos Count-SPL-311',
- 'zShare-Videos Count-CMM-312',
- 'SPLzShare-Videos Count-SPL-313',
- 'zShare-Uploaded Videos Count-CMM-314',
- 'SPLzShare-Uploaded Videos Count-SPL-315',
- 'zShare-Force Sync Attempted-CMM-316',
- 'SPLzShare-Force Sync Attempted-SPL-317',
- 'zShare-Auto Share Policy-CMM-318',
- 'SPLzShare-Auto Share Policy-SPL-319',
- 'zShare-Should Notify On Upload Completion-CMM-320',
- 'SPLzShare-Should Notify On Upload Completion-SPL-321',
- 'zShare-Trashed State-CMM-322',
- 'SPLzShare-Trashed State-SPL-323',
- 'zShare-Cloud Delete State-CMM-324',
- 'SPLzShare-Cloud Delete State-SPL-325',
- 'zShare-Should Ignor Budgets-CMM-326',
- 'SPLzShare-Should Ignor Budgets-SPL-327',
- 'zShare-Rules-CMM-328',
- 'SPLzShare-Rules-SPL-329',
- 'zSharePartic-UUID-4TableStart-330',
- 'SPLzSharePartic-UUID-4TableStart-331',
- 'zSharePartic-Acceptance Status-332',
- 'SPLzSharePartic-Acceptance Status-333',
- 'zSharePartic-Is Current User-334',
- 'SPLzSharePartic-Is Current User-335',
- 'zSharePartic-Role-336',
- 'SPLzSharePartic-Role-337',
- 'zSharePartic-Premission-338',
- 'SPLzSharePartic-Premission-339',
- 'zSharePartic-User ID-340',
- 'SPLzSharePartic-User ID-341',
- 'SPLzSharePartic-zPK-4TableStart-342',
- 'zSharePartic-zPK-4TableStart-343',
- 'zSharePartic-Email Address-344',
- 'SPLzSharePartic-Email Address-345',
- 'zSharePartic-Phone Number-346',
- 'SPLzSharePartic-Phone Number-347',
- 'ParentzGenAlbum-UUID-4TableStart-348',
- 'zGenAlbum-UUID-4TableStart-349',
- 'SWYConverszGenAlbum-UUID-4TableStart-350',
- 'ParentzGenAlbum-Cloud GUID-4TableStart-351',
- 'zGenAlbum-Cloud GUID-4TableStart-352',
- 'SWYConverszGenAlbum-Cloud GUID-4TableStart-353',
- 'zCldShareAlbumInvRec-Album GUID-4TableStart-354',
- 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-355',
- 'zGenAlbum-Project Render UUID-4TableStart-356',
- 'SWYConverszGenAlbum-Project Render UUID-4TableStart-357',
- 'zAlbumList-Needs Reordering Number-358',
- 'zGenAlbum-zENT- Entity-359',
- 'ParentzGenAlbum-Kind-360',
- 'zGenAlbum-Album Kind-361',
- 'SWYConverszGenAlbum-Album Kind-362',
- 'ParentzGenAlbum-Cloud-Local-State-363',
- 'zGenAlbum-Cloud_Local_State-364',
- 'SWYConverszGenAlbum-Cloud_Local_State-365',
- 'ParentzGenAlbum- Title-366',
- 'zGenAlbum- Title-User&System Applied-367',
- 'SWYConverszGenAlbum- Title -User&System Applied-368',
- 'zGenAlbum-Import Session ID-SWY-369',
- 'zAsset- Conversation= zGenAlbum_zPK-370',
- 'SWYConverszGenAlbum- Import Session ID-SWY-371',
- 'zGenAlbum-Imported by Bundle Identifier-372',
- 'SWYzGenAlbum-Imported by Bundle Identifier-373',
- 'SWYConverszGenAlbum- Syndicate-374',
- 'ParentzGenAlbum-Creation Date-375',
- 'zGenAlbum-Creation Date-376',
- 'SWYConverszGenAlbum-Creation Date-377',
- 'zGenAlbum-Cloud Creation Date-378',
- 'SWYConverszGenAlbum-Cloud Creation Date-379',
- 'zGenAlbum-Start Date-380',
- 'SWYConverszGenAlbum-Start Date-381',
- 'zGenAlbum-End Date-382',
- 'SWYConverszGenAlbum-End Date-383',
- 'zGenAlbum-Cloud Subscription Date-384',
- 'SWYConverszGenAlbum-Cloud Subscription Date-385',
- 'ParentzGenAlbum-Pending Items Count-386',
- 'zGenAlbum-Pending Items Count-387',
- 'SWYConverszGenAlbum-Pending Items Count-388',
- 'ParentzGenAlbum-Pending Items Type-389',
- 'zGenAlbum-Pending Items Type-390',
- 'SWYConverszGenAlbum-Pending Items Type-391',
- 'zGenAlbum- Cached Photos Count-392',
- 'SWYConverszGenAlbum- Cached Photos Count-393',
- 'zGenAlbum- Cached Videos Count-394',
- 'SWYConverszGenAlbum- Cached Videos Count-395',
- 'zGenAlbum- Cached Count-396',
- 'SWYConverszGenAlbum- Cached Count-397',
- 'ParentzGenAlbum-Sync Event Order Key-398',
- 'zGenAlbum-Sync Event Order Key-399',
- 'SWYConverszGenAlbum-Sync Event Order Key-400',
- 'zGenAlbum-Has Unseen Content-401',
- 'SWYConverszGenAlbum-Has Unseen Content-402',
- 'zGenAlbum-Unseen Asset Count-403',
- 'SWYConverszGenAlbum-Unseen Asset Count-404',
- 'zGenAlbum-is Owned-405',
- 'SWYConverszGenAlbum-is Owned-406',
- 'zGenAlbum-Cloud Relationship State-407',
- 'SWYConverszGenAlbum-Cloud Relationship State-408',
- 'zGenAlbum-Cloud Relationship State Local-409',
- 'SWYConverszGenAlbum-Cloud Relationship State Local-410',
- 'zGenAlbum-Cloud Owner Mail Key-411',
- 'SWYConverszGenAlbum-Cloud Owner Mail Key-412',
- 'zGenAlbum-Cloud Owner Frist Name-413',
- 'SWYConverszGenAlbum-Cloud Owner Frist Name-414',
- 'zGenAlbum-Cloud Owner Last Name-415',
- 'SWYConverszGenAlbum-Cloud Owner Last Name-416',
- 'zGenAlbum-Cloud Owner Full Name-417',
- 'SWYConverszGenAlbum-Cloud Owner Full Name-418',
- 'zGenAlbum-Cloud Person ID-419',
- 'SWYConverszGenAlbum-Cloud Person ID-420',
- 'zAsset-Cloud Owner Hashed Person ID-421',
- 'zGenAlbum-Cloud Owner Hashed Person ID-422',
- 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-423',
- 'zGenAlbum-Local Cloud Multi-Contributors Enabled-424',
- 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-425',
- 'zGenAlbum-Cloud Multi-Contributors Enabled-426',
- 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-427',
- 'zGenAlbum-Cloud Album Sub Type-428',
- 'SWYConverszGenAlbum-Cloud Album Sub Type-429',
- 'zGenAlbum-Cloud Contribution Date-430',
- 'SWYConverszGenAlbum-Cloud Contribution Date-431',
- 'zGenAlbum-Cloud Last Interesting Change Date-432',
- 'SWYConverszGenAlbum-Cloud Last Interesting Change Date-433',
- 'zGenAlbum-Cloud Notification Enabled-434',
- 'SWYConverszGenAlbum-Cloud Notification Enabled-435',
- 'ParentzGenAlbum-Pinned-436',
- 'zGenAlbum-Pinned-437',
- 'SWYConverszGenAlbum-Pinned-438',
- 'ParentzGenAlbum-Custom Sort Key-439',
- 'zGenAlbum-Custom Sort Key-440',
- 'SWYConverszGenAlbum-Custom Sort Key-441',
- 'ParentzGenAlbum-Custom Sort Ascending-442',
- 'zGenAlbum-Custom Sort Ascending-443',
- 'SWYConverszGenAlbum-Custom Sort Ascending-444',
- 'ParentzGenAlbum-Is Prototype-445',
- 'zGenAlbum-Is Prototype-446',
- 'SWYConverszGenAlbum-Is Prototype-447',
- 'ParentzGenAlbum-Project Document Type-448',
- 'zGenAlbum-Project Document Type-449',
- 'SWYConverszGenAlbum-Project Document Type-450',
- 'ParentzGenAlbum-Custom Query Type-451',
- 'zGenAlbum-Custom Query Type-452',
- 'SWYConverszGenAlbum-Custom Query Type-453',
- 'ParentzGenAlbum-Trashed State-454',
- 'ParentzGenAlbum-Trash Date-455',
- 'zGenAlbum-Trashed State-456',
- 'zGenAlbum-Trash Date-457',
- 'SWYConverszGenAlbum-Trashed State-458',
- 'SWYConverszGenAlbum-Trash Date-459',
- 'ParentzGenAlbum-Cloud Delete State-460',
- 'zGenAlbum-Cloud Delete State-461',
- 'SWYConverszGenAlbum-Cloud Delete State-462',
- 'zGenAlbum-Cloud Owner Whitelisted-463',
- 'SWYConverszGenAlbum-Cloud Owner Whitelisted-464',
- 'zGenAlbum-Cloud Local Public URL Enabled-465',
- 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-466',
- 'zGenAlbum-Cloud Public URL Enabled-467',
- 'zGenAlbum-Public URL-468',
- 'SWYConverszGenAlbum-Cloud Public URL Enabled-469',
- 'SWYConverszGenAlbum-Public URL-470',
- 'zGenAlbum-Key Asset Face Thumb Index-471',
- 'SWYConverszGenAlbum-Key Asset Face Thumb Index-472',
- 'zGenAlbum-Project Text Extension ID-473',
- 'SWYConverszGenAlbum-Project Text Extension ID-474',
- 'zGenAlbum-User Query Data-475',
- 'SWYConverszGenAlbum-User Query Data-476',
- 'zGenAlbum-Custom Query Parameters-477',
- 'SWYConverszGenAlbum-Custom Query Parameters-478',
- 'zGenAlbum-Project Data-479',
- 'SWYConverszGenAlbum-Project Data-480',
- 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-481',
- 'zCldShareAlbumInvRec-Invitation State Local-482',
- 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-483',
- 'zCldShareAlbumInvRec-Subscription Date-484',
- 'zCldShareAlbumInvRec-Invitee First Name-485',
- 'zCldShareAlbumInvRec-Invitee Last Name-486',
- 'zCldShareAlbumInvRec-Invitee Full Name-487',
- 'zCldShareAlbumInvRec-Invitee Hashed Person ID-488',
- 'zCldShareAlbumInvRec-Invitee Email Key-489',
- 'zGenAlbum-Key Asset Face ID-490',
- 'zFaceCrop-Face Area Points-491',
- 'zAsset-Face Adjustment Version-492',
- 'zAddAssetAttr-Face Analysis Version-493',
- 'zDetFace-Asset Visible-494',
- 'zPerson-Face Count-495',
- 'zDetFace-Face Crop-496',
- 'zDetFace-Face Algorithm Version-497',
- 'zDetFace-Adjustment Version-498',
- 'zDetFace-UUID-4TableStart-499',
- 'zPerson-Person UUID-4TableStart-500',
- 'zDetFace-Confirmed Face Crop Generation State-501',
- 'zDetFace-Manual-502',
- 'zDetFace-Detection Type-503',
- 'zPerson-Detection Type-504',
- 'zDetFace-VIP Model Type-505',
- 'zDetFace-Name Source-506',
- 'zDetFace-Cloud Name Source-507',
- 'zPerson-Person URI-508',
- 'zPerson-Display Name-509',
- 'zPerson-Full Name-510',
- 'zPerson-Cloud Verified Type-511',
- 'zFaceCrop-State-512',
- 'zFaceCrop-Type-513',
- 'zFaceCrop-UUID-4TableStart-514',
- 'zPerson-Type-515',
- 'zPerson-Verified Type-516',
- 'zPerson-Gender Type-517',
- 'zDetFace-Gender Type-518',
- 'zDetFace-Center X-519',
- 'zDetFace-Center Y-520',
- 'zPerson-Age Type Estimate-521',
- 'zDetFace-Age Type Estimate-522',
- 'zDetFace-Ethnicity Type-523',
- 'zDetFace-Skin Tone Type-524',
- 'zDetFace-Hair Type-525',
- 'zDetFace-Hair Color Type-526',
- 'zDetFace-Head Gear Type-527',
- 'zDetFace-Facial Hair Type-528',
- 'zDetFace-Has Face Mask-529',
- 'zDetFace-Pose Type-530',
- 'zDetFace-Face Expression Type-531',
- 'zDetFace-Has Smile-532',
- 'zDetFace-Smile Type-533',
- 'zDetFace-Lip Makeup Type-534',
- 'zDetFace-Eyes State-535',
- 'zDetFace-Is Left Eye Closed-536',
- 'zDetFace-Is Right Eye Closed-537',
- 'zDetFace-Gaze Center X-538',
- 'zDetFace-Gaze Center Y-539',
- 'zDetFace-Face Gaze Type-540',
- 'zDetFace-Eye Glasses Type-541',
- 'zDetFace-Eye Makeup Type-542',
- 'zDetFace-Cluster Squence Number Key-543',
- 'zDetFace-Grouping ID-544',
- 'zDetFace-Master ID-545',
- 'zDetFace-Quality-546',
- 'zDetFace-Quality Measure-547',
- 'zDetFace-Source Height-548',
- 'zDetFace-Source Width-549',
- 'zDetFace-Hidden-Asset Hidden-550',
- 'zDetFace-In Trash-Recently Deleted-551',
- 'zDetFace-Cloud Local State-552',
- 'zDetFace-Training Type-553',
- 'zDetFace.Pose Yaw-554',
- 'zDetFace-Body Center X-555',
- 'zDetFace-Body Center Y-556',
- 'zDetFace-Body Height-557',
- 'zDetFace-Body Width-558',
- 'zDetFace-Roll-559',
- 'zDetFace-Size-560',
- 'zDetFace-Cluster Squence Number-561',
- 'zDetFace-Blur Score-562',
- 'zDetFacePrint-Face Print Version-563',
- 'zMedAnlyAstAttr-Face Count-564',
- 'zDetFaceGroup-UUID-4TableStart-565',
- 'zDetFaceGroup-Person Builder State-566',
- 'zDetFaceGroup-UnNamed Face Count-567',
- 'zPerson-In Person Naming Model-568',
- 'zPerson-Key Face Pick Source Key-569',
- 'zPerson-Manual Order Key-570',
- 'zPerson-Question Type-571',
- 'zPerson-Suggested For Client Type-572',
- 'zPerson-Merge Target Person-573',
- 'zPerson-Cloud Local State-574',
- 'zFaceCrop-Cloud Local State-575',
- 'zFaceCrop-Cloud Type-576',
- 'zPerson-Cloud Delete State-577',
- 'zFaceCrop-Cloud Delete State-578',
- 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-579',
- 'zAsset-Highlight Visibility Score-580',
- 'zMedAnlyAstAttr-Media Analysis Version-581',
- 'zMedAnlyAstAttr-Audio Classification-582',
- 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-583',
- 'zMedAnlyAstAttr-Best Video Range Start Time Scale-584',
- 'zMedAnlyAstAttr-Best Video Range Duration Value-585',
- 'zMedAnlyAstAttr-Best Video Range Start Value-586',
- 'zMedAnlyAstAttr-Packed Best Playback Rect-587',
- 'zMedAnlyAstAttr-Activity Score-588',
- 'zMedAnlyAstAttr-Video Score-589',
- 'zMedAnlyAstAttr-AutoPlay Suggestion Score-590',
- 'zMedAnlyAstAttr-Blurriness Score-591',
- 'zMedAnlyAstAttr-Exposure Score-592',
- 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-593',
- 'zMedAnlyAstAttr-Probable Rotation Direction-594',
- 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-595',
- 'zAssetAnalyState-Asset UUID-4TableStart-596',
- 'zAssetAnalyState-Analyisis State-597',
- 'zAssetAnalyState-Worker Flags-598',
- 'zAssetAnalyState-Worker Type-599',
- 'zAssetAnalyState-Ignore Until Date-600',
- 'zAssetAnalyState-Last Ignored Date-601',
- 'zAssetAnalyState-Sort Token-602',
- 'zMedAnlyAstAttr-Character Recognition Attr-603',
- 'zCharRecogAttr-Algorithm Version-604',
- 'zCharRecogAttr-Adjustment Version-605',
- 'zMedAnlyAstAttr-Visual Search Attributes-606',
- 'zVisualSearchAttr-Algorithm Version-607',
- 'zVisualSearchAttr-Adjustment Version-608',
- 'zAsset-Overall Aesthetic Score-609',
- 'zCompAssetAttr-Behavioral Score-610',
- 'zCompAssetAttr-Failure Score zCompAssetAttr-611',
- 'zCompAssetAttr-Harmonious Color Score-612',
- 'zCompAssetAttr-Immersiveness Score-613',
- 'zCompAssetAttr-Interaction Score-614',
- 'zCompAssetAttr-Intersting Subject Score-615',
- 'zCompAssetAttr-Intrusive Object Presence Score-616',
- 'zCompAssetAttr-Lively Color Score-617',
- 'zCompAssetAttr-Low Light-618',
- 'zCompAssetAttr-Noise Score-619',
- 'zCompAssetAttr-Pleasant Camera Tilt Score-620',
- 'zCompAssetAttr-Pleasant Composition Score-621',
- 'zCompAssetAttr-Pleasant Lighting Score-622',
- 'zCompAssetAttr-Pleasant Pattern Score-623',
- 'zCompAssetAttr-Pleasant Perspective Score-624',
- 'zCompAssetAttr-Pleasant Post Processing Score-625',
- 'zCompAssetAttr-Pleasant Reflection Score-626',
- 'zCompAssetAttrPleasant Symmetry Score-627',
- 'zCompAssetAttr-Sharply Focused Subject Score-628',
- 'zCompAssetAttr-Tastfully Blurred Score-629',
- 'zCompAssetAttr-Well Chosen Subject Score-630',
- 'zCompAssetAttr-Well Framed Subject Score-631',
- 'zCompAssetAttr-Well Timeed Shot Score-632',
- 'zCldRes-Asset UUID-4TableStart-633',
- 'zCldRes-Cloud Local State-634',
- 'zCldRes-File Size-635',
- 'zCldRes-Height-636',
- 'zCldRes-Is Available-637',
- 'zCldRes-Is Locally Available-638',
- 'zCldRes-Prefetch Count-639',
- 'zCldRes-Source Type-640',
- 'zCldRes-Type-641',
- 'zCldRes-Width-642',
- 'zCldRes-Date Created-643',
- 'zCldRes-Last OnDemand Download Date-644',
- 'zCldRes-Last Prefetch Date-645',
- 'zCldRes-Prunedat-646',
- 'zCldRes-File Path-647',
- 'zCldRes-Fingerprint-648',
- 'zCldRes-Item ID-649',
- 'zCldRes-UniID-650',
- 'zAddAssetAttr-zPK-651',
- 'zAddAssetAttr-zENT-652',
- 'ZAddAssetAttr-zOPT-653',
- 'zAddAssetAttr-zAsset= zAsset_zPK-654',
- 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-655',
- 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-656',
- 'zAddAssetAttr-Master Fingerprint-657',
- 'zAddAssetAttr-Public Global UUID-658',
- 'zAddAssetAttr-Deferred Photo Identifier-659',
- 'zAddAssetAttr-Original Assets UUID-660',
- 'zAddAssetAttr-Import Session ID-661',
- 'zAddAssetAttr-Originating Asset Identifier-662',
- 'zAddAssetAttr.Adjusted Fingerprint-663',
- 'zAlbumList-zPK= Album List Key-664',
- 'zAlbumList-zENT-665',
- 'zAlbumList-zOPT-666',
- 'zAlbumList-ID Key-667',
- 'zAlbumList-UUID-668',
- 'zAsset-zPK-669',
- 'zAsset-zENT-670',
- 'zAsset-zOPT-671',
- 'zAsset-Master= zCldMast-zPK-672',
- 'zAsset-Extended Attributes= zExtAttr-zPK-673',
- 'zAsset-Import Session Key-674',
- 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-675',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-676',
- 'zAsset-Moment Share Key= zShare-zPK-677',
- 'zAsset-zMoment Key= zMoment-zPK-678',
- 'zAsset-Computed Attributes Asset Key-679',
- 'zAsset-Highlight Being Assets-HBA Key-680',
- 'zAsset-Highlight Being Extended Assets-HBEA Key-681',
- 'zAsset-Highligh Being Summary Assets-HBSA Key-682',
- 'zAsset-Day Group Highlight Being Assets-DGHBA Key-683',
- 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-684',
- 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-685',
- 'zAsset-Promotion Score-686',
- 'zAsset-Media Analysis Attributes Key-687',
- 'zAsset-Media Group UUID-688',
- 'zAsset-UUID = store.cloudphotodb-689',
- 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-690',
- 'zAsset.Cloud Collection GUID-691',
- 'zAsset-Avalanche UUID-692',
- 'zAssetAnalyState-zPK-693',
- 'zAssetAnalyState-zEnt-694',
- 'zAssetAnalyState-zOpt-695',
- 'zAssetAnalyState-Asset= zAsset-zPK-696',
- 'zAssetAnalyState-Asset UUID-697',
- 'zAssetDes-zPK-698',
- 'zAssetDes-zENT-699',
- 'zAssetDes-zOPT-700',
- 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-701',
- 'zCharRecogAttr-zPK-702',
- 'zCharRecogAttr-zENT-703',
- 'zCharRecogAttr-zOPT-704',
- 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-705',
- 'zCldFeedEnt-zPK= zCldShared keys-706',
- 'zCldFeedEnt-zENT-707',
- 'zCldFeedEnt-zOPT-708',
- 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-709',
- 'zCldFeedEnt-Entry Invitation Record GUID-710',
- 'zCldFeedEnt-Entry Cloud Asset GUID-711',
- 'zCldMast-zPK= zAsset-Master-712',
- 'zCldMast-zENT-713',
- 'zCldMast-zOPT-714',
- 'zCldMast-Moment Share Key= zShare-zPK-715',
- 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-716',
- 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-717',
- 'zCldMast-Originating Asset ID-718',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-719',
- 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-720',
- 'CMzCldMastMedData-zENT-721',
- 'CMzCldMastMedData-zOPT-722',
- 'CMzCldMastMedData-CldMast= zCldMast-zPK-723',
- 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-724',
- 'AAAzCldMastMedData-zENT-725',
- 'AAAzCldMastMedData-zOPT-726',
- 'AAAzCldMastMedData-CldMast key-727',
- 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-728',
- 'zCldRes-zPK-729',
- 'zCldRes-zENT-730',
- 'zCldRes-zOPT-731',
- 'zCldRes-Asset= zAsset-zPK-732',
- 'zCldRes-Cloud Master= zCldMast-zPK-733',
- 'zCldRes-Asset UUID-734',
- 'zCldShareAlbumInvRec-zPK-735',
- 'zCldShareAlbumInvRec-zEnt-736',
- 'zCldShareAlbumInvRec-zOpt-737',
- 'zCldShareAlbumInvRec-Album Key-738',
- 'zCldShareAlbumInvRec-FOK Album Key-739',
- 'zCldShareAlbumInvRec-Album GUID-740',
- 'zCldShareAlbumInvRec-Cloud GUID-741',
- 'zCldSharedComment-zPK-742',
- 'zCldSharedComment-zENT-743',
- 'zCldSharedComment-zOPT-744',
- 'zCldSharedComment-Commented Asset Key= zAsset-zPK-745',
- 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-746',
- 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-747',
- 'zCldSharedComment-Liked Asset Key= zAsset-zPK-748',
- 'zCldSharedComment-CldFeedLikeCommentEntry Key-749',
- 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-750',
- 'zCldSharedComment-Cloud GUID-751',
- 'zCompAssetAttr-zPK-752',
- 'zCompAssetAttr-zEnt-753',
- 'zCompAssetAttr-zOpt-754',
- 'zCompAssetAttr-Asset Key-755',
- 'zDetFace-zPK-756',
- 'zDetFace-zEnt-757',
- 'zDetFace.zOpt-758',
- 'zDetFace-Asset= zAsset-zPK or Asset Containing Face-759',
- 'zDetFace-Person= zPerson-zPK-760',
- 'zDetFace-Person Being Key Face-761',
- 'zDetFace-Face Print-762',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-763',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-764',
- 'zDetFace-UUID-765',
- 'zDetFaceGroup-zPK-766',
- 'zDetFaceGroup-zENT-767',
- 'zDetFaceGroup-zOPT-768',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-769',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-770',
- 'zDetFaceGroup-UUID-771',
- 'zDetFacePrint-zPK-772',
- 'zDetFacePrint-zEnt-773',
- 'zDetFacePrint-zOpt-774',
- 'zDetFacePrint-Face Key-775',
- 'zExtAttr-zPK= zAsset-zExtendedAttributes-776',
- 'zExtAttr-zENT-777',
- 'zExtAttr-zOPT-778',
- 'zExtAttr-Asset Key-779',
- 'zFaceCrop-zPK-780',
- 'zFaceCrop-zEnt-781',
- 'zFaceCrop-zOpt-782',
- 'zFaceCrop-Asset Key-783',
- 'zFaceCrop-Invalid Merge Canidate Person UUID-784',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-785',
- 'zFaceCrop-Face Key-786',
- 'zFaceCrop-UUID-787',
- 'zGenAlbum-zPK=26AlbumLists= 26Albums-788',
- 'zGenAlbum-zENT-789',
- 'zGenAlbum-zOpt-790',
- 'zGenAlbum-Key Asset-Key zAsset-zPK-791',
- 'zGenAlbum-Secondary Key Asset-792',
- 'zGenAlbum-Tertiary Key Asset-793',
- 'zGenAlbum-Custom Key Asset-794',
- 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-795',
- 'zGenAlbum-FOK Parent Folder-796',
- 'zGenAlbum-zSyndicate-797',
- 'zGenAlbum-UUID-798',
- 'SWYConverszGenAlbum-UUID-799',
- 'zGenAlbum-Cloud_GUID = store.cloudphotodb-800',
- 'SWYConverszGenAlbum-Cloud GUID-801',
- 'zGenAlbum-Project Render UUID-802',
- 'SWYConverszGenAlbum-Project Render UUID-803',
- 'zIntResou-zPK-804',
- 'zIntResou-zENT-805',
- 'zIntResou-zOPT-806',
- 'zIntResou-Asset= zAsset_zPK-807',
- 'zIntResou-Fingerprint-808',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-809',
- 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-810',
- 'zMedAnlyAstAttr-zEnt-811',
- 'zMedAnlyAstAttr-zOpt-812',
- 'zMedAnlyAstAttr-Asset= zAsset-zPK-813',
- 'zPerson-zPK=zDetFace-Person-814',
- 'zPerson-zEnt-815',
- 'zPerson-zOpt-816',
- 'zPerson-KeyFace=zDetFace-zPK-817',
- 'zPerson-Assoc Face Group Key-818',
- 'zPerson-Person UUID-819',
- 'zSceneP-zPK-820',
- 'zSceneP-zENT-821',
- 'zSceneP-zOPT-822',
- 'zShare-zPK-823',
- 'zShare-zENT-824',
- 'zShare-zOPT-825',
- 'zShare-UUID-826',
- 'SPLzShare-UUID-827',
- 'zShare-Scope ID = store.cloudphotodb-828',
- 'zSharePartic-zPK-829',
- 'zSharePartic-zENT-830',
- 'zSharePartic-zOPT-831',
- 'zSharePartic-Share Key= zShare-zPK-832',
- 'zSharePartic-UUID-833',
- 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-834',
- 'zUnmAdj-zOPT-835',
- 'zUnmAdj-zENT-836',
- 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-837',
- 'zUnmAdj-UUID-838',
- 'zUnmAdj-Other Adjustments Fingerprint-839',
- 'zUnmAdj-Similar to Orig Adjustments Fingerprint-840',
- 'zVisualSearchAttr-zPK-841',
- 'zVisualSearchAttr-zENT-842',
- 'zVisualSearchAttr-zOPT-843',
- 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-844',
- 'z26AlbumList-26Albums= zGenAlbum-zPK-845',
- 'z26AlbumList-Album List Key-846',
- 'z26AlbumList-FOK26Albums Key-847',
- 'z27Assets-27Albums= zGenAlbum-zPK-848',
- 'z27Assets-3Asset Key= zAsset-zPK in the Album-849',
- 'z27Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-850')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph95.1-iOS15_Ref_for_Asset_Analysis-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
+ '''
- tlactivity = 'Ph95.1-iOS15_Ref_for_Asset_Analysis-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
- else:
- logfunc('No data available for iOS 15 PhotoData-Photos.sqlite')
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
+ row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
+ row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
+ row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
+ row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
+ row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
+ row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
+ row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
+ row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
+ row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
+ row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
+ row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
+ row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
+ row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
+ row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
+ row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
+ row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
+ row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
+ row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
+ row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
+ row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307],
+ row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315],
+ row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323],
+ row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331],
+ row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339],
+ row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347],
+ row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355],
+ row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363],
+ row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371],
+ row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379],
+ row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387],
+ row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395],
+ row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403],
+ row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411],
+ row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419],
+ row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427],
+ row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435],
+ row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443],
+ row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451],
+ row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459],
+ row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467],
+ row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475],
+ row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483],
+ row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491],
+ row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499],
+ row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507],
+ row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515],
+ row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523],
+ row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531],
+ row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539],
+ row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547],
+ row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555],
+ row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563],
+ row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571],
+ row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579],
+ row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587],
+ row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595],
+ row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603],
+ row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611],
+ row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619],
+ row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627],
+ row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635],
+ row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643],
+ row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651],
+ row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659],
+ row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667],
+ row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675],
+ row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683],
+ row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691],
+ row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699],
+ row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707],
+ row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715],
+ row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723],
+ row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731],
+ row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739],
+ row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747],
+ row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755],
+ row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763],
+ row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771],
+ row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779],
+ row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787],
+ row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795],
+ row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803],
+ row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811],
+ row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819],
+ row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827],
+ row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835],
+ row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843],
+ row[844], row[845], row[846], row[847], row[848], row[849], row[850]))
- db.close()
- return
+ data_headers = (('zAsset-Added Date-0', 'datetime'),
+ 'zAsset- SortToken -CameraRoll-1',
+ 'zAsset Complete-2',
+ 'zAsset-zPK-4QueryStart-3',
+ 'zAddAssetAttr-zPK-4QueryStart-4',
+ 'zAsset-UUID = store.cloudphotodb-4QueryStart-5',
+ 'zAddAssetAttr-Master Fingerprint-4TableStart-6',
+ 'zIntResou-Fingerprint-4TableStart-7',
+ 'zAsset-Bundle Scope-8',
+ 'zAsset-Syndication State-9',
+ 'zAsset-Cloud is My Asset-10',
+ 'zAsset-Cloud is deletable-Asset-11',
+ 'zAsset-Cloud_Local_State-12',
+ 'zAsset-Visibility State-13',
+ 'zExtAttr-Camera Make-14',
+ 'zExtAttr-Camera Model-15',
+ 'zExtAttr-Lens Model-16',
+ 'zExtAttr-Flash Fired-17',
+ 'zExtAttr-Focal Lenght-18',
+ 'zExtAttr-Focal Lenth in 35MM-19',
+ 'zExtAttr-Digital Zoom Ratio-20',
+ 'zAsset-Derived Camera Capture Device-21',
+ 'zAddAssetAttr-Camera Captured Device-22',
+ 'zAddAssetAttr-Imported by-23',
+ 'zCldMast-Imported By-24',
+ 'zAddAssetAttr.Imported by Bundle Identifier-25',
+ 'zAddAssetAttr-Imported By Display Name-26',
+ 'zCldMast-Imported by Bundle ID-27',
+ 'zCldMast-Imported by Display Name-28',
+ 'zAsset-Saved Asset Type-29',
+ 'zAsset-Directory-Path-30',
+ 'zAsset-Filename-31',
+ 'zAddAssetAttr- Original Filename-32',
+ 'zCldMast- Original Filename-33',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-34',
+ ('zAddAssetAttr-Date Created Source-35', 'datetime'),
+ ('zAsset-Date Created-36', 'datetime'),
+ ('zCldMast-Creation Date-37', 'datetime'),
+ ('zIntResou-CldMst Date Created-38', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-39',
+ 'zAddAssetAttr-Time Zone Offset-40',
+ 'zAddAssetAttr-Inferred Time Zone Offset-41',
+ 'zAddAssetAttr-EXIF-String-42',
+ ('zAsset-Modification Date-43', 'datetime'),
+ ('zAsset-Last Shared Date-44', 'datetime'),
+ 'zCldMast-Cloud Local State-45',
+ ('zCldMast-Import Date-46', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-47', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-4QueryStart-48',
+ ('zAddAssetAttr-Alt Import Image Date-49', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-50',
+ ('zAsset-Cloud Batch Publish Date-51', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-52', 'datetime'),
+ 'zAsset-Cloud Download Requests-53',
+ 'zAsset-Cloud Batch ID-54',
+ 'zAddAssetAttr-Upload Attempts-55',
+ 'zAsset-Latitude-56',
+ 'zExtAttr-Latitude-57',
+ 'zAsset-Longitude-58',
+ 'zExtAttr-Longitude-59',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-60',
+ 'zAddAssetAttr-Location Hash-61',
+ 'zAddAssetAttr-Shifted Location Valid-62',
+ 'zAddAssetAttr-Shifted Location Data-63',
+ 'zAddAssetAttr-Reverse Location Is Valid-64',
+ 'zAddAssetAttr-Reverse Location Data-65',
+ 'ParentzGenAlbum-UUID-4QueryStart-66',
+ 'zGenAlbum-UUID-4QueryStart-67',
+ 'SWYConverszGenAlbum-UUID-4QueryStart-68',
+ 'ParentzGenAlbum-Cloud GUID-4QueryStart-69',
+ 'zGenAlbum-Cloud GUID-4QueryStart-70',
+ 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-71',
+ 'zCldShareAlbumInvRec-Album GUID-4QueryStart-72',
+ 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-73',
+ 'zGenAlbum-Project Render UUID-4QueryStart-74',
+ 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-75',
+ 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-76',
+ 'zGenAlbum-Cloud_Local_State-4QueryStart-77',
+ 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-78',
+ ('ParentzGenAlbum- Creation Date- 4QueryStart-79', 'datetime'),
+ ('zGenAlbum- Creation Date- 4QueryStart-80', 'datetime'),
+ ('SWYConverszGenAlbum- Creation Date- 4QueryStart-81', 'datetime'),
+ ('zGenAlbum- Cloud Creation Date- 4QueryStart-82', 'datetime'),
+ ('SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-83', 'datetime'),
+ ('zGenAlbum- Start Date- 4QueryStart-84', 'datetime'),
+ ('SWYConverszGenAlbum- Start Date- 4QueryStart-85', 'datetime'),
+ ('zGenAlbum- End Date- 4QueryStart-86', 'datetime'),
+ ('SWYConverszGenAlbum- End Date- 4QueryStart-87', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date- 4QueryStart-88', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-89', 'datetime'),
+ 'ParentzGenAlbum- Title- 4QueryStart-90',
+ 'zGenAlbum- Title-User&System Applied- 4QueryStart-91',
+ 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-92',
+ 'zGenAlbum-Import Session ID-SWY- 4QueryStart-93',
+ 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-94',
+ 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-95',
+ 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-96',
+ 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-97',
+ 'SWYConverszGenAlbum- Syndicate-4QueryStart-98',
+ 'zGenAlbum-zENT- Entity- 4QueryStart-99',
+ 'ParentzGenAlbum- Kind- 4QueryStart-100',
+ 'zGenAlbum-Album Kind- 4QueryStart-101',
+ 'SWYConverszGenAlbum-Album Kind- 4QueryStart-102',
+ 'AAAzCldMastMedData-zOPT-103',
+ 'zAddAssetAttr-Media Metadata Type-104',
+ 'AAAzCldMastMedData-Data-105',
+ 'CldMasterzCldMastMedData-zOPT-106',
+ 'zCldMast-Media Metadata Type-107',
+ 'CMzCldMastMedData-Data-108',
+ 'zAddAssetAttr-Syndication History-109',
+ 'zMedAnlyAstAttr-Syndication Processing Version-110',
+ 'zMedAnlyAstAttr-Syndication Processing Value-111',
+ 'zAsset-Orientation-112',
+ 'zAddAssetAttr-Original Orientation-113',
+ 'zAsset-Kind-114',
+ 'zAsset-Kind-Sub-Type-115',
+ 'zAddAssetAttr-Cloud Kind Sub Type-116',
+ 'zAsset-Playback Style-117',
+ 'zAsset-Playback Variation-118',
+ 'zAsset-Video Duration-119',
+ 'zExtAttr-Duration-120',
+ 'zAsset-Video CP Duration-121',
+ 'zAddAssetAttr-Video CP Duration Time Scale-122',
+ 'zAsset-Video CP Visibility State-123',
+ 'zAddAssetAttr-Video CP Display Value-124',
+ 'zAddAssetAttr-Video CP Display Time Scale-125',
+ 'zIntResou-Datastore Class ID-126',
+ 'zAsset-Cloud Placeholder Kind-127',
+ 'zIntResou-Local Availability-128',
+ 'zIntResou-Local Availability Target-129',
+ 'zIntResou-Cloud Local State-130',
+ 'zIntResou-Remote Availability-131',
+ 'zIntResou-Remote Availability Target-132',
+ 'zIntResou-Transient Cloud Master-133',
+ 'zIntResou-Side Car Index-134',
+ 'zIntResou- File ID-135',
+ 'zIntResou-Version-136',
+ 'zAddAssetAttr- Original-File-Size-137',
+ 'zIntResou-Resource Type-138',
+ 'zIntResou-Datastore Sub-Type-139',
+ 'zIntResou-Cloud Source Type-140',
+ 'zIntResou-Data Length-141',
+ 'zIntResou-Recipe ID-142',
+ ('zIntResou-Cloud Last Prefetch Date-143', 'datetime'),
+ 'zIntResou-Cloud Prefetch Count-144',
+ ('zIntResou- Cloud-Last-OnDemand Download-Date-145', 'datetime'),
+ 'zIntResou-UniformTypeID_UTI_Conformance_Hint-146',
+ 'zIntResou-Compact-UTI-147',
+ 'zAsset-Uniform Type ID-148',
+ 'zAsset-Original Color Space-149',
+ 'zCldMast-Uniform_Type_ID-150',
+ 'zCldMast-Full Size JPEG Source-151',
+ 'zAsset-HDR Gain-152',
+ 'zAsset-zHDR_Type-153',
+ 'zExtAttr-Codec-154',
+ 'zIntResou-Codec Four Char Code Name-155',
+ 'zCldMast-Codec Name-156',
+ 'zCldMast-Video Frame Rate-157',
+ 'zCldMast-Placeholder State-158',
+ 'zAsset-Depth_Type-159',
+ 'zAsset-Avalanche UUID-4TableStart-160',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-161',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-162',
+ 'zAddAssetAttr-Cloud Recovery State-163',
+ 'zAddAssetAttr-Cloud State Recovery Attempts Count-164',
+ 'zAsset-Deferred Processing Needed-165',
+ 'zAsset-Video Deferred Processing Needed-166',
+ 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-167',
+ 'zAddAssetAttr-Deferred Processing Candidate Options-168',
+ 'zAsset-Has Adjustments-Camera-Effects-Filters-169',
+ 'zUnmAdj-UUID-4TableStart-170',
+ 'zAsset-Adjustment Timestamp-171',
+ 'zUnmAdj-Adjustment Timestamp-172',
+ 'zAddAssetAttr-Editor Bundle ID-173',
+ 'zUnmAdj-Editor Localized Name-174',
+ 'zUnmAdj-Adjustment Format ID-175',
+ 'zAddAssetAttr-Montage-176',
+ 'zUnmAdj-Adjustment Render Types-177',
+ 'zUnmAdj-Adjustment Format Version-178',
+ 'zUnmAdj-Adjustment Base Image Format-179',
+ 'zAsset-Favorite-180',
+ 'zAsset-Hidden-181',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-182',
+ ('zAsset-Trashed Date-183', 'datetime'),
+ 'zIntResou-Trash State-184',
+ 'zIntResou-Trashed Date-185',
+ 'zAsset-Cloud Delete State-186',
+ 'zIntResou-Cloud Delete State-187',
+ 'zAddAssetAttr-PTP Trashed State-188',
+ 'zIntResou-PTP Trashed State-189',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-190',
+ 'zMedAnlyAstAttr-Media Analysis Timestamp-191',
+ ('zAsset-Analysis State Modificaion Date-192', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-193',
+ 'zAddAssetAttr- View Count-194',
+ 'zAddAssetAttr- Pending Play Count-195',
+ 'zAddAssetAttr- Play Count-196',
+ 'zAddAssetAttr- Pending Share Count-197',
+ 'zAddAssetAttr- Share Count-198',
+ 'zAddAssetAttr-Allowed for Analysis-199',
+ 'zAddAssetAttr-Scene Analysis Version-200',
+ 'zAddAssetAttr-Scene Analysis is From Preview-201',
+ 'zAddAssetAttr-Scene Analysis Timestamp-202',
+ 'zAddAssetAttr-Destination Asset Copy State-203',
+ 'zAddAssetAttr-Source Asset for Duplication Scope ID-204',
+ 'zCldMast-Source Master For Duplication Scope ID-205',
+ 'zAddAssetAttr-Source Asset For Duplication ID-206',
+ 'zCldMast-Source Master for Duplication ID-207',
+ 'zAddAssetAttr-Variation Suggestions States-208',
+ 'zAsset-High Frame Rate State-209',
+ 'zAsset-Video Key Frame Time Scale-210',
+ 'zAsset-Video Key Frame Value-211',
+ 'zExtAttr-ISO-212',
+ 'zExtAttr-Metering Mode-213',
+ 'zExtAttr-Sample Rate-214',
+ 'zExtAttr-Track Format-215',
+ 'zExtAttr-White Balance-216',
+ 'zExtAttr-Aperture-217',
+ 'zExtAttr-BitRate-218',
+ 'zExtAttr-Exposure Bias-219',
+ 'zExtAttr-Frames Per Second-220',
+ 'zExtAttr-Shutter Speed-221',
+ 'zExtAttr-Slush Scene Bias-222',
+ 'zExtAttr-Slush Version-223',
+ 'zExtAttr-Slush Preset-224',
+ 'zExtAttr-Slush Warm Bias-225',
+ 'zAsset-Height-226',
+ 'zAddAssetAttr-Original Height-227',
+ 'zIntResou-Unoriented Height-228',
+ 'zAsset-Width-229',
+ 'zAddAssetAttr-Original Width-230',
+ 'zIntResou-Unoriented Width-231',
+ 'zShare-Thumbnail Image Data-232',
+ 'SPLzShare-Thumbnail Image Data-233',
+ 'zAsset-Thumbnail Index-234',
+ 'zAddAssetAttr-Embedded Thumbnail Height-235',
+ 'zAddAssetAttr-Embedded Thumbnail Length-236',
+ 'zAddAssetAttr-Embedded Thumbnail Offset-237',
+ 'zAddAssetAttr-Embedded Thumbnail Width-238',
+ 'zAsset-Packed Acceptable Crop Rect-239',
+ 'zAsset-Packed Badge Attributes-240',
+ 'zAsset-Packed Preferred Crop Rect-241',
+ 'zAsset-Curation Score-242',
+ 'zAsset-Camera Processing Adjustment State-243',
+ 'zAsset-Depth Type-244',
+ 'zAsset-Is Magic Carpet-QuicktimeMOVfile-245',
+ 'zAddAssetAttr-Orig Resource Choice-246',
+ 'zAddAssetAttr-Spatial Over Capture Group ID-247',
+ 'zAddAssetAttr-Place Annotation Data-248',
+ 'zAddAssetAttr-Distance Identity-249',
+ 'zAddAssetAttr-Edited IPTC Attributes-250',
+ 'zAssetDes-Long Description-251',
+ 'zAddAssetAttr-Asset Description-252',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-253',
+ 'zAddAssetAttr-Accessibility Description-254',
+ 'zAddAssetAttr-Photo Stream Tag ID-255',
+ ('zCldFeedEnt-Entry Date-256', 'datetime'),
+ 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-257',
+ 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-258',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-259',
+ 'zCldFeedEnt-Entry Priority Number-260',
+ 'zCldFeedEnt-Entry Type Number-261',
+ 'zCldSharedComment-Cloud GUID-4TableStart-262',
+ ('zCldSharedComment-Date-263', 'datetime'),
+ ('zCldSharedComment-Comment Client Date-264', 'datetime'),
+ ('zAsset-Cloud Last Viewed Comment Date-265', 'datetime'),
+ 'zCldSharedComment-Type-266',
+ 'zCldSharedComment-Comment Text-267',
+ 'zCldSharedComment-Commenter Hashed Person ID-268',
+ 'zCldSharedComment-Batch Comment-269',
+ 'zCldSharedComment-Is a Caption-270',
+ 'zAsset-Cloud Has Comments by Me-271',
+ 'zCldSharedComment-Is My Comment-272',
+ 'zCldSharedComment-Is Deletable-273',
+ 'zAsset-Cloud Has Comments Conversation-274',
+ 'zAsset-Cloud Has Unseen Comments-275',
+ 'zCldSharedComment-Liked-276',
+ 'zAddAssetAttr-Share Type-277',
+ 'zShare-UUID-CMM-4TableStart-278',
+ 'SPLzShare-UUID-SPL-4TableStart-279',
+ 'zShare-zENT-CMM-280',
+ 'SPLzShare-zENT-SPL-281',
+ 'zShare-Status-CMM-282',
+ 'SPLzShare-Status-SPL-283',
+ 'zShare-Scope Type-CMM-284',
+ 'SPLzShare-Scope Type-SPL-285',
+ 'zShare-Local Publish State-CMM-286',
+ 'SPLzShare-Local Publish State-SPL-287',
+ 'zShare-Public Permission-CMM-288',
+ 'SPLzShare-Public Permission-SPL-289',
+ 'zShare-Originating Scope ID-CMM-290',
+ 'SPLzShare-Originating Scope ID-SPL-291',
+ 'zShare-Scope ID-CMM-292',
+ 'SPLzShare-Scope ID-SPL-293',
+ 'zShare-Title-CMM-294',
+ 'SPLzShare-Title-SPL-295',
+ 'zShare-Share URL-CMM-296',
+ 'SPLzShare-Share URL-SPL-297',
+ ('zShare-Creation Date-CMM-298', 'datetime'),
+ ('SPLzShare-Creation Date-SPL-299', 'datetime'),
+ ('zShare-Start Date-CMM-300', 'datetime'),
+ ('SPLzShare-Start Date-SPL-301', 'datetime'),
+ ('zShare-End Date-CMM-302', 'datetime'),
+ ('SPLzShare-End Date-SPL-303', 'datetime'),
+ ('zShare-Expiry Date-CMM-304', 'datetime'),
+ ('SPLzShare-Expiry Date-SPL-305', 'datetime'),
+ 'zShare-Asset Count-CMM-306',
+ 'SPLzShare-Asset Count-SPL-307',
+ 'zShare-Photos Count-CMM-308',
+ 'SPLzShare-Photos Count-CMM-SPL-309',
+ 'zShare-Uploaded Photos Count-CMM-310',
+ 'SPLzShare-Uploaded Photos Count-SPL-311',
+ 'zShare-Videos Count-CMM-312',
+ 'SPLzShare-Videos Count-SPL-313',
+ 'zShare-Uploaded Videos Count-CMM-314',
+ 'SPLzShare-Uploaded Videos Count-SPL-315',
+ 'zShare-Force Sync Attempted-CMM-316',
+ 'SPLzShare-Force Sync Attempted-SPL-317',
+ 'zShare-Auto Share Policy-CMM-318',
+ 'SPLzShare-Auto Share Policy-SPL-319',
+ 'zShare-Should Notify On Upload Completion-CMM-320',
+ 'SPLzShare-Should Notify On Upload Completion-SPL-321',
+ 'zShare-Trashed State-CMM-322',
+ 'SPLzShare-Trashed State-SPL-323',
+ 'zShare-Cloud Delete State-CMM-324',
+ 'SPLzShare-Cloud Delete State-SPL-325',
+ 'zShare-Should Ignor Budgets-CMM-326',
+ 'SPLzShare-Should Ignor Budgets-SPL-327',
+ 'zShare-Rules-CMM-328',
+ 'SPLzShare-Rules-SPL-329',
+ 'zSharePartic-UUID-4TableStart-330',
+ 'SPLzSharePartic-UUID-4TableStart-331',
+ 'zSharePartic-Acceptance Status-332',
+ 'SPLzSharePartic-Acceptance Status-333',
+ 'zSharePartic-Is Current User-334',
+ 'SPLzSharePartic-Is Current User-335',
+ 'zSharePartic-Role-336',
+ 'SPLzSharePartic-Role-337',
+ 'zSharePartic-Premission-338',
+ 'SPLzSharePartic-Premission-339',
+ 'zSharePartic-User ID-340',
+ 'SPLzSharePartic-User ID-341',
+ 'SPLzSharePartic-zPK-4TableStart-342',
+ 'zSharePartic-zPK-4TableStart-343',
+ 'zSharePartic-Email Address-344',
+ 'SPLzSharePartic-Email Address-345',
+ 'zSharePartic-Phone Number-346',
+ 'SPLzSharePartic-Phone Number-347',
+ 'ParentzGenAlbum-UUID-4TableStart-348',
+ 'zGenAlbum-UUID-4TableStart-349',
+ 'SWYConverszGenAlbum-UUID-4TableStart-350',
+ 'ParentzGenAlbum-Cloud GUID-4TableStart-351',
+ 'zGenAlbum-Cloud GUID-4TableStart-352',
+ 'SWYConverszGenAlbum-Cloud GUID-4TableStart-353',
+ 'zCldShareAlbumInvRec-Album GUID-4TableStart-354',
+ 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-355',
+ 'zGenAlbum-Project Render UUID-4TableStart-356',
+ 'SWYConverszGenAlbum-Project Render UUID-4TableStart-357',
+ 'zAlbumList-Needs Reordering Number-358',
+ 'zGenAlbum-zENT- Entity-359',
+ 'ParentzGenAlbum-Kind-360',
+ 'zGenAlbum-Album Kind-361',
+ 'SWYConverszGenAlbum-Album Kind-362',
+ 'ParentzGenAlbum-Cloud-Local-State-363',
+ 'zGenAlbum-Cloud_Local_State-364',
+ 'SWYConverszGenAlbum-Cloud_Local_State-365',
+ 'ParentzGenAlbum- Title-366',
+ 'zGenAlbum- Title-User&System Applied-367',
+ 'SWYConverszGenAlbum- Title -User&System Applied-368',
+ 'zGenAlbum-Import Session ID-SWY-369',
+ 'zAsset- Conversation= zGenAlbum_zPK-370',
+ 'SWYConverszGenAlbum- Import Session ID-SWY-371',
+ 'zGenAlbum-Imported by Bundle Identifier-372',
+ 'SWYzGenAlbum-Imported by Bundle Identifier-373',
+ 'SWYConverszGenAlbum- Syndicate-374',
+ ('ParentzGenAlbum-Creation Date-375', 'datetime'),
+ ('zGenAlbum-Creation Date-376', 'datetime'),
+ ('SWYConverszGenAlbum-Creation Date-377', 'datetime'),
+ ('zGenAlbum-Cloud Creation Date-378', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Creation Date-379', 'datetime'),
+ ('zGenAlbum-Start Date-380', 'datetime'),
+ ('SWYConverszGenAlbum-Start Date-381', 'datetime'),
+ ('zGenAlbum-End Date-382', 'datetime'),
+ ('SWYConverszGenAlbum-End Date-383', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-384', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Subscription Date-385', 'datetime'),
+ 'ParentzGenAlbum-Pending Items Count-386',
+ 'zGenAlbum-Pending Items Count-387',
+ 'SWYConverszGenAlbum-Pending Items Count-388',
+ 'ParentzGenAlbum-Pending Items Type-389',
+ 'zGenAlbum-Pending Items Type-390',
+ 'SWYConverszGenAlbum-Pending Items Type-391',
+ 'zGenAlbum- Cached Photos Count-392',
+ 'SWYConverszGenAlbum- Cached Photos Count-393',
+ 'zGenAlbum- Cached Videos Count-394',
+ 'SWYConverszGenAlbum- Cached Videos Count-395',
+ 'zGenAlbum- Cached Count-396',
+ 'SWYConverszGenAlbum- Cached Count-397',
+ 'ParentzGenAlbum-Sync Event Order Key-398',
+ 'zGenAlbum-Sync Event Order Key-399',
+ 'SWYConverszGenAlbum-Sync Event Order Key-400',
+ 'zGenAlbum-Has Unseen Content-401',
+ 'SWYConverszGenAlbum-Has Unseen Content-402',
+ 'zGenAlbum-Unseen Asset Count-403',
+ 'SWYConverszGenAlbum-Unseen Asset Count-404',
+ 'zGenAlbum-is Owned-405',
+ 'SWYConverszGenAlbum-is Owned-406',
+ 'zGenAlbum-Cloud Relationship State-407',
+ 'SWYConverszGenAlbum-Cloud Relationship State-408',
+ 'zGenAlbum-Cloud Relationship State Local-409',
+ 'SWYConverszGenAlbum-Cloud Relationship State Local-410',
+ 'zGenAlbum-Cloud Owner Mail Key-411',
+ 'SWYConverszGenAlbum-Cloud Owner Mail Key-412',
+ 'zGenAlbum-Cloud Owner Frist Name-413',
+ 'SWYConverszGenAlbum-Cloud Owner Frist Name-414',
+ 'zGenAlbum-Cloud Owner Last Name-415',
+ 'SWYConverszGenAlbum-Cloud Owner Last Name-416',
+ 'zGenAlbum-Cloud Owner Full Name-417',
+ 'SWYConverszGenAlbum-Cloud Owner Full Name-418',
+ 'zGenAlbum-Cloud Person ID-419',
+ 'SWYConverszGenAlbum-Cloud Person ID-420',
+ 'zAsset-Cloud Owner Hashed Person ID-421',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-422',
+ 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-423',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-424',
+ 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-425',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-426',
+ 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-427',
+ 'zGenAlbum-Cloud Album Sub Type-428',
+ 'SWYConverszGenAlbum-Cloud Album Sub Type-429',
+ ('zGenAlbum-Cloud Contribution Date-430', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Contribution Date-431', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-432', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Last Interesting Change Date-433', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-434',
+ 'SWYConverszGenAlbum-Cloud Notification Enabled-435',
+ 'ParentzGenAlbum-Pinned-436',
+ 'zGenAlbum-Pinned-437',
+ 'SWYConverszGenAlbum-Pinned-438',
+ 'ParentzGenAlbum-Custom Sort Key-439',
+ 'zGenAlbum-Custom Sort Key-440',
+ 'SWYConverszGenAlbum-Custom Sort Key-441',
+ 'ParentzGenAlbum-Custom Sort Ascending-442',
+ 'zGenAlbum-Custom Sort Ascending-443',
+ 'SWYConverszGenAlbum-Custom Sort Ascending-444',
+ 'ParentzGenAlbum-Is Prototype-445',
+ 'zGenAlbum-Is Prototype-446',
+ 'SWYConverszGenAlbum-Is Prototype-447',
+ 'ParentzGenAlbum-Project Document Type-448',
+ 'zGenAlbum-Project Document Type-449',
+ 'SWYConverszGenAlbum-Project Document Type-450',
+ 'ParentzGenAlbum-Custom Query Type-451',
+ 'zGenAlbum-Custom Query Type-452',
+ 'SWYConverszGenAlbum-Custom Query Type-453',
+ 'ParentzGenAlbum-Trashed State-454',
+ ('ParentzGenAlbum-Trash Date-455', 'datetime'),
+ 'zGenAlbum-Trashed State-456',
+ ('zGenAlbum-Trash Date-457', 'datetime'),
+ 'SWYConverszGenAlbum-Trashed State-458',
+ ('SWYConverszGenAlbum-Trash Date-459', 'datetime'),
+ 'ParentzGenAlbum-Cloud Delete State-460',
+ 'zGenAlbum-Cloud Delete State-461',
+ 'SWYConverszGenAlbum-Cloud Delete State-462',
+ 'zGenAlbum-Cloud Owner Whitelisted-463',
+ 'SWYConverszGenAlbum-Cloud Owner Whitelisted-464',
+ 'zGenAlbum-Cloud Local Public URL Enabled-465',
+ 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-466',
+ 'zGenAlbum-Cloud Public URL Enabled-467',
+ 'zGenAlbum-Public URL-468',
+ 'SWYConverszGenAlbum-Cloud Public URL Enabled-469',
+ 'SWYConverszGenAlbum-Public URL-470',
+ 'zGenAlbum-Key Asset Face Thumb Index-471',
+ 'SWYConverszGenAlbum-Key Asset Face Thumb Index-472',
+ 'zGenAlbum-Project Text Extension ID-473',
+ 'SWYConverszGenAlbum-Project Text Extension ID-474',
+ 'zGenAlbum-User Query Data-475',
+ 'SWYConverszGenAlbum-User Query Data-476',
+ 'zGenAlbum-Custom Query Parameters-477',
+ 'SWYConverszGenAlbum-Custom Query Parameters-478',
+ 'zGenAlbum-Project Data-479',
+ 'SWYConverszGenAlbum-Project Data-480',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-481',
+ 'zCldShareAlbumInvRec-Invitation State Local-482',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-483',
+ ('zCldShareAlbumInvRec-Subscription Date-484', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-485',
+ 'zCldShareAlbumInvRec-Invitee Last Name-486',
+ 'zCldShareAlbumInvRec-Invitee Full Name-487',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-488',
+ 'zCldShareAlbumInvRec-Invitee Email Key-489',
+ 'zGenAlbum-Key Asset Face ID-490',
+ 'zFaceCrop-Face Area Points-491',
+ 'zAsset-Face Adjustment Version-492',
+ 'zAddAssetAttr-Face Analysis Version-493',
+ 'zDetFace-Asset Visible-494',
+ 'zPerson-Face Count-495',
+ 'zDetFace-Face Crop-496',
+ 'zDetFace-Face Algorithm Version-497',
+ 'zDetFace-Adjustment Version-498',
+ 'zDetFace-UUID-4TableStart-499',
+ 'zPerson-Person UUID-4TableStart-500',
+ 'zDetFace-Confirmed Face Crop Generation State-501',
+ 'zDetFace-Manual-502',
+ 'zDetFace-Detection Type-503',
+ 'zPerson-Detection Type-504',
+ 'zDetFace-VIP Model Type-505',
+ 'zDetFace-Name Source-506',
+ 'zDetFace-Cloud Name Source-507',
+ 'zPerson-Person URI-508',
+ 'zPerson-Display Name-509',
+ 'zPerson-Full Name-510',
+ 'zPerson-Cloud Verified Type-511',
+ 'zFaceCrop-State-512',
+ 'zFaceCrop-Type-513',
+ 'zFaceCrop-UUID-4TableStart-514',
+ 'zPerson-Type-515',
+ 'zPerson-Verified Type-516',
+ 'zPerson-Gender Type-517',
+ 'zDetFace-Gender Type-518',
+ 'zDetFace-Center X-519',
+ 'zDetFace-Center Y-520',
+ 'zPerson-Age Type Estimate-521',
+ 'zDetFace-Age Type Estimate-522',
+ 'zDetFace-Ethnicity Type-523',
+ 'zDetFace-Skin Tone Type-524',
+ 'zDetFace-Hair Type-525',
+ 'zDetFace-Hair Color Type-526',
+ 'zDetFace-Head Gear Type-527',
+ 'zDetFace-Facial Hair Type-528',
+ 'zDetFace-Has Face Mask-529',
+ 'zDetFace-Pose Type-530',
+ 'zDetFace-Face Expression Type-531',
+ 'zDetFace-Has Smile-532',
+ 'zDetFace-Smile Type-533',
+ 'zDetFace-Lip Makeup Type-534',
+ 'zDetFace-Eyes State-535',
+ 'zDetFace-Is Left Eye Closed-536',
+ 'zDetFace-Is Right Eye Closed-537',
+ 'zDetFace-Gaze Center X-538',
+ 'zDetFace-Gaze Center Y-539',
+ 'zDetFace-Face Gaze Type-540',
+ 'zDetFace-Eye Glasses Type-541',
+ 'zDetFace-Eye Makeup Type-542',
+ 'zDetFace-Cluster Squence Number Key-543',
+ 'zDetFace-Grouping ID-544',
+ 'zDetFace-Master ID-545',
+ 'zDetFace-Quality-546',
+ 'zDetFace-Quality Measure-547',
+ 'zDetFace-Source Height-548',
+ 'zDetFace-Source Width-549',
+ 'zDetFace-Hidden-Asset Hidden-550',
+ 'zDetFace-In Trash-Recently Deleted-551',
+ 'zDetFace-Cloud Local State-552',
+ 'zDetFace-Training Type-553',
+ 'zDetFace.Pose Yaw-554',
+ 'zDetFace-Body Center X-555',
+ 'zDetFace-Body Center Y-556',
+ 'zDetFace-Body Height-557',
+ 'zDetFace-Body Width-558',
+ 'zDetFace-Roll-559',
+ 'zDetFace-Size-560',
+ 'zDetFace-Cluster Squence Number-561',
+ 'zDetFace-Blur Score-562',
+ 'zDetFacePrint-Face Print Version-563',
+ 'zMedAnlyAstAttr-Face Count-564',
+ 'zDetFaceGroup-UUID-4TableStart-565',
+ 'zDetFaceGroup-Person Builder State-566',
+ 'zDetFaceGroup-UnNamed Face Count-567',
+ 'zPerson-In Person Naming Model-568',
+ 'zPerson-Key Face Pick Source Key-569',
+ 'zPerson-Manual Order Key-570',
+ 'zPerson-Question Type-571',
+ 'zPerson-Suggested For Client Type-572',
+ 'zPerson-Merge Target Person-573',
+ 'zPerson-Cloud Local State-574',
+ 'zFaceCrop-Cloud Local State-575',
+ 'zFaceCrop-Cloud Type-576',
+ 'zPerson-Cloud Delete State-577',
+ 'zFaceCrop-Cloud Delete State-578',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-579',
+ 'zAsset-Highlight Visibility Score-580',
+ 'zMedAnlyAstAttr-Media Analysis Version-581',
+ 'zMedAnlyAstAttr-Audio Classification-582',
+ 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-583',
+ 'zMedAnlyAstAttr-Best Video Range Start Time Scale-584',
+ 'zMedAnlyAstAttr-Best Video Range Duration Value-585',
+ 'zMedAnlyAstAttr-Best Video Range Start Value-586',
+ 'zMedAnlyAstAttr-Packed Best Playback Rect-587',
+ 'zMedAnlyAstAttr-Activity Score-588',
+ 'zMedAnlyAstAttr-Video Score-589',
+ 'zMedAnlyAstAttr-AutoPlay Suggestion Score-590',
+ 'zMedAnlyAstAttr-Blurriness Score-591',
+ 'zMedAnlyAstAttr-Exposure Score-592',
+ 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-593',
+ 'zMedAnlyAstAttr-Probable Rotation Direction-594',
+ 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-595',
+ 'zAssetAnalyState-Asset UUID-4TableStart-596',
+ 'zAssetAnalyState-Analyisis State-597',
+ 'zAssetAnalyState-Worker Flags-598',
+ 'zAssetAnalyState-Worker Type-599',
+ ('zAssetAnalyState-Ignore Until Date-600', 'datetime'),
+ ('zAssetAnalyState-Last Ignored Date-601', 'datetime'),
+ ('zAssetAnalyState-Sort Token-602', 'datetime'),
+ 'zMedAnlyAstAttr-Character Recognition Attr-603',
+ 'zCharRecogAttr-Algorithm Version-604',
+ 'zCharRecogAttr-Adjustment Version-605',
+ 'zMedAnlyAstAttr-Visual Search Attributes-606',
+ 'zVisualSearchAttr-Algorithm Version-607',
+ 'zVisualSearchAttr-Adjustment Version-608',
+ 'zAsset-Overall Aesthetic Score-609',
+ 'zCompAssetAttr-Behavioral Score-610',
+ 'zCompAssetAttr-Failure Score zCompAssetAttr-611',
+ 'zCompAssetAttr-Harmonious Color Score-612',
+ 'zCompAssetAttr-Immersiveness Score-613',
+ 'zCompAssetAttr-Interaction Score-614',
+ 'zCompAssetAttr-Intersting Subject Score-615',
+ 'zCompAssetAttr-Intrusive Object Presence Score-616',
+ 'zCompAssetAttr-Lively Color Score-617',
+ 'zCompAssetAttr-Low Light-618',
+ 'zCompAssetAttr-Noise Score-619',
+ 'zCompAssetAttr-Pleasant Camera Tilt Score-620',
+ 'zCompAssetAttr-Pleasant Composition Score-621',
+ 'zCompAssetAttr-Pleasant Lighting Score-622',
+ 'zCompAssetAttr-Pleasant Pattern Score-623',
+ 'zCompAssetAttr-Pleasant Perspective Score-624',
+ 'zCompAssetAttr-Pleasant Post Processing Score-625',
+ 'zCompAssetAttr-Pleasant Reflection Score-626',
+ 'zCompAssetAttrPleasant Symmetry Score-627',
+ 'zCompAssetAttr-Sharply Focused Subject Score-628',
+ 'zCompAssetAttr-Tastfully Blurred Score-629',
+ 'zCompAssetAttr-Well Chosen Subject Score-630',
+ 'zCompAssetAttr-Well Framed Subject Score-631',
+ 'zCompAssetAttr-Well Timeed Shot Score-632',
+ 'zCldRes-Asset UUID-4TableStart-633',
+ 'zCldRes-Cloud Local State-634',
+ 'zCldRes-File Size-635',
+ 'zCldRes-Height-636',
+ 'zCldRes-Is Available-637',
+ 'zCldRes-Is Locally Available-638',
+ 'zCldRes-Prefetch Count-639',
+ 'zCldRes-Source Type-640',
+ 'zCldRes-Type-641',
+ 'zCldRes-Width-642',
+ ('zCldRes-Date Created-643', 'datetime'),
+ ('zCldRes-Last OnDemand Download Date-644', 'datetime'),
+ ('zCldRes-Last Prefetch Date-645', 'datetime'),
+ 'zCldRes-Prunedat-646',
+ 'zCldRes-File Path-647',
+ 'zCldRes-Fingerprint-648',
+ 'zCldRes-Item ID-649',
+ 'zCldRes-UniID-650',
+ 'zAddAssetAttr-zPK-651',
+ 'zAddAssetAttr-zENT-652',
+ 'ZAddAssetAttr-zOPT-653',
+ 'zAddAssetAttr-zAsset= zAsset_zPK-654',
+ 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-655',
+ 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-656',
+ 'zAddAssetAttr-Master Fingerprint-657',
+ 'zAddAssetAttr-Public Global UUID-658',
+ 'zAddAssetAttr-Deferred Photo Identifier-659',
+ 'zAddAssetAttr-Original Assets UUID-660',
+ 'zAddAssetAttr-Import Session ID-661',
+ 'zAddAssetAttr-Originating Asset Identifier-662',
+ 'zAddAssetAttr.Adjusted Fingerprint-663',
+ 'zAlbumList-zPK= Album List Key-664',
+ 'zAlbumList-zENT-665',
+ 'zAlbumList-zOPT-666',
+ 'zAlbumList-ID Key-667',
+ 'zAlbumList-UUID-668',
+ 'zAsset-zPK-669',
+ 'zAsset-zENT-670',
+ 'zAsset-zOPT-671',
+ 'zAsset-Master= zCldMast-zPK-672',
+ 'zAsset-Extended Attributes= zExtAttr-zPK-673',
+ 'zAsset-Import Session Key-674',
+ 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-675',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-676',
+ 'zAsset-Moment Share Key= zShare-zPK-677',
+ 'zAsset-zMoment Key= zMoment-zPK-678',
+ 'zAsset-Computed Attributes Asset Key-679',
+ 'zAsset-Highlight Being Assets-HBA Key-680',
+ 'zAsset-Highlight Being Extended Assets-HBEA Key-681',
+ 'zAsset-Highligh Being Summary Assets-HBSA Key-682',
+ 'zAsset-Day Group Highlight Being Assets-DGHBA Key-683',
+ 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-684',
+ 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-685',
+ 'zAsset-Promotion Score-686',
+ 'zAsset-Media Analysis Attributes Key-687',
+ 'zAsset-Media Group UUID-688',
+ 'zAsset-UUID = store.cloudphotodb-689',
+ 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-690',
+ 'zAsset.Cloud Collection GUID-691',
+ 'zAsset-Avalanche UUID-692',
+ 'zAssetAnalyState-zPK-693',
+ 'zAssetAnalyState-zEnt-694',
+ 'zAssetAnalyState-zOpt-695',
+ 'zAssetAnalyState-Asset= zAsset-zPK-696',
+ 'zAssetAnalyState-Asset UUID-697',
+ 'zAssetDes-zPK-698',
+ 'zAssetDes-zENT-699',
+ 'zAssetDes-zOPT-700',
+ 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-701',
+ 'zCharRecogAttr-zPK-702',
+ 'zCharRecogAttr-zENT-703',
+ 'zCharRecogAttr-zOPT-704',
+ 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-705',
+ 'zCldFeedEnt-zPK= zCldShared keys-706',
+ 'zCldFeedEnt-zENT-707',
+ 'zCldFeedEnt-zOPT-708',
+ 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-709',
+ 'zCldFeedEnt-Entry Invitation Record GUID-710',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-711',
+ 'zCldMast-zPK= zAsset-Master-712',
+ 'zCldMast-zENT-713',
+ 'zCldMast-zOPT-714',
+ 'zCldMast-Moment Share Key= zShare-zPK-715',
+ 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-716',
+ 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-717',
+ 'zCldMast-Originating Asset ID-718',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-719',
+ 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-720',
+ 'CMzCldMastMedData-zENT-721',
+ 'CMzCldMastMedData-zOPT-722',
+ 'CMzCldMastMedData-CldMast= zCldMast-zPK-723',
+ 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-724',
+ 'AAAzCldMastMedData-zENT-725',
+ 'AAAzCldMastMedData-zOPT-726',
+ 'AAAzCldMastMedData-CldMast key-727',
+ 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-728',
+ 'zCldRes-zPK-729',
+ 'zCldRes-zENT-730',
+ 'zCldRes-zOPT-731',
+ 'zCldRes-Asset= zAsset-zPK-732',
+ 'zCldRes-Cloud Master= zCldMast-zPK-733',
+ 'zCldRes-Asset UUID-734',
+ 'zCldShareAlbumInvRec-zPK-735',
+ 'zCldShareAlbumInvRec-zEnt-736',
+ 'zCldShareAlbumInvRec-zOpt-737',
+ 'zCldShareAlbumInvRec-Album Key-738',
+ 'zCldShareAlbumInvRec-FOK Album Key-739',
+ 'zCldShareAlbumInvRec-Album GUID-740',
+ 'zCldShareAlbumInvRec-Cloud GUID-741',
+ 'zCldSharedComment-zPK-742',
+ 'zCldSharedComment-zENT-743',
+ 'zCldSharedComment-zOPT-744',
+ 'zCldSharedComment-Commented Asset Key= zAsset-zPK-745',
+ 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-746',
+ 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-747',
+ 'zCldSharedComment-Liked Asset Key= zAsset-zPK-748',
+ 'zCldSharedComment-CldFeedLikeCommentEntry Key-749',
+ 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-750',
+ 'zCldSharedComment-Cloud GUID-751',
+ 'zCompAssetAttr-zPK-752',
+ 'zCompAssetAttr-zEnt-753',
+ 'zCompAssetAttr-zOpt-754',
+ 'zCompAssetAttr-Asset Key-755',
+ 'zDetFace-zPK-756',
+ 'zDetFace-zEnt-757',
+ 'zDetFace.zOpt-758',
+ 'zDetFace-Asset= zAsset-zPK or Asset Containing Face-759',
+ 'zDetFace-Person= zPerson-zPK-760',
+ 'zDetFace-Person Being Key Face-761',
+ 'zDetFace-Face Print-762',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-763',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-764',
+ 'zDetFace-UUID-765',
+ 'zDetFaceGroup-zPK-766',
+ 'zDetFaceGroup-zENT-767',
+ 'zDetFaceGroup-zOPT-768',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-769',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-770',
+ 'zDetFaceGroup-UUID-771',
+ 'zDetFacePrint-zPK-772',
+ 'zDetFacePrint-zEnt-773',
+ 'zDetFacePrint-zOpt-774',
+ 'zDetFacePrint-Face Key-775',
+ 'zExtAttr-zPK= zAsset-zExtendedAttributes-776',
+ 'zExtAttr-zENT-777',
+ 'zExtAttr-zOPT-778',
+ 'zExtAttr-Asset Key-779',
+ 'zFaceCrop-zPK-780',
+ 'zFaceCrop-zEnt-781',
+ 'zFaceCrop-zOpt-782',
+ 'zFaceCrop-Asset Key-783',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-784',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-785',
+ 'zFaceCrop-Face Key-786',
+ 'zFaceCrop-UUID-787',
+ 'zGenAlbum-zPK=26AlbumLists= 26Albums-788',
+ 'zGenAlbum-zENT-789',
+ 'zGenAlbum-zOpt-790',
+ 'zGenAlbum-Key Asset-Key zAsset-zPK-791',
+ 'zGenAlbum-Secondary Key Asset-792',
+ 'zGenAlbum-Tertiary Key Asset-793',
+ 'zGenAlbum-Custom Key Asset-794',
+ 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-795',
+ 'zGenAlbum-FOK Parent Folder-796',
+ 'zGenAlbum-zSyndicate-797',
+ 'zGenAlbum-UUID-798',
+ 'SWYConverszGenAlbum-UUID-799',
+ 'zGenAlbum-Cloud_GUID = store.cloudphotodb-800',
+ 'SWYConverszGenAlbum-Cloud GUID-801',
+ 'zGenAlbum-Project Render UUID-802',
+ 'SWYConverszGenAlbum-Project Render UUID-803',
+ 'zIntResou-zPK-804',
+ 'zIntResou-zENT-805',
+ 'zIntResou-zOPT-806',
+ 'zIntResou-Asset= zAsset_zPK-807',
+ 'zIntResou-Fingerprint-808',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-809',
+ 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-810',
+ 'zMedAnlyAstAttr-zEnt-811',
+ 'zMedAnlyAstAttr-zOpt-812',
+ 'zMedAnlyAstAttr-Asset= zAsset-zPK-813',
+ 'zPerson-zPK=zDetFace-Person-814',
+ 'zPerson-zEnt-815',
+ 'zPerson-zOpt-816',
+ 'zPerson-KeyFace=zDetFace-zPK-817',
+ 'zPerson-Assoc Face Group Key-818',
+ 'zPerson-Person UUID-819',
+ 'zSceneP-zPK-820',
+ 'zSceneP-zENT-821',
+ 'zSceneP-zOPT-822',
+ 'zShare-zPK-823',
+ 'zShare-zENT-824',
+ 'zShare-zOPT-825',
+ 'zShare-UUID-826',
+ 'SPLzShare-UUID-827',
+ 'zShare-Scope ID = store.cloudphotodb-828',
+ 'zSharePartic-zPK-829',
+ 'zSharePartic-zENT-830',
+ 'zSharePartic-zOPT-831',
+ 'zSharePartic-Share Key= zShare-zPK-832',
+ 'zSharePartic-UUID-833',
+ 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-834',
+ 'zUnmAdj-zOPT-835',
+ 'zUnmAdj-zENT-836',
+ 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-837',
+ 'zUnmAdj-UUID-838',
+ 'zUnmAdj-Other Adjustments Fingerprint-839',
+ 'zUnmAdj-Similar to Orig Adjustments Fingerprint-840',
+ 'zVisualSearchAttr-zPK-841',
+ 'zVisualSearchAttr-zENT-842',
+ 'zVisualSearchAttr-zOPT-843',
+ 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-844',
+ 'z26AlbumList-26Albums= zGenAlbum-zPK-845',
+ 'z26AlbumList-Album List Key-846',
+ 'z26AlbumList-FOK26Albums Key-847',
+ 'z27Assets-27Albums= zGenAlbum-zPK-848',
+ 'z27Assets-3Asset Key= zAsset-zPK in the Album-849',
+ 'z27Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-850')
+ data_list = get_sqlite_db_records(source_path, query)
+ return data_headers, data_list, source_path
-def get_ph95ios15refforassetanalysissyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
+@artifact_processor
+def Ph95_2iOS15RefforAssetAnalysisSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if (version.parse(iosversion) <= version.parse("14.8.1")) or (version.parse(iosversion) >= version.parse("16")):
- logfunc("Unsupported version for Syndication.photoslibrary-database-Photos.sqlite reference for asset analysis from iOS " + iosversion)
+ logfunc("Unsupported version for Syndication.photoslibrary for iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found, "Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -4919,7 +4922,7 @@ def get_ph95ios15refforassetanalysissyndpl(files_found, report_folder, seeker, w
zAssetAnalyState.ZWORKERTYPE AS 'zAssetAnalyState-Worker Type',
DateTime(zAssetAnalyState.ZIGNOREUNTILDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Ignore Until Date',
DateTime(zAssetAnalyState.ZLASTIGNOREDDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Last Ignored Date',
- zAssetAnalyState.ZSORTTOKEN AS 'zAssetAnalyState-Sort Token',
+ DateTime(zAssetAnalyState.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Sort Token',
zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES AS 'zMedAnlyAstAttr-Character Recognition Attr',
zCharRecogAttr.ZALGORITHMVERSION AS 'zCharRecogAttr-Algorithm Version',
zCharRecogAttr.ZADJUSTMENTVERSION AS 'zCharRecogAttr-Adjustment Version',
@@ -5204,1028 +5207,967 @@ def get_ph95ios15refforassetanalysissyndpl(files_found, report_folder, seeker, w
LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON
LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP
ORDER BY zAsset.ZADDEDDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
- row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
- row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
- row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
- row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
- row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
- row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
- row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
- row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
- row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
- row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
- row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
- row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
- row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
- row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
- row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
- row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
- row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
- row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
- row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
- row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307],
- row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315],
- row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323],
- row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331],
- row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339],
- row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347],
- row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355],
- row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363],
- row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371],
- row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379],
- row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387],
- row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395],
- row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403],
- row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411],
- row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419],
- row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427],
- row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435],
- row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443],
- row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451],
- row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459],
- row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467],
- row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475],
- row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483],
- row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491],
- row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499],
- row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507],
- row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515],
- row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523],
- row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531],
- row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539],
- row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547],
- row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555],
- row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563],
- row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571],
- row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579],
- row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587],
- row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595],
- row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603],
- row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611],
- row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619],
- row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627],
- row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635],
- row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643],
- row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651],
- row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659],
- row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667],
- row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675],
- row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683],
- row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691],
- row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699],
- row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707],
- row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715],
- row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723],
- row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731],
- row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739],
- row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747],
- row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755],
- row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763],
- row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771],
- row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779],
- row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787],
- row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795],
- row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803],
- row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811],
- row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819],
- row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827],
- row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835],
- row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843],
- row[844], row[845], row[846], row[847], row[848], row[849], row[850]))
-
- counter += 1
-
- description = 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.' \
- ' This parser includes the largest set of decoded data based on testing and research' \
- ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the' \
- ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md' \
- ' TimelineExplorer to view, search and filter the results.'
- report = ArtifactHtmlReport('Ph95.2-iOS15_Ref_for_Asset_Analysis-SyndPL')
- report.start_artifact_report(report_folder, 'Ph95.2-iOS15_Ref_for_Asset_Analysis-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Added Date-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset Complete-2',
- 'zAsset-zPK-4QueryStart-3',
- 'zAddAssetAttr-zPK-4QueryStart-4',
- 'zAsset-UUID = store.cloudphotodb-4QueryStart-5',
- 'zAddAssetAttr-Master Fingerprint-4TableStart-6',
- 'zIntResou-Fingerprint-4TableStart-7',
- 'zAsset-Bundle Scope-8',
- 'zAsset-Syndication State-9',
- 'zAsset-Cloud is My Asset-10',
- 'zAsset-Cloud is deletable-Asset-11',
- 'zAsset-Cloud_Local_State-12',
- 'zAsset-Visibility State-13',
- 'zExtAttr-Camera Make-14',
- 'zExtAttr-Camera Model-15',
- 'zExtAttr-Lens Model-16',
- 'zExtAttr-Flash Fired-17',
- 'zExtAttr-Focal Lenght-18',
- 'zExtAttr-Focal Lenth in 35MM-19',
- 'zExtAttr-Digital Zoom Ratio-20',
- 'zAsset-Derived Camera Capture Device-21',
- 'zAddAssetAttr-Camera Captured Device-22',
- 'zAddAssetAttr-Imported by-23',
- 'zCldMast-Imported By-24',
- 'zAddAssetAttr.Imported by Bundle Identifier-25',
- 'zAddAssetAttr-Imported By Display Name-26',
- 'zCldMast-Imported by Bundle ID-27',
- 'zCldMast-Imported by Display Name-28',
- 'zAsset-Saved Asset Type-29',
- 'zAsset-Directory-Path-30',
- 'zAsset-Filename-31',
- 'zAddAssetAttr- Original Filename-32',
- 'zCldMast- Original Filename-33',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-34',
- 'zAddAssetAttr-Date Created Source-35',
- 'zAsset-Date Created-36',
- 'zCldMast-Creation Date-37',
- 'zIntResou-CldMst Date Created-38',
- 'zAddAssetAttr-Time Zone Name-39',
- 'zAddAssetAttr-Time Zone Offset-40',
- 'zAddAssetAttr-Inferred Time Zone Offset-41',
- 'zAddAssetAttr-EXIF-String-42',
- 'zAsset-Modification Date-43',
- 'zAsset-Last Shared Date-44',
- 'zCldMast-Cloud Local State-45',
- 'zCldMast-Import Date-46',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-47',
- 'zAddAssetAttr-Import Session ID-4QueryStart-48',
- 'zAddAssetAttr-Alt Import Image Date-49',
- 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-50',
- 'zAsset-Cloud Batch Publish Date-51',
- 'zAsset-Cloud Server Publish Date-52',
- 'zAsset-Cloud Download Requests-53',
- 'zAsset-Cloud Batch ID-54',
- 'zAddAssetAttr-Upload Attempts-55',
- 'zAsset-Latitude-56',
- 'zExtAttr-Latitude-57',
- 'zAsset-Longitude-58',
- 'zExtAttr-Longitude-59',
- 'zAddAssetAttr-GPS Horizontal Accuracy-60',
- 'zAddAssetAttr-Location Hash-61',
- 'zAddAssetAttr-Shifted Location Valid-62',
- 'zAddAssetAttr-Shifted Location Data-63',
- 'zAddAssetAttr-Reverse Location Is Valid-64',
- 'zAddAssetAttr-Reverse Location Data-65',
- 'ParentzGenAlbum-UUID-4QueryStart-66',
- 'zGenAlbum-UUID-4QueryStart-67',
- 'SWYConverszGenAlbum-UUID-4QueryStart-68',
- 'ParentzGenAlbum-Cloud GUID-4QueryStart-69',
- 'zGenAlbum-Cloud GUID-4QueryStart-70',
- 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-71',
- 'zCldShareAlbumInvRec-Album GUID-4QueryStart-72',
- 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-73',
- 'zGenAlbum-Project Render UUID-4QueryStart-74',
- 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-75',
- 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-76',
- 'zGenAlbum-Cloud_Local_State-4QueryStart-77',
- 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-78',
- 'ParentzGenAlbum- Creation Date- 4QueryStart-79',
- 'zGenAlbum- Creation Date- 4QueryStart-80',
- 'SWYConverszGenAlbum- Creation Date- 4QueryStart-81',
- 'zGenAlbum- Cloud Creation Date- 4QueryStart-82',
- 'SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-83',
- 'zGenAlbum- Start Date- 4QueryStart-84',
- 'SWYConverszGenAlbum- Start Date- 4QueryStart-85',
- 'zGenAlbum- End Date- 4QueryStart-86',
- 'SWYConverszGenAlbum- End Date- 4QueryStart-87',
- 'zGenAlbum-Cloud Subscription Date- 4QueryStart-88',
- 'SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-89',
- 'ParentzGenAlbum- Title- 4QueryStart-90',
- 'zGenAlbum- Title-User&System Applied- 4QueryStart-91',
- 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-92',
- 'zGenAlbum-Import Session ID-SWY- 4QueryStart-93',
- 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-94',
- 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-95',
- 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-96',
- 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-97',
- 'SWYConverszGenAlbum- Syndicate-4QueryStart-98',
- 'zGenAlbum-zENT- Entity- 4QueryStart-99',
- 'ParentzGenAlbum- Kind- 4QueryStart-100',
- 'zGenAlbum-Album Kind- 4QueryStart-101',
- 'SWYConverszGenAlbum-Album Kind- 4QueryStart-102',
- 'AAAzCldMastMedData-zOPT-103',
- 'zAddAssetAttr-Media Metadata Type-104',
- 'AAAzCldMastMedData-Data-105',
- 'CldMasterzCldMastMedData-zOPT-106',
- 'zCldMast-Media Metadata Type-107',
- 'CMzCldMastMedData-Data-108',
- 'zAddAssetAttr-Syndication History-109',
- 'zMedAnlyAstAttr-Syndication Processing Version-110',
- 'zMedAnlyAstAttr-Syndication Processing Value-111',
- 'zAsset-Orientation-112',
- 'zAddAssetAttr-Original Orientation-113',
- 'zAsset-Kind-114',
- 'zAsset-Kind-Sub-Type-115',
- 'zAddAssetAttr-Cloud Kind Sub Type-116',
- 'zAsset-Playback Style-117',
- 'zAsset-Playback Variation-118',
- 'zAsset-Video Duration-119',
- 'zExtAttr-Duration-120',
- 'zAsset-Video CP Duration-121',
- 'zAddAssetAttr-Video CP Duration Time Scale-122',
- 'zAsset-Video CP Visibility State-123',
- 'zAddAssetAttr-Video CP Display Value-124',
- 'zAddAssetAttr-Video CP Display Time Scale-125',
- 'zIntResou-Datastore Class ID-126',
- 'zAsset-Cloud Placeholder Kind-127',
- 'zIntResou-Local Availability-128',
- 'zIntResou-Local Availability Target-129',
- 'zIntResou-Cloud Local State-130',
- 'zIntResou-Remote Availability-131',
- 'zIntResou-Remote Availability Target-132',
- 'zIntResou-Transient Cloud Master-133',
- 'zIntResou-Side Car Index-134',
- 'zIntResou- File ID-135',
- 'zIntResou-Version-136',
- 'zAddAssetAttr- Original-File-Size-137',
- 'zIntResou-Resource Type-138',
- 'zIntResou-Datastore Sub-Type-139',
- 'zIntResou-Cloud Source Type-140',
- 'zIntResou-Data Length-141',
- 'zIntResou-Recipe ID-142',
- 'zIntResou-Cloud Last Prefetch Date-143',
- 'zIntResou-Cloud Prefetch Count-144',
- 'zIntResou- Cloud-Last-OnDemand Download-Date-145',
- 'zIntResou-UniformTypeID_UTI_Conformance_Hint-146',
- 'zIntResou-Compact-UTI-147',
- 'zAsset-Uniform Type ID-148',
- 'zAsset-Original Color Space-149',
- 'zCldMast-Uniform_Type_ID-150',
- 'zCldMast-Full Size JPEG Source-151',
- 'zAsset-HDR Gain-152',
- 'zAsset-zHDR_Type-153',
- 'zExtAttr-Codec-154',
- 'zIntResou-Codec Four Char Code Name-155',
- 'zCldMast-Codec Name-156',
- 'zCldMast-Video Frame Rate-157',
- 'zCldMast-Placeholder State-158',
- 'zAsset-Depth_Type-159',
- 'zAsset-Avalanche UUID-4TableStart-160',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-161',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-162',
- 'zAddAssetAttr-Cloud Recovery State-163',
- 'zAddAssetAttr-Cloud State Recovery Attempts Count-164',
- 'zAsset-Deferred Processing Needed-165',
- 'zAsset-Video Deferred Processing Needed-166',
- 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-167',
- 'zAddAssetAttr-Deferred Processing Candidate Options-168',
- 'zAsset-Has Adjustments-Camera-Effects-Filters-169',
- 'zUnmAdj-UUID-4TableStart-170',
- 'zAsset-Adjustment Timestamp-171',
- 'zUnmAdj-Adjustment Timestamp-172',
- 'zAddAssetAttr-Editor Bundle ID-173',
- 'zUnmAdj-Editor Localized Name-174',
- 'zUnmAdj-Adjustment Format ID-175',
- 'zAddAssetAttr-Montage-176',
- 'zUnmAdj-Adjustment Render Types-177',
- 'zUnmAdj-Adjustment Format Version-178',
- 'zUnmAdj-Adjustment Base Image Format-179',
- 'zAsset-Favorite-180',
- 'zAsset-Hidden-181',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-182',
- 'zAsset-Trashed Date-183',
- 'zIntResou-Trash State-184',
- 'zIntResou-Trashed Date-185',
- 'zAsset-Cloud Delete State-186',
- 'zIntResou-Cloud Delete State-187',
- 'zAddAssetAttr-PTP Trashed State-188',
- 'zIntResou-PTP Trashed State-189',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-190',
- 'zMedAnlyAstAttr-Media Analysis Timestamp-191',
- 'zAsset-Analysis State Modificaion Date-192',
- 'zAddAssetAttr- Pending View Count-193',
- 'zAddAssetAttr- View Count-194',
- 'zAddAssetAttr- Pending Play Count-195',
- 'zAddAssetAttr- Play Count-196',
- 'zAddAssetAttr- Pending Share Count-197',
- 'zAddAssetAttr- Share Count-198',
- 'zAddAssetAttr-Allowed for Analysis-199',
- 'zAddAssetAttr-Scene Analysis Version-200',
- 'zAddAssetAttr-Scene Analysis is From Preview-201',
- 'zAddAssetAttr-Scene Analysis Timestamp-202',
- 'zAddAssetAttr-Destination Asset Copy State-203',
- 'zAddAssetAttr-Source Asset for Duplication Scope ID-204',
- 'zCldMast-Source Master For Duplication Scope ID-205',
- 'zAddAssetAttr-Source Asset For Duplication ID-206',
- 'zCldMast-Source Master for Duplication ID-207',
- 'zAddAssetAttr-Variation Suggestions States-208',
- 'zAsset-High Frame Rate State-209',
- 'zAsset-Video Key Frame Time Scale-210',
- 'zAsset-Video Key Frame Value-211',
- 'zExtAttr-ISO-212',
- 'zExtAttr-Metering Mode-213',
- 'zExtAttr-Sample Rate-214',
- 'zExtAttr-Track Format-215',
- 'zExtAttr-White Balance-216',
- 'zExtAttr-Aperture-217',
- 'zExtAttr-BitRate-218',
- 'zExtAttr-Exposure Bias-219',
- 'zExtAttr-Frames Per Second-220',
- 'zExtAttr-Shutter Speed-221',
- 'zExtAttr-Slush Scene Bias-222',
- 'zExtAttr-Slush Version-223',
- 'zExtAttr-Slush Preset-224',
- 'zExtAttr-Slush Warm Bias-225',
- 'zAsset-Height-226',
- 'zAddAssetAttr-Original Height-227',
- 'zIntResou-Unoriented Height-228',
- 'zAsset-Width-229',
- 'zAddAssetAttr-Original Width-230',
- 'zIntResou-Unoriented Width-231',
- 'zShare-Thumbnail Image Data-232',
- 'SPLzShare-Thumbnail Image Data-233',
- 'zAsset-Thumbnail Index-234',
- 'zAddAssetAttr-Embedded Thumbnail Height-235',
- 'zAddAssetAttr-Embedded Thumbnail Length-236',
- 'zAddAssetAttr-Embedded Thumbnail Offset-237',
- 'zAddAssetAttr-Embedded Thumbnail Width-238',
- 'zAsset-Packed Acceptable Crop Rect-239',
- 'zAsset-Packed Badge Attributes-240',
- 'zAsset-Packed Preferred Crop Rect-241',
- 'zAsset-Curation Score-242',
- 'zAsset-Camera Processing Adjustment State-243',
- 'zAsset-Depth Type-244',
- 'zAsset-Is Magic Carpet-QuicktimeMOVfile-245',
- 'zAddAssetAttr-Orig Resource Choice-246',
- 'zAddAssetAttr-Spatial Over Capture Group ID-247',
- 'zAddAssetAttr-Place Annotation Data-248',
- 'zAddAssetAttr-Distance Identity-249',
- 'zAddAssetAttr-Edited IPTC Attributes-250',
- 'zAssetDes-Long Description-251',
- 'zAddAssetAttr-Asset Description-252',
- 'zAddAssetAttr-Title-Comments via Cloud Website-253',
- 'zAddAssetAttr-Accessibility Description-254',
- 'zAddAssetAttr-Photo Stream Tag ID-255',
- 'zCldFeedEnt-Entry Date-256',
- 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-257',
- 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-258',
- 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-259',
- 'zCldFeedEnt-Entry Priority Number-260',
- 'zCldFeedEnt-Entry Type Number-261',
- 'zCldSharedComment-Cloud GUID-4TableStart-262',
- 'zCldSharedComment-Date-263',
- 'zCldSharedComment-Comment Client Date-264',
- 'zAsset-Cloud Last Viewed Comment Date-265',
- 'zCldSharedComment-Type-266',
- 'zCldSharedComment-Comment Text-267',
- 'zCldSharedComment-Commenter Hashed Person ID-268',
- 'zCldSharedComment-Batch Comment-269',
- 'zCldSharedComment-Is a Caption-270',
- 'zAsset-Cloud Has Comments by Me-271',
- 'zCldSharedComment-Is My Comment-272',
- 'zCldSharedComment-Is Deletable-273',
- 'zAsset-Cloud Has Comments Conversation-274',
- 'zAsset-Cloud Has Unseen Comments-275',
- 'zCldSharedComment-Liked-276',
- 'zAddAssetAttr-Share Type-277',
- 'zShare-UUID-CMM-4TableStart-278',
- 'SPLzShare-UUID-SPL-4TableStart-279',
- 'zShare-zENT-CMM-280',
- 'SPLzShare-zENT-SPL-281',
- 'zShare-Status-CMM-282',
- 'SPLzShare-Status-SPL-283',
- 'zShare-Scope Type-CMM-284',
- 'SPLzShare-Scope Type-SPL-285',
- 'zShare-Local Publish State-CMM-286',
- 'SPLzShare-Local Publish State-SPL-287',
- 'zShare-Public Permission-CMM-288',
- 'SPLzShare-Public Permission-SPL-289',
- 'zShare-Originating Scope ID-CMM-290',
- 'SPLzShare-Originating Scope ID-SPL-291',
- 'zShare-Scope ID-CMM-292',
- 'SPLzShare-Scope ID-SPL-293',
- 'zShare-Title-CMM-294',
- 'SPLzShare-Title-SPL-295',
- 'zShare-Share URL-CMM-296',
- 'SPLzShare-Share URL-SPL-297',
- 'zShare-Creation Date-CMM-298',
- 'SPLzShare-Creation Date-SPL-299',
- 'zShare-Start Date-CMM-300',
- 'SPLzShare-Start Date-SPL-301',
- 'zShare-End Date-CMM-302',
- 'SPLzShare-End Date-SPL-303',
- 'zShare-Expiry Date-CMM-304',
- 'SPLzShare-Expiry Date-SPL-305',
- 'zShare-Asset Count-CMM-306',
- 'SPLzShare-Asset Count-SPL-307',
- 'zShare-Photos Count-CMM-308',
- 'SPLzShare-Photos Count-CMM-SPL-309',
- 'zShare-Uploaded Photos Count-CMM-310',
- 'SPLzShare-Uploaded Photos Count-SPL-311',
- 'zShare-Videos Count-CMM-312',
- 'SPLzShare-Videos Count-SPL-313',
- 'zShare-Uploaded Videos Count-CMM-314',
- 'SPLzShare-Uploaded Videos Count-SPL-315',
- 'zShare-Force Sync Attempted-CMM-316',
- 'SPLzShare-Force Sync Attempted-SPL-317',
- 'zShare-Auto Share Policy-CMM-318',
- 'SPLzShare-Auto Share Policy-SPL-319',
- 'zShare-Should Notify On Upload Completion-CMM-320',
- 'SPLzShare-Should Notify On Upload Completion-SPL-321',
- 'zShare-Trashed State-CMM-322',
- 'SPLzShare-Trashed State-SPL-323',
- 'zShare-Cloud Delete State-CMM-324',
- 'SPLzShare-Cloud Delete State-SPL-325',
- 'zShare-Should Ignor Budgets-CMM-326',
- 'SPLzShare-Should Ignor Budgets-SPL-327',
- 'zShare-Rules-CMM-328',
- 'SPLzShare-Rules-SPL-329',
- 'zSharePartic-UUID-4TableStart-330',
- 'SPLzSharePartic-UUID-4TableStart-331',
- 'zSharePartic-Acceptance Status-332',
- 'SPLzSharePartic-Acceptance Status-333',
- 'zSharePartic-Is Current User-334',
- 'SPLzSharePartic-Is Current User-335',
- 'zSharePartic-Role-336',
- 'SPLzSharePartic-Role-337',
- 'zSharePartic-Premission-338',
- 'SPLzSharePartic-Premission-339',
- 'zSharePartic-User ID-340',
- 'SPLzSharePartic-User ID-341',
- 'SPLzSharePartic-zPK-4TableStart-342',
- 'zSharePartic-zPK-4TableStart-343',
- 'zSharePartic-Email Address-344',
- 'SPLzSharePartic-Email Address-345',
- 'zSharePartic-Phone Number-346',
- 'SPLzSharePartic-Phone Number-347',
- 'ParentzGenAlbum-UUID-4TableStart-348',
- 'zGenAlbum-UUID-4TableStart-349',
- 'SWYConverszGenAlbum-UUID-4TableStart-350',
- 'ParentzGenAlbum-Cloud GUID-4TableStart-351',
- 'zGenAlbum-Cloud GUID-4TableStart-352',
- 'SWYConverszGenAlbum-Cloud GUID-4TableStart-353',
- 'zCldShareAlbumInvRec-Album GUID-4TableStart-354',
- 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-355',
- 'zGenAlbum-Project Render UUID-4TableStart-356',
- 'SWYConverszGenAlbum-Project Render UUID-4TableStart-357',
- 'zAlbumList-Needs Reordering Number-358',
- 'zGenAlbum-zENT- Entity-359',
- 'ParentzGenAlbum-Kind-360',
- 'zGenAlbum-Album Kind-361',
- 'SWYConverszGenAlbum-Album Kind-362',
- 'ParentzGenAlbum-Cloud-Local-State-363',
- 'zGenAlbum-Cloud_Local_State-364',
- 'SWYConverszGenAlbum-Cloud_Local_State-365',
- 'ParentzGenAlbum- Title-366',
- 'zGenAlbum- Title-User&System Applied-367',
- 'SWYConverszGenAlbum- Title -User&System Applied-368',
- 'zGenAlbum-Import Session ID-SWY-369',
- 'zAsset- Conversation= zGenAlbum_zPK-370',
- 'SWYConverszGenAlbum- Import Session ID-SWY-371',
- 'zGenAlbum-Imported by Bundle Identifier-372',
- 'SWYzGenAlbum-Imported by Bundle Identifier-373',
- 'SWYConverszGenAlbum- Syndicate-374',
- 'ParentzGenAlbum-Creation Date-375',
- 'zGenAlbum-Creation Date-376',
- 'SWYConverszGenAlbum-Creation Date-377',
- 'zGenAlbum-Cloud Creation Date-378',
- 'SWYConverszGenAlbum-Cloud Creation Date-379',
- 'zGenAlbum-Start Date-380',
- 'SWYConverszGenAlbum-Start Date-381',
- 'zGenAlbum-End Date-382',
- 'SWYConverszGenAlbum-End Date-383',
- 'zGenAlbum-Cloud Subscription Date-384',
- 'SWYConverszGenAlbum-Cloud Subscription Date-385',
- 'ParentzGenAlbum-Pending Items Count-386',
- 'zGenAlbum-Pending Items Count-387',
- 'SWYConverszGenAlbum-Pending Items Count-388',
- 'ParentzGenAlbum-Pending Items Type-389',
- 'zGenAlbum-Pending Items Type-390',
- 'SWYConverszGenAlbum-Pending Items Type-391',
- 'zGenAlbum- Cached Photos Count-392',
- 'SWYConverszGenAlbum- Cached Photos Count-393',
- 'zGenAlbum- Cached Videos Count-394',
- 'SWYConverszGenAlbum- Cached Videos Count-395',
- 'zGenAlbum- Cached Count-396',
- 'SWYConverszGenAlbum- Cached Count-397',
- 'ParentzGenAlbum-Sync Event Order Key-398',
- 'zGenAlbum-Sync Event Order Key-399',
- 'SWYConverszGenAlbum-Sync Event Order Key-400',
- 'zGenAlbum-Has Unseen Content-401',
- 'SWYConverszGenAlbum-Has Unseen Content-402',
- 'zGenAlbum-Unseen Asset Count-403',
- 'SWYConverszGenAlbum-Unseen Asset Count-404',
- 'zGenAlbum-is Owned-405',
- 'SWYConverszGenAlbum-is Owned-406',
- 'zGenAlbum-Cloud Relationship State-407',
- 'SWYConverszGenAlbum-Cloud Relationship State-408',
- 'zGenAlbum-Cloud Relationship State Local-409',
- 'SWYConverszGenAlbum-Cloud Relationship State Local-410',
- 'zGenAlbum-Cloud Owner Mail Key-411',
- 'SWYConverszGenAlbum-Cloud Owner Mail Key-412',
- 'zGenAlbum-Cloud Owner Frist Name-413',
- 'SWYConverszGenAlbum-Cloud Owner Frist Name-414',
- 'zGenAlbum-Cloud Owner Last Name-415',
- 'SWYConverszGenAlbum-Cloud Owner Last Name-416',
- 'zGenAlbum-Cloud Owner Full Name-417',
- 'SWYConverszGenAlbum-Cloud Owner Full Name-418',
- 'zGenAlbum-Cloud Person ID-419',
- 'SWYConverszGenAlbum-Cloud Person ID-420',
- 'zAsset-Cloud Owner Hashed Person ID-421',
- 'zGenAlbum-Cloud Owner Hashed Person ID-422',
- 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-423',
- 'zGenAlbum-Local Cloud Multi-Contributors Enabled-424',
- 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-425',
- 'zGenAlbum-Cloud Multi-Contributors Enabled-426',
- 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-427',
- 'zGenAlbum-Cloud Album Sub Type-428',
- 'SWYConverszGenAlbum-Cloud Album Sub Type-429',
- 'zGenAlbum-Cloud Contribution Date-430',
- 'SWYConverszGenAlbum-Cloud Contribution Date-431',
- 'zGenAlbum-Cloud Last Interesting Change Date-432',
- 'SWYConverszGenAlbum-Cloud Last Interesting Change Date-433',
- 'zGenAlbum-Cloud Notification Enabled-434',
- 'SWYConverszGenAlbum-Cloud Notification Enabled-435',
- 'ParentzGenAlbum-Pinned-436',
- 'zGenAlbum-Pinned-437',
- 'SWYConverszGenAlbum-Pinned-438',
- 'ParentzGenAlbum-Custom Sort Key-439',
- 'zGenAlbum-Custom Sort Key-440',
- 'SWYConverszGenAlbum-Custom Sort Key-441',
- 'ParentzGenAlbum-Custom Sort Ascending-442',
- 'zGenAlbum-Custom Sort Ascending-443',
- 'SWYConverszGenAlbum-Custom Sort Ascending-444',
- 'ParentzGenAlbum-Is Prototype-445',
- 'zGenAlbum-Is Prototype-446',
- 'SWYConverszGenAlbum-Is Prototype-447',
- 'ParentzGenAlbum-Project Document Type-448',
- 'zGenAlbum-Project Document Type-449',
- 'SWYConverszGenAlbum-Project Document Type-450',
- 'ParentzGenAlbum-Custom Query Type-451',
- 'zGenAlbum-Custom Query Type-452',
- 'SWYConverszGenAlbum-Custom Query Type-453',
- 'ParentzGenAlbum-Trashed State-454',
- 'ParentzGenAlbum-Trash Date-455',
- 'zGenAlbum-Trashed State-456',
- 'zGenAlbum-Trash Date-457',
- 'SWYConverszGenAlbum-Trashed State-458',
- 'SWYConverszGenAlbum-Trash Date-459',
- 'ParentzGenAlbum-Cloud Delete State-460',
- 'zGenAlbum-Cloud Delete State-461',
- 'SWYConverszGenAlbum-Cloud Delete State-462',
- 'zGenAlbum-Cloud Owner Whitelisted-463',
- 'SWYConverszGenAlbum-Cloud Owner Whitelisted-464',
- 'zGenAlbum-Cloud Local Public URL Enabled-465',
- 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-466',
- 'zGenAlbum-Cloud Public URL Enabled-467',
- 'zGenAlbum-Public URL-468',
- 'SWYConverszGenAlbum-Cloud Public URL Enabled-469',
- 'SWYConverszGenAlbum-Public URL-470',
- 'zGenAlbum-Key Asset Face Thumb Index-471',
- 'SWYConverszGenAlbum-Key Asset Face Thumb Index-472',
- 'zGenAlbum-Project Text Extension ID-473',
- 'SWYConverszGenAlbum-Project Text Extension ID-474',
- 'zGenAlbum-User Query Data-475',
- 'SWYConverszGenAlbum-User Query Data-476',
- 'zGenAlbum-Custom Query Parameters-477',
- 'SWYConverszGenAlbum-Custom Query Parameters-478',
- 'zGenAlbum-Project Data-479',
- 'SWYConverszGenAlbum-Project Data-480',
- 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-481',
- 'zCldShareAlbumInvRec-Invitation State Local-482',
- 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-483',
- 'zCldShareAlbumInvRec-Subscription Date-484',
- 'zCldShareAlbumInvRec-Invitee First Name-485',
- 'zCldShareAlbumInvRec-Invitee Last Name-486',
- 'zCldShareAlbumInvRec-Invitee Full Name-487',
- 'zCldShareAlbumInvRec-Invitee Hashed Person ID-488',
- 'zCldShareAlbumInvRec-Invitee Email Key-489',
- 'zGenAlbum-Key Asset Face ID-490',
- 'zFaceCrop-Face Area Points-491',
- 'zAsset-Face Adjustment Version-492',
- 'zAddAssetAttr-Face Analysis Version-493',
- 'zDetFace-Asset Visible-494',
- 'zPerson-Face Count-495',
- 'zDetFace-Face Crop-496',
- 'zDetFace-Face Algorithm Version-497',
- 'zDetFace-Adjustment Version-498',
- 'zDetFace-UUID-4TableStart-499',
- 'zPerson-Person UUID-4TableStart-500',
- 'zDetFace-Confirmed Face Crop Generation State-501',
- 'zDetFace-Manual-502',
- 'zDetFace-Detection Type-503',
- 'zPerson-Detection Type-504',
- 'zDetFace-VIP Model Type-505',
- 'zDetFace-Name Source-506',
- 'zDetFace-Cloud Name Source-507',
- 'zPerson-Person URI-508',
- 'zPerson-Display Name-509',
- 'zPerson-Full Name-510',
- 'zPerson-Cloud Verified Type-511',
- 'zFaceCrop-State-512',
- 'zFaceCrop-Type-513',
- 'zFaceCrop-UUID-4TableStart-514',
- 'zPerson-Type-515',
- 'zPerson-Verified Type-516',
- 'zPerson-Gender Type-517',
- 'zDetFace-Gender Type-518',
- 'zDetFace-Center X-519',
- 'zDetFace-Center Y-520',
- 'zPerson-Age Type Estimate-521',
- 'zDetFace-Age Type Estimate-522',
- 'zDetFace-Ethnicity Type-523',
- 'zDetFace-Skin Tone Type-524',
- 'zDetFace-Hair Type-525',
- 'zDetFace-Hair Color Type-526',
- 'zDetFace-Head Gear Type-527',
- 'zDetFace-Facial Hair Type-528',
- 'zDetFace-Has Face Mask-529',
- 'zDetFace-Pose Type-530',
- 'zDetFace-Face Expression Type-531',
- 'zDetFace-Has Smile-532',
- 'zDetFace-Smile Type-533',
- 'zDetFace-Lip Makeup Type-534',
- 'zDetFace-Eyes State-535',
- 'zDetFace-Is Left Eye Closed-536',
- 'zDetFace-Is Right Eye Closed-537',
- 'zDetFace-Gaze Center X-538',
- 'zDetFace-Gaze Center Y-539',
- 'zDetFace-Face Gaze Type-540',
- 'zDetFace-Eye Glasses Type-541',
- 'zDetFace-Eye Makeup Type-542',
- 'zDetFace-Cluster Squence Number Key-543',
- 'zDetFace-Grouping ID-544',
- 'zDetFace-Master ID-545',
- 'zDetFace-Quality-546',
- 'zDetFace-Quality Measure-547',
- 'zDetFace-Source Height-548',
- 'zDetFace-Source Width-549',
- 'zDetFace-Hidden-Asset Hidden-550',
- 'zDetFace-In Trash-Recently Deleted-551',
- 'zDetFace-Cloud Local State-552',
- 'zDetFace-Training Type-553',
- 'zDetFace.Pose Yaw-554',
- 'zDetFace-Body Center X-555',
- 'zDetFace-Body Center Y-556',
- 'zDetFace-Body Height-557',
- 'zDetFace-Body Width-558',
- 'zDetFace-Roll-559',
- 'zDetFace-Size-560',
- 'zDetFace-Cluster Squence Number-561',
- 'zDetFace-Blur Score-562',
- 'zDetFacePrint-Face Print Version-563',
- 'zMedAnlyAstAttr-Face Count-564',
- 'zDetFaceGroup-UUID-4TableStart-565',
- 'zDetFaceGroup-Person Builder State-566',
- 'zDetFaceGroup-UnNamed Face Count-567',
- 'zPerson-In Person Naming Model-568',
- 'zPerson-Key Face Pick Source Key-569',
- 'zPerson-Manual Order Key-570',
- 'zPerson-Question Type-571',
- 'zPerson-Suggested For Client Type-572',
- 'zPerson-Merge Target Person-573',
- 'zPerson-Cloud Local State-574',
- 'zFaceCrop-Cloud Local State-575',
- 'zFaceCrop-Cloud Type-576',
- 'zPerson-Cloud Delete State-577',
- 'zFaceCrop-Cloud Delete State-578',
- 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-579',
- 'zAsset-Highlight Visibility Score-580',
- 'zMedAnlyAstAttr-Media Analysis Version-581',
- 'zMedAnlyAstAttr-Audio Classification-582',
- 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-583',
- 'zMedAnlyAstAttr-Best Video Range Start Time Scale-584',
- 'zMedAnlyAstAttr-Best Video Range Duration Value-585',
- 'zMedAnlyAstAttr-Best Video Range Start Value-586',
- 'zMedAnlyAstAttr-Packed Best Playback Rect-587',
- 'zMedAnlyAstAttr-Activity Score-588',
- 'zMedAnlyAstAttr-Video Score-589',
- 'zMedAnlyAstAttr-AutoPlay Suggestion Score-590',
- 'zMedAnlyAstAttr-Blurriness Score-591',
- 'zMedAnlyAstAttr-Exposure Score-592',
- 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-593',
- 'zMedAnlyAstAttr-Probable Rotation Direction-594',
- 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-595',
- 'zAssetAnalyState-Asset UUID-4TableStart-596',
- 'zAssetAnalyState-Analyisis State-597',
- 'zAssetAnalyState-Worker Flags-598',
- 'zAssetAnalyState-Worker Type-599',
- 'zAssetAnalyState-Ignore Until Date-600',
- 'zAssetAnalyState-Last Ignored Date-601',
- 'zAssetAnalyState-Sort Token-602',
- 'zMedAnlyAstAttr-Character Recognition Attr-603',
- 'zCharRecogAttr-Algorithm Version-604',
- 'zCharRecogAttr-Adjustment Version-605',
- 'zMedAnlyAstAttr-Visual Search Attributes-606',
- 'zVisualSearchAttr-Algorithm Version-607',
- 'zVisualSearchAttr-Adjustment Version-608',
- 'zAsset-Overall Aesthetic Score-609',
- 'zCompAssetAttr-Behavioral Score-610',
- 'zCompAssetAttr-Failure Score zCompAssetAttr-611',
- 'zCompAssetAttr-Harmonious Color Score-612',
- 'zCompAssetAttr-Immersiveness Score-613',
- 'zCompAssetAttr-Interaction Score-614',
- 'zCompAssetAttr-Intersting Subject Score-615',
- 'zCompAssetAttr-Intrusive Object Presence Score-616',
- 'zCompAssetAttr-Lively Color Score-617',
- 'zCompAssetAttr-Low Light-618',
- 'zCompAssetAttr-Noise Score-619',
- 'zCompAssetAttr-Pleasant Camera Tilt Score-620',
- 'zCompAssetAttr-Pleasant Composition Score-621',
- 'zCompAssetAttr-Pleasant Lighting Score-622',
- 'zCompAssetAttr-Pleasant Pattern Score-623',
- 'zCompAssetAttr-Pleasant Perspective Score-624',
- 'zCompAssetAttr-Pleasant Post Processing Score-625',
- 'zCompAssetAttr-Pleasant Reflection Score-626',
- 'zCompAssetAttrPleasant Symmetry Score-627',
- 'zCompAssetAttr-Sharply Focused Subject Score-628',
- 'zCompAssetAttr-Tastfully Blurred Score-629',
- 'zCompAssetAttr-Well Chosen Subject Score-630',
- 'zCompAssetAttr-Well Framed Subject Score-631',
- 'zCompAssetAttr-Well Timeed Shot Score-632',
- 'zCldRes-Asset UUID-4TableStart-633',
- 'zCldRes-Cloud Local State-634',
- 'zCldRes-File Size-635',
- 'zCldRes-Height-636',
- 'zCldRes-Is Available-637',
- 'zCldRes-Is Locally Available-638',
- 'zCldRes-Prefetch Count-639',
- 'zCldRes-Source Type-640',
- 'zCldRes-Type-641',
- 'zCldRes-Width-642',
- 'zCldRes-Date Created-643',
- 'zCldRes-Last OnDemand Download Date-644',
- 'zCldRes-Last Prefetch Date-645',
- 'zCldRes-Prunedat-646',
- 'zCldRes-File Path-647',
- 'zCldRes-Fingerprint-648',
- 'zCldRes-Item ID-649',
- 'zCldRes-UniID-650',
- 'zAddAssetAttr-zPK-651',
- 'zAddAssetAttr-zENT-652',
- 'ZAddAssetAttr-zOPT-653',
- 'zAddAssetAttr-zAsset= zAsset_zPK-654',
- 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-655',
- 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-656',
- 'zAddAssetAttr-Master Fingerprint-657',
- 'zAddAssetAttr-Public Global UUID-658',
- 'zAddAssetAttr-Deferred Photo Identifier-659',
- 'zAddAssetAttr-Original Assets UUID-660',
- 'zAddAssetAttr-Import Session ID-661',
- 'zAddAssetAttr-Originating Asset Identifier-662',
- 'zAddAssetAttr.Adjusted Fingerprint-663',
- 'zAlbumList-zPK= Album List Key-664',
- 'zAlbumList-zENT-665',
- 'zAlbumList-zOPT-666',
- 'zAlbumList-ID Key-667',
- 'zAlbumList-UUID-668',
- 'zAsset-zPK-669',
- 'zAsset-zENT-670',
- 'zAsset-zOPT-671',
- 'zAsset-Master= zCldMast-zPK-672',
- 'zAsset-Extended Attributes= zExtAttr-zPK-673',
- 'zAsset-Import Session Key-674',
- 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-675',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-676',
- 'zAsset-Moment Share Key= zShare-zPK-677',
- 'zAsset-zMoment Key= zMoment-zPK-678',
- 'zAsset-Computed Attributes Asset Key-679',
- 'zAsset-Highlight Being Assets-HBA Key-680',
- 'zAsset-Highlight Being Extended Assets-HBEA Key-681',
- 'zAsset-Highligh Being Summary Assets-HBSA Key-682',
- 'zAsset-Day Group Highlight Being Assets-DGHBA Key-683',
- 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-684',
- 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-685',
- 'zAsset-Promotion Score-686',
- 'zAsset-Media Analysis Attributes Key-687',
- 'zAsset-Media Group UUID-688',
- 'zAsset-UUID = store.cloudphotodb-689',
- 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-690',
- 'zAsset.Cloud Collection GUID-691',
- 'zAsset-Avalanche UUID-692',
- 'zAssetAnalyState-zPK-693',
- 'zAssetAnalyState-zEnt-694',
- 'zAssetAnalyState-zOpt-695',
- 'zAssetAnalyState-Asset= zAsset-zPK-696',
- 'zAssetAnalyState-Asset UUID-697',
- 'zAssetDes-zPK-698',
- 'zAssetDes-zENT-699',
- 'zAssetDes-zOPT-700',
- 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-701',
- 'zCharRecogAttr-zPK-702',
- 'zCharRecogAttr-zENT-703',
- 'zCharRecogAttr-zOPT-704',
- 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-705',
- 'zCldFeedEnt-zPK= zCldShared keys-706',
- 'zCldFeedEnt-zENT-707',
- 'zCldFeedEnt-zOPT-708',
- 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-709',
- 'zCldFeedEnt-Entry Invitation Record GUID-710',
- 'zCldFeedEnt-Entry Cloud Asset GUID-711',
- 'zCldMast-zPK= zAsset-Master-712',
- 'zCldMast-zENT-713',
- 'zCldMast-zOPT-714',
- 'zCldMast-Moment Share Key= zShare-zPK-715',
- 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-716',
- 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-717',
- 'zCldMast-Originating Asset ID-718',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-719',
- 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-720',
- 'CMzCldMastMedData-zENT-721',
- 'CMzCldMastMedData-zOPT-722',
- 'CMzCldMastMedData-CldMast= zCldMast-zPK-723',
- 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-724',
- 'AAAzCldMastMedData-zENT-725',
- 'AAAzCldMastMedData-zOPT-726',
- 'AAAzCldMastMedData-CldMast key-727',
- 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-728',
- 'zCldRes-zPK-729',
- 'zCldRes-zENT-730',
- 'zCldRes-zOPT-731',
- 'zCldRes-Asset= zAsset-zPK-732',
- 'zCldRes-Cloud Master= zCldMast-zPK-733',
- 'zCldRes-Asset UUID-734',
- 'zCldShareAlbumInvRec-zPK-735',
- 'zCldShareAlbumInvRec-zEnt-736',
- 'zCldShareAlbumInvRec-zOpt-737',
- 'zCldShareAlbumInvRec-Album Key-738',
- 'zCldShareAlbumInvRec-FOK Album Key-739',
- 'zCldShareAlbumInvRec-Album GUID-740',
- 'zCldShareAlbumInvRec-Cloud GUID-741',
- 'zCldSharedComment-zPK-742',
- 'zCldSharedComment-zENT-743',
- 'zCldSharedComment-zOPT-744',
- 'zCldSharedComment-Commented Asset Key= zAsset-zPK-745',
- 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-746',
- 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-747',
- 'zCldSharedComment-Liked Asset Key= zAsset-zPK-748',
- 'zCldSharedComment-CldFeedLikeCommentEntry Key-749',
- 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-750',
- 'zCldSharedComment-Cloud GUID-751',
- 'zCompAssetAttr-zPK-752',
- 'zCompAssetAttr-zEnt-753',
- 'zCompAssetAttr-zOpt-754',
- 'zCompAssetAttr-Asset Key-755',
- 'zDetFace-zPK-756',
- 'zDetFace-zEnt-757',
- 'zDetFace.zOpt-758',
- 'zDetFace-Asset= zAsset-zPK or Asset Containing Face-759',
- 'zDetFace-Person= zPerson-zPK-760',
- 'zDetFace-Person Being Key Face-761',
- 'zDetFace-Face Print-762',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-763',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-764',
- 'zDetFace-UUID-765',
- 'zDetFaceGroup-zPK-766',
- 'zDetFaceGroup-zENT-767',
- 'zDetFaceGroup-zOPT-768',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-769',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-770',
- 'zDetFaceGroup-UUID-771',
- 'zDetFacePrint-zPK-772',
- 'zDetFacePrint-zEnt-773',
- 'zDetFacePrint-zOpt-774',
- 'zDetFacePrint-Face Key-775',
- 'zExtAttr-zPK= zAsset-zExtendedAttributes-776',
- 'zExtAttr-zENT-777',
- 'zExtAttr-zOPT-778',
- 'zExtAttr-Asset Key-779',
- 'zFaceCrop-zPK-780',
- 'zFaceCrop-zEnt-781',
- 'zFaceCrop-zOpt-782',
- 'zFaceCrop-Asset Key-783',
- 'zFaceCrop-Invalid Merge Canidate Person UUID-784',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-785',
- 'zFaceCrop-Face Key-786',
- 'zFaceCrop-UUID-787',
- 'zGenAlbum-zPK=26AlbumLists= 26Albums-788',
- 'zGenAlbum-zENT-789',
- 'zGenAlbum-zOpt-790',
- 'zGenAlbum-Key Asset-Key zAsset-zPK-791',
- 'zGenAlbum-Secondary Key Asset-792',
- 'zGenAlbum-Tertiary Key Asset-793',
- 'zGenAlbum-Custom Key Asset-794',
- 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-795',
- 'zGenAlbum-FOK Parent Folder-796',
- 'zGenAlbum-zSyndicate-797',
- 'zGenAlbum-UUID-798',
- 'SWYConverszGenAlbum-UUID-799',
- 'zGenAlbum-Cloud_GUID = store.cloudphotodb-800',
- 'SWYConverszGenAlbum-Cloud GUID-801',
- 'zGenAlbum-Project Render UUID-802',
- 'SWYConverszGenAlbum-Project Render UUID-803',
- 'zIntResou-zPK-804',
- 'zIntResou-zENT-805',
- 'zIntResou-zOPT-806',
- 'zIntResou-Asset= zAsset_zPK-807',
- 'zIntResou-Fingerprint-808',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-809',
- 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-810',
- 'zMedAnlyAstAttr-zEnt-811',
- 'zMedAnlyAstAttr-zOpt-812',
- 'zMedAnlyAstAttr-Asset= zAsset-zPK-813',
- 'zPerson-zPK=zDetFace-Person-814',
- 'zPerson-zEnt-815',
- 'zPerson-zOpt-816',
- 'zPerson-KeyFace=zDetFace-zPK-817',
- 'zPerson-Assoc Face Group Key-818',
- 'zPerson-Person UUID-819',
- 'zSceneP-zPK-820',
- 'zSceneP-zENT-821',
- 'zSceneP-zOPT-822',
- 'zShare-zPK-823',
- 'zShare-zENT-824',
- 'zShare-zOPT-825',
- 'zShare-UUID-826',
- 'SPLzShare-UUID-827',
- 'zShare-Scope ID = store.cloudphotodb-828',
- 'zSharePartic-zPK-829',
- 'zSharePartic-zENT-830',
- 'zSharePartic-zOPT-831',
- 'zSharePartic-Share Key= zShare-zPK-832',
- 'zSharePartic-UUID-833',
- 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-834',
- 'zUnmAdj-zOPT-835',
- 'zUnmAdj-zENT-836',
- 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-837',
- 'zUnmAdj-UUID-838',
- 'zUnmAdj-Other Adjustments Fingerprint-839',
- 'zUnmAdj-Similar to Orig Adjustments Fingerprint-840',
- 'zVisualSearchAttr-zPK-841',
- 'zVisualSearchAttr-zENT-842',
- 'zVisualSearchAttr-zOPT-843',
- 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-844',
- 'z26AlbumList-26Albums= zGenAlbum-zPK-845',
- 'z26AlbumList-Album List Key-846',
- 'z26AlbumList-FOK26Albums Key-847',
- 'z27Assets-27Albums= zGenAlbum-zPK-848',
- 'z27Assets-3Asset Key= zAsset-zPK in the Album-849',
- 'z27Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-850')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph95.2-iOS15_Ref_for_Asset_Analysis-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph95.2-iOS15_Ref_for_Asset_Analysis-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ '''
- else:
- logfunc('No data available for iOS 15 Syndication.photoslibrary-database-Photos.sqlite')
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
+ row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
+ row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
+ row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
+ row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
+ row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
+ row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
+ row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
+ row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
+ row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
+ row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
+ row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
+ row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
+ row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
+ row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
+ row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
+ row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
+ row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
+ row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
+ row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
+ row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307],
+ row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315],
+ row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323],
+ row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331],
+ row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339],
+ row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347],
+ row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355],
+ row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363],
+ row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371],
+ row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379],
+ row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387],
+ row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395],
+ row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403],
+ row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411],
+ row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419],
+ row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427],
+ row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435],
+ row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443],
+ row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451],
+ row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459],
+ row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467],
+ row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475],
+ row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483],
+ row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491],
+ row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499],
+ row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507],
+ row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515],
+ row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523],
+ row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531],
+ row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539],
+ row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547],
+ row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555],
+ row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563],
+ row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571],
+ row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579],
+ row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587],
+ row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595],
+ row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603],
+ row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611],
+ row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619],
+ row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627],
+ row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635],
+ row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643],
+ row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651],
+ row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659],
+ row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667],
+ row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675],
+ row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683],
+ row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691],
+ row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699],
+ row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707],
+ row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715],
+ row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723],
+ row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731],
+ row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739],
+ row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747],
+ row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755],
+ row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763],
+ row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771],
+ row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779],
+ row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787],
+ row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795],
+ row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803],
+ row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811],
+ row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819],
+ row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827],
+ row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835],
+ row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843],
+ row[844], row[845], row[846], row[847], row[848], row[849], row[850]))
- db.close()
- return
+ data_headers = (('zAsset-Added Date-0', 'datetime'),
+ 'zAsset- SortToken -CameraRoll-1',
+ 'zAsset Complete-2',
+ 'zAsset-zPK-4QueryStart-3',
+ 'zAddAssetAttr-zPK-4QueryStart-4',
+ 'zAsset-UUID = store.cloudphotodb-4QueryStart-5',
+ 'zAddAssetAttr-Master Fingerprint-4TableStart-6',
+ 'zIntResou-Fingerprint-4TableStart-7',
+ 'zAsset-Bundle Scope-8',
+ 'zAsset-Syndication State-9',
+ 'zAsset-Cloud is My Asset-10',
+ 'zAsset-Cloud is deletable-Asset-11',
+ 'zAsset-Cloud_Local_State-12',
+ 'zAsset-Visibility State-13',
+ 'zExtAttr-Camera Make-14',
+ 'zExtAttr-Camera Model-15',
+ 'zExtAttr-Lens Model-16',
+ 'zExtAttr-Flash Fired-17',
+ 'zExtAttr-Focal Lenght-18',
+ 'zExtAttr-Focal Lenth in 35MM-19',
+ 'zExtAttr-Digital Zoom Ratio-20',
+ 'zAsset-Derived Camera Capture Device-21',
+ 'zAddAssetAttr-Camera Captured Device-22',
+ 'zAddAssetAttr-Imported by-23',
+ 'zCldMast-Imported By-24',
+ 'zAddAssetAttr.Imported by Bundle Identifier-25',
+ 'zAddAssetAttr-Imported By Display Name-26',
+ 'zCldMast-Imported by Bundle ID-27',
+ 'zCldMast-Imported by Display Name-28',
+ 'zAsset-Saved Asset Type-29',
+ 'zAsset-Directory-Path-30',
+ 'zAsset-Filename-31',
+ 'zAddAssetAttr- Original Filename-32',
+ 'zCldMast- Original Filename-33',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-34',
+ ('zAddAssetAttr-Date Created Source-35', 'datetime'),
+ ('zAsset-Date Created-36', 'datetime'),
+ ('zCldMast-Creation Date-37', 'datetime'),
+ ('zIntResou-CldMst Date Created-38', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-39',
+ 'zAddAssetAttr-Time Zone Offset-40',
+ 'zAddAssetAttr-Inferred Time Zone Offset-41',
+ 'zAddAssetAttr-EXIF-String-42',
+ ('zAsset-Modification Date-43', 'datetime'),
+ ('zAsset-Last Shared Date-44', 'datetime'),
+ 'zCldMast-Cloud Local State-45',
+ ('zCldMast-Import Date-46', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-47', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-4QueryStart-48',
+ ('zAddAssetAttr-Alt Import Image Date-49', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-50',
+ ('zAsset-Cloud Batch Publish Date-51', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-52', 'datetime'),
+ 'zAsset-Cloud Download Requests-53',
+ 'zAsset-Cloud Batch ID-54',
+ 'zAddAssetAttr-Upload Attempts-55',
+ 'zAsset-Latitude-56',
+ 'zExtAttr-Latitude-57',
+ 'zAsset-Longitude-58',
+ 'zExtAttr-Longitude-59',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-60',
+ 'zAddAssetAttr-Location Hash-61',
+ 'zAddAssetAttr-Shifted Location Valid-62',
+ 'zAddAssetAttr-Shifted Location Data-63',
+ 'zAddAssetAttr-Reverse Location Is Valid-64',
+ 'zAddAssetAttr-Reverse Location Data-65',
+ 'ParentzGenAlbum-UUID-4QueryStart-66',
+ 'zGenAlbum-UUID-4QueryStart-67',
+ 'SWYConverszGenAlbum-UUID-4QueryStart-68',
+ 'ParentzGenAlbum-Cloud GUID-4QueryStart-69',
+ 'zGenAlbum-Cloud GUID-4QueryStart-70',
+ 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-71',
+ 'zCldShareAlbumInvRec-Album GUID-4QueryStart-72',
+ 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-73',
+ 'zGenAlbum-Project Render UUID-4QueryStart-74',
+ 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-75',
+ 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-76',
+ 'zGenAlbum-Cloud_Local_State-4QueryStart-77',
+ 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-78',
+ ('ParentzGenAlbum- Creation Date- 4QueryStart-79', 'datetime'),
+ ('zGenAlbum- Creation Date- 4QueryStart-80', 'datetime'),
+ ('SWYConverszGenAlbum- Creation Date- 4QueryStart-81', 'datetime'),
+ ('zGenAlbum- Cloud Creation Date- 4QueryStart-82', 'datetime'),
+ ('SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-83', 'datetime'),
+ ('zGenAlbum- Start Date- 4QueryStart-84', 'datetime'),
+ ('SWYConverszGenAlbum- Start Date- 4QueryStart-85', 'datetime'),
+ ('zGenAlbum- End Date- 4QueryStart-86', 'datetime'),
+ ('SWYConverszGenAlbum- End Date- 4QueryStart-87', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date- 4QueryStart-88', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-89', 'datetime'),
+ 'ParentzGenAlbum- Title- 4QueryStart-90',
+ 'zGenAlbum- Title-User&System Applied- 4QueryStart-91',
+ 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-92',
+ 'zGenAlbum-Import Session ID-SWY- 4QueryStart-93',
+ 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-94',
+ 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-95',
+ 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-96',
+ 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-97',
+ 'SWYConverszGenAlbum- Syndicate-4QueryStart-98',
+ 'zGenAlbum-zENT- Entity- 4QueryStart-99',
+ 'ParentzGenAlbum- Kind- 4QueryStart-100',
+ 'zGenAlbum-Album Kind- 4QueryStart-101',
+ 'SWYConverszGenAlbum-Album Kind- 4QueryStart-102',
+ 'AAAzCldMastMedData-zOPT-103',
+ 'zAddAssetAttr-Media Metadata Type-104',
+ 'AAAzCldMastMedData-Data-105',
+ 'CldMasterzCldMastMedData-zOPT-106',
+ 'zCldMast-Media Metadata Type-107',
+ 'CMzCldMastMedData-Data-108',
+ 'zAddAssetAttr-Syndication History-109',
+ 'zMedAnlyAstAttr-Syndication Processing Version-110',
+ 'zMedAnlyAstAttr-Syndication Processing Value-111',
+ 'zAsset-Orientation-112',
+ 'zAddAssetAttr-Original Orientation-113',
+ 'zAsset-Kind-114',
+ 'zAsset-Kind-Sub-Type-115',
+ 'zAddAssetAttr-Cloud Kind Sub Type-116',
+ 'zAsset-Playback Style-117',
+ 'zAsset-Playback Variation-118',
+ 'zAsset-Video Duration-119',
+ 'zExtAttr-Duration-120',
+ 'zAsset-Video CP Duration-121',
+ 'zAddAssetAttr-Video CP Duration Time Scale-122',
+ 'zAsset-Video CP Visibility State-123',
+ 'zAddAssetAttr-Video CP Display Value-124',
+ 'zAddAssetAttr-Video CP Display Time Scale-125',
+ 'zIntResou-Datastore Class ID-126',
+ 'zAsset-Cloud Placeholder Kind-127',
+ 'zIntResou-Local Availability-128',
+ 'zIntResou-Local Availability Target-129',
+ 'zIntResou-Cloud Local State-130',
+ 'zIntResou-Remote Availability-131',
+ 'zIntResou-Remote Availability Target-132',
+ 'zIntResou-Transient Cloud Master-133',
+ 'zIntResou-Side Car Index-134',
+ 'zIntResou- File ID-135',
+ 'zIntResou-Version-136',
+ 'zAddAssetAttr- Original-File-Size-137',
+ 'zIntResou-Resource Type-138',
+ 'zIntResou-Datastore Sub-Type-139',
+ 'zIntResou-Cloud Source Type-140',
+ 'zIntResou-Data Length-141',
+ 'zIntResou-Recipe ID-142',
+ ('zIntResou-Cloud Last Prefetch Date-143', 'datetime'),
+ 'zIntResou-Cloud Prefetch Count-144',
+ ('zIntResou- Cloud-Last-OnDemand Download-Date-145', 'datetime'),
+ 'zIntResou-UniformTypeID_UTI_Conformance_Hint-146',
+ 'zIntResou-Compact-UTI-147',
+ 'zAsset-Uniform Type ID-148',
+ 'zAsset-Original Color Space-149',
+ 'zCldMast-Uniform_Type_ID-150',
+ 'zCldMast-Full Size JPEG Source-151',
+ 'zAsset-HDR Gain-152',
+ 'zAsset-zHDR_Type-153',
+ 'zExtAttr-Codec-154',
+ 'zIntResou-Codec Four Char Code Name-155',
+ 'zCldMast-Codec Name-156',
+ 'zCldMast-Video Frame Rate-157',
+ 'zCldMast-Placeholder State-158',
+ 'zAsset-Depth_Type-159',
+ 'zAsset-Avalanche UUID-4TableStart-160',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-161',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-162',
+ 'zAddAssetAttr-Cloud Recovery State-163',
+ 'zAddAssetAttr-Cloud State Recovery Attempts Count-164',
+ 'zAsset-Deferred Processing Needed-165',
+ 'zAsset-Video Deferred Processing Needed-166',
+ 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-167',
+ 'zAddAssetAttr-Deferred Processing Candidate Options-168',
+ 'zAsset-Has Adjustments-Camera-Effects-Filters-169',
+ 'zUnmAdj-UUID-4TableStart-170',
+ 'zAsset-Adjustment Timestamp-171',
+ 'zUnmAdj-Adjustment Timestamp-172',
+ 'zAddAssetAttr-Editor Bundle ID-173',
+ 'zUnmAdj-Editor Localized Name-174',
+ 'zUnmAdj-Adjustment Format ID-175',
+ 'zAddAssetAttr-Montage-176',
+ 'zUnmAdj-Adjustment Render Types-177',
+ 'zUnmAdj-Adjustment Format Version-178',
+ 'zUnmAdj-Adjustment Base Image Format-179',
+ 'zAsset-Favorite-180',
+ 'zAsset-Hidden-181',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-182',
+ ('zAsset-Trashed Date-183', 'datetime'),
+ 'zIntResou-Trash State-184',
+ ('zIntResou-Trashed Date-185', 'datetime'),
+ 'zAsset-Cloud Delete State-186',
+ 'zIntResou-Cloud Delete State-187',
+ 'zAddAssetAttr-PTP Trashed State-188',
+ 'zIntResou-PTP Trashed State-189',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-190',
+ 'zMedAnlyAstAttr-Media Analysis Timestamp-191',
+ ('zAsset-Analysis State Modification Date-192', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-193',
+ 'zAddAssetAttr- View Count-194',
+ 'zAddAssetAttr- Pending Play Count-195',
+ 'zAddAssetAttr- Play Count-196',
+ 'zAddAssetAttr- Pending Share Count-197',
+ 'zAddAssetAttr- Share Count-198',
+ 'zAddAssetAttr-Allowed for Analysis-199',
+ 'zAddAssetAttr-Scene Analysis Version-200',
+ 'zAddAssetAttr-Scene Analysis is From Preview-201',
+ 'zAddAssetAttr-Scene Analysis Timestamp-202',
+ 'zAddAssetAttr-Destination Asset Copy State-203',
+ 'zAddAssetAttr-Source Asset for Duplication Scope ID-204',
+ 'zCldMast-Source Master For Duplication Scope ID-205',
+ 'zAddAssetAttr-Source Asset For Duplication ID-206',
+ 'zCldMast-Source Master for Duplication ID-207',
+ 'zAddAssetAttr-Variation Suggestions States-208',
+ 'zAsset-High Frame Rate State-209',
+ 'zAsset-Video Key Frame Time Scale-210',
+ 'zAsset-Video Key Frame Value-211',
+ 'zExtAttr-ISO-212',
+ 'zExtAttr-Metering Mode-213',
+ 'zExtAttr-Sample Rate-214',
+ 'zExtAttr-Track Format-215',
+ 'zExtAttr-White Balance-216',
+ 'zExtAttr-Aperture-217',
+ 'zExtAttr-BitRate-218',
+ 'zExtAttr-Exposure Bias-219',
+ 'zExtAttr-Frames Per Second-220',
+ 'zExtAttr-Shutter Speed-221',
+ 'zExtAttr-Slush Scene Bias-222',
+ 'zExtAttr-Slush Version-223',
+ 'zExtAttr-Slush Preset-224',
+ 'zExtAttr-Slush Warm Bias-225',
+ 'zAsset-Height-226',
+ 'zAddAssetAttr-Original Height-227',
+ 'zIntResou-Unoriented Height-228',
+ 'zAsset-Width-229',
+ 'zAddAssetAttr-Original Width-230',
+ 'zIntResou-Unoriented Width-231',
+ 'zShare-Thumbnail Image Data-232',
+ 'SPLzShare-Thumbnail Image Data-233',
+ 'zAsset-Thumbnail Index-234',
+ 'zAddAssetAttr-Embedded Thumbnail Height-235',
+ 'zAddAssetAttr-Embedded Thumbnail Length-236',
+ 'zAddAssetAttr-Embedded Thumbnail Offset-237',
+ 'zAddAssetAttr-Embedded Thumbnail Width-238',
+ 'zAsset-Packed Acceptable Crop Rect-239',
+ 'zAsset-Packed Badge Attributes-240',
+ 'zAsset-Packed Preferred Crop Rect-241',
+ 'zAsset-Curation Score-242',
+ 'zAsset-Camera Processing Adjustment State-243',
+ 'zAsset-Depth Type-244',
+ 'zAsset-Is Magic Carpet-QuicktimeMOVfile-245',
+ 'zAddAssetAttr-Orig Resource Choice-246',
+ 'zAddAssetAttr-Spatial Over Capture Group ID-247',
+ 'zAddAssetAttr-Place Annotation Data-248',
+ 'zAddAssetAttr-Distance Identity-249',
+ 'zAddAssetAttr-Edited IPTC Attributes-250',
+ 'zAssetDes-Long Description-251',
+ 'zAddAssetAttr-Asset Description-252',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-253',
+ 'zAddAssetAttr-Accessibility Description-254',
+ 'zAddAssetAttr-Photo Stream Tag ID-255',
+ ('zCldFeedEnt-Entry Date-256', 'datetime'),
+ 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-257',
+ 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-258',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-259',
+ 'zCldFeedEnt-Entry Priority Number-260',
+ 'zCldFeedEnt-Entry Type Number-261',
+ 'zCldSharedComment-Cloud GUID-4TableStart-262',
+ ('zCldSharedComment-Date-263', 'datetime'),
+ ('zCldSharedComment-Comment Client Date-264', 'datetime'),
+ ('zAsset-Cloud Last Viewed Comment Date-265', 'datetime'),
+ 'zCldSharedComment-Type-266',
+ 'zCldSharedComment-Comment Text-267',
+ 'zCldSharedComment-Commenter Hashed Person ID-268',
+ 'zCldSharedComment-Batch Comment-269',
+ 'zCldSharedComment-Is a Caption-270',
+ 'zAsset-Cloud Has Comments by Me-271',
+ 'zCldSharedComment-Is My Comment-272',
+ 'zCldSharedComment-Is Deletable-273',
+ 'zAsset-Cloud Has Comments Conversation-274',
+ 'zAsset-Cloud Has Unseen Comments-275',
+ 'zCldSharedComment-Liked-276',
+ 'zAddAssetAttr-Share Type-277',
+ 'zShare-UUID-CMM-4TableStart-278',
+ 'SPLzShare-UUID-SPL-4TableStart-279',
+ 'zShare-zENT-CMM-280',
+ 'SPLzShare-zENT-SPL-281',
+ 'zShare-Status-CMM-282',
+ 'SPLzShare-Status-SPL-283',
+ 'zShare-Scope Type-CMM-284',
+ 'SPLzShare-Scope Type-SPL-285',
+ 'zShare-Local Publish State-CMM-286',
+ 'SPLzShare-Local Publish State-SPL-287',
+ 'zShare-Public Permission-CMM-288',
+ 'SPLzShare-Public Permission-SPL-289',
+ 'zShare-Originating Scope ID-CMM-290',
+ 'SPLzShare-Originating Scope ID-SPL-291',
+ 'zShare-Scope ID-CMM-292',
+ 'SPLzShare-Scope ID-SPL-293',
+ 'zShare-Title-CMM-294',
+ 'SPLzShare-Title-SPL-295',
+ 'zShare-Share URL-CMM-296',
+ 'SPLzShare-Share URL-SPL-297',
+ ('zShare-Creation Date-CMM-298', 'datetime'),
+ ('SPLzShare-Creation Date-SPL-299', 'datetime'),
+ ('zShare-Start Date-CMM-300', 'datetime'),
+ ('SPLzShare-Start Date-SPL-301', 'datetime'),
+ ('zShare-End Date-CMM-302', 'datetime'),
+ ('SPLzShare-End Date-SPL-303', 'datetime'),
+ ('zShare-Expiry Date-CMM-304', 'datetime'),
+ ('SPLzShare-Expiry Date-SPL-305', 'datetime'),
+ 'zShare-Asset Count-CMM-306',
+ 'SPLzShare-Asset Count-SPL-307',
+ 'zShare-Photos Count-CMM-308',
+ 'SPLzShare-Photos Count-CMM-SPL-309',
+ 'zShare-Uploaded Photos Count-CMM-310',
+ 'SPLzShare-Uploaded Photos Count-SPL-311',
+ 'zShare-Videos Count-CMM-312',
+ 'SPLzShare-Videos Count-SPL-313',
+ 'zShare-Uploaded Videos Count-CMM-314',
+ 'SPLzShare-Uploaded Videos Count-SPL-315',
+ 'zShare-Force Sync Attempted-CMM-316',
+ 'SPLzShare-Force Sync Attempted-SPL-317',
+ 'zShare-Auto Share Policy-CMM-318',
+ 'SPLzShare-Auto Share Policy-SPL-319',
+ 'zShare-Should Notify On Upload Completion-CMM-320',
+ 'SPLzShare-Should Notify On Upload Completion-SPL-321',
+ 'zShare-Trashed State-CMM-322',
+ 'SPLzShare-Trashed State-SPL-323',
+ 'zShare-Cloud Delete State-CMM-324',
+ 'SPLzShare-Cloud Delete State-SPL-325',
+ 'zShare-Should Ignor Budgets-CMM-326',
+ 'SPLzShare-Should Ignor Budgets-SPL-327',
+ 'zShare-Rules-CMM-328',
+ 'SPLzShare-Rules-SPL-329',
+ 'zSharePartic-UUID-4TableStart-330',
+ 'SPLzSharePartic-UUID-4TableStart-331',
+ 'zSharePartic-Acceptance Status-332',
+ 'SPLzSharePartic-Acceptance Status-333',
+ 'zSharePartic-Is Current User-334',
+ 'SPLzSharePartic-Is Current User-335',
+ 'zSharePartic-Role-336',
+ 'SPLzSharePartic-Role-337',
+ 'zSharePartic-Premission-338',
+ 'SPLzSharePartic-Premission-339',
+ 'zSharePartic-User ID-340',
+ 'SPLzSharePartic-User ID-341',
+ 'SPLzSharePartic-zPK-4TableStart-342',
+ 'zSharePartic-zPK-4TableStart-343',
+ 'zSharePartic-Email Address-344',
+ 'SPLzSharePartic-Email Address-345',
+ 'zSharePartic-Phone Number-346',
+ 'SPLzSharePartic-Phone Number-347',
+ 'ParentzGenAlbum-UUID-4TableStart-348',
+ 'zGenAlbum-UUID-4TableStart-349',
+ 'SWYConverszGenAlbum-UUID-4TableStart-350',
+ 'ParentzGenAlbum-Cloud GUID-4TableStart-351',
+ 'zGenAlbum-Cloud GUID-4TableStart-352',
+ 'SWYConverszGenAlbum-Cloud GUID-4TableStart-353',
+ 'zCldShareAlbumInvRec-Album GUID-4TableStart-354',
+ 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-355',
+ 'zGenAlbum-Project Render UUID-4TableStart-356',
+ 'SWYConverszGenAlbum-Project Render UUID-4TableStart-357',
+ 'zAlbumList-Needs Reordering Number-358',
+ 'zGenAlbum-zENT- Entity-359',
+ 'ParentzGenAlbum-Kind-360',
+ 'zGenAlbum-Album Kind-361',
+ 'SWYConverszGenAlbum-Album Kind-362',
+ 'ParentzGenAlbum-Cloud-Local-State-363',
+ 'zGenAlbum-Cloud_Local_State-364',
+ 'SWYConverszGenAlbum-Cloud_Local_State-365',
+ 'ParentzGenAlbum- Title-366',
+ 'zGenAlbum- Title-User&System Applied-367',
+ 'SWYConverszGenAlbum- Title -User&System Applied-368',
+ 'zGenAlbum-Import Session ID-SWY-369',
+ 'zAsset- Conversation= zGenAlbum_zPK-370',
+ 'SWYConverszGenAlbum- Import Session ID-SWY-371',
+ 'zGenAlbum-Imported by Bundle Identifier-372',
+ 'SWYzGenAlbum-Imported by Bundle Identifier-373',
+ 'SWYConverszGenAlbum- Syndicate-374',
+ ('ParentzGenAlbum-Creation Date-375', 'datetime'),
+ ('zGenAlbum-Creation Date-376', 'datetime'),
+ ('SWYConverszGenAlbum-Creation Date-377', 'datetime'),
+ ('zGenAlbum-Cloud Creation Date-378', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Creation Date-379', 'datetime'),
+ ('zGenAlbum-Start Date-380', 'datetime'),
+ ('SWYConverszGenAlbum-Start Date-381', 'datetime'),
+ ('zGenAlbum-End Date-382', 'datetime'),
+ ('SWYConverszGenAlbum-End Date-383', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-384', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Subscription Date-385', 'datetime'),
+ 'ParentzGenAlbum-Pending Items Count-386',
+ 'zGenAlbum-Pending Items Count-387',
+ 'SWYConverszGenAlbum-Pending Items Count-388',
+ 'ParentzGenAlbum-Pending Items Type-389',
+ 'zGenAlbum-Pending Items Type-390',
+ 'SWYConverszGenAlbum-Pending Items Type-391',
+ 'zGenAlbum- Cached Photos Count-392',
+ 'SWYConverszGenAlbum- Cached Photos Count-393',
+ 'zGenAlbum- Cached Videos Count-394',
+ 'SWYConverszGenAlbum- Cached Videos Count-395',
+ 'zGenAlbum- Cached Count-396',
+ 'SWYConverszGenAlbum- Cached Count-397',
+ 'ParentzGenAlbum-Sync Event Order Key-398',
+ 'zGenAlbum-Sync Event Order Key-399',
+ 'SWYConverszGenAlbum-Sync Event Order Key-400',
+ 'zGenAlbum-Has Unseen Content-401',
+ 'SWYConverszGenAlbum-Has Unseen Content-402',
+ 'zGenAlbum-Unseen Asset Count-403',
+ 'SWYConverszGenAlbum-Unseen Asset Count-404',
+ 'zGenAlbum-is Owned-405',
+ 'SWYConverszGenAlbum-is Owned-406',
+ 'zGenAlbum-Cloud Relationship State-407',
+ 'SWYConverszGenAlbum-Cloud Relationship State-408',
+ 'zGenAlbum-Cloud Relationship State Local-409',
+ 'SWYConverszGenAlbum-Cloud Relationship State Local-410',
+ 'zGenAlbum-Cloud Owner Mail Key-411',
+ 'SWYConverszGenAlbum-Cloud Owner Mail Key-412',
+ 'zGenAlbum-Cloud Owner Frist Name-413',
+ 'SWYConverszGenAlbum-Cloud Owner Frist Name-414',
+ 'zGenAlbum-Cloud Owner Last Name-415',
+ 'SWYConverszGenAlbum-Cloud Owner Last Name-416',
+ 'zGenAlbum-Cloud Owner Full Name-417',
+ 'SWYConverszGenAlbum-Cloud Owner Full Name-418',
+ 'zGenAlbum-Cloud Person ID-419',
+ 'SWYConverszGenAlbum-Cloud Person ID-420',
+ 'zAsset-Cloud Owner Hashed Person ID-421',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-422',
+ 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-423',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-424',
+ 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-425',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-426',
+ 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-427',
+ 'zGenAlbum-Cloud Album Sub Type-428',
+ 'SWYConverszGenAlbum-Cloud Album Sub Type-429',
+ ('zGenAlbum-Cloud Contribution Date-430', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Contribution Date-431', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-432', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Last Interesting Change Date-433', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-434',
+ 'SWYConverszGenAlbum-Cloud Notification Enabled-435',
+ 'ParentzGenAlbum-Pinned-436',
+ 'zGenAlbum-Pinned-437',
+ 'SWYConverszGenAlbum-Pinned-438',
+ 'ParentzGenAlbum-Custom Sort Key-439',
+ 'zGenAlbum-Custom Sort Key-440',
+ 'SWYConverszGenAlbum-Custom Sort Key-441',
+ 'ParentzGenAlbum-Custom Sort Ascending-442',
+ 'zGenAlbum-Custom Sort Ascending-443',
+ 'SWYConverszGenAlbum-Custom Sort Ascending-444',
+ 'ParentzGenAlbum-Is Prototype-445',
+ 'zGenAlbum-Is Prototype-446',
+ 'SWYConverszGenAlbum-Is Prototype-447',
+ 'ParentzGenAlbum-Project Document Type-448',
+ 'zGenAlbum-Project Document Type-449',
+ 'SWYConverszGenAlbum-Project Document Type-450',
+ 'ParentzGenAlbum-Custom Query Type-451',
+ 'zGenAlbum-Custom Query Type-452',
+ 'SWYConverszGenAlbum-Custom Query Type-453',
+ 'ParentzGenAlbum-Trashed State-454',
+ ('ParentzGenAlbum-Trash Date-455', 'datetime'),
+ 'zGenAlbum-Trashed State-456',
+ ('zGenAlbum-Trash Date-457', 'datetime'),
+ 'SWYConverszGenAlbum-Trashed State-458',
+ ('SWYConverszGenAlbum-Trash Date-459', 'datetime'),
+ 'ParentzGenAlbum-Cloud Delete State-460',
+ 'zGenAlbum-Cloud Delete State-461',
+ 'SWYConverszGenAlbum-Cloud Delete State-462',
+ 'zGenAlbum-Cloud Owner Whitelisted-463',
+ 'SWYConverszGenAlbum-Cloud Owner Whitelisted-464',
+ 'zGenAlbum-Cloud Local Public URL Enabled-465',
+ 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-466',
+ 'zGenAlbum-Cloud Public URL Enabled-467',
+ 'zGenAlbum-Public URL-468',
+ 'SWYConverszGenAlbum-Cloud Public URL Enabled-469',
+ 'SWYConverszGenAlbum-Public URL-470',
+ 'zGenAlbum-Key Asset Face Thumb Index-471',
+ 'SWYConverszGenAlbum-Key Asset Face Thumb Index-472',
+ 'zGenAlbum-Project Text Extension ID-473',
+ 'SWYConverszGenAlbum-Project Text Extension ID-474',
+ 'zGenAlbum-User Query Data-475',
+ 'SWYConverszGenAlbum-User Query Data-476',
+ 'zGenAlbum-Custom Query Parameters-477',
+ 'SWYConverszGenAlbum-Custom Query Parameters-478',
+ 'zGenAlbum-Project Data-479',
+ 'SWYConverszGenAlbum-Project Data-480',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-481',
+ 'zCldShareAlbumInvRec-Invitation State Local-482',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-483',
+ ('zCldShareAlbumInvRec-Subscription Date-484', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-485',
+ 'zCldShareAlbumInvRec-Invitee Last Name-486',
+ 'zCldShareAlbumInvRec-Invitee Full Name-487',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-488',
+ 'zCldShareAlbumInvRec-Invitee Email Key-489',
+ 'zGenAlbum-Key Asset Face ID-490',
+ 'zFaceCrop-Face Area Points-491',
+ 'zAsset-Face Adjustment Version-492',
+ 'zAddAssetAttr-Face Analysis Version-493',
+ 'zDetFace-Asset Visible-494',
+ 'zPerson-Face Count-495',
+ 'zDetFace-Face Crop-496',
+ 'zDetFace-Face Algorithm Version-497',
+ 'zDetFace-Adjustment Version-498',
+ 'zDetFace-UUID-4TableStart-499',
+ 'zPerson-Person UUID-4TableStart-500',
+ 'zDetFace-Confirmed Face Crop Generation State-501',
+ 'zDetFace-Manual-502',
+ 'zDetFace-Detection Type-503',
+ 'zPerson-Detection Type-504',
+ 'zDetFace-VIP Model Type-505',
+ 'zDetFace-Name Source-506',
+ 'zDetFace-Cloud Name Source-507',
+ 'zPerson-Person URI-508',
+ 'zPerson-Display Name-509',
+ 'zPerson-Full Name-510',
+ 'zPerson-Cloud Verified Type-511',
+ 'zFaceCrop-State-512',
+ 'zFaceCrop-Type-513',
+ 'zFaceCrop-UUID-4TableStart-514',
+ 'zPerson-Type-515',
+ 'zPerson-Verified Type-516',
+ 'zPerson-Gender Type-517',
+ 'zDetFace-Gender Type-518',
+ 'zDetFace-Center X-519',
+ 'zDetFace-Center Y-520',
+ 'zPerson-Age Type Estimate-521',
+ 'zDetFace-Age Type Estimate-522',
+ 'zDetFace-Ethnicity Type-523',
+ 'zDetFace-Skin Tone Type-524',
+ 'zDetFace-Hair Type-525',
+ 'zDetFace-Hair Color Type-526',
+ 'zDetFace-Head Gear Type-527',
+ 'zDetFace-Facial Hair Type-528',
+ 'zDetFace-Has Face Mask-529',
+ 'zDetFace-Pose Type-530',
+ 'zDetFace-Face Expression Type-531',
+ 'zDetFace-Has Smile-532',
+ 'zDetFace-Smile Type-533',
+ 'zDetFace-Lip Makeup Type-534',
+ 'zDetFace-Eyes State-535',
+ 'zDetFace-Is Left Eye Closed-536',
+ 'zDetFace-Is Right Eye Closed-537',
+ 'zDetFace-Gaze Center X-538',
+ 'zDetFace-Gaze Center Y-539',
+ 'zDetFace-Face Gaze Type-540',
+ 'zDetFace-Eye Glasses Type-541',
+ 'zDetFace-Eye Makeup Type-542',
+ 'zDetFace-Cluster Squence Number Key-543',
+ 'zDetFace-Grouping ID-544',
+ 'zDetFace-Master ID-545',
+ 'zDetFace-Quality-546',
+ 'zDetFace-Quality Measure-547',
+ 'zDetFace-Source Height-548',
+ 'zDetFace-Source Width-549',
+ 'zDetFace-Hidden-Asset Hidden-550',
+ 'zDetFace-In Trash-Recently Deleted-551',
+ 'zDetFace-Cloud Local State-552',
+ 'zDetFace-Training Type-553',
+ 'zDetFace.Pose Yaw-554',
+ 'zDetFace-Body Center X-555',
+ 'zDetFace-Body Center Y-556',
+ 'zDetFace-Body Height-557',
+ 'zDetFace-Body Width-558',
+ 'zDetFace-Roll-559',
+ 'zDetFace-Size-560',
+ 'zDetFace-Cluster Squence Number-561',
+ 'zDetFace-Blur Score-562',
+ 'zDetFacePrint-Face Print Version-563',
+ 'zMedAnlyAstAttr-Face Count-564',
+ 'zDetFaceGroup-UUID-4TableStart-565',
+ 'zDetFaceGroup-Person Builder State-566',
+ 'zDetFaceGroup-UnNamed Face Count-567',
+ 'zPerson-In Person Naming Model-568',
+ 'zPerson-Key Face Pick Source Key-569',
+ 'zPerson-Manual Order Key-570',
+ 'zPerson-Question Type-571',
+ 'zPerson-Suggested For Client Type-572',
+ 'zPerson-Merge Target Person-573',
+ 'zPerson-Cloud Local State-574',
+ 'zFaceCrop-Cloud Local State-575',
+ 'zFaceCrop-Cloud Type-576',
+ 'zPerson-Cloud Delete State-577',
+ 'zFaceCrop-Cloud Delete State-578',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-579',
+ 'zAsset-Highlight Visibility Score-580',
+ 'zMedAnlyAstAttr-Media Analysis Version-581',
+ 'zMedAnlyAstAttr-Audio Classification-582',
+ 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-583',
+ 'zMedAnlyAstAttr-Best Video Range Start Time Scale-584',
+ 'zMedAnlyAstAttr-Best Video Range Duration Value-585',
+ 'zMedAnlyAstAttr-Best Video Range Start Value-586',
+ 'zMedAnlyAstAttr-Packed Best Playback Rect-587',
+ 'zMedAnlyAstAttr-Activity Score-588',
+ 'zMedAnlyAstAttr-Video Score-589',
+ 'zMedAnlyAstAttr-AutoPlay Suggestion Score-590',
+ 'zMedAnlyAstAttr-Blurriness Score-591',
+ 'zMedAnlyAstAttr-Exposure Score-592',
+ 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-593',
+ 'zMedAnlyAstAttr-Probable Rotation Direction-594',
+ 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-595',
+ 'zAssetAnalyState-Asset UUID-4TableStart-596',
+ 'zAssetAnalyState-Analyisis State-597',
+ 'zAssetAnalyState-Worker Flags-598',
+ 'zAssetAnalyState-Worker Type-599',
+ ('zAssetAnalyState-Ignore Until Date-600', 'datetime'),
+ ('zAssetAnalyState-Last Ignored Date-601', 'datetime'),
+ ('zAssetAnalyState-Sort Token-602', 'datetime'),
+ 'zMedAnlyAstAttr-Character Recognition Attr-603',
+ 'zCharRecogAttr-Algorithm Version-604',
+ 'zCharRecogAttr-Adjustment Version-605',
+ 'zMedAnlyAstAttr-Visual Search Attributes-606',
+ 'zVisualSearchAttr-Algorithm Version-607',
+ 'zVisualSearchAttr-Adjustment Version-608',
+ 'zAsset-Overall Aesthetic Score-609',
+ 'zCompAssetAttr-Behavioral Score-610',
+ 'zCompAssetAttr-Failure Score zCompAssetAttr-611',
+ 'zCompAssetAttr-Harmonious Color Score-612',
+ 'zCompAssetAttr-Immersiveness Score-613',
+ 'zCompAssetAttr-Interaction Score-614',
+ 'zCompAssetAttr-Intersting Subject Score-615',
+ 'zCompAssetAttr-Intrusive Object Presence Score-616',
+ 'zCompAssetAttr-Lively Color Score-617',
+ 'zCompAssetAttr-Low Light-618',
+ 'zCompAssetAttr-Noise Score-619',
+ 'zCompAssetAttr-Pleasant Camera Tilt Score-620',
+ 'zCompAssetAttr-Pleasant Composition Score-621',
+ 'zCompAssetAttr-Pleasant Lighting Score-622',
+ 'zCompAssetAttr-Pleasant Pattern Score-623',
+ 'zCompAssetAttr-Pleasant Perspective Score-624',
+ 'zCompAssetAttr-Pleasant Post Processing Score-625',
+ 'zCompAssetAttr-Pleasant Reflection Score-626',
+ 'zCompAssetAttrPleasant Symmetry Score-627',
+ 'zCompAssetAttr-Sharply Focused Subject Score-628',
+ 'zCompAssetAttr-Tastfully Blurred Score-629',
+ 'zCompAssetAttr-Well Chosen Subject Score-630',
+ 'zCompAssetAttr-Well Framed Subject Score-631',
+ 'zCompAssetAttr-Well Timeed Shot Score-632',
+ 'zCldRes-Asset UUID-4TableStart-633',
+ 'zCldRes-Cloud Local State-634',
+ 'zCldRes-File Size-635',
+ 'zCldRes-Height-636',
+ 'zCldRes-Is Available-637',
+ 'zCldRes-Is Locally Available-638',
+ 'zCldRes-Prefetch Count-639',
+ 'zCldRes-Source Type-640',
+ 'zCldRes-Type-641',
+ 'zCldRes-Width-642',
+ ('zCldRes-Date Created-643', 'datetime'),
+ ('zCldRes-Last OnDemand Download Date-644', 'datetime'),
+ ('zCldRes-Last Prefetch Date-645', 'datetime'),
+ 'zCldRes-Prunedat-646',
+ 'zCldRes-File Path-647',
+ 'zCldRes-Fingerprint-648',
+ 'zCldRes-Item ID-649',
+ 'zCldRes-UniID-650',
+ 'zAddAssetAttr-zPK-651',
+ 'zAddAssetAttr-zENT-652',
+ 'ZAddAssetAttr-zOPT-653',
+ 'zAddAssetAttr-zAsset= zAsset_zPK-654',
+ 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-655',
+ 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-656',
+ 'zAddAssetAttr-Master Fingerprint-657',
+ 'zAddAssetAttr-Public Global UUID-658',
+ 'zAddAssetAttr-Deferred Photo Identifier-659',
+ 'zAddAssetAttr-Original Assets UUID-660',
+ 'zAddAssetAttr-Import Session ID-661',
+ 'zAddAssetAttr-Originating Asset Identifier-662',
+ 'zAddAssetAttr.Adjusted Fingerprint-663',
+ 'zAlbumList-zPK= Album List Key-664',
+ 'zAlbumList-zENT-665',
+ 'zAlbumList-zOPT-666',
+ 'zAlbumList-ID Key-667',
+ 'zAlbumList-UUID-668',
+ 'zAsset-zPK-669',
+ 'zAsset-zENT-670',
+ 'zAsset-zOPT-671',
+ 'zAsset-Master= zCldMast-zPK-672',
+ 'zAsset-Extended Attributes= zExtAttr-zPK-673',
+ 'zAsset-Import Session Key-674',
+ 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-675',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-676',
+ 'zAsset-Moment Share Key= zShare-zPK-677',
+ 'zAsset-zMoment Key= zMoment-zPK-678',
+ 'zAsset-Computed Attributes Asset Key-679',
+ 'zAsset-Highlight Being Assets-HBA Key-680',
+ 'zAsset-Highlight Being Extended Assets-HBEA Key-681',
+ 'zAsset-Highligh Being Summary Assets-HBSA Key-682',
+ 'zAsset-Day Group Highlight Being Assets-DGHBA Key-683',
+ 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-684',
+ 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-685',
+ 'zAsset-Promotion Score-686',
+ 'zAsset-Media Analysis Attributes Key-687',
+ 'zAsset-Media Group UUID-688',
+ 'zAsset-UUID = store.cloudphotodb-689',
+ 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-690',
+ 'zAsset.Cloud Collection GUID-691',
+ 'zAsset-Avalanche UUID-692',
+ 'zAssetAnalyState-zPK-693',
+ 'zAssetAnalyState-zEnt-694',
+ 'zAssetAnalyState-zOpt-695',
+ 'zAssetAnalyState-Asset= zAsset-zPK-696',
+ 'zAssetAnalyState-Asset UUID-697',
+ 'zAssetDes-zPK-698',
+ 'zAssetDes-zENT-699',
+ 'zAssetDes-zOPT-700',
+ 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-701',
+ 'zCharRecogAttr-zPK-702',
+ 'zCharRecogAttr-zENT-703',
+ 'zCharRecogAttr-zOPT-704',
+ 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-705',
+ 'zCldFeedEnt-zPK= zCldShared keys-706',
+ 'zCldFeedEnt-zENT-707',
+ 'zCldFeedEnt-zOPT-708',
+ 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-709',
+ 'zCldFeedEnt-Entry Invitation Record GUID-710',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-711',
+ 'zCldMast-zPK= zAsset-Master-712',
+ 'zCldMast-zENT-713',
+ 'zCldMast-zOPT-714',
+ 'zCldMast-Moment Share Key= zShare-zPK-715',
+ 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-716',
+ 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-717',
+ 'zCldMast-Originating Asset ID-718',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-719',
+ 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-720',
+ 'CMzCldMastMedData-zENT-721',
+ 'CMzCldMastMedData-zOPT-722',
+ 'CMzCldMastMedData-CldMast= zCldMast-zPK-723',
+ 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-724',
+ 'AAAzCldMastMedData-zENT-725',
+ 'AAAzCldMastMedData-zOPT-726',
+ 'AAAzCldMastMedData-CldMast key-727',
+ 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-728',
+ 'zCldRes-zPK-729',
+ 'zCldRes-zENT-730',
+ 'zCldRes-zOPT-731',
+ 'zCldRes-Asset= zAsset-zPK-732',
+ 'zCldRes-Cloud Master= zCldMast-zPK-733',
+ 'zCldRes-Asset UUID-734',
+ 'zCldShareAlbumInvRec-zPK-735',
+ 'zCldShareAlbumInvRec-zEnt-736',
+ 'zCldShareAlbumInvRec-zOpt-737',
+ 'zCldShareAlbumInvRec-Album Key-738',
+ 'zCldShareAlbumInvRec-FOK Album Key-739',
+ 'zCldShareAlbumInvRec-Album GUID-740',
+ 'zCldShareAlbumInvRec-Cloud GUID-741',
+ 'zCldSharedComment-zPK-742',
+ 'zCldSharedComment-zENT-743',
+ 'zCldSharedComment-zOPT-744',
+ 'zCldSharedComment-Commented Asset Key= zAsset-zPK-745',
+ 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-746',
+ 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-747',
+ 'zCldSharedComment-Liked Asset Key= zAsset-zPK-748',
+ 'zCldSharedComment-CldFeedLikeCommentEntry Key-749',
+ 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-750',
+ 'zCldSharedComment-Cloud GUID-751',
+ 'zCompAssetAttr-zPK-752',
+ 'zCompAssetAttr-zEnt-753',
+ 'zCompAssetAttr-zOpt-754',
+ 'zCompAssetAttr-Asset Key-755',
+ 'zDetFace-zPK-756',
+ 'zDetFace-zEnt-757',
+ 'zDetFace.zOpt-758',
+ 'zDetFace-Asset= zAsset-zPK or Asset Containing Face-759',
+ 'zDetFace-Person= zPerson-zPK-760',
+ 'zDetFace-Person Being Key Face-761',
+ 'zDetFace-Face Print-762',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-763',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-764',
+ 'zDetFace-UUID-765',
+ 'zDetFaceGroup-zPK-766',
+ 'zDetFaceGroup-zENT-767',
+ 'zDetFaceGroup-zOPT-768',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-769',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-770',
+ 'zDetFaceGroup-UUID-771',
+ 'zDetFacePrint-zPK-772',
+ 'zDetFacePrint-zEnt-773',
+ 'zDetFacePrint-zOpt-774',
+ 'zDetFacePrint-Face Key-775',
+ 'zExtAttr-zPK= zAsset-zExtendedAttributes-776',
+ 'zExtAttr-zENT-777',
+ 'zExtAttr-zOPT-778',
+ 'zExtAttr-Asset Key-779',
+ 'zFaceCrop-zPK-780',
+ 'zFaceCrop-zEnt-781',
+ 'zFaceCrop-zOpt-782',
+ 'zFaceCrop-Asset Key-783',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-784',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-785',
+ 'zFaceCrop-Face Key-786',
+ 'zFaceCrop-UUID-787',
+ 'zGenAlbum-zPK=26AlbumLists= 26Albums-788',
+ 'zGenAlbum-zENT-789',
+ 'zGenAlbum-zOpt-790',
+ 'zGenAlbum-Key Asset-Key zAsset-zPK-791',
+ 'zGenAlbum-Secondary Key Asset-792',
+ 'zGenAlbum-Tertiary Key Asset-793',
+ 'zGenAlbum-Custom Key Asset-794',
+ 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-795',
+ 'zGenAlbum-FOK Parent Folder-796',
+ 'zGenAlbum-zSyndicate-797',
+ 'zGenAlbum-UUID-798',
+ 'SWYConverszGenAlbum-UUID-799',
+ 'zGenAlbum-Cloud_GUID = store.cloudphotodb-800',
+ 'SWYConverszGenAlbum-Cloud GUID-801',
+ 'zGenAlbum-Project Render UUID-802',
+ 'SWYConverszGenAlbum-Project Render UUID-803',
+ 'zIntResou-zPK-804',
+ 'zIntResou-zENT-805',
+ 'zIntResou-zOPT-806',
+ 'zIntResou-Asset= zAsset_zPK-807',
+ 'zIntResou-Fingerprint-808',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-809',
+ 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-810',
+ 'zMedAnlyAstAttr-zEnt-811',
+ 'zMedAnlyAstAttr-zOpt-812',
+ 'zMedAnlyAstAttr-Asset= zAsset-zPK-813',
+ 'zPerson-zPK=zDetFace-Person-814',
+ 'zPerson-zEnt-815',
+ 'zPerson-zOpt-816',
+ 'zPerson-KeyFace=zDetFace-zPK-817',
+ 'zPerson-Assoc Face Group Key-818',
+ 'zPerson-Person UUID-819',
+ 'zSceneP-zPK-820',
+ 'zSceneP-zENT-821',
+ 'zSceneP-zOPT-822',
+ 'zShare-zPK-823',
+ 'zShare-zENT-824',
+ 'zShare-zOPT-825',
+ 'zShare-UUID-826',
+ 'SPLzShare-UUID-827',
+ 'zShare-Scope ID = store.cloudphotodb-828',
+ 'zSharePartic-zPK-829',
+ 'zSharePartic-zENT-830',
+ 'zSharePartic-zOPT-831',
+ 'zSharePartic-Share Key= zShare-zPK-832',
+ 'zSharePartic-UUID-833',
+ 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-834',
+ 'zUnmAdj-zOPT-835',
+ 'zUnmAdj-zENT-836',
+ 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-837',
+ 'zUnmAdj-UUID-838',
+ 'zUnmAdj-Other Adjustments Fingerprint-839',
+ 'zUnmAdj-Similar to Orig Adjustments Fingerprint-840',
+ 'zVisualSearchAttr-zPK-841',
+ 'zVisualSearchAttr-zENT-842',
+ 'zVisualSearchAttr-zOPT-843',
+ 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-844',
+ 'z26AlbumList-26Albums= zGenAlbum-zPK-845',
+ 'z26AlbumList-Album List Key-846',
+ 'z26AlbumList-FOK26Albums Key-847',
+ 'z27Assets-27Albums= zGenAlbum-zPK-848',
+ 'z27Assets-3Asset Key= zAsset-zPK in the Album-849',
+ 'z27Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-850')
+ data_list = get_sqlite_db_records(source_path, query)
-
-__artifacts_v2__ = {
- 'Ph95-1-iOS15_Ref_for_Asset_Analysis-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite 95.1 iOS15 Reference for Asset Analysis',
- 'description': 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest'
- ' set of decoded data based on testing and research conducted by Scott Koenig'
- ' https://theforensicscooter.com/. I recommend opening the TSV generated reports'
- ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer'
- ' to view, search and filter the results.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '1.0',
- 'date': '2024-04-19',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph95ios15refforassetanalysisphdapsql'
- },
- 'Ph95-2-iOS15_Ref_for_Asset_Analysis-SyndPL': {
- 'name': 'SyndPL Photos.sqlite 95.2 iOS15 Reference for Asset Analysis',
- 'description': 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.'
- ' This parser includes the largest set of decoded data based on testing and research'
- ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the'
- ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md'
- ' TimelineExplorer to view, search and filter the results.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '1.0',
- 'date': '2024-04-19',
- 'requirements': 'Acquisition that contains Syndication.photoslibrary-database-Photos.sqlite',
- 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis',
- 'notes': '',
- 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',
- 'function': 'get_ph95ios15refforassetanalysissyndpl'
- }
-}
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph96iOS16REFforAssetAnalysis.py b/scripts/artifacts/Ph96iOS16REFforAssetAnalysis.py
index 93ec3266..bf01cdc9 100644
--- a/scripts/artifacts/Ph96iOS16REFforAssetAnalysis.py
+++ b/scripts/artifacts/Ph96iOS16REFforAssetAnalysis.py
@@ -1,41 +1,66 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 1.0
-#
-# Description:
-# Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest set of decoded data based on
-# testing and research conducted by Scott Koenig https://theforensicscooter.com/ and
-# queries found at https://github.com/ScottKjr3347.
-# I recommend opening the TSV generated reports with Zimmerman's Tools https://ericzimmerman.github.io/#!index.md
-# TimelineExplorer to view, search and filter the results.
-#
+__artifacts_v2__ = {
+ 'Ph96_1iOS16RefforAssetAnalysisPhDaPsql': {
+ 'name': 'Ph96.1-iOS16_Ref_for_Asset_Analysis-PhDaPsql',
+ 'description': 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest'
+ ' set of decoded data based on testing and research conducted by Scott Koenig'
+ ' https://theforensicscooter.com/. I recommend opening the TSV generated reports'
+ ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer'
+ ' to view, search and filter the results.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ },
+ 'Ph96_2iOS16RefforAssetAnalysisSyndPL': {
+ 'name': 'Ph96.2-iOS16_Ref_for_Asset_Analysis-SyndPL',
+ 'description': 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.'
+ ' This parser includes the largest set of decoded data based on testing and research'
+ ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the'
+ ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md'
+ ' TimelineExplorer to view, search and filter the results.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains Syndication.photoslibrary-database-Photos.sqlite',
+ 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis',
+ 'notes': '',
+ 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
-
-
-def get_ph96ios16refforassetanalysisphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
- for file_found in files_found:
- file_found = str(file_found)
+@artifact_processor
+def Ph96_1iOS16RefforAssetAnalysisPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if (version.parse(iosversion) <= version.parse("15.8.2")) or (version.parse(iosversion) >= version.parse("17")):
- logfunc(f"Unsupported version for PhotoData-Photos.sqlite reference for asset analysis from iOS " + iosversion)
+ logfunc(f"Unsupported version for PhotoData-Photos.sqlite for iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found, "Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -2260,7 +2285,7 @@ def get_ph96ios16refforassetanalysisphdapsql(files_found, report_folder, seeker,
zAssetAnalyState.ZWORKERTYPE AS 'zAssetAnalyState-Worker Type',
DateTime(zAssetAnalyState.ZIGNOREUNTILDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Ignore Until Date',
DateTime(zAssetAnalyState.ZLASTIGNOREDDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Last Ignored Date',
- zAssetAnalyState.ZSORTTOKEN AS 'zAssetAnalyState-Sort Token',
+ DateTime(zAssetAnalyState.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Sort Token',
zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES AS 'zMedAnlyAstAttr-Character Recognition Attr',
zCharRecogAttr.ZALGORITHMVERSION AS 'zCharRecogAttr-Algorithm Version',
zCharRecogAttr.ZADJUSTMENTVERSION AS 'zCharRecogAttr-Adjustment Version',
@@ -2629,1278 +2654,1256 @@ def get_ph96ios16refforassetanalysisphdapsql(files_found, report_folder, seeker,
LEFT JOIN Z_3SUGGESTIONSBEINGREPRESENTATIVEASSETS z3SuggBRA ON z3SuggBRA.Z_3REPRESENTATIVEASSETS1 = zAsset.Z_PK
LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_58SUGGESTIONSBEINGREPRESENTATIVEASSETS
ORDER BY zAsset.ZADDEDDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
- row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
- row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
- row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
- row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
- row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
- row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
- row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
- row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
- row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
- row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
- row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
- row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
- row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
- row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
- row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
- row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
- row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
- row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
- row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
- row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307],
- row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315],
- row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323],
- row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331],
- row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339],
- row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347],
- row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355],
- row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363],
- row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371],
- row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379],
- row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387],
- row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395],
- row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403],
- row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411],
- row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419],
- row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427],
- row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435],
- row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443],
- row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451],
- row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459],
- row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467],
- row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475],
- row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483],
- row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491],
- row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499],
- row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507],
- row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515],
- row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523],
- row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531],
- row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539],
- row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547],
- row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555],
- row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563],
- row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571],
- row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579],
- row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587],
- row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595],
- row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603],
- row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611],
- row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619],
- row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627],
- row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635],
- row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643],
- row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651],
- row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659],
- row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667],
- row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675],
- row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683],
- row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691],
- row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699],
- row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707],
- row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715],
- row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723],
- row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731],
- row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739],
- row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747],
- row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755],
- row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763],
- row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771],
- row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779],
- row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787],
- row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795],
- row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803],
- row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811],
- row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819],
- row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827],
- row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835],
- row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843],
- row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851],
- row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859],
- row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867],
- row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875],
- row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883],
- row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891],
- row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899],
- row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907],
- row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915],
- row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923],
- row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931],
- row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939],
- row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947],
- row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955],
- row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963],
- row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971],
- row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979],
- row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987],
- row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995],
- row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002],
- row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009],
- row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016],
- row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023],
- row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030],
- row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037],
- row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044],
- row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051],
- row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058],
- row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065],
- row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072],
- row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079],
- row[1080], row[1081], row[1082]))
-
- counter += 1
-
- description = 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest' \
- ' set of decoded data based on testing and research conducted by Scott Koenig' \
- ' https://theforensicscooter.com/. I recommend opening the TSV generated reports' \
- ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer' \
- ' to view, search and filter the results.'
- report = ArtifactHtmlReport('Ph96.1-iOS16_Ref_for_Asset_Analysis-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph96.1-iOS16_Ref_for_Asset_Analysis-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Added Date-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset Complete-2',
- 'zAsset-zPK-4QueryStart-3',
- 'zAddAssetAttr-zPK-4QueryStart-4',
- 'zAsset-UUID = store.cloudphotodb-4QueryStart-5',
- 'zAddAssetAttr-Master Fingerprint-4TableStart-6',
- 'zIntResou-Fingerprint-4TableStart-7',
- 'zAsset-Bundle Scope-8',
- 'zAsset-Syndication State-9',
- 'zAsset-Cloud is My Asset-10',
- 'zAsset-Cloud is deletable-Asset-11',
- 'zAsset-Cloud_Local_State-12',
- 'zAsset-Visibility State-13',
- 'zExtAttr-Camera Make-14',
- 'zExtAttr-Camera Model-15',
- 'zExtAttr-Lens Model-16',
- 'zExtAttr-Flash Fired-17',
- 'zExtAttr-Focal Lenght-18',
- 'zExtAttr-Focal Lenth in 35MM-19',
- 'zExtAttr-Digital Zoom Ratio-20',
- 'zAsset-Derived Camera Capture Device-21',
- 'zAddAssetAttr-Camera Captured Device-22',
- 'zAddAssetAttr-Imported by-23',
- 'zCldMast-Imported By-24',
- 'zAddAssetAttr.Imported by Bundle Identifier-25',
- 'zAddAssetAttr-Imported By Display Name-26',
- 'zCldMast-Imported by Bundle ID-27',
- 'zCldMast-Imported by Display Name-28',
- 'zAsset-Saved Asset Type-29',
- 'zAsset-Directory-Path-30',
- 'zAsset-Filename-31',
- 'zAddAssetAttr- Original Filename-32',
- 'zCldMast- Original Filename-33',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-34',
- 'zAsset-Active Library Scope Participation State -4QueryStart-35',
- 'zAsset-Library Scope Share State- StillTesting -4QueryStart-36',
- 'zShare-Cloud Photo Count-SPL -4QueryStart-37',
- 'zShare-Cloud Video Count-SPL -4QueryStart-38',
- 'zAddAssetAttr-Date Created Source-39',
- 'zAsset-Date Created-40',
- 'zCldMast-Creation Date-41',
- 'zIntResou-CldMst Date Created-42',
- 'zAddAssetAttr-Time Zone Name-43',
- 'zAddAssetAttr-Time Zone Offset-44',
- 'zAddAssetAttr-Inferred Time Zone Offset-45',
- 'zAddAssetAttr-EXIF-String-46',
- 'zAsset-Modification Date-47',
- 'zAsset-Last Shared Date-48',
- 'zCldMast-Cloud Local State-49',
- 'zCldMast-Import Date-50',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-51',
- 'zAddAssetAttr-Import Session ID-4QueryStart-52',
- 'zAddAssetAttr-Alt Import Image Date-53',
- 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-54',
- 'zAsset-Cloud Batch Publish Date-55',
- 'zAsset-Cloud Server Publish Date-56',
- 'zAsset-Cloud Download Requests-57',
- 'zAsset-Cloud Batch ID-58',
- 'zAddAssetAttr-Upload Attempts-59',
- 'zAsset-Latitude-60',
- 'zExtAttr-Latitude-61',
- 'zAsset-Longitude-62',
- 'zExtAttr-Longitude-63',
- 'zAddAssetAttr-GPS Horizontal Accuracy-64',
- 'zAddAssetAttr-Location Hash-65',
- 'zAddAssetAttr-Shifted Location Valid-66',
- 'zAddAssetAttr-Shifted Location Data-67',
- 'zAddAssetAttr-Reverse Location Is Valid-68',
- 'zAddAssetAttr-Reverse Location Data-69',
- 'ParentzGenAlbum-UUID-4QueryStart-70',
- 'zGenAlbum-UUID-4QueryStart-71',
- 'SWYConverszGenAlbum-UUID-4QueryStart-72',
- 'ParentzGenAlbum-Cloud GUID-4QueryStart-73',
- 'zGenAlbum-Cloud GUID-4QueryStart-74',
- 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-75',
- 'zCldShareAlbumInvRec-Album GUID-4QueryStart-76',
- 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-77',
- 'zGenAlbum-Project Render UUID-4QueryStart-78',
- 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-79',
- 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-80',
- 'zGenAlbum-Cloud_Local_State-4QueryStart-81',
- 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-82',
- 'ParentzGenAlbum- Creation Date- 4QueryStart-83',
- 'zGenAlbum- Creation Date- 4QueryStart-84',
- 'SWYConverszGenAlbum- Creation Date- 4QueryStart-85',
- 'zGenAlbum- Cloud Creation Date- 4QueryStart-86',
- 'SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-87',
- 'zGenAlbum- Start Date- 4QueryStart-88',
- 'SWYConverszGenAlbum- Start Date- 4QueryStart-89',
- 'zGenAlbum- End Date- 4QueryStart-90',
- 'SWYConverszGenAlbum- End Date- 4QueryStart-91',
- 'zGenAlbum-Cloud Subscription Date- 4QueryStart-92',
- 'SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-93',
- 'ParentzGenAlbum- Title- 4QueryStart-94',
- 'zGenAlbum- Title-User&System Applied- 4QueryStart-95',
- 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-96',
- 'zGenAlbum-Import Session ID-SWY- 4QueryStart-97',
- 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-98',
- 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-99',
- 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-100',
- 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-101',
- 'SWYConverszGenAlbum- Syndicate-4QueryStart-102',
- 'zGenAlbum-zENT- Entity- 4QueryStart-103',
- 'ParentzGenAlbum- Kind- 4QueryStart-104',
- 'zGenAlbum-Album Kind- 4QueryStart-105',
- 'SWYConverszGenAlbum-Album Kind- 4QueryStart-106',
- 'AAAzCldMastMedData-zOPT-107',
- 'zAddAssetAttr-Media Metadata Type-108',
- 'AAAzCldMastMedData-Data-109',
- 'CldMasterzCldMastMedData-zOPT-110',
- 'zCldMast-Media Metadata Type-111',
- 'CMzCldMastMedData-Data-112',
- 'zAsset-Search Index Rebuild State-113',
- 'zAddAssetAttr-Syndication History-114',
- 'zMedAnlyAstAttr-Syndication Processing Version-115',
- 'zMedAnlyAstAttr-Syndication Processing Value-116',
- 'zAsset-Orientation-117',
- 'zAddAssetAttr-Original Orientation-118',
- 'zAsset-Kind-119',
- 'zAsset-Kind-Sub-Type-120',
- 'zAddAssetAttr-Cloud Kind Sub Type-121',
- 'zAsset-Playback Style-122',
- 'zAsset-Playback Variation-123',
- 'zAsset-Video Duration-124',
- 'zExtAttr-Duration-125',
- 'zAsset-Video CP Duration-126',
- 'zAddAssetAttr-Video CP Duration Time Scale-127',
- 'zAsset-Video CP Visibility State-128',
- 'zAddAssetAttr-Video CP Display Value-129',
- 'zAddAssetAttr-Video CP Display Time Scale-130',
- 'zIntResou-Datastore Class ID-131',
- 'zAsset-Cloud Placeholder Kind-132',
- 'zIntResou-Local Availability-133',
- 'zIntResou-Local Availability Target-134',
- 'zIntResou-Cloud Local State-135',
- 'zIntResou-Remote Availability-136',
- 'zIntResou-Remote Availability Target-137',
- 'zIntResou-Transient Cloud Master-138',
- 'zIntResou-Side Car Index-139',
- 'zIntResou- File ID-140',
- 'zIntResou-Version-141',
- 'zAddAssetAttr- Original-File-Size-142',
- 'zIntResou-Resource Type-143',
- 'zIntResou-Datastore Sub-Type-144',
- 'zIntResou-Cloud Source Type-145',
- 'zIntResou-Data Length-146',
- 'zIntResou-Recipe ID-147',
- 'zIntResou-Cloud Last Prefetch Date-148',
- 'zIntResou-Cloud Prefetch Count-149',
- 'zIntResou- Cloud-Last-OnDemand Download-Date-150',
- 'zIntResou-UniformTypeID_UTI_Conformance_Hint-151',
- 'zIntResou-Compact-UTI-152',
- 'zAsset-Uniform Type ID-153',
- 'zAsset-Original Color Space-154',
- 'zCldMast-Uniform_Type_ID-155',
- 'zCldMast-Full Size JPEG Source-156',
- 'zAsset-HDR Gain-157',
- 'zAsset-zHDR_Type-158',
- 'zExtAttr-Codec-159',
- 'zIntResou-Codec Four Char Code Name-160',
- 'zCldMast-Codec Name-161',
- 'zCldMast-Video Frame Rate-162',
- 'zCldMast-Placeholder State-163',
- 'zAsset-Depth_Type-164',
- 'zAsset-Avalanche UUID-4TableStart-165',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-166',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-167',
- 'zAddAssetAttr-Cloud Recovery State-168',
- 'zAddAssetAttr-Cloud State Recovery Attempts Count-169',
- 'zAsset-Deferred Processing Needed-170',
- 'zAsset-Video Deferred Processing Needed-171',
- 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-172',
- 'zAddAssetAttr-Deferred Processing Candidate Options-173',
- 'zAsset-Has Adjustments-Camera-Effects-Filters-174',
- 'zUnmAdj-UUID-4TableStart-175',
- 'zAsset-Adjustment Timestamp-176',
- 'zUnmAdj-Adjustment Timestamp-177',
- 'zAddAssetAttr-Editor Bundle ID-178',
- 'zUnmAdj-Editor Localized Name-179',
- 'zUnmAdj-Adjustment Format ID-180',
- 'zAddAssetAttr-Montage-181',
- 'zUnmAdj-Adjustment Render Types-182',
- 'zUnmAdj-Adjustment Format Version-183',
- 'zUnmAdj-Adjustment Base Image Format-184',
- 'zAsset-Favorite-185',
- 'zAsset-Hidden-186',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-187',
- 'zAsset-Trashed Date-188',
- 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-189',
- 'zAsset-Delete-Reason-190',
- 'zIntResou-Trash State-191',
- 'zIntResou-Trashed Date-192',
- 'zAsset-Cloud Delete State-193',
- 'zIntResou-Cloud Delete State-194',
- 'zAddAssetAttr-PTP Trashed State-195',
- 'zIntResou-PTP Trashed State-196',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-197',
- 'zMedAnlyAstAttr-Media Analysis Timestamp-198',
- 'zAsset-Analysis State Modificaion Date-199',
- 'zAddAssetAttr- Pending View Count-200',
- 'zAddAssetAttr- View Count-201',
- 'zAddAssetAttr- Pending Play Count-202',
- 'zAddAssetAttr- Play Count-203',
- 'zAddAssetAttr- Pending Share Count-204',
- 'zAddAssetAttr- Share Count-205',
- 'zAddAssetAttr-Allowed for Analysis-206',
- 'zAddAssetAttr-Scene Analysis Version-207',
- 'zAddAssetAttr-Scene Analysis is From Preview-208',
- 'zAddAssetAttr-Scene Analysis Timestamp-209',
- 'zAsset-Duplication Asset Visibility State-210',
- 'zAddAssetAttr-Destination Asset Copy State-211',
- 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-212',
- 'zAddAssetAttr-Source Asset for Duplication Scope ID-213',
- 'zCldMast-Source Master For Duplication Scope ID-214',
- 'zAddAssetAttr-Source Asset For Duplication ID-215',
- 'zCldMast-Source Master for Duplication ID-216',
- 'zAddAssetAttr-Variation Suggestions States-217',
- 'zAsset-High Frame Rate State-218',
- 'zAsset-Video Key Frame Time Scale-219',
- 'zAsset-Video Key Frame Value-220',
- 'zExtAttr-ISO-221',
- 'zExtAttr-Metering Mode-222',
- 'zExtAttr-Sample Rate-223',
- 'zExtAttr-Track Format-224',
- 'zExtAttr-White Balance-225',
- 'zExtAttr-Aperture-226',
- 'zExtAttr-BitRate-227',
- 'zExtAttr-Exposure Bias-228',
- 'zExtAttr-Frames Per Second-229',
- 'zExtAttr-Shutter Speed-230',
- 'zExtAttr-Slush Scene Bias-231',
- 'zExtAttr-Slush Version-232',
- 'zExtAttr-Slush Preset-233',
- 'zExtAttr-Slush Warm Bias-234',
- 'zAsset-Height-235',
- 'zAddAssetAttr-Original Height-236',
- 'zIntResou-Unoriented Height-237',
- 'zAsset-Width-238',
- 'zAddAssetAttr-Original Width-239',
- 'zIntResou-Unoriented Width-240',
- 'zShare-Thumbnail Image Data-241',
- 'SPLzShare-Thumbnail Image Data-242',
- 'zAsset-Thumbnail Index-243',
- 'zAddAssetAttr-Embedded Thumbnail Height-244',
- 'zAddAssetAttr-Embedded Thumbnail Length-245',
- 'zAddAssetAttr-Embedded Thumbnail Offset-246',
- 'zAddAssetAttr-Embedded Thumbnail Width-247',
- 'zAsset-Packed Acceptable Crop Rect-248',
- 'zAsset-Packed Badge Attributes-249',
- 'zAsset-Packed Preferred Crop Rect-250',
- 'zAsset-Curation Score-251',
- 'zAsset-Camera Processing Adjustment State-252',
- 'zAsset-Depth Type-253',
- 'zAsset-Is Magic Carpet-QuicktimeMOVfile-254',
- 'zAddAssetAttr-Orig Resource Choice-255',
- 'zAddAssetAttr-Spatial Over Capture Group ID-256',
- 'zAddAssetAttr-Place Annotation Data-257',
- 'zAddAssetAttr-Distance Identity-258',
- 'zAddAssetAttr-Edited IPTC Attributes-259',
- 'zAssetDes-Long Description-260',
- 'zAddAssetAttr-Asset Description-261',
- 'zAddAssetAttr-Title-Comments via Cloud Website-262',
- 'zAddAssetAttr-Accessibility Description-263',
- 'zAddAssetAttr-Photo Stream Tag ID-264',
- 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-265',
- 'zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-266',
- 'zCldFeedEnt-Entry Date-267',
- 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-268',
- 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-269',
- 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-270',
- 'zCldFeedEnt-Entry Priority Number-271',
- 'zCldFeedEnt-Entry Type Number-272',
- 'zCldSharedComment-Cloud GUID-4TableStart-273',
- 'zCldSharedComment-Date-274',
- 'zCldSharedComment-Comment Client Date-275',
- 'zAsset-Cloud Last Viewed Comment Date-276',
- 'zCldSharedComment-Type-277',
- 'zCldSharedComment-Comment Text-278',
- 'zCldSharedComment-Commenter Hashed Person ID-279',
- 'zCldSharedComment-Batch Comment-280',
- 'zCldSharedComment-Is a Caption-281',
- 'zAsset-Cloud Has Comments by Me-282',
- 'zCldSharedComment-Is My Comment-283',
- 'zCldSharedComment-Is Deletable-284',
- 'zAsset-Cloud Has Comments Conversation-285',
- 'zAsset-Cloud Has Unseen Comments-286',
- 'zCldSharedComment-Liked-287',
- 'zAddAssetAttr-Share Type-288',
- 'zAsset-Library Scope Share State- StillTesting-289',
- 'zAsset-Active Library Scope Participation State-290',
- 'zAddAssetAttr-Library Scope Asset Contributors To Update-291',
- 'zShare-UUID-CMM-4TableStart-292',
- 'SPLzShare-UUID-SPL-4TableStart-293',
- 'zShare-zENT-CMM-294',
- 'SPLzShare-zENT-SPL-295',
- 'zSharePartic-z54SHARE-296',
- 'SPLzSharePartic-z54SHARE-297',
- 'zShare-Status-CMM-298',
- 'SPLzShare-Status-SPL-299',
- 'zShare-Scope Type-CMM-300',
- 'SPLzShare-Scope Type-SPL-301',
- 'zShare-Local Publish State-CMM-302',
- 'SPLzShare-Local Publish State-SPL-303',
- 'zShare-Public Permission-CMM-304',
- 'SPLzShare-Public Permission-SPL-305',
- 'zShare-Originating Scope ID-CMM-306',
- 'SPLzShare-Originating Scope ID-SPL-307',
- 'zShare-Scope ID-CMM-308',
- 'SPLzShare-Scope ID-SPL-309',
- 'zShare-Title-CMM-310',
- 'SPLzShare-Title-SPL-311',
- 'zShare-Share URL-CMM-312',
- 'SPLzShare-Share URL-SPL-313',
- 'zShare-Creation Date-CMM-314',
- 'SPLzShare-Creation Date-SPL-315',
- 'zShare-Start Date-CMM-316',
- 'SPLzShare-Start Date-SPL-317',
- 'zShare-End Date-CMM-318',
- 'SPLzShare-End Date-SPL-319',
- 'zShare-Expiry Date-CMM-320',
- 'SPLzShare-Expiry Date-SPL-321',
- 'zShare-Cloud Item Count-CMM-322',
- 'SPLzShare-Cloud Item Count-SPL-323',
- 'zShare-Asset Count-CMM-324',
- 'SPLzShare-Asset Count-SPL-325',
- 'zShare-Cloud Photo Count-CMM-326',
- 'SPLzShare-Cloud Photo Count-SPL-327',
- 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-328',
- 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-329',
- 'zShare-Photos Count-CMM-330',
- 'SPLzShare-Photos Count-CMM-SPL-331',
- 'zShare-Uploaded Photos Count-CMM-332',
- 'SPLzShare-Uploaded Photos Count-SPL-333',
- 'zShare-Cloud Video Count-CMM-334',
- 'SPLzShare-Cloud Video Count-SPL-335',
- 'zShare-Videos Count-CMM-336',
- 'SPLzShare-Videos Count-SPL-337',
- 'zShare-Uploaded Videos Count-CMM-338',
- 'SPLzShare-Uploaded Videos Count-SPL-339',
- 'zShare-Force Sync Attempted-CMM-340',
- 'SPLzShare-Force Sync Attempted-SPL-341',
- 'zShare-Cloud Local State-CMM-342',
- 'SPLzShare-Cloud Local State-SPL-343',
- 'zShare-Scope Syncing State-CMM-344',
- 'SPLzShare-Scope Syncing State-SPL-345',
- 'zShare-Auto Share Policy-CMM-346',
- 'SPLzShare-Auto Share Policy-SPL-347',
- 'zShare-Should Notify On Upload Completion-CMM-348',
- 'SPLzShare-Should Notify On Upload Completion-SPL-349',
- 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-350',
- 'zShare-Trashed State-CMM-351',
- 'SPLzShare-Trashed State-SPL-352',
- 'zShare-Cloud Delete State-CMM-353',
- 'SPLzShare-Cloud Delete State-SPL-354',
- 'zShare-Trashed Date-CMM-355',
- 'SPLzShare-Trashed Date-SPL-356',
- 'zShare-LastParticipant Asset Trash Notification Date-CMM-357',
- 'SPLzShare-LastParticipant Asset Trash Notification Date-SPL-358',
- 'zShare-Last Participant Asset Trash Notification View Date-CMM-359',
- 'SPLzShare-Last Participant Asset Trash Notification View Date-SPL-360',
- 'zShare-Exit Source-CMM-361',
- 'SPLzShare-Exit Source-SPL-362',
- 'zShare-SPL_Exit State-CMM-363',
- 'SPLzShare-SPL_Exit State-SPL-364',
- 'zShare-Exit Type-CMM-365',
- 'SPLzShare-Exit Type-SPL-366',
- 'zShare-Should Ignor Budgets-CMM-367',
- 'SPLzShare-Should Ignor Budgets-SPL-368',
- 'zShare-Preview State-CMM-369',
- 'SPLzShare-Preview State-SPL-370',
- 'zShare-Preview Data-CMM-371',
- 'SPLzShare-Preview Data-SPL-372',
- 'zShare-Rules-CMM-373',
- 'SPLzShare-Rules-SPL-374',
- 'zShare-Thumbnail Image Data-CMM-375',
- 'SPLzShare-Thumbnail Image Data-SPL-376',
- 'zShare-Participant Cloud Update State-CMM-377',
- 'SPLzShare-Participant Cloud Update State-SPL-378',
- 'zSharePartic-UUID-4TableStart-379',
- 'SPLzSharePartic-UUID-4TableStart-380',
- 'zSharePartic-Acceptance Status-381',
- 'SPLzSharePartic-Acceptance Status-382',
- 'zSharePartic-Is Current User-383',
- 'SPLzSharePartic-Is Current User-384',
- 'zSharePartic-Role-385',
- 'SPLzSharePartic-Role-386',
- 'zSharePartic-Premission-387',
- 'SPLzSharePartic-Premission-388',
- 'zSharePartic-Participant ID-389',
- 'SPLzSharePartic-Participant ID-390',
- 'zSharePartic-User ID-391',
- 'SPLzSharePartic-User ID-392',
- 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-393',
- 'SPLzSharePartic-zPK-4TableStart-394',
- 'zSharePartic-zPK-4TableStart-395',
- 'zSharePartic-Email Address-396',
- 'SPLzSharePartic-Email Address-397',
- 'zSharePartic-Phone Number-398',
- 'SPLzSharePartic-Phone Number-399',
- 'zSharePartic-Exit State-400',
- 'SPLzSharePartic-Exit State-401',
- 'ParentzGenAlbum-UUID-4TableStart-402',
- 'zGenAlbum-UUID-4TableStart-403',
- 'SWYConverszGenAlbum-UUID-4TableStart-404',
- 'ParentzGenAlbum-Cloud GUID-4TableStart-405',
- 'zGenAlbum-Cloud GUID-4TableStart-406',
- 'SWYConverszGenAlbum-Cloud GUID-4TableStart-407',
- 'zCldShareAlbumInvRec-Album GUID-4TableStart-408',
- 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-409',
- 'zGenAlbum-Project Render UUID-4TableStart-410',
- 'SWYConverszGenAlbum-Project Render UUID-4TableStart-411',
- 'zAlbumList-Needs Reordering Number-412',
- 'zGenAlbum-zENT- Entity-413',
- 'ParentzGenAlbum-Kind-414',
- 'zGenAlbum-Album Kind-415',
- 'SWYConverszGenAlbum-Album Kind-416',
- 'ParentzGenAlbum-Cloud-Local-State-417',
- 'zGenAlbum-Cloud_Local_State-418',
- 'SWYConverszGenAlbum-Cloud_Local_State-419',
- 'ParentzGenAlbum- Title-420',
- 'zGenAlbum- Title-User&System Applied-421',
- 'SWYConverszGenAlbum- Title -User&System Applied-422',
- 'zGenAlbum-Import Session ID-SWY-423',
- 'zAsset- Conversation= zGenAlbum_zPK-424',
- 'SWYConverszGenAlbum- Import Session ID-SWY-425',
- 'zGenAlbum-Imported by Bundle Identifier-426',
- 'SWYzGenAlbum-Imported by Bundle Identifier-427',
- 'SWYConverszGenAlbum- Syndicate-428',
- 'ParentzGenAlbum-Creation Date-429',
- 'zGenAlbum-Creation Date-430',
- 'SWYConverszGenAlbum-Creation Date-431',
- 'zGenAlbum-Cloud Creation Date-432',
- 'SWYConverszGenAlbum-Cloud Creation Date-433',
- 'zGenAlbum-Start Date-434',
- 'SWYConverszGenAlbum-Start Date-435',
- 'zGenAlbum-End Date-436',
- 'SWYConverszGenAlbum-End Date-437',
- 'zGenAlbum-Cloud Subscription Date-438',
- 'SWYConverszGenAlbum-Cloud Subscription Date-439',
- 'ParentzGenAlbum-Pending Items Count-440',
- 'zGenAlbum-Pending Items Count-441',
- 'SWYConverszGenAlbum-Pending Items Count-442',
- 'ParentzGenAlbum-Pending Items Type-443',
- 'zGenAlbum-Pending Items Type-444',
- 'SWYConverszGenAlbum-Pending Items Type-445',
- 'zGenAlbum- Cached Photos Count-446',
- 'SWYConverszGenAlbum- Cached Photos Count-447',
- 'zGenAlbum- Cached Videos Count-448',
- 'SWYConverszGenAlbum- Cached Videos Count-449',
- 'zGenAlbum- Cached Count-450',
- 'SWYConverszGenAlbum- Cached Count-451',
- 'ParentzGenAlbum-Sync Event Order Key-452',
- 'zGenAlbum-Sync Event Order Key-453',
- 'SWYConverszGenAlbum-Sync Event Order Key-454',
- 'zGenAlbum-Has Unseen Content-455',
- 'SWYConverszGenAlbum-Has Unseen Content-456',
- 'zGenAlbum-Unseen Asset Count-457',
- 'SWYConverszGenAlbum-Unseen Asset Count-458',
- 'zGenAlbum-is Owned-459',
- 'SWYConverszGenAlbum-is Owned-460',
- 'zGenAlbum-Cloud Relationship State-461',
- 'SWYConverszGenAlbum-Cloud Relationship State-462',
- 'zGenAlbum-Cloud Relationship State Local-463',
- 'SWYConverszGenAlbum-Cloud Relationship State Local-464',
- 'zGenAlbum-Cloud Owner Mail Key-465',
- 'SWYConverszGenAlbum-Cloud Owner Mail Key-466',
- 'zGenAlbum-Cloud Owner Frist Name-467',
- 'SWYConverszGenAlbum-Cloud Owner Frist Name-468',
- 'zGenAlbum-Cloud Owner Last Name-469',
- 'SWYConverszGenAlbum-Cloud Owner Last Name-470',
- 'zGenAlbum-Cloud Owner Full Name-471',
- 'SWYConverszGenAlbum-Cloud Owner Full Name-472',
- 'zGenAlbum-Cloud Person ID-473',
- 'SWYConverszGenAlbum-Cloud Person ID-474',
- 'zAsset-Cloud Owner Hashed Person ID-475',
- 'zGenAlbum-Cloud Owner Hashed Person ID-476',
- 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-477',
- 'zGenAlbum-Local Cloud Multi-Contributors Enabled-478',
- 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-479',
- 'zGenAlbum-Cloud Multi-Contributors Enabled-480',
- 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-481',
- 'zGenAlbum-Cloud Album Sub Type-482',
- 'SWYConverszGenAlbum-Cloud Album Sub Type-483',
- 'zGenAlbum-Cloud Contribution Date-484',
- 'SWYConverszGenAlbum-Cloud Contribution Date-485',
- 'zGenAlbum-Cloud Last Interesting Change Date-486',
- 'SWYConverszGenAlbum-Cloud Last Interesting Change Date-487',
- 'zGenAlbum-Cloud Notification Enabled-488',
- 'SWYConverszGenAlbum-Cloud Notification Enabled-489',
- 'ParentzGenAlbum-Pinned-490',
- 'zGenAlbum-Pinned-491',
- 'SWYConverszGenAlbum-Pinned-492',
- 'ParentzGenAlbum-Custom Sort Key-493',
- 'zGenAlbum-Custom Sort Key-494',
- 'SWYConverszGenAlbum-Custom Sort Key-495',
- 'ParentzGenAlbum-Custom Sort Ascending-496',
- 'zGenAlbum-Custom Sort Ascending-497',
- 'SWYConverszGenAlbum-Custom Sort Ascending-498',
- 'ParentzGenAlbum-Is Prototype-499',
- 'zGenAlbum-Is Prototype-500',
- 'SWYConverszGenAlbum-Is Prototype-501',
- 'ParentzGenAlbum-Project Document Type-502',
- 'zGenAlbum-Project Document Type-503',
- 'SWYConverszGenAlbum-Project Document Type-504',
- 'ParentzGenAlbum-Custom Query Type-505',
- 'zGenAlbum-Custom Query Type-506',
- 'SWYConverszGenAlbum-Custom Query Type-507',
- 'ParentzGenAlbum-Trashed State-508',
- 'ParentzGenAlbum-Trash Date-509',
- 'zGenAlbum-Trashed State-510',
- 'zGenAlbum-Trash Date-511',
- 'SWYConverszGenAlbum-Trashed State-512',
- 'SWYConverszGenAlbum-Trash Date-513',
- 'ParentzGenAlbum-Cloud Delete State-514',
- 'zGenAlbum-Cloud Delete State-515',
- 'SWYConverszGenAlbum-Cloud Delete State-516',
- 'zGenAlbum-Cloud Owner Whitelisted-517',
- 'SWYConverszGenAlbum-Cloud Owner Whitelisted-518',
- 'zGenAlbum-Cloud Local Public URL Enabled-519',
- 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-520',
- 'zGenAlbum-Cloud Public URL Enabled-521',
- 'zGenAlbum-Public URL-522',
- 'SWYConverszGenAlbum-Cloud Public URL Enabled-523',
- 'SWYConverszGenAlbum-Public URL-524',
- 'zGenAlbum-Key Asset Face Thumb Index-525',
- 'SWYConverszGenAlbum-Key Asset Face Thumb Index-526',
- 'zGenAlbum-Project Text Extension ID-527',
- 'SWYConverszGenAlbum-Project Text Extension ID-528',
- 'zGenAlbum-User Query Data-529',
- 'SWYConverszGenAlbum-User Query Data-530',
- 'zGenAlbum-Custom Query Parameters-531',
- 'SWYConverszGenAlbum-Custom Query Parameters-532',
- 'zGenAlbum-Project Data-533',
- 'SWYConverszGenAlbum-Project Data-534',
- 'zGenAlbum-Search Index Rebuild State-535',
- 'SWYConverszGenAlbum-Search Index Rebuild State-536',
- 'zGenAlbum-Duplicate Type-537',
- 'SWYConverszGenAlbum-Duplicate Type-538',
- 'zGenAlbum-Privacy State-539',
- 'SWYConverszGenAlbum-Privacy State-540',
- 'zCldShareAlbumInvRec-zUUID-4TableStart-541',
- 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-542',
- 'zCldShareAlbumInvRec-Invitation State Local-543',
- 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-544',
- 'zCldShareAlbumInvRec-Subscription Date-545',
- 'zCldShareAlbumInvRec-Invitee First Name-546',
- 'zCldShareAlbumInvRec-Invitee Last Name-547',
- 'zCldShareAlbumInvRec-Invitee Full Name-548',
- 'zCldShareAlbumInvRec-Invitee Hashed Person ID-549',
- 'zCldShareAlbumInvRec-Invitee Email Key-550',
- 'zGenAlbum-Key Asset Face ID-551',
- 'zFaceCrop-Face Area Points-552',
- 'zAsset-Face Adjustment Version-553',
- 'zAddAssetAttr-Face Analysis Version-554',
- 'zDetFace-Asset Visible-555',
- 'zPerson-Face Count-556',
- 'zDetFace-Face Crop-557',
- 'zDetFace-Face Algorithm Version-558',
- 'zDetFace-Adjustment Version-559',
- 'zDetFace-UUID-4TableStart-560',
- 'zPerson-Person UUID-4TableStart-561',
- 'zDetFace-Confirmed Face Crop Generation State-562',
- 'zDetFace-Manual-563',
- 'zDetFace-Detection Type-564',
- 'zPerson-Detection Type-565',
- 'zDetFace-VIP Model Type-566',
- 'zDetFace-Name Source-567',
- 'zDetFace-Cloud Name Source-568',
- 'zPerson-Merge Candidate Confidence-569',
- 'zPerson-Person URI-570',
- 'zPerson-Display Name-571',
- 'zPerson-Full Name-572',
- 'zPerson-Cloud Verified Type-573',
- 'zFaceCrop-State-574',
- 'zFaceCrop-Type-575',
- 'zFaceCrop-UUID-4TableStart-576',
- 'zPerson-Type-577',
- 'zPerson-Verified Type-578',
- 'zPerson-Gender Type-579',
- 'zDetFace-Gender Type-580',
- 'zDetFace-Center X-581',
- 'zDetFace-Center Y-582',
- 'zPerson-Age Type Estimate-583',
- 'zDetFace-Age Type Estimate-584',
- 'zDetFace-Ethnicity Type-585',
- 'zDetFace-Skin Tone Type-586',
- 'zDetFace-Hair Type-587',
- 'zDetFace-Hair Color Type-588',
- 'zDetFace-Head Gear Type-589',
- 'zDetFace-Facial Hair Type-590',
- 'zDetFace-Has Face Mask-591',
- 'zDetFace-Pose Type-592',
- 'zDetFace-Face Expression Type-593',
- 'zDetFace-Has Smile-594',
- 'zDetFace-Smile Type-595',
- 'zDetFace-Lip Makeup Type-596',
- 'zDetFace-Eyes State-597',
- 'zDetFace-Is Left Eye Closed-598',
- 'zDetFace-Is Right Eye Closed-599',
- 'zDetFace-Gaze Center X-600',
- 'zDetFace-Gaze Center Y-601',
- 'zDetFace-Face Gaze Type-602',
- 'zDetFace-Eye Glasses Type-603',
- 'zDetFace-Eye Makeup Type-604',
- 'zDetFace-Cluster Squence Number Key-605',
- 'zDetFace-Grouping ID-606',
- 'zDetFace-Master ID-607',
- 'zDetFace-Quality-608',
- 'zDetFace-Quality Measure-609',
- 'zDetFace-Source Height-610',
- 'zDetFace-Source Width-611',
- 'zDetFace-Hidden-Asset Hidden-612',
- 'zDetFace-In Trash-Recently Deleted-613',
- 'zDetFace-Cloud Local State-614',
- 'zDetFace-Training Type-615',
- 'zDetFace.Pose Yaw-616',
- 'zDetFace-Body Center X-617',
- 'zDetFace-Body Center Y-618',
- 'zDetFace-Body Height-619',
- 'zDetFace-Body Width-620',
- 'zDetFace-Roll-621',
- 'zDetFace-Size-622',
- 'zDetFace-Cluster Squence Number-623',
- 'zDetFace-Blur Score-624',
- 'zDetFacePrint-Face Print Version-625',
- 'zMedAnlyAstAttr-Face Count-626',
- 'zDetFaceGroup-UUID-4TableStart-627',
- 'zDetFaceGroup-Person Builder State-628',
- 'zDetFaceGroup-UnNamed Face Count-629',
- 'zPerson-In Person Naming Model-630',
- 'zPerson-Key Face Pick Source Key-631',
- 'zPerson-Manual Order Key-632',
- 'zPerson-Question Type-633',
- 'zPerson-Suggested For Client Type-634',
- 'zPerson-Merge Target Person-635',
- 'zPerson-Cloud Local State-636',
- 'zFaceCrop-Cloud Local State-637',
- 'zFaceCrop-Cloud Type-638',
- 'zPerson-Cloud Delete State-639',
- 'zFaceCrop-Cloud Delete State-640',
- 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-641',
- 'zAsset-Highlight Visibility Score-642',
- 'zMemory-UUID-4TableStart-643',
- 'zMemory-AssetListPredicte-644',
- 'zMemory-Score-645',
- 'zMemory-SubTitle-646',
- 'zMemory-Title-647',
- 'zMemory-Category-648',
- 'zMemory-SubCategory-649',
- 'zMemory-Creation Date-650',
- 'zMemory-Last Enrichment Date-651',
- 'zMemory-User Action Options-652',
- 'zMemory-Favorite Memory-653',
- 'zMemory-View Count-654',
- 'zMemory-Play Count-655',
- 'zMemory-Rejected-656',
- 'zMemory-Share Count-657',
- 'zMemory-Sharing Composition-658',
- 'zMemory-Last Movie Play Date-659',
- 'zMemory-Last Viewed Date-660',
- 'zMemory-Pending Play Count Memory-661',
- 'zMemory-Pending Share Count Memory-662',
- 'zMemory-Pending View Count Memory-663',
- 'zMemory-Pending State-664',
- 'zMemory-Featured State-665',
- 'zMemory-Photos Graph Version-666',
- 'zMemory-Graph Memory Identifier-667',
- 'zMemory-Notification State-668',
- 'zMemory-Cloud Local State-669',
- 'zMemory-Cloud Delete State-670',
- 'zMemory-Story Color Grade Kind-671',
- 'zMemory-Story Serialized Title Category-672',
- 'zMemory-Syndicated Content State-673',
- 'zMemory-Search Index Rebuild State-674',
- 'zMemory-Black Listed Feature-675',
- 'zMoment-UUID-4TableStart-676',
- 'zMoment-Aggregation Score-677',
- 'zMoment-Start Date-678',
- 'zMoment-Representative Date-679',
- 'zMoment-Timezone Offset-680',
- 'zMoment-Modification Date-681',
- 'zMoment-End Date-682',
- 'zMoment-SubTitle-683',
- 'zMoment-Title-684',
- 'zMoment-Originator State-685',
- 'zMoment-Sharing Composition-686',
- 'zMoment-Cached Count Shared-687',
- 'zMoment-Processed Location-688',
- 'zMoment-Approx Latitude-689',
- 'zMoment-Approx Longitude-690',
- 'zMoment-GPS Horizontal Accuracy-691',
- 'zMoment-Cache Count-692',
- 'zMoment-Cached Photos Count-693',
- 'zMoment-Cached Videos Count-694',
- 'zMoment-Trashed State-695',
- 'SBKAzSugg-UUID-4TableStart-696',
- 'SBKAzSugg-Suggestion Context-697',
- 'SBKAzSugg-Sharing Composition-698',
- 'SBKAzSugg-Start Date-699',
- 'SBKAzSugg-State-700',
- 'SBKAzSugg-Featured State-701',
- 'SBKAzSugg-Notification State-702',
- 'SBKAzSugg-Creation Date-703',
- 'SBKAzSugg-End Date-704',
- 'SBKAzSugg-Activation Date-705',
- 'SBKAzSugg-Expunge Date-706',
- 'SBKAzSugg-Relevant Until Date-707',
- 'SBKAzSugg-Title-708',
- 'SBKAzSugg-Sub Title-709',
- 'SBKAzSugg-Cached Count-710',
- 'SBKAzSugg-Cahed Photos Count-711',
- 'SBKAzSugg-Cached Videos Count-712',
- 'SBKAzSugg-Type-713',
- 'SBKAzSugg-Sub Type-714',
- 'SBKAzSugg-Action Data-715',
- 'SBKAzSugg-Version-716',
- 'SBKAzSugg-Cloud Local State-717',
- 'SBKAzSugg-Cloud Delete State-718',
- 'SBRAzSugg-UUID-4TableStart-719',
- 'SBRAzSugg-Suggestion Context-720',
- 'SBRAzSugg-Sharing Composition-721',
- 'SBRAzSugg-Start Date-722',
- 'SBRAzSugg-State-723',
- 'SBRAzSugg-Featured State-724',
- 'SBRAzSugg-Notification State-725',
- 'SBRAzSugg-Creation Date-726',
- 'SBRAzSugg-End Date-727',
- 'SBRAzSugg-Activation Date-728',
- 'SBRAzSugg-Expunge Date-729',
- 'SBRAzSugg-Relevant Until Date-730',
- 'SBRAzSugg-Title-731',
- 'SBRAzSugg-Sub Title-732',
- 'SBRAzSugg-Cached Count-733',
- 'SBRAzSugg-Cahed Photos Count-734',
- 'SBRAzSugg-Cached Videos Count-735',
- 'SBRAzSugg-Type-736',
- 'SBRAzSugg-Sub Type-737',
- 'SBRAzSugg-Action Data-738',
- 'SBRAzSugg-Version-739',
- 'SBRAzSugg-Cloud Local State-740',
- 'SBRAzSugg-Cloud Delete State-741',
- 'zMedAnlyAstAttr-Media Analysis Version-742',
- 'zMedAnlyAstAttr-Audio Classification-743',
- 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-744',
- 'zMedAnlyAstAttr-Best Video Range Start Time Scale-745',
- 'zMedAnlyAstAttr-Best Video Range Duration Value-746',
- 'zMedAnlyAstAttr-Best Video Range Start Value-747',
- 'zMedAnlyAstAttr-Packed Best Playback Rect-748',
- 'zMedAnlyAstAttr-Activity Score-749',
- 'zMedAnlyAstAttr-Video Score-750',
- 'zMedAnlyAstAttr-Audio Score-751',
- 'zMedAnlyAstAttr-Wallpaper Score-752',
- 'zMedAnlyAstAttr-AutoPlay Suggestion Score-753',
- 'zMedAnlyAstAttr-Blurriness Score-754',
- 'zMedAnlyAstAttr-Exposure Score-755',
- 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-756',
- 'zMedAnlyAstAttr-Probable Rotation Direction-757',
- 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-758',
- 'zAssetAnalyState-Asset UUID-4TableStart-759',
- 'zAssetAnalyState-Analyisis State-760',
- 'zAssetAnalyState-Worker Flags-761',
- 'zAssetAnalyState-Worker Type-762',
- 'zAssetAnalyState-Ignore Until Date-763',
- 'zAssetAnalyState-Last Ignored Date-764',
- 'zAssetAnalyState-Sort Token-765',
- 'zMedAnlyAstAttr-Character Recognition Attr-766',
- 'zCharRecogAttr-Algorithm Version-767',
- 'zCharRecogAttr-Adjustment Version-768',
- 'zMedAnlyAstAttr-Visual Search Attributes-769',
- 'zVisualSearchAttr-Algorithm Version-770',
- 'zVisualSearchAttr-Adjustment Version-771',
- 'zAsset-Overall Aesthetic Score-772',
- 'zCompAssetAttr-Behavioral Score-773',
- 'zCompAssetAttr-Failure Score zCompAssetAttr-774',
- 'zCompAssetAttr-Harmonious Color Score-775',
- 'zCompAssetAttr-Immersiveness Score-776',
- 'zCompAssetAttr-Interaction Score-777',
- 'zCompAssetAttr-Intersting Subject Score-778',
- 'zCompAssetAttr-Intrusive Object Presence Score-779',
- 'zCompAssetAttr-Lively Color Score-780',
- 'zCompAssetAttr-Low Light-781',
- 'zCompAssetAttr-Noise Score-782',
- 'zCompAssetAttr-Pleasant Camera Tilt Score-783',
- 'zCompAssetAttr-Pleasant Composition Score-784',
- 'zCompAssetAttr-Pleasant Lighting Score-785',
- 'zCompAssetAttr-Pleasant Pattern Score-786',
- 'zCompAssetAttr-Pleasant Perspective Score-787',
- 'zCompAssetAttr-Pleasant Post Processing Score-788',
- 'zCompAssetAttr-Pleasant Reflection Score-789',
- 'zCompAssetAttrPleasant Symmetry Score-790',
- 'zCompAssetAttr-Sharply Focused Subject Score-791',
- 'zCompAssetAttr-Tastfully Blurred Score-792',
- 'zCompAssetAttr-Well Chosen Subject Score-793',
- 'zCompAssetAttr-Well Framed Subject Score-794',
- 'zCompAssetAttr-Well Timeed Shot Score-795',
- 'zCldRes-Asset UUID-4TableStart-796',
- 'zCldRes-Cloud Local State-797',
- 'zCldRes-File Size-798',
- 'zCldRes-Height-799',
- 'zCldRes-Is Available-800',
- 'zCldRes-Is Locally Available-801',
- 'zCldRes-Prefetch Count-802',
- 'zCldRes-Source Type-803',
- 'zCldRes-Type-804',
- 'zCldRes-Width-805',
- 'zCldRes-Date Created-806',
- 'zCldRes-Last OnDemand Download Date-807',
- 'zCldRes-Last Prefetch Date-808',
- 'zCldRes-Prunedat-809',
- 'zCldRes-File Path-810',
- 'zCldRes-Fingerprint-811',
- 'zCldRes-Item ID-812',
- 'zCldRes-UniID-813',
- 'zUserFeedback-UUID-4TableStart-814',
- 'zUserFeedback-Feature-815',
- 'zUserFeedback-Type-816',
- 'zUserFeedback-Last Modified Date-817',
- 'zUserFeedback-Context-818',
- 'zUserFeedback-Cloud Local State-819',
- 'zUserFeedback-Cloud Delete State-820',
- 'zAddAssetAttr-zPK-821',
- 'zAddAssetAttr-zENT-822',
- 'ZAddAssetAttr-zOPT-823',
- 'zAddAssetAttr-zAsset= zAsset_zPK-824',
- 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-825',
- 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-826',
- 'zAddAssetAttr-Master Fingerprint-827',
- 'zAddAssetAttr-Public Global UUID-828',
- 'zAddAssetAttr-Deferred Photo Identifier-829',
- 'zAddAssetAttr-Original Assets UUID-830',
- 'zAddAssetAttr-Import Session ID-831',
- 'zAddAssetAttr-Originating Asset Identifier-832',
- 'zAddAssetAttr.Adjusted Fingerprint-833',
- 'zAlbumList-zPK= Album List Key-834',
- 'zAlbumList-zENT-835',
- 'zAlbumList-zOPT-836',
- 'zAlbumList-ID Key-837',
- 'zAlbumList-UUID-838',
- 'zAsset-zPK-839',
- 'zAsset-zENT-840',
- 'zAsset-zOPT-841',
- 'zAsset-Master= zCldMast-zPK-842',
- 'zAsset-Extended Attributes= zExtAttr-zPK-843',
- 'zAsset-Import Session Key-844',
- 'zAsset-Trashed by Participant= zSharePartic_zPK-845',
- 'zAsset-Photo Analysis Attributes Key-846',
- 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-847',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-848',
- 'zAsset-Moment Share Key= zShare-zPK-849',
- 'zAsset-zMoment Key= zMoment-zPK-850',
- 'zAsset-Computed Attributes Asset Key-851',
- 'zAsset-Highlight Being Assets-HBA Key-852',
- 'zAsset-Highlight Being Extended Assets-HBEA Key-853',
- 'zAsset-Highlight Being Key Asset Private-HBKAP Key-854',
- 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-855',
- 'zAsset-Highligh Being Summary Assets-HBSA Key-856',
- 'zAsset-Day Group Highlight Being Assets-DGHBA Key-857',
- 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-858',
- 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-859',
- 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-860',
- 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-861',
- 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-862',
- 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-863',
- 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-864',
- 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-865',
- 'zAsset-Promotion Score-866',
- 'zAsset-Media Analysis Attributes Key-867',
- 'zAsset-Media Group UUID-868',
- 'zAsset-UUID = store.cloudphotodb-869',
- 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-870',
- 'zAsset.Cloud Collection GUID-871',
- 'zAsset-Avalanche UUID-872',
- 'zAssetAnalyState-zPK-873',
- 'zAssetAnalyState-zEnt-874',
- 'zAssetAnalyState-zOpt-875',
- 'zAssetAnalyState-Asset= zAsset-zPK-876',
- 'zAssetAnalyState-Asset UUID-877',
- 'zAsstContrib-zPK-878',
- 'zAsstContrib-zEnt-879',
- 'zAsstContrib-zOpt-880',
- 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-881',
- 'zAsstContrib-Participant= zSharePartic-zPK-882',
- 'zAssetDes-zPK-883',
- 'zAssetDes-zENT-884',
- 'zAssetDes-zOPT-885',
- 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-886',
- 'zCharRecogAttr-zPK-887',
- 'zCharRecogAttr-zENT-888',
- 'zCharRecogAttr-zOPT-889',
- 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-890',
- 'zCldFeedEnt-zPK= zCldShared keys-891',
- 'zCldFeedEnt-zENT-892',
- 'zCldFeedEnt-zOPT-893',
- 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-894',
- 'zCldFeedEnt-Entry Invitation Record GUID-895',
- 'zCldFeedEnt-Entry Cloud Asset GUID-896',
- 'zCldMast-zPK= zAsset-Master-897',
- 'zCldMast-zENT-898',
- 'zCldMast-zOPT-899',
- 'zCldMast-Moment Share Key= zShare-zPK-900',
- 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-901',
- 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-902',
- 'zCldMast-Originating Asset ID-903',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-904',
- 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-905',
- 'CMzCldMastMedData-zENT-906',
- 'CMzCldMastMedData-zOPT-907',
- 'CMzCldMastMedData-CldMast= zCldMast-zPK-908',
- 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-909',
- 'AAAzCldMastMedData-zENT-910',
- 'AAAzCldMastMedData-zOPT-911',
- 'AAAzCldMastMedData-CldMast key-912',
- 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-913',
- 'zCldRes-zPK-914',
- 'zCldRes-zENT-915',
- 'zCldRes-zOPT-916',
- 'zCldRes-Asset= zAsset-zPK-917',
- 'zCldRes-Cloud Master= zCldMast-zPK-918',
- 'zCldRes-Asset UUID-919',
- 'zCldShareAlbumInvRec-zPK-920',
- 'zCldShareAlbumInvRec-zEnt-921',
- 'zCldShareAlbumInvRec-zOpt-922',
- 'zCldShareAlbumInvRec-Album Key-923',
- 'zCldShareAlbumInvRec-FOK Album Key-924',
- 'zCldShareAlbumInvRec-Album GUID-925',
- 'zCldShareAlbumInvRec-zUUID-926',
- 'zCldShareAlbumInvRec-Cloud GUID-927',
- 'zCldSharedComment-zPK-928',
- 'zCldSharedComment-zENT-929',
- 'zCldSharedComment-zOPT-930',
- 'zCldSharedComment-Commented Asset Key= zAsset-zPK-931',
- 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-932',
- 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-933',
- 'zCldSharedComment-Liked Asset Key= zAsset-zPK-934',
- 'zCldSharedComment-CldFeedLikeCommentEntry Key-935',
- 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-936',
- 'zCldSharedComment-Cloud GUID-937',
- 'zCompAssetAttr-zPK-938',
- 'zCompAssetAttr-zEnt-939',
- 'zCompAssetAttr-zOpt-940',
- 'zCompAssetAttr-Asset Key-941',
- 'zDetFace-zPK-942',
- 'zDetFace-zEnt-943',
- 'zDetFace.zOpt-944',
- 'zDetFace-Asset= zAsset-zPK or Asset Containing Face-945',
- 'zDetFace-Person= zPerson-zPK-946',
- 'zDetFace-Person Being Key Face-947',
- 'zDetFace-Face Print-948',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-949',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-950',
- 'zDetFace-UUID-951',
- 'zDetFaceGroup-zPK-952',
- 'zDetFaceGroup-zENT-953',
- 'zDetFaceGroup-zOPT-954',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-955',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-956',
- 'zDetFaceGroup-UUID-957',
- 'zDetFacePrint-zPK-958',
- 'zDetFacePrint-zEnt-959',
- 'zDetFacePrint-zOpt-960',
- 'zDetFacePrint-Face Key-961',
- 'zExtAttr-zPK= zAsset-zExtendedAttributes-962',
- 'zExtAttr-zENT-963',
- 'zExtAttr-zOPT-964',
- 'zExtAttr-Asset Key-965',
- 'zFaceCrop-zPK-966',
- 'zFaceCrop-zEnt-967',
- 'zFaceCrop-zOpt-968',
- 'zFaceCrop-Asset Key-969',
- 'zFaceCrop-Invalid Merge Canidate Person UUID-970',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-971',
- 'zFaceCrop-Face Key-972',
- 'zFaceCrop-UUID-973',
- 'zGenAlbum-zPK=26AlbumLists= 26Albums-974',
- 'zGenAlbum-zENT-975',
- 'zGenAlbum-zOpt-976',
- 'zGenAlbum-Key Asset-Key zAsset-zPK-977',
- 'zGenAlbum-Secondary Key Asset-978',
- 'zGenAlbum-Tertiary Key Asset-979',
- 'zGenAlbum-Custom Key Asset-980',
- 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-981',
- 'zGenAlbum-FOK Parent Folder-982',
- 'zGenAlbum-zSyndicate-983',
- 'zGenAlbum-UUID-984',
- 'SWYConverszGenAlbum-UUID-985',
- 'zGenAlbum-Cloud_GUID = store.cloudphotodb-986',
- 'SWYConverszGenAlbum-Cloud GUID-987',
- 'zGenAlbum-Project Render UUID-988',
- 'SWYConverszGenAlbum-Project Render UUID-989',
- 'zIntResou-zPK-990',
- 'zIntResou-zENT-991',
- 'zIntResou-zOPT-992',
- 'zIntResou-Asset= zAsset_zPK-993',
- 'zIntResou-Fingerprint-994',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-995',
- 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-996',
- 'zMedAnlyAstAttr-zEnt-997',
- 'zMedAnlyAstAttr-zOpt-998',
- 'zMedAnlyAstAttr-Asset= zAsset-zPK-999',
- 'zMemory-zPK-1000',
- 'zMemory-zENT-1001',
- 'zMemory-zOPT-1002',
- 'zMemory-Key Asset= zAsset-zPK-1003',
- 'zMemory-UUID-1004',
- 'zMoment-zPK-1005',
- 'zMoment-zENT-1006',
- 'zMoment-zOPT-1007',
- 'zMoment-Highlight Key-1008',
- 'zMoment-UUID-1009',
- 'zPerson-zPK=zDetFace-Person-1010',
- 'zPerson-zEnt-1011',
- 'zPerson-zOpt-1012',
- 'zPerson-Share Participant= zSharePartic-zPK-1013',
- 'zPerson-KeyFace=zDetFace-zPK-1014',
- 'zPerson-Assoc Face Group Key-1015',
- 'zPerson-Person UUID-1016',
- 'zPhotoAnalysisAssetAttr-zPK-1017',
- 'zPhotoAnalysisAssetAttr-zEnt-1018',
- 'zPhotoAnalysisAssetAttr-zOpt-1019',
- 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1020',
- 'zSceneP-zPK-1021',
- 'zSceneP-zENT-1022',
- 'zSceneP-zOPT-1023',
- 'zShare-zPK-1024',
- 'zShare-zENT-1025',
- 'zShare-zOPT-1026',
- 'zShare-UUID-1027',
- 'SPLzShare-UUID-1028',
- 'zShare-Scope ID = store.cloudphotodb-1029',
- 'zSharePartic-zPK-1030',
- 'zSharePartic-zENT-1031',
- 'zSharePartic-zOPT-1032',
- 'zSharePartic-Share Key= zShare-zPK-1033',
- 'zSharePartic-Person= zPerson-zPK-1034',
- 'zSharePartic-UUID-1035',
- 'SBKAzSugg-zPK-1036',
- 'SBKAzSugg-zENT-1037',
- 'SBKAzSugg-zOPT-1038',
- 'SBKAzSugg-UUID-1039',
- 'SBRAzSugg-zPK-1040',
- 'SBRAzSugg-zENT-1041',
- 'SBRAzSugg-zOPT-1042',
- 'SBRAzSugg-UUID-1043',
- 'z3SuggBRA-3RepAssets1-1044',
- 'z3SuggBRA-58SuggBeingRepAssets-1045',
- 'z3SuggBKA-58SuggBeingKeyAssets= zSugg-zPK-1046',
- 'z3SuggBKA-3KeyAssets= zAsset-zPK-1047',
- 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1048',
- 'zUnmAdj-zOPT-1049',
- 'zUnmAdj-zENT-1050',
- 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1051',
- 'zUnmAdj-UUID-1052',
- 'zUnmAdj-Other Adjustments Fingerprint-1053',
- 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1054',
- 'zUserFeedback-zPK-1055',
- 'zUserFeedback-zENT-1056',
- 'zUserFeedback-zOPT-1057',
- 'zUserFeedback-Person= zPerson-zPK-1058',
- 'zUserFeedback-Memory= zMemory-zPK-1059',
- 'zUserFeedback-UUID-1060',
- 'zVisualSearchAttr-zPK-1061',
- 'zVisualSearchAttr-zENT-1062',
- 'zVisualSearchAttr-zOPT-1063',
- 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1064',
- 'z27AlbumList-27Albums= zGenAlbum-zPK-1065',
- 'z27AlbumList-Album List Key-1066',
- 'z27AlbumList-FOK27Albums Key-1067',
- 'z28Assets-28Albums= zGenAlbum-zPK-1068',
- 'z28Assets-3Asset Key= zAsset-zPK in the Album-1069',
- 'z28Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1070',
- 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1071',
- 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1072',
- 'z3MemoryBCAs-44MemoriesBeingCuratedAssets= zMemory-zPK-1073',
- 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1074',
- 'z3MemoryBECAs-44MemoriesBeingExtCuratedAssets= zMemory-zPK-1075',
- 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1076',
- 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK-1077',
- 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1078',
- 'z3MemoryBUCAs-44MemoriesBeingUserCuratedAssets= zMemory-zPK-1079',
- 'z3MemoryBCAs-44Memories Being Custom User Assets-1080',
- 'z3MemoryBCAs-3Custom User Assets-1081',
- 'z3MemoryBCAs-FOK-3Custom User Assets-1082')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph96.1-iOS16_Ref_for_Asset_Analysis-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph96.1-iOS16_Ref_for_Asset_Analysis-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ '''
- else:
- logfunc('No data available for iOS 16 PhotoData-Photos.sqlite')
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
+ row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
+ row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
+ row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
+ row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
+ row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
+ row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
+ row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
+ row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
+ row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
+ row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
+ row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
+ row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
+ row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
+ row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
+ row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
+ row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
+ row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
+ row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
+ row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
+ row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307],
+ row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315],
+ row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323],
+ row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331],
+ row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339],
+ row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347],
+ row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355],
+ row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363],
+ row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371],
+ row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379],
+ row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387],
+ row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395],
+ row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403],
+ row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411],
+ row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419],
+ row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427],
+ row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435],
+ row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443],
+ row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451],
+ row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459],
+ row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467],
+ row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475],
+ row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483],
+ row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491],
+ row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499],
+ row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507],
+ row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515],
+ row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523],
+ row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531],
+ row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539],
+ row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547],
+ row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555],
+ row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563],
+ row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571],
+ row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579],
+ row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587],
+ row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595],
+ row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603],
+ row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611],
+ row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619],
+ row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627],
+ row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635],
+ row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643],
+ row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651],
+ row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659],
+ row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667],
+ row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675],
+ row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683],
+ row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691],
+ row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699],
+ row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707],
+ row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715],
+ row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723],
+ row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731],
+ row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739],
+ row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747],
+ row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755],
+ row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763],
+ row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771],
+ row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779],
+ row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787],
+ row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795],
+ row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803],
+ row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811],
+ row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819],
+ row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827],
+ row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835],
+ row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843],
+ row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851],
+ row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859],
+ row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867],
+ row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875],
+ row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883],
+ row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891],
+ row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899],
+ row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907],
+ row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915],
+ row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923],
+ row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931],
+ row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939],
+ row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947],
+ row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955],
+ row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963],
+ row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971],
+ row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979],
+ row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987],
+ row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995],
+ row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002],
+ row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009],
+ row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016],
+ row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023],
+ row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030],
+ row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037],
+ row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044],
+ row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051],
+ row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058],
+ row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065],
+ row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072],
+ row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079],
+ row[1080], row[1081], row[1082]))
- db.close()
- return
+ data_headers = (('zAsset-Added Date-0', 'datetime'),
+ 'zAsset- SortToken -CameraRoll-1',
+ 'zAsset Complete-2',
+ 'zAsset-zPK-4QueryStart-3',
+ 'zAddAssetAttr-zPK-4QueryStart-4',
+ 'zAsset-UUID = store.cloudphotodb-4QueryStart-5',
+ 'zAddAssetAttr-Master Fingerprint-4TableStart-6',
+ 'zIntResou-Fingerprint-4TableStart-7',
+ 'zAsset-Bundle Scope-8',
+ 'zAsset-Syndication State-9',
+ 'zAsset-Cloud is My Asset-10',
+ 'zAsset-Cloud is deletable-Asset-11',
+ 'zAsset-Cloud_Local_State-12',
+ 'zAsset-Visibility State-13',
+ 'zExtAttr-Camera Make-14',
+ 'zExtAttr-Camera Model-15',
+ 'zExtAttr-Lens Model-16',
+ 'zExtAttr-Flash Fired-17',
+ 'zExtAttr-Focal Lenght-18',
+ 'zExtAttr-Focal Lenth in 35MM-19',
+ 'zExtAttr-Digital Zoom Ratio-20',
+ 'zAsset-Derived Camera Capture Device-21',
+ 'zAddAssetAttr-Camera Captured Device-22',
+ 'zAddAssetAttr-Imported by-23',
+ 'zCldMast-Imported By-24',
+ 'zAddAssetAttr.Imported by Bundle Identifier-25',
+ 'zAddAssetAttr-Imported By Display Name-26',
+ 'zCldMast-Imported by Bundle ID-27',
+ 'zCldMast-Imported by Display Name-28',
+ 'zAsset-Saved Asset Type-29',
+ 'zAsset-Directory-Path-30',
+ 'zAsset-Filename-31',
+ 'zAddAssetAttr- Original Filename-32',
+ 'zCldMast- Original Filename-33',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-34',
+ 'zAsset-Active Library Scope Participation State -4QueryStart-35',
+ 'zAsset-Library Scope Share State- StillTesting -4QueryStart-36',
+ 'zShare-Cloud Photo Count-SPL -4QueryStart-37',
+ 'zShare-Cloud Video Count-SPL -4QueryStart-38',
+ ('zAddAssetAttr-Date Created Source-39', 'datetime'),
+ ('zAsset-Date Created-40', 'datetime'),
+ ('zCldMast-Creation Date-41', 'datetime'),
+ ('zIntResou-CldMst Date Created-42', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-43',
+ 'zAddAssetAttr-Time Zone Offset-44',
+ 'zAddAssetAttr-Inferred Time Zone Offset-45',
+ 'zAddAssetAttr-EXIF-String-46',
+ ('zAsset-Modification Date-47', 'datetime'),
+ ('zAsset-Last Shared Date-48', 'datetime'),
+ 'zCldMast-Cloud Local State-49',
+ ('zCldMast-Import Date-50', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-51', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-4QueryStart-52',
+ ('zAddAssetAttr-Alt Import Image Date-53', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-54',
+ ('zAsset-Cloud Batch Publish Date-55', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-56', 'datetime'),
+ 'zAsset-Cloud Download Requests-57',
+ 'zAsset-Cloud Batch ID-58',
+ 'zAddAssetAttr-Upload Attempts-59',
+ 'zAsset-Latitude-60',
+ 'zExtAttr-Latitude-61',
+ 'zAsset-Longitude-62',
+ 'zExtAttr-Longitude-63',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-64',
+ 'zAddAssetAttr-Location Hash-65',
+ 'zAddAssetAttr-Shifted Location Valid-66',
+ 'zAddAssetAttr-Shifted Location Data-67',
+ 'zAddAssetAttr-Reverse Location Is Valid-68',
+ 'zAddAssetAttr-Reverse Location Data-69',
+ 'ParentzGenAlbum-UUID-4QueryStart-70',
+ 'zGenAlbum-UUID-4QueryStart-71',
+ 'SWYConverszGenAlbum-UUID-4QueryStart-72',
+ 'ParentzGenAlbum-Cloud GUID-4QueryStart-73',
+ 'zGenAlbum-Cloud GUID-4QueryStart-74',
+ 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-75',
+ 'zCldShareAlbumInvRec-Album GUID-4QueryStart-76',
+ 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-77',
+ 'zGenAlbum-Project Render UUID-4QueryStart-78',
+ 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-79',
+ 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-80',
+ 'zGenAlbum-Cloud_Local_State-4QueryStart-81',
+ 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-82',
+ ('ParentzGenAlbum- Creation Date- 4QueryStart-83', 'datetime'),
+ ('zGenAlbum- Creation Date- 4QueryStart-84', 'datetime'),
+ ('SWYConverszGenAlbum- Creation Date- 4QueryStart-85', 'datetime'),
+ ('zGenAlbum- Cloud Creation Date- 4QueryStart-86', 'datetime'),
+ ('SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-87', 'datetime'),
+ ('zGenAlbum- Start Date- 4QueryStart-88', 'datetime'),
+ ('SWYConverszGenAlbum- Start Date- 4QueryStart-89', 'datetime'),
+ ('zGenAlbum- End Date- 4QueryStart-90', 'datetime'),
+ ('SWYConverszGenAlbum- End Date- 4QueryStart-91', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date- 4QueryStart-92', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-93', 'datetime'),
+ 'ParentzGenAlbum- Title- 4QueryStart-94',
+ 'zGenAlbum- Title-User&System Applied- 4QueryStart-95',
+ 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-96',
+ 'zGenAlbum-Import Session ID-SWY- 4QueryStart-97',
+ 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-98',
+ 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-99',
+ 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-100',
+ 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-101',
+ 'SWYConverszGenAlbum- Syndicate-4QueryStart-102',
+ 'zGenAlbum-zENT- Entity- 4QueryStart-103',
+ 'ParentzGenAlbum- Kind- 4QueryStart-104',
+ 'zGenAlbum-Album Kind- 4QueryStart-105',
+ 'SWYConverszGenAlbum-Album Kind- 4QueryStart-106',
+ 'AAAzCldMastMedData-zOPT-107',
+ 'zAddAssetAttr-Media Metadata Type-108',
+ 'AAAzCldMastMedData-Data-109',
+ 'CldMasterzCldMastMedData-zOPT-110',
+ 'zCldMast-Media Metadata Type-111',
+ 'CMzCldMastMedData-Data-112',
+ 'zAsset-Search Index Rebuild State-113',
+ 'zAddAssetAttr-Syndication History-114',
+ 'zMedAnlyAstAttr-Syndication Processing Version-115',
+ 'zMedAnlyAstAttr-Syndication Processing Value-116',
+ 'zAsset-Orientation-117',
+ 'zAddAssetAttr-Original Orientation-118',
+ 'zAsset-Kind-119',
+ 'zAsset-Kind-Sub-Type-120',
+ 'zAddAssetAttr-Cloud Kind Sub Type-121',
+ 'zAsset-Playback Style-122',
+ 'zAsset-Playback Variation-123',
+ 'zAsset-Video Duration-124',
+ 'zExtAttr-Duration-125',
+ 'zAsset-Video CP Duration-126',
+ 'zAddAssetAttr-Video CP Duration Time Scale-127',
+ 'zAsset-Video CP Visibility State-128',
+ 'zAddAssetAttr-Video CP Display Value-129',
+ 'zAddAssetAttr-Video CP Display Time Scale-130',
+ 'zIntResou-Datastore Class ID-131',
+ 'zAsset-Cloud Placeholder Kind-132',
+ 'zIntResou-Local Availability-133',
+ 'zIntResou-Local Availability Target-134',
+ 'zIntResou-Cloud Local State-135',
+ 'zIntResou-Remote Availability-136',
+ 'zIntResou-Remote Availability Target-137',
+ 'zIntResou-Transient Cloud Master-138',
+ 'zIntResou-Side Car Index-139',
+ 'zIntResou- File ID-140',
+ 'zIntResou-Version-141',
+ 'zAddAssetAttr- Original-File-Size-142',
+ 'zIntResou-Resource Type-143',
+ 'zIntResou-Datastore Sub-Type-144',
+ 'zIntResou-Cloud Source Type-145',
+ 'zIntResou-Data Length-146',
+ 'zIntResou-Recipe ID-147',
+ ('zIntResou-Cloud Last Prefetch Date-148', 'datetime'),
+ 'zIntResou-Cloud Prefetch Count-149',
+ ('zIntResou- Cloud-Last-OnDemand Download-Date-150', 'datetime'),
+ 'zIntResou-UniformTypeID_UTI_Conformance_Hint-151',
+ 'zIntResou-Compact-UTI-152',
+ 'zAsset-Uniform Type ID-153',
+ 'zAsset-Original Color Space-154',
+ 'zCldMast-Uniform_Type_ID-155',
+ 'zCldMast-Full Size JPEG Source-156',
+ 'zAsset-HDR Gain-157',
+ 'zAsset-zHDR_Type-158',
+ 'zExtAttr-Codec-159',
+ 'zIntResou-Codec Four Char Code Name-160',
+ 'zCldMast-Codec Name-161',
+ 'zCldMast-Video Frame Rate-162',
+ 'zCldMast-Placeholder State-163',
+ 'zAsset-Depth_Type-164',
+ 'zAsset-Avalanche UUID-4TableStart-165',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-166',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-167',
+ 'zAddAssetAttr-Cloud Recovery State-168',
+ 'zAddAssetAttr-Cloud State Recovery Attempts Count-169',
+ 'zAsset-Deferred Processing Needed-170',
+ 'zAsset-Video Deferred Processing Needed-171',
+ 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-172',
+ 'zAddAssetAttr-Deferred Processing Candidate Options-173',
+ 'zAsset-Has Adjustments-Camera-Effects-Filters-174',
+ 'zUnmAdj-UUID-4TableStart-175',
+ 'zAsset-Adjustment Timestamp-176',
+ 'zUnmAdj-Adjustment Timestamp-177',
+ 'zAddAssetAttr-Editor Bundle ID-178',
+ 'zUnmAdj-Editor Localized Name-179',
+ 'zUnmAdj-Adjustment Format ID-180',
+ 'zAddAssetAttr-Montage-181',
+ 'zUnmAdj-Adjustment Render Types-182',
+ 'zUnmAdj-Adjustment Format Version-183',
+ 'zUnmAdj-Adjustment Base Image Format-184',
+ 'zAsset-Favorite-185',
+ 'zAsset-Hidden-186',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-187',
+ ('zAsset-Trashed Date-188', 'datetime'),
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-189',
+ 'zAsset-Delete-Reason-190',
+ 'zIntResou-Trash State-191',
+ ('zIntResou-Trashed Date-192', 'datetime'),
+ 'zAsset-Cloud Delete State-193',
+ 'zIntResou-Cloud Delete State-194',
+ 'zAddAssetAttr-PTP Trashed State-195',
+ 'zIntResou-PTP Trashed State-196',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-197',
+ 'zMedAnlyAstAttr-Media Analysis Timestamp-198',
+ ('zAsset-Analysis State Modification Date-199', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-200',
+ 'zAddAssetAttr- View Count-201',
+ 'zAddAssetAttr- Pending Play Count-202',
+ 'zAddAssetAttr- Play Count-203',
+ 'zAddAssetAttr- Pending Share Count-204',
+ 'zAddAssetAttr- Share Count-205',
+ 'zAddAssetAttr-Allowed for Analysis-206',
+ 'zAddAssetAttr-Scene Analysis Version-207',
+ 'zAddAssetAttr-Scene Analysis is From Preview-208',
+ 'zAddAssetAttr-Scene Analysis Timestamp-209',
+ 'zAsset-Duplication Asset Visibility State-210',
+ 'zAddAssetAttr-Destination Asset Copy State-211',
+ 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-212',
+ 'zAddAssetAttr-Source Asset for Duplication Scope ID-213',
+ 'zCldMast-Source Master For Duplication Scope ID-214',
+ 'zAddAssetAttr-Source Asset For Duplication ID-215',
+ 'zCldMast-Source Master for Duplication ID-216',
+ 'zAddAssetAttr-Variation Suggestions States-217',
+ 'zAsset-High Frame Rate State-218',
+ 'zAsset-Video Key Frame Time Scale-219',
+ 'zAsset-Video Key Frame Value-220',
+ 'zExtAttr-ISO-221',
+ 'zExtAttr-Metering Mode-222',
+ 'zExtAttr-Sample Rate-223',
+ 'zExtAttr-Track Format-224',
+ 'zExtAttr-White Balance-225',
+ 'zExtAttr-Aperture-226',
+ 'zExtAttr-BitRate-227',
+ 'zExtAttr-Exposure Bias-228',
+ 'zExtAttr-Frames Per Second-229',
+ 'zExtAttr-Shutter Speed-230',
+ 'zExtAttr-Slush Scene Bias-231',
+ 'zExtAttr-Slush Version-232',
+ 'zExtAttr-Slush Preset-233',
+ 'zExtAttr-Slush Warm Bias-234',
+ 'zAsset-Height-235',
+ 'zAddAssetAttr-Original Height-236',
+ 'zIntResou-Unoriented Height-237',
+ 'zAsset-Width-238',
+ 'zAddAssetAttr-Original Width-239',
+ 'zIntResou-Unoriented Width-240',
+ 'zShare-Thumbnail Image Data-241',
+ 'SPLzShare-Thumbnail Image Data-242',
+ 'zAsset-Thumbnail Index-243',
+ 'zAddAssetAttr-Embedded Thumbnail Height-244',
+ 'zAddAssetAttr-Embedded Thumbnail Length-245',
+ 'zAddAssetAttr-Embedded Thumbnail Offset-246',
+ 'zAddAssetAttr-Embedded Thumbnail Width-247',
+ 'zAsset-Packed Acceptable Crop Rect-248',
+ 'zAsset-Packed Badge Attributes-249',
+ 'zAsset-Packed Preferred Crop Rect-250',
+ 'zAsset-Curation Score-251',
+ 'zAsset-Camera Processing Adjustment State-252',
+ 'zAsset-Depth Type-253',
+ 'zAsset-Is Magic Carpet-QuicktimeMOVfile-254',
+ 'zAddAssetAttr-Orig Resource Choice-255',
+ 'zAddAssetAttr-Spatial Over Capture Group ID-256',
+ 'zAddAssetAttr-Place Annotation Data-257',
+ 'zAddAssetAttr-Distance Identity-258',
+ 'zAddAssetAttr-Edited IPTC Attributes-259',
+ 'zAssetDes-Long Description-260',
+ 'zAddAssetAttr-Asset Description-261',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-262',
+ 'zAddAssetAttr-Accessibility Description-263',
+ 'zAddAssetAttr-Photo Stream Tag ID-264',
+ 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-265',
+ 'zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-266',
+ ('zCldFeedEnt-Entry Date-267', 'datetime'),
+ 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-268',
+ 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-269',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-270',
+ 'zCldFeedEnt-Entry Priority Number-271',
+ 'zCldFeedEnt-Entry Type Number-272',
+ 'zCldSharedComment-Cloud GUID-4TableStart-273',
+ ('zCldSharedComment-Date-274', 'datetime'),
+ ('zCldSharedComment-Comment Client Date-275', 'datetime'),
+ ('zAsset-Cloud Last Viewed Comment Date-276', 'datetime'),
+ 'zCldSharedComment-Type-277',
+ 'zCldSharedComment-Comment Text-278',
+ 'zCldSharedComment-Commenter Hashed Person ID-279',
+ 'zCldSharedComment-Batch Comment-280',
+ 'zCldSharedComment-Is a Caption-281',
+ 'zAsset-Cloud Has Comments by Me-282',
+ 'zCldSharedComment-Is My Comment-283',
+ 'zCldSharedComment-Is Deletable-284',
+ 'zAsset-Cloud Has Comments Conversation-285',
+ 'zAsset-Cloud Has Unseen Comments-286',
+ 'zCldSharedComment-Liked-287',
+ 'zAddAssetAttr-Share Type-288',
+ 'zAsset-Library Scope Share State- StillTesting-289',
+ 'zAsset-Active Library Scope Participation State-290',
+ 'zAddAssetAttr-Library Scope Asset Contributors To Update-291',
+ 'zShare-UUID-CMM-4TableStart-292',
+ 'SPLzShare-UUID-SPL-4TableStart-293',
+ 'zShare-zENT-CMM-294',
+ 'SPLzShare-zENT-SPL-295',
+ 'zSharePartic-z54SHARE-296',
+ 'SPLzSharePartic-z54SHARE-297',
+ 'zShare-Status-CMM-298',
+ 'SPLzShare-Status-SPL-299',
+ 'zShare-Scope Type-CMM-300',
+ 'SPLzShare-Scope Type-SPL-301',
+ 'zShare-Local Publish State-CMM-302',
+ 'SPLzShare-Local Publish State-SPL-303',
+ 'zShare-Public Permission-CMM-304',
+ 'SPLzShare-Public Permission-SPL-305',
+ 'zShare-Originating Scope ID-CMM-306',
+ 'SPLzShare-Originating Scope ID-SPL-307',
+ 'zShare-Scope ID-CMM-308',
+ 'SPLzShare-Scope ID-SPL-309',
+ 'zShare-Title-CMM-310',
+ 'SPLzShare-Title-SPL-311',
+ 'zShare-Share URL-CMM-312',
+ 'SPLzShare-Share URL-SPL-313',
+ ('zShare-Creation Date-CMM-314', 'datetime'),
+ ('SPLzShare-Creation Date-SPL-315', 'datetime'),
+ ('zShare-Start Date-CMM-316', 'datetime'),
+ ('SPLzShare-Start Date-SPL-317', 'datetime'),
+ ('zShare-End Date-CMM-318', 'datetime'),
+ ('SPLzShare-End Date-SPL-319', 'datetime'),
+ ('zShare-Expiry Date-CMM-320', 'datetime'),
+ ('SPLzShare-Expiry Date-SPL-321', 'datetime'),
+ 'zShare-Cloud Item Count-CMM-322',
+ 'SPLzShare-Cloud Item Count-SPL-323',
+ 'zShare-Asset Count-CMM-324',
+ 'SPLzShare-Asset Count-SPL-325',
+ 'zShare-Cloud Photo Count-CMM-326',
+ 'SPLzShare-Cloud Photo Count-SPL-327',
+ 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-328',
+ 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-329',
+ 'zShare-Photos Count-CMM-330',
+ 'SPLzShare-Photos Count-CMM-SPL-331',
+ 'zShare-Uploaded Photos Count-CMM-332',
+ 'SPLzShare-Uploaded Photos Count-SPL-333',
+ 'zShare-Cloud Video Count-CMM-334',
+ 'SPLzShare-Cloud Video Count-SPL-335',
+ 'zShare-Videos Count-CMM-336',
+ 'SPLzShare-Videos Count-SPL-337',
+ 'zShare-Uploaded Videos Count-CMM-338',
+ 'SPLzShare-Uploaded Videos Count-SPL-339',
+ 'zShare-Force Sync Attempted-CMM-340',
+ 'SPLzShare-Force Sync Attempted-SPL-341',
+ 'zShare-Cloud Local State-CMM-342',
+ 'SPLzShare-Cloud Local State-SPL-343',
+ 'zShare-Scope Syncing State-CMM-344',
+ 'SPLzShare-Scope Syncing State-SPL-345',
+ 'zShare-Auto Share Policy-CMM-346',
+ 'SPLzShare-Auto Share Policy-SPL-347',
+ 'zShare-Should Notify On Upload Completion-CMM-348',
+ 'SPLzShare-Should Notify On Upload Completion-SPL-349',
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-350',
+ 'zShare-Trashed State-CMM-351',
+ 'SPLzShare-Trashed State-SPL-352',
+ 'zShare-Cloud Delete State-CMM-353',
+ 'SPLzShare-Cloud Delete State-SPL-354',
+ ('zShare-Trashed Date-CMM-355', 'datetime'),
+ ('SPLzShare-Trashed Date-SPL-356', 'datetime'),
+ ('zShare-LastParticipant Asset Trash Notification Date-CMM-357', 'datetime'),
+ ('SPLzShare-LastParticipant Asset Trash Notification Date-SPL-358', 'datetime'),
+ ('zShare-Last Participant Asset Trash Notification View Date-CMM-359', 'datetime'),
+ ('SPLzShare-Last Participant Asset Trash Notification View Date-SPL-360', 'datetime'),
+ 'zShare-Exit Source-CMM-361',
+ 'SPLzShare-Exit Source-SPL-362',
+ 'zShare-SPL_Exit State-CMM-363',
+ 'SPLzShare-SPL_Exit State-SPL-364',
+ 'zShare-Exit Type-CMM-365',
+ 'SPLzShare-Exit Type-SPL-366',
+ 'zShare-Should Ignor Budgets-CMM-367',
+ 'SPLzShare-Should Ignor Budgets-SPL-368',
+ 'zShare-Preview State-CMM-369',
+ 'SPLzShare-Preview State-SPL-370',
+ 'zShare-Preview Data-CMM-371',
+ 'SPLzShare-Preview Data-SPL-372',
+ 'zShare-Rules-CMM-373',
+ 'SPLzShare-Rules-SPL-374',
+ 'zShare-Thumbnail Image Data-CMM-375',
+ 'SPLzShare-Thumbnail Image Data-SPL-376',
+ 'zShare-Participant Cloud Update State-CMM-377',
+ 'SPLzShare-Participant Cloud Update State-SPL-378',
+ 'zSharePartic-UUID-4TableStart-379',
+ 'SPLzSharePartic-UUID-4TableStart-380',
+ 'zSharePartic-Acceptance Status-381',
+ 'SPLzSharePartic-Acceptance Status-382',
+ 'zSharePartic-Is Current User-383',
+ 'SPLzSharePartic-Is Current User-384',
+ 'zSharePartic-Role-385',
+ 'SPLzSharePartic-Role-386',
+ 'zSharePartic-Premission-387',
+ 'SPLzSharePartic-Premission-388',
+ 'zSharePartic-Participant ID-389',
+ 'SPLzSharePartic-Participant ID-390',
+ 'zSharePartic-User ID-391',
+ 'SPLzSharePartic-User ID-392',
+ 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-393',
+ 'SPLzSharePartic-zPK-4TableStart-394',
+ 'zSharePartic-zPK-4TableStart-395',
+ 'zSharePartic-Email Address-396',
+ 'SPLzSharePartic-Email Address-397',
+ 'zSharePartic-Phone Number-398',
+ 'SPLzSharePartic-Phone Number-399',
+ 'zSharePartic-Exit State-400',
+ 'SPLzSharePartic-Exit State-401',
+ 'ParentzGenAlbum-UUID-4TableStart-402',
+ 'zGenAlbum-UUID-4TableStart-403',
+ 'SWYConverszGenAlbum-UUID-4TableStart-404',
+ 'ParentzGenAlbum-Cloud GUID-4TableStart-405',
+ 'zGenAlbum-Cloud GUID-4TableStart-406',
+ 'SWYConverszGenAlbum-Cloud GUID-4TableStart-407',
+ 'zCldShareAlbumInvRec-Album GUID-4TableStart-408',
+ 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-409',
+ 'zGenAlbum-Project Render UUID-4TableStart-410',
+ 'SWYConverszGenAlbum-Project Render UUID-4TableStart-411',
+ 'zAlbumList-Needs Reordering Number-412',
+ 'zGenAlbum-zENT- Entity-413',
+ 'ParentzGenAlbum-Kind-414',
+ 'zGenAlbum-Album Kind-415',
+ 'SWYConverszGenAlbum-Album Kind-416',
+ 'ParentzGenAlbum-Cloud-Local-State-417',
+ 'zGenAlbum-Cloud_Local_State-418',
+ 'SWYConverszGenAlbum-Cloud_Local_State-419',
+ 'ParentzGenAlbum- Title-420',
+ 'zGenAlbum- Title-User&System Applied-421',
+ 'SWYConverszGenAlbum- Title -User&System Applied-422',
+ 'zGenAlbum-Import Session ID-SWY-423',
+ 'zAsset- Conversation= zGenAlbum_zPK-424',
+ 'SWYConverszGenAlbum- Import Session ID-SWY-425',
+ 'zGenAlbum-Imported by Bundle Identifier-426',
+ 'SWYzGenAlbum-Imported by Bundle Identifier-427',
+ 'SWYConverszGenAlbum- Syndicate-428',
+ ('ParentzGenAlbum-Creation Date-429', 'datetime'),
+ ('zGenAlbum-Creation Date-430', 'datetime'),
+ ('SWYConverszGenAlbum-Creation Date-431', 'datetime'),
+ ('zGenAlbum-Cloud Creation Date-432', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Creation Date-433', 'datetime'),
+ ('zGenAlbum-Start Date-434', 'datetime'),
+ ('SWYConverszGenAlbum-Start Date-435', 'datetime'),
+ ('zGenAlbum-End Date-436', 'datetime'),
+ ('SWYConverszGenAlbum-End Date-437', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-438', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Subscription Date-439', 'datetime'),
+ 'ParentzGenAlbum-Pending Items Count-440',
+ 'zGenAlbum-Pending Items Count-441',
+ 'SWYConverszGenAlbum-Pending Items Count-442',
+ 'ParentzGenAlbum-Pending Items Type-443',
+ 'zGenAlbum-Pending Items Type-444',
+ 'SWYConverszGenAlbum-Pending Items Type-445',
+ 'zGenAlbum- Cached Photos Count-446',
+ 'SWYConverszGenAlbum- Cached Photos Count-447',
+ 'zGenAlbum- Cached Videos Count-448',
+ 'SWYConverszGenAlbum- Cached Videos Count-449',
+ 'zGenAlbum- Cached Count-450',
+ 'SWYConverszGenAlbum- Cached Count-451',
+ 'ParentzGenAlbum-Sync Event Order Key-452',
+ 'zGenAlbum-Sync Event Order Key-453',
+ 'SWYConverszGenAlbum-Sync Event Order Key-454',
+ 'zGenAlbum-Has Unseen Content-455',
+ 'SWYConverszGenAlbum-Has Unseen Content-456',
+ 'zGenAlbum-Unseen Asset Count-457',
+ 'SWYConverszGenAlbum-Unseen Asset Count-458',
+ 'zGenAlbum-is Owned-459',
+ 'SWYConverszGenAlbum-is Owned-460',
+ 'zGenAlbum-Cloud Relationship State-461',
+ 'SWYConverszGenAlbum-Cloud Relationship State-462',
+ 'zGenAlbum-Cloud Relationship State Local-463',
+ 'SWYConverszGenAlbum-Cloud Relationship State Local-464',
+ 'zGenAlbum-Cloud Owner Mail Key-465',
+ 'SWYConverszGenAlbum-Cloud Owner Mail Key-466',
+ 'zGenAlbum-Cloud Owner Frist Name-467',
+ 'SWYConverszGenAlbum-Cloud Owner Frist Name-468',
+ 'zGenAlbum-Cloud Owner Last Name-469',
+ 'SWYConverszGenAlbum-Cloud Owner Last Name-470',
+ 'zGenAlbum-Cloud Owner Full Name-471',
+ 'SWYConverszGenAlbum-Cloud Owner Full Name-472',
+ 'zGenAlbum-Cloud Person ID-473',
+ 'SWYConverszGenAlbum-Cloud Person ID-474',
+ 'zAsset-Cloud Owner Hashed Person ID-475',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-476',
+ 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-477',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-478',
+ 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-479',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-480',
+ 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-481',
+ 'zGenAlbum-Cloud Album Sub Type-482',
+ 'SWYConverszGenAlbum-Cloud Album Sub Type-483',
+ ('zGenAlbum-Cloud Contribution Date-484', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Contribution Date-485', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-486', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Last Interesting Change Date-487', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-488',
+ 'SWYConverszGenAlbum-Cloud Notification Enabled-489',
+ 'ParentzGenAlbum-Pinned-490',
+ 'zGenAlbum-Pinned-491',
+ 'SWYConverszGenAlbum-Pinned-492',
+ 'ParentzGenAlbum-Custom Sort Key-493',
+ 'zGenAlbum-Custom Sort Key-494',
+ 'SWYConverszGenAlbum-Custom Sort Key-495',
+ 'ParentzGenAlbum-Custom Sort Ascending-496',
+ 'zGenAlbum-Custom Sort Ascending-497',
+ 'SWYConverszGenAlbum-Custom Sort Ascending-498',
+ 'ParentzGenAlbum-Is Prototype-499',
+ 'zGenAlbum-Is Prototype-500',
+ 'SWYConverszGenAlbum-Is Prototype-501',
+ 'ParentzGenAlbum-Project Document Type-502',
+ 'zGenAlbum-Project Document Type-503',
+ 'SWYConverszGenAlbum-Project Document Type-504',
+ 'ParentzGenAlbum-Custom Query Type-505',
+ 'zGenAlbum-Custom Query Type-506',
+ 'SWYConverszGenAlbum-Custom Query Type-507',
+ 'ParentzGenAlbum-Trashed State-508',
+ ('ParentzGenAlbum-Trash Date-509', 'datetime'),
+ 'zGenAlbum-Trashed State-510',
+ ('zGenAlbum-Trash Date-511', 'datetime'),
+ 'SWYConverszGenAlbum-Trashed State-512',
+ ('SWYConverszGenAlbum-Trash Date-513', 'datetime'),
+ 'ParentzGenAlbum-Cloud Delete State-514',
+ 'zGenAlbum-Cloud Delete State-515',
+ 'SWYConverszGenAlbum-Cloud Delete State-516',
+ 'zGenAlbum-Cloud Owner Whitelisted-517',
+ 'SWYConverszGenAlbum-Cloud Owner Whitelisted-518',
+ 'zGenAlbum-Cloud Local Public URL Enabled-519',
+ 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-520',
+ 'zGenAlbum-Cloud Public URL Enabled-521',
+ 'zGenAlbum-Public URL-522',
+ 'SWYConverszGenAlbum-Cloud Public URL Enabled-523',
+ 'SWYConverszGenAlbum-Public URL-524',
+ 'zGenAlbum-Key Asset Face Thumb Index-525',
+ 'SWYConverszGenAlbum-Key Asset Face Thumb Index-526',
+ 'zGenAlbum-Project Text Extension ID-527',
+ 'SWYConverszGenAlbum-Project Text Extension ID-528',
+ 'zGenAlbum-User Query Data-529',
+ 'SWYConverszGenAlbum-User Query Data-530',
+ 'zGenAlbum-Custom Query Parameters-531',
+ 'SWYConverszGenAlbum-Custom Query Parameters-532',
+ 'zGenAlbum-Project Data-533',
+ 'SWYConverszGenAlbum-Project Data-534',
+ 'zGenAlbum-Search Index Rebuild State-535',
+ 'SWYConverszGenAlbum-Search Index Rebuild State-536',
+ 'zGenAlbum-Duplicate Type-537',
+ 'SWYConverszGenAlbum-Duplicate Type-538',
+ 'zGenAlbum-Privacy State-539',
+ 'SWYConverszGenAlbum-Privacy State-540',
+ 'zCldShareAlbumInvRec-zUUID-4TableStart-541',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-542',
+ 'zCldShareAlbumInvRec-Invitation State Local-543',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-544',
+ ('zCldShareAlbumInvRec-Subscription Date-545', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-546',
+ 'zCldShareAlbumInvRec-Invitee Last Name-547',
+ 'zCldShareAlbumInvRec-Invitee Full Name-548',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-549',
+ 'zCldShareAlbumInvRec-Invitee Email Key-550',
+ 'zGenAlbum-Key Asset Face ID-551',
+ 'zFaceCrop-Face Area Points-552',
+ 'zAsset-Face Adjustment Version-553',
+ 'zAddAssetAttr-Face Analysis Version-554',
+ 'zDetFace-Asset Visible-555',
+ 'zPerson-Face Count-556',
+ 'zDetFace-Face Crop-557',
+ 'zDetFace-Face Algorithm Version-558',
+ 'zDetFace-Adjustment Version-559',
+ 'zDetFace-UUID-4TableStart-560',
+ 'zPerson-Person UUID-4TableStart-561',
+ 'zDetFace-Confirmed Face Crop Generation State-562',
+ 'zDetFace-Manual-563',
+ 'zDetFace-Detection Type-564',
+ 'zPerson-Detection Type-565',
+ 'zDetFace-VIP Model Type-566',
+ 'zDetFace-Name Source-567',
+ 'zDetFace-Cloud Name Source-568',
+ 'zPerson-Merge Candidate Confidence-569',
+ 'zPerson-Person URI-570',
+ 'zPerson-Display Name-571',
+ 'zPerson-Full Name-572',
+ 'zPerson-Cloud Verified Type-573',
+ 'zFaceCrop-State-574',
+ 'zFaceCrop-Type-575',
+ 'zFaceCrop-UUID-4TableStart-576',
+ 'zPerson-Type-577',
+ 'zPerson-Verified Type-578',
+ 'zPerson-Gender Type-579',
+ 'zDetFace-Gender Type-580',
+ 'zDetFace-Center X-581',
+ 'zDetFace-Center Y-582',
+ 'zPerson-Age Type Estimate-583',
+ 'zDetFace-Age Type Estimate-584',
+ 'zDetFace-Ethnicity Type-585',
+ 'zDetFace-Skin Tone Type-586',
+ 'zDetFace-Hair Type-587',
+ 'zDetFace-Hair Color Type-588',
+ 'zDetFace-Head Gear Type-589',
+ 'zDetFace-Facial Hair Type-590',
+ 'zDetFace-Has Face Mask-591',
+ 'zDetFace-Pose Type-592',
+ 'zDetFace-Face Expression Type-593',
+ 'zDetFace-Has Smile-594',
+ 'zDetFace-Smile Type-595',
+ 'zDetFace-Lip Makeup Type-596',
+ 'zDetFace-Eyes State-597',
+ 'zDetFace-Is Left Eye Closed-598',
+ 'zDetFace-Is Right Eye Closed-599',
+ 'zDetFace-Gaze Center X-600',
+ 'zDetFace-Gaze Center Y-601',
+ 'zDetFace-Face Gaze Type-602',
+ 'zDetFace-Eye Glasses Type-603',
+ 'zDetFace-Eye Makeup Type-604',
+ 'zDetFace-Cluster Squence Number Key-605',
+ 'zDetFace-Grouping ID-606',
+ 'zDetFace-Master ID-607',
+ 'zDetFace-Quality-608',
+ 'zDetFace-Quality Measure-609',
+ 'zDetFace-Source Height-610',
+ 'zDetFace-Source Width-611',
+ 'zDetFace-Hidden-Asset Hidden-612',
+ 'zDetFace-In Trash-Recently Deleted-613',
+ 'zDetFace-Cloud Local State-614',
+ 'zDetFace-Training Type-615',
+ 'zDetFace.Pose Yaw-616',
+ 'zDetFace-Body Center X-617',
+ 'zDetFace-Body Center Y-618',
+ 'zDetFace-Body Height-619',
+ 'zDetFace-Body Width-620',
+ 'zDetFace-Roll-621',
+ 'zDetFace-Size-622',
+ 'zDetFace-Cluster Squence Number-623',
+ 'zDetFace-Blur Score-624',
+ 'zDetFacePrint-Face Print Version-625',
+ 'zMedAnlyAstAttr-Face Count-626',
+ 'zDetFaceGroup-UUID-4TableStart-627',
+ 'zDetFaceGroup-Person Builder State-628',
+ 'zDetFaceGroup-UnNamed Face Count-629',
+ 'zPerson-In Person Naming Model-630',
+ 'zPerson-Key Face Pick Source Key-631',
+ 'zPerson-Manual Order Key-632',
+ 'zPerson-Question Type-633',
+ 'zPerson-Suggested For Client Type-634',
+ 'zPerson-Merge Target Person-635',
+ 'zPerson-Cloud Local State-636',
+ 'zFaceCrop-Cloud Local State-637',
+ 'zFaceCrop-Cloud Type-638',
+ 'zPerson-Cloud Delete State-639',
+ 'zFaceCrop-Cloud Delete State-640',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-641',
+ 'zAsset-Highlight Visibility Score-642',
+ 'zMemory-UUID-4TableStart-643',
+ 'zMemory-AssetListPredicte-644',
+ 'zMemory-Score-645',
+ 'zMemory-SubTitle-646',
+ 'zMemory-Title-647',
+ 'zMemory-Category-648',
+ 'zMemory-SubCategory-649',
+ ('zMemory-Creation Date-650', 'datetime'),
+ ('zMemory-Last Enrichment Date-651', 'datetime'),
+ 'zMemory-User Action Options-652',
+ 'zMemory-Favorite Memory-653',
+ 'zMemory-View Count-654',
+ 'zMemory-Play Count-655',
+ 'zMemory-Rejected-656',
+ 'zMemory-Share Count-657',
+ 'zMemory-Sharing Composition-658',
+ ('zMemory-Last Movie Play Date-659', 'datetime'),
+ ('zMemory-Last Viewed Date-660', 'datetime'),
+ 'zMemory-Pending Play Count Memory-661',
+ 'zMemory-Pending Share Count Memory-662',
+ 'zMemory-Pending View Count Memory-663',
+ 'zMemory-Pending State-664',
+ 'zMemory-Featured State-665',
+ 'zMemory-Photos Graph Version-666',
+ 'zMemory-Graph Memory Identifier-667',
+ 'zMemory-Notification State-668',
+ 'zMemory-Cloud Local State-669',
+ 'zMemory-Cloud Delete State-670',
+ 'zMemory-Story Color Grade Kind-671',
+ 'zMemory-Story Serialized Title Category-672',
+ 'zMemory-Syndicated Content State-673',
+ 'zMemory-Search Index Rebuild State-674',
+ 'zMemory-Black Listed Feature-675',
+ 'zMoment-UUID-4TableStart-676',
+ 'zMoment-Aggregation Score-677',
+ ('zMoment-Start Date-678', 'datetime'),
+ ('zMoment-Representative Date-679', 'datetime'),
+ 'zMoment-Timezone Offset-680',
+ ('zMoment-Modification Date-681', 'datetime'),
+ ('zMoment-End Date-682', 'datetime'),
+ 'zMoment-SubTitle-683',
+ 'zMoment-Title-684',
+ 'zMoment-Originator State-685',
+ 'zMoment-Sharing Composition-686',
+ 'zMoment-Cached Count Shared-687',
+ 'zMoment-Processed Location-688',
+ 'zMoment-Approx Latitude-689',
+ 'zMoment-Approx Longitude-690',
+ 'zMoment-GPS Horizontal Accuracy-691',
+ 'zMoment-Cache Count-692',
+ 'zMoment-Cached Photos Count-693',
+ 'zMoment-Cached Videos Count-694',
+ 'zMoment-Trashed State-695',
+ 'SBKAzSugg-UUID-4TableStart-696',
+ 'SBKAzSugg-Suggestion Context-697',
+ 'SBKAzSugg-Sharing Composition-698',
+ ('SBKAzSugg-Start Date-699', 'datetime'),
+ 'SBKAzSugg-State-700',
+ 'SBKAzSugg-Featured State-701',
+ 'SBKAzSugg-Notification State-702',
+ ('SBKAzSugg-Creation Date-703', 'datetime'),
+ ('SBKAzSugg-End Date-704', 'datetime'),
+ ('SBKAzSugg-Activation Date-705', 'datetime'),
+ ('SBKAzSugg-Expunge Date-706', 'datetime'),
+ ('SBKAzSugg-Relevant Until Date-707', 'datetime'),
+ 'SBKAzSugg-Title-708',
+ 'SBKAzSugg-Sub Title-709',
+ 'SBKAzSugg-Cached Count-710',
+ 'SBKAzSugg-Cahed Photos Count-711',
+ 'SBKAzSugg-Cached Videos Count-712',
+ 'SBKAzSugg-Type-713',
+ 'SBKAzSugg-Sub Type-714',
+ 'SBKAzSugg-Action Data-715',
+ 'SBKAzSugg-Version-716',
+ 'SBKAzSugg-Cloud Local State-717',
+ 'SBKAzSugg-Cloud Delete State-718',
+ 'SBRAzSugg-UUID-4TableStart-719',
+ 'SBRAzSugg-Suggestion Context-720',
+ 'SBRAzSugg-Sharing Composition-721',
+ ('SBRAzSugg-Start Date-722', 'datetime'),
+ 'SBRAzSugg-State-723',
+ 'SBRAzSugg-Featured State-724',
+ 'SBRAzSugg-Notification State-725',
+ ('SBRAzSugg-Creation Date-726', 'datetime'),
+ ('SBRAzSugg-End Date-727', 'datetime'),
+ ('SBRAzSugg-Activation Date-728', 'datetime'),
+ ('SBRAzSugg-Expunge Date-729', 'datetime'),
+ ('SBRAzSugg-Relevant Until Date-730', 'datetime'),
+ 'SBRAzSugg-Title-731',
+ 'SBRAzSugg-Sub Title-732',
+ 'SBRAzSugg-Cached Count-733',
+ 'SBRAzSugg-Cahed Photos Count-734',
+ 'SBRAzSugg-Cached Videos Count-735',
+ 'SBRAzSugg-Type-736',
+ 'SBRAzSugg-Sub Type-737',
+ 'SBRAzSugg-Action Data-738',
+ 'SBRAzSugg-Version-739',
+ 'SBRAzSugg-Cloud Local State-740',
+ 'SBRAzSugg-Cloud Delete State-741',
+ 'zMedAnlyAstAttr-Media Analysis Version-742',
+ 'zMedAnlyAstAttr-Audio Classification-743',
+ 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-744',
+ 'zMedAnlyAstAttr-Best Video Range Start Time Scale-745',
+ 'zMedAnlyAstAttr-Best Video Range Duration Value-746',
+ 'zMedAnlyAstAttr-Best Video Range Start Value-747',
+ 'zMedAnlyAstAttr-Packed Best Playback Rect-748',
+ 'zMedAnlyAstAttr-Activity Score-749',
+ 'zMedAnlyAstAttr-Video Score-750',
+ 'zMedAnlyAstAttr-Audio Score-751',
+ 'zMedAnlyAstAttr-Wallpaper Score-752',
+ 'zMedAnlyAstAttr-AutoPlay Suggestion Score-753',
+ 'zMedAnlyAstAttr-Blurriness Score-754',
+ 'zMedAnlyAstAttr-Exposure Score-755',
+ 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-756',
+ 'zMedAnlyAstAttr-Probable Rotation Direction-757',
+ 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-758',
+ 'zAssetAnalyState-Asset UUID-4TableStart-759',
+ 'zAssetAnalyState-Analyisis State-760',
+ 'zAssetAnalyState-Worker Flags-761',
+ 'zAssetAnalyState-Worker Type-762',
+ ('zAssetAnalyState-Ignore Until Date-763', 'datetime'),
+ ('zAssetAnalyState-Last Ignored Date-764', 'datetime'),
+ ('zAssetAnalyState-Sort Token-765', 'datetime'),
+ 'zMedAnlyAstAttr-Character Recognition Attr-766',
+ 'zCharRecogAttr-Algorithm Version-767',
+ 'zCharRecogAttr-Adjustment Version-768',
+ 'zMedAnlyAstAttr-Visual Search Attributes-769',
+ 'zVisualSearchAttr-Algorithm Version-770',
+ 'zVisualSearchAttr-Adjustment Version-771',
+ 'zAsset-Overall Aesthetic Score-772',
+ 'zCompAssetAttr-Behavioral Score-773',
+ 'zCompAssetAttr-Failure Score zCompAssetAttr-774',
+ 'zCompAssetAttr-Harmonious Color Score-775',
+ 'zCompAssetAttr-Immersiveness Score-776',
+ 'zCompAssetAttr-Interaction Score-777',
+ 'zCompAssetAttr-Intersting Subject Score-778',
+ 'zCompAssetAttr-Intrusive Object Presence Score-779',
+ 'zCompAssetAttr-Lively Color Score-780',
+ 'zCompAssetAttr-Low Light-781',
+ 'zCompAssetAttr-Noise Score-782',
+ 'zCompAssetAttr-Pleasant Camera Tilt Score-783',
+ 'zCompAssetAttr-Pleasant Composition Score-784',
+ 'zCompAssetAttr-Pleasant Lighting Score-785',
+ 'zCompAssetAttr-Pleasant Pattern Score-786',
+ 'zCompAssetAttr-Pleasant Perspective Score-787',
+ 'zCompAssetAttr-Pleasant Post Processing Score-788',
+ 'zCompAssetAttr-Pleasant Reflection Score-789',
+ 'zCompAssetAttrPleasant Symmetry Score-790',
+ 'zCompAssetAttr-Sharply Focused Subject Score-791',
+ 'zCompAssetAttr-Tastfully Blurred Score-792',
+ 'zCompAssetAttr-Well Chosen Subject Score-793',
+ 'zCompAssetAttr-Well Framed Subject Score-794',
+ 'zCompAssetAttr-Well Timeed Shot Score-795',
+ 'zCldRes-Asset UUID-4TableStart-796',
+ 'zCldRes-Cloud Local State-797',
+ 'zCldRes-File Size-798',
+ 'zCldRes-Height-799',
+ 'zCldRes-Is Available-800',
+ 'zCldRes-Is Locally Available-801',
+ 'zCldRes-Prefetch Count-802',
+ 'zCldRes-Source Type-803',
+ 'zCldRes-Type-804',
+ 'zCldRes-Width-805',
+ ('zCldRes-Date Created-806', 'datetime'),
+ ('zCldRes-Last OnDemand Download Date-807', 'datetime'),
+ ('zCldRes-Last Prefetch Date-808', 'datetime'),
+ 'zCldRes-Prunedat-809',
+ 'zCldRes-File Path-810',
+ 'zCldRes-Fingerprint-811',
+ 'zCldRes-Item ID-812',
+ 'zCldRes-UniID-813',
+ 'zUserFeedback-UUID-4TableStart-814',
+ 'zUserFeedback-Feature-815',
+ 'zUserFeedback-Type-816',
+ ('zUserFeedback-Last Modified Date-817', 'datetime'),
+ 'zUserFeedback-Context-818',
+ 'zUserFeedback-Cloud Local State-819',
+ 'zUserFeedback-Cloud Delete State-820',
+ 'zAddAssetAttr-zPK-821',
+ 'zAddAssetAttr-zENT-822',
+ 'ZAddAssetAttr-zOPT-823',
+ 'zAddAssetAttr-zAsset= zAsset_zPK-824',
+ 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-825',
+ 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-826',
+ 'zAddAssetAttr-Master Fingerprint-827',
+ 'zAddAssetAttr-Public Global UUID-828',
+ 'zAddAssetAttr-Deferred Photo Identifier-829',
+ 'zAddAssetAttr-Original Assets UUID-830',
+ 'zAddAssetAttr-Import Session ID-831',
+ 'zAddAssetAttr-Originating Asset Identifier-832',
+ 'zAddAssetAttr.Adjusted Fingerprint-833',
+ 'zAlbumList-zPK= Album List Key-834',
+ 'zAlbumList-zENT-835',
+ 'zAlbumList-zOPT-836',
+ 'zAlbumList-ID Key-837',
+ 'zAlbumList-UUID-838',
+ 'zAsset-zPK-839',
+ 'zAsset-zENT-840',
+ 'zAsset-zOPT-841',
+ 'zAsset-Master= zCldMast-zPK-842',
+ 'zAsset-Extended Attributes= zExtAttr-zPK-843',
+ 'zAsset-Import Session Key-844',
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-845',
+ 'zAsset-Photo Analysis Attributes Key-846',
+ 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-847',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-848',
+ 'zAsset-Moment Share Key= zShare-zPK-849',
+ 'zAsset-zMoment Key= zMoment-zPK-850',
+ 'zAsset-Computed Attributes Asset Key-851',
+ 'zAsset-Highlight Being Assets-HBA Key-852',
+ 'zAsset-Highlight Being Extended Assets-HBEA Key-853',
+ 'zAsset-Highlight Being Key Asset Private-HBKAP Key-854',
+ 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-855',
+ 'zAsset-Highligh Being Summary Assets-HBSA Key-856',
+ 'zAsset-Day Group Highlight Being Assets-DGHBA Key-857',
+ 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-858',
+ 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-859',
+ 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-860',
+ 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-861',
+ 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-862',
+ 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-863',
+ 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-864',
+ 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-865',
+ 'zAsset-Promotion Score-866',
+ 'zAsset-Media Analysis Attributes Key-867',
+ 'zAsset-Media Group UUID-868',
+ 'zAsset-UUID = store.cloudphotodb-869',
+ 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-870',
+ 'zAsset.Cloud Collection GUID-871',
+ 'zAsset-Avalanche UUID-872',
+ 'zAssetAnalyState-zPK-873',
+ 'zAssetAnalyState-zEnt-874',
+ 'zAssetAnalyState-zOpt-875',
+ 'zAssetAnalyState-Asset= zAsset-zPK-876',
+ 'zAssetAnalyState-Asset UUID-877',
+ 'zAsstContrib-zPK-878',
+ 'zAsstContrib-zEnt-879',
+ 'zAsstContrib-zOpt-880',
+ 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-881',
+ 'zAsstContrib-Participant= zSharePartic-zPK-882',
+ 'zAssetDes-zPK-883',
+ 'zAssetDes-zENT-884',
+ 'zAssetDes-zOPT-885',
+ 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-886',
+ 'zCharRecogAttr-zPK-887',
+ 'zCharRecogAttr-zENT-888',
+ 'zCharRecogAttr-zOPT-889',
+ 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-890',
+ 'zCldFeedEnt-zPK= zCldShared keys-891',
+ 'zCldFeedEnt-zENT-892',
+ 'zCldFeedEnt-zOPT-893',
+ 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-894',
+ 'zCldFeedEnt-Entry Invitation Record GUID-895',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-896',
+ 'zCldMast-zPK= zAsset-Master-897',
+ 'zCldMast-zENT-898',
+ 'zCldMast-zOPT-899',
+ 'zCldMast-Moment Share Key= zShare-zPK-900',
+ 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-901',
+ 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-902',
+ 'zCldMast-Originating Asset ID-903',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-904',
+ 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-905',
+ 'CMzCldMastMedData-zENT-906',
+ 'CMzCldMastMedData-zOPT-907',
+ 'CMzCldMastMedData-CldMast= zCldMast-zPK-908',
+ 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-909',
+ 'AAAzCldMastMedData-zENT-910',
+ 'AAAzCldMastMedData-zOPT-911',
+ 'AAAzCldMastMedData-CldMast key-912',
+ 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-913',
+ 'zCldRes-zPK-914',
+ 'zCldRes-zENT-915',
+ 'zCldRes-zOPT-916',
+ 'zCldRes-Asset= zAsset-zPK-917',
+ 'zCldRes-Cloud Master= zCldMast-zPK-918',
+ 'zCldRes-Asset UUID-919',
+ 'zCldShareAlbumInvRec-zPK-920',
+ 'zCldShareAlbumInvRec-zEnt-921',
+ 'zCldShareAlbumInvRec-zOpt-922',
+ 'zCldShareAlbumInvRec-Album Key-923',
+ 'zCldShareAlbumInvRec-FOK Album Key-924',
+ 'zCldShareAlbumInvRec-Album GUID-925',
+ 'zCldShareAlbumInvRec-zUUID-926',
+ 'zCldShareAlbumInvRec-Cloud GUID-927',
+ 'zCldSharedComment-zPK-928',
+ 'zCldSharedComment-zENT-929',
+ 'zCldSharedComment-zOPT-930',
+ 'zCldSharedComment-Commented Asset Key= zAsset-zPK-931',
+ 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-932',
+ 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-933',
+ 'zCldSharedComment-Liked Asset Key= zAsset-zPK-934',
+ 'zCldSharedComment-CldFeedLikeCommentEntry Key-935',
+ 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-936',
+ 'zCldSharedComment-Cloud GUID-937',
+ 'zCompAssetAttr-zPK-938',
+ 'zCompAssetAttr-zEnt-939',
+ 'zCompAssetAttr-zOpt-940',
+ 'zCompAssetAttr-Asset Key-941',
+ 'zDetFace-zPK-942',
+ 'zDetFace-zEnt-943',
+ 'zDetFace.zOpt-944',
+ 'zDetFace-Asset= zAsset-zPK or Asset Containing Face-945',
+ 'zDetFace-Person= zPerson-zPK-946',
+ 'zDetFace-Person Being Key Face-947',
+ 'zDetFace-Face Print-948',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-949',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-950',
+ 'zDetFace-UUID-951',
+ 'zDetFaceGroup-zPK-952',
+ 'zDetFaceGroup-zENT-953',
+ 'zDetFaceGroup-zOPT-954',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-955',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-956',
+ 'zDetFaceGroup-UUID-957',
+ 'zDetFacePrint-zPK-958',
+ 'zDetFacePrint-zEnt-959',
+ 'zDetFacePrint-zOpt-960',
+ 'zDetFacePrint-Face Key-961',
+ 'zExtAttr-zPK= zAsset-zExtendedAttributes-962',
+ 'zExtAttr-zENT-963',
+ 'zExtAttr-zOPT-964',
+ 'zExtAttr-Asset Key-965',
+ 'zFaceCrop-zPK-966',
+ 'zFaceCrop-zEnt-967',
+ 'zFaceCrop-zOpt-968',
+ 'zFaceCrop-Asset Key-969',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-970',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-971',
+ 'zFaceCrop-Face Key-972',
+ 'zFaceCrop-UUID-973',
+ 'zGenAlbum-zPK=26AlbumLists= 26Albums-974',
+ 'zGenAlbum-zENT-975',
+ 'zGenAlbum-zOpt-976',
+ 'zGenAlbum-Key Asset-Key zAsset-zPK-977',
+ 'zGenAlbum-Secondary Key Asset-978',
+ 'zGenAlbum-Tertiary Key Asset-979',
+ 'zGenAlbum-Custom Key Asset-980',
+ 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-981',
+ 'zGenAlbum-FOK Parent Folder-982',
+ 'zGenAlbum-zSyndicate-983',
+ 'zGenAlbum-UUID-984',
+ 'SWYConverszGenAlbum-UUID-985',
+ 'zGenAlbum-Cloud_GUID = store.cloudphotodb-986',
+ 'SWYConverszGenAlbum-Cloud GUID-987',
+ 'zGenAlbum-Project Render UUID-988',
+ 'SWYConverszGenAlbum-Project Render UUID-989',
+ 'zIntResou-zPK-990',
+ 'zIntResou-zENT-991',
+ 'zIntResou-zOPT-992',
+ 'zIntResou-Asset= zAsset_zPK-993',
+ 'zIntResou-Fingerprint-994',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-995',
+ 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-996',
+ 'zMedAnlyAstAttr-zEnt-997',
+ 'zMedAnlyAstAttr-zOpt-998',
+ 'zMedAnlyAstAttr-Asset= zAsset-zPK-999',
+ 'zMemory-zPK-1000',
+ 'zMemory-zENT-1001',
+ 'zMemory-zOPT-1002',
+ 'zMemory-Key Asset= zAsset-zPK-1003',
+ 'zMemory-UUID-1004',
+ 'zMoment-zPK-1005',
+ 'zMoment-zENT-1006',
+ 'zMoment-zOPT-1007',
+ 'zMoment-Highlight Key-1008',
+ 'zMoment-UUID-1009',
+ 'zPerson-zPK=zDetFace-Person-1010',
+ 'zPerson-zEnt-1011',
+ 'zPerson-zOpt-1012',
+ 'zPerson-Share Participant= zSharePartic-zPK-1013',
+ 'zPerson-KeyFace=zDetFace-zPK-1014',
+ 'zPerson-Assoc Face Group Key-1015',
+ 'zPerson-Person UUID-1016',
+ 'zPhotoAnalysisAssetAttr-zPK-1017',
+ 'zPhotoAnalysisAssetAttr-zEnt-1018',
+ 'zPhotoAnalysisAssetAttr-zOpt-1019',
+ 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1020',
+ 'zSceneP-zPK-1021',
+ 'zSceneP-zENT-1022',
+ 'zSceneP-zOPT-1023',
+ 'zShare-zPK-1024',
+ 'zShare-zENT-1025',
+ 'zShare-zOPT-1026',
+ 'zShare-UUID-1027',
+ 'SPLzShare-UUID-1028',
+ 'zShare-Scope ID = store.cloudphotodb-1029',
+ 'zSharePartic-zPK-1030',
+ 'zSharePartic-zENT-1031',
+ 'zSharePartic-zOPT-1032',
+ 'zSharePartic-Share Key= zShare-zPK-1033',
+ 'zSharePartic-Person= zPerson-zPK-1034',
+ 'zSharePartic-UUID-1035',
+ 'SBKAzSugg-zPK-1036',
+ 'SBKAzSugg-zENT-1037',
+ 'SBKAzSugg-zOPT-1038',
+ 'SBKAzSugg-UUID-1039',
+ 'SBRAzSugg-zPK-1040',
+ 'SBRAzSugg-zENT-1041',
+ 'SBRAzSugg-zOPT-1042',
+ 'SBRAzSugg-UUID-1043',
+ 'z3SuggBRA-3RepAssets1-1044',
+ 'z3SuggBRA-58SuggBeingRepAssets-1045',
+ 'z3SuggBKA-58SuggBeingKeyAssets= zSugg-zPK-1046',
+ 'z3SuggBKA-3KeyAssets= zAsset-zPK-1047',
+ 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1048',
+ 'zUnmAdj-zOPT-1049',
+ 'zUnmAdj-zENT-1050',
+ 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1051',
+ 'zUnmAdj-UUID-1052',
+ 'zUnmAdj-Other Adjustments Fingerprint-1053',
+ 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1054',
+ 'zUserFeedback-zPK-1055',
+ 'zUserFeedback-zENT-1056',
+ 'zUserFeedback-zOPT-1057',
+ 'zUserFeedback-Person= zPerson-zPK-1058',
+ 'zUserFeedback-Memory= zMemory-zPK-1059',
+ 'zUserFeedback-UUID-1060',
+ 'zVisualSearchAttr-zPK-1061',
+ 'zVisualSearchAttr-zENT-1062',
+ 'zVisualSearchAttr-zOPT-1063',
+ 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1064',
+ 'z27AlbumList-27Albums= zGenAlbum-zPK-1065',
+ 'z27AlbumList-Album List Key-1066',
+ 'z27AlbumList-FOK27Albums Key-1067',
+ 'z28Assets-28Albums= zGenAlbum-zPK-1068',
+ 'z28Assets-3Asset Key= zAsset-zPK in the Album-1069',
+ 'z28Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1070',
+ 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1071',
+ 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1072',
+ 'z3MemoryBCAs-44MemoriesBeingCuratedAssets= zMemory-zPK-1073',
+ 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1074',
+ 'z3MemoryBECAs-44MemoriesBeingExtCuratedAssets= zMemory-zPK-1075',
+ 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1076',
+ 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK-1077',
+ 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1078',
+ 'z3MemoryBUCAs-44MemoriesBeingUserCuratedAssets= zMemory-zPK-1079',
+ 'z3MemoryBCAs-44Memories Being Custom User Assets-1080',
+ 'z3MemoryBCAs-3Custom User Assets-1081',
+ 'z3MemoryBCAs-FOK-3Custom User Assets-1082')
+ data_list = get_sqlite_db_records(source_path, query)
+ return data_headers, data_list, source_path
-def get_ph96ios16refforassetanalysissyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
+@artifact_processor
+def Ph96_2iOS16RefforAssetAnalysisSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if (version.parse(iosversion) <= version.parse("15.8.2")) or (version.parse(iosversion) >= version.parse("17")):
- logfunc("Unsupported version for Syndication.photoslibrary-database-Photos.sqlite reference for asset analysis from iOS " + iosversion)
+ logfunc("Unsupported version for Syndication.photoslibrary for iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found, "Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -6125,7 +6128,7 @@ def get_ph96ios16refforassetanalysissyndpl(files_found, report_folder, seeker, w
zAssetAnalyState.ZWORKERTYPE AS 'zAssetAnalyState-Worker Type',
DateTime(zAssetAnalyState.ZIGNOREUNTILDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Ignore Until Date',
DateTime(zAssetAnalyState.ZLASTIGNOREDDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Last Ignored Date',
- zAssetAnalyState.ZSORTTOKEN AS 'zAssetAnalyState-Sort Token',
+ DateTime(zAssetAnalyState.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Sort Token',
zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES AS 'zMedAnlyAstAttr-Character Recognition Attr',
zCharRecogAttr.ZALGORITHMVERSION AS 'zCharRecogAttr-Algorithm Version',
zCharRecogAttr.ZADJUSTMENTVERSION AS 'zCharRecogAttr-Adjustment Version',
@@ -6494,1291 +6497,1230 @@ def get_ph96ios16refforassetanalysissyndpl(files_found, report_folder, seeker, w
LEFT JOIN Z_3SUGGESTIONSBEINGREPRESENTATIVEASSETS z3SuggBRA ON z3SuggBRA.Z_3REPRESENTATIVEASSETS1 = zAsset.Z_PK
LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_58SUGGESTIONSBEINGREPRESENTATIVEASSETS
ORDER BY zAsset.ZADDEDDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
- row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
- row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
- row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
- row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
- row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
- row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
- row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
- row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
- row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
- row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
- row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
- row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
- row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
- row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
- row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
- row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
- row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
- row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
- row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
- row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307],
- row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315],
- row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323],
- row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331],
- row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339],
- row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347],
- row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355],
- row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363],
- row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371],
- row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379],
- row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387],
- row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395],
- row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403],
- row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411],
- row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419],
- row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427],
- row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435],
- row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443],
- row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451],
- row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459],
- row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467],
- row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475],
- row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483],
- row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491],
- row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499],
- row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507],
- row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515],
- row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523],
- row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531],
- row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539],
- row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547],
- row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555],
- row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563],
- row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571],
- row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579],
- row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587],
- row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595],
- row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603],
- row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611],
- row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619],
- row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627],
- row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635],
- row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643],
- row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651],
- row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659],
- row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667],
- row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675],
- row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683],
- row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691],
- row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699],
- row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707],
- row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715],
- row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723],
- row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731],
- row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739],
- row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747],
- row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755],
- row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763],
- row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771],
- row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779],
- row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787],
- row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795],
- row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803],
- row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811],
- row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819],
- row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827],
- row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835],
- row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843],
- row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851],
- row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859],
- row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867],
- row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875],
- row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883],
- row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891],
- row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899],
- row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907],
- row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915],
- row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923],
- row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931],
- row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939],
- row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947],
- row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955],
- row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963],
- row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971],
- row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979],
- row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987],
- row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995],
- row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002],
- row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009],
- row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016],
- row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023],
- row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030],
- row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037],
- row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044],
- row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051],
- row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058],
- row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065],
- row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072],
- row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079],
- row[1080], row[1081], row[1082]))
-
- counter += 1
-
- description = 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.' \
- ' This parser includes the largest set of decoded data based on testing and research' \
- ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the' \
- ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md' \
- ' TimelineExplorer to view, search and filter the results.'
- report = ArtifactHtmlReport('Ph96.2-iOS16_Ref_for_Asset_Analysis-SyndPL')
- report.start_artifact_report(report_folder, 'Ph96.2-iOS16_Ref_for_Asset_Analysis-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Added Date-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset Complete-2',
- 'zAsset-zPK-4QueryStart-3',
- 'zAddAssetAttr-zPK-4QueryStart-4',
- 'zAsset-UUID = store.cloudphotodb-4QueryStart-5',
- 'zAddAssetAttr-Master Fingerprint-4TableStart-6',
- 'zIntResou-Fingerprint-4TableStart-7',
- 'zAsset-Bundle Scope-8',
- 'zAsset-Syndication State-9',
- 'zAsset-Cloud is My Asset-10',
- 'zAsset-Cloud is deletable-Asset-11',
- 'zAsset-Cloud_Local_State-12',
- 'zAsset-Visibility State-13',
- 'zExtAttr-Camera Make-14',
- 'zExtAttr-Camera Model-15',
- 'zExtAttr-Lens Model-16',
- 'zExtAttr-Flash Fired-17',
- 'zExtAttr-Focal Lenght-18',
- 'zExtAttr-Focal Lenth in 35MM-19',
- 'zExtAttr-Digital Zoom Ratio-20',
- 'zAsset-Derived Camera Capture Device-21',
- 'zAddAssetAttr-Camera Captured Device-22',
- 'zAddAssetAttr-Imported by-23',
- 'zCldMast-Imported By-24',
- 'zAddAssetAttr.Imported by Bundle Identifier-25',
- 'zAddAssetAttr-Imported By Display Name-26',
- 'zCldMast-Imported by Bundle ID-27',
- 'zCldMast-Imported by Display Name-28',
- 'zAsset-Saved Asset Type-29',
- 'zAsset-Directory-Path-30',
- 'zAsset-Filename-31',
- 'zAddAssetAttr- Original Filename-32',
- 'zCldMast- Original Filename-33',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-34',
- 'zAsset-Active Library Scope Participation State -4QueryStart-35',
- 'zAsset-Library Scope Share State- StillTesting -4QueryStart-36',
- 'zShare-Cloud Photo Count-SPL -4QueryStart-37',
- 'zShare-Cloud Video Count-SPL -4QueryStart-38',
- 'zAddAssetAttr-Date Created Source-39',
- 'zAsset-Date Created-40',
- 'zCldMast-Creation Date-41',
- 'zIntResou-CldMst Date Created-42',
- 'zAddAssetAttr-Time Zone Name-43',
- 'zAddAssetAttr-Time Zone Offset-44',
- 'zAddAssetAttr-Inferred Time Zone Offset-45',
- 'zAddAssetAttr-EXIF-String-46',
- 'zAsset-Modification Date-47',
- 'zAsset-Last Shared Date-48',
- 'zCldMast-Cloud Local State-49',
- 'zCldMast-Import Date-50',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-51',
- 'zAddAssetAttr-Import Session ID-4QueryStart-52',
- 'zAddAssetAttr-Alt Import Image Date-53',
- 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-54',
- 'zAsset-Cloud Batch Publish Date-55',
- 'zAsset-Cloud Server Publish Date-56',
- 'zAsset-Cloud Download Requests-57',
- 'zAsset-Cloud Batch ID-58',
- 'zAddAssetAttr-Upload Attempts-59',
- 'zAsset-Latitude-60',
- 'zExtAttr-Latitude-61',
- 'zAsset-Longitude-62',
- 'zExtAttr-Longitude-63',
- 'zAddAssetAttr-GPS Horizontal Accuracy-64',
- 'zAddAssetAttr-Location Hash-65',
- 'zAddAssetAttr-Shifted Location Valid-66',
- 'zAddAssetAttr-Shifted Location Data-67',
- 'zAddAssetAttr-Reverse Location Is Valid-68',
- 'zAddAssetAttr-Reverse Location Data-69',
- 'ParentzGenAlbum-UUID-4QueryStart-70',
- 'zGenAlbum-UUID-4QueryStart-71',
- 'SWYConverszGenAlbum-UUID-4QueryStart-72',
- 'ParentzGenAlbum-Cloud GUID-4QueryStart-73',
- 'zGenAlbum-Cloud GUID-4QueryStart-74',
- 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-75',
- 'zCldShareAlbumInvRec-Album GUID-4QueryStart-76',
- 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-77',
- 'zGenAlbum-Project Render UUID-4QueryStart-78',
- 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-79',
- 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-80',
- 'zGenAlbum-Cloud_Local_State-4QueryStart-81',
- 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-82',
- 'ParentzGenAlbum- Creation Date- 4QueryStart-83',
- 'zGenAlbum- Creation Date- 4QueryStart-84',
- 'SWYConverszGenAlbum- Creation Date- 4QueryStart-85',
- 'zGenAlbum- Cloud Creation Date- 4QueryStart-86',
- 'SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-87',
- 'zGenAlbum- Start Date- 4QueryStart-88',
- 'SWYConverszGenAlbum- Start Date- 4QueryStart-89',
- 'zGenAlbum- End Date- 4QueryStart-90',
- 'SWYConverszGenAlbum- End Date- 4QueryStart-91',
- 'zGenAlbum-Cloud Subscription Date- 4QueryStart-92',
- 'SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-93',
- 'ParentzGenAlbum- Title- 4QueryStart-94',
- 'zGenAlbum- Title-User&System Applied- 4QueryStart-95',
- 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-96',
- 'zGenAlbum-Import Session ID-SWY- 4QueryStart-97',
- 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-98',
- 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-99',
- 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-100',
- 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-101',
- 'SWYConverszGenAlbum- Syndicate-4QueryStart-102',
- 'zGenAlbum-zENT- Entity- 4QueryStart-103',
- 'ParentzGenAlbum- Kind- 4QueryStart-104',
- 'zGenAlbum-Album Kind- 4QueryStart-105',
- 'SWYConverszGenAlbum-Album Kind- 4QueryStart-106',
- 'AAAzCldMastMedData-zOPT-107',
- 'zAddAssetAttr-Media Metadata Type-108',
- 'AAAzCldMastMedData-Data-109',
- 'CldMasterzCldMastMedData-zOPT-110',
- 'zCldMast-Media Metadata Type-111',
- 'CMzCldMastMedData-Data-112',
- 'zAsset-Search Index Rebuild State-113',
- 'zAddAssetAttr-Syndication History-114',
- 'zMedAnlyAstAttr-Syndication Processing Version-115',
- 'zMedAnlyAstAttr-Syndication Processing Value-116',
- 'zAsset-Orientation-117',
- 'zAddAssetAttr-Original Orientation-118',
- 'zAsset-Kind-119',
- 'zAsset-Kind-Sub-Type-120',
- 'zAddAssetAttr-Cloud Kind Sub Type-121',
- 'zAsset-Playback Style-122',
- 'zAsset-Playback Variation-123',
- 'zAsset-Video Duration-124',
- 'zExtAttr-Duration-125',
- 'zAsset-Video CP Duration-126',
- 'zAddAssetAttr-Video CP Duration Time Scale-127',
- 'zAsset-Video CP Visibility State-128',
- 'zAddAssetAttr-Video CP Display Value-129',
- 'zAddAssetAttr-Video CP Display Time Scale-130',
- 'zIntResou-Datastore Class ID-131',
- 'zAsset-Cloud Placeholder Kind-132',
- 'zIntResou-Local Availability-133',
- 'zIntResou-Local Availability Target-134',
- 'zIntResou-Cloud Local State-135',
- 'zIntResou-Remote Availability-136',
- 'zIntResou-Remote Availability Target-137',
- 'zIntResou-Transient Cloud Master-138',
- 'zIntResou-Side Car Index-139',
- 'zIntResou- File ID-140',
- 'zIntResou-Version-141',
- 'zAddAssetAttr- Original-File-Size-142',
- 'zIntResou-Resource Type-143',
- 'zIntResou-Datastore Sub-Type-144',
- 'zIntResou-Cloud Source Type-145',
- 'zIntResou-Data Length-146',
- 'zIntResou-Recipe ID-147',
- 'zIntResou-Cloud Last Prefetch Date-148',
- 'zIntResou-Cloud Prefetch Count-149',
- 'zIntResou- Cloud-Last-OnDemand Download-Date-150',
- 'zIntResou-UniformTypeID_UTI_Conformance_Hint-151',
- 'zIntResou-Compact-UTI-152',
- 'zAsset-Uniform Type ID-153',
- 'zAsset-Original Color Space-154',
- 'zCldMast-Uniform_Type_ID-155',
- 'zCldMast-Full Size JPEG Source-156',
- 'zAsset-HDR Gain-157',
- 'zAsset-zHDR_Type-158',
- 'zExtAttr-Codec-159',
- 'zIntResou-Codec Four Char Code Name-160',
- 'zCldMast-Codec Name-161',
- 'zCldMast-Video Frame Rate-162',
- 'zCldMast-Placeholder State-163',
- 'zAsset-Depth_Type-164',
- 'zAsset-Avalanche UUID-4TableStart-165',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-166',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-167',
- 'zAddAssetAttr-Cloud Recovery State-168',
- 'zAddAssetAttr-Cloud State Recovery Attempts Count-169',
- 'zAsset-Deferred Processing Needed-170',
- 'zAsset-Video Deferred Processing Needed-171',
- 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-172',
- 'zAddAssetAttr-Deferred Processing Candidate Options-173',
- 'zAsset-Has Adjustments-Camera-Effects-Filters-174',
- 'zUnmAdj-UUID-4TableStart-175',
- 'zAsset-Adjustment Timestamp-176',
- 'zUnmAdj-Adjustment Timestamp-177',
- 'zAddAssetAttr-Editor Bundle ID-178',
- 'zUnmAdj-Editor Localized Name-179',
- 'zUnmAdj-Adjustment Format ID-180',
- 'zAddAssetAttr-Montage-181',
- 'zUnmAdj-Adjustment Render Types-182',
- 'zUnmAdj-Adjustment Format Version-183',
- 'zUnmAdj-Adjustment Base Image Format-184',
- 'zAsset-Favorite-185',
- 'zAsset-Hidden-186',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-187',
- 'zAsset-Trashed Date-188',
- 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-189',
- 'zAsset-Delete-Reason-190',
- 'zIntResou-Trash State-191',
- 'zIntResou-Trashed Date-192',
- 'zAsset-Cloud Delete State-193',
- 'zIntResou-Cloud Delete State-194',
- 'zAddAssetAttr-PTP Trashed State-195',
- 'zIntResou-PTP Trashed State-196',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-197',
- 'zMedAnlyAstAttr-Media Analysis Timestamp-198',
- 'zAsset-Analysis State Modificaion Date-199',
- 'zAddAssetAttr- Pending View Count-200',
- 'zAddAssetAttr- View Count-201',
- 'zAddAssetAttr- Pending Play Count-202',
- 'zAddAssetAttr- Play Count-203',
- 'zAddAssetAttr- Pending Share Count-204',
- 'zAddAssetAttr- Share Count-205',
- 'zAddAssetAttr-Allowed for Analysis-206',
- 'zAddAssetAttr-Scene Analysis Version-207',
- 'zAddAssetAttr-Scene Analysis is From Preview-208',
- 'zAddAssetAttr-Scene Analysis Timestamp-209',
- 'zAsset-Duplication Asset Visibility State-210',
- 'zAddAssetAttr-Destination Asset Copy State-211',
- 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-212',
- 'zAddAssetAttr-Source Asset for Duplication Scope ID-213',
- 'zCldMast-Source Master For Duplication Scope ID-214',
- 'zAddAssetAttr-Source Asset For Duplication ID-215',
- 'zCldMast-Source Master for Duplication ID-216',
- 'zAddAssetAttr-Variation Suggestions States-217',
- 'zAsset-High Frame Rate State-218',
- 'zAsset-Video Key Frame Time Scale-219',
- 'zAsset-Video Key Frame Value-220',
- 'zExtAttr-ISO-221',
- 'zExtAttr-Metering Mode-222',
- 'zExtAttr-Sample Rate-223',
- 'zExtAttr-Track Format-224',
- 'zExtAttr-White Balance-225',
- 'zExtAttr-Aperture-226',
- 'zExtAttr-BitRate-227',
- 'zExtAttr-Exposure Bias-228',
- 'zExtAttr-Frames Per Second-229',
- 'zExtAttr-Shutter Speed-230',
- 'zExtAttr-Slush Scene Bias-231',
- 'zExtAttr-Slush Version-232',
- 'zExtAttr-Slush Preset-233',
- 'zExtAttr-Slush Warm Bias-234',
- 'zAsset-Height-235',
- 'zAddAssetAttr-Original Height-236',
- 'zIntResou-Unoriented Height-237',
- 'zAsset-Width-238',
- 'zAddAssetAttr-Original Width-239',
- 'zIntResou-Unoriented Width-240',
- 'zShare-Thumbnail Image Data-241',
- 'SPLzShare-Thumbnail Image Data-242',
- 'zAsset-Thumbnail Index-243',
- 'zAddAssetAttr-Embedded Thumbnail Height-244',
- 'zAddAssetAttr-Embedded Thumbnail Length-245',
- 'zAddAssetAttr-Embedded Thumbnail Offset-246',
- 'zAddAssetAttr-Embedded Thumbnail Width-247',
- 'zAsset-Packed Acceptable Crop Rect-248',
- 'zAsset-Packed Badge Attributes-249',
- 'zAsset-Packed Preferred Crop Rect-250',
- 'zAsset-Curation Score-251',
- 'zAsset-Camera Processing Adjustment State-252',
- 'zAsset-Depth Type-253',
- 'zAsset-Is Magic Carpet-QuicktimeMOVfile-254',
- 'zAddAssetAttr-Orig Resource Choice-255',
- 'zAddAssetAttr-Spatial Over Capture Group ID-256',
- 'zAddAssetAttr-Place Annotation Data-257',
- 'zAddAssetAttr-Distance Identity-258',
- 'zAddAssetAttr-Edited IPTC Attributes-259',
- 'zAssetDes-Long Description-260',
- 'zAddAssetAttr-Asset Description-261',
- 'zAddAssetAttr-Title-Comments via Cloud Website-262',
- 'zAddAssetAttr-Accessibility Description-263',
- 'zAddAssetAttr-Photo Stream Tag ID-264',
- 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-265',
- 'zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-266',
- 'zCldFeedEnt-Entry Date-267',
- 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-268',
- 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-269',
- 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-270',
- 'zCldFeedEnt-Entry Priority Number-271',
- 'zCldFeedEnt-Entry Type Number-272',
- 'zCldSharedComment-Cloud GUID-4TableStart-273',
- 'zCldSharedComment-Date-274',
- 'zCldSharedComment-Comment Client Date-275',
- 'zAsset-Cloud Last Viewed Comment Date-276',
- 'zCldSharedComment-Type-277',
- 'zCldSharedComment-Comment Text-278',
- 'zCldSharedComment-Commenter Hashed Person ID-279',
- 'zCldSharedComment-Batch Comment-280',
- 'zCldSharedComment-Is a Caption-281',
- 'zAsset-Cloud Has Comments by Me-282',
- 'zCldSharedComment-Is My Comment-283',
- 'zCldSharedComment-Is Deletable-284',
- 'zAsset-Cloud Has Comments Conversation-285',
- 'zAsset-Cloud Has Unseen Comments-286',
- 'zCldSharedComment-Liked-287',
- 'zAddAssetAttr-Share Type-288',
- 'zAsset-Library Scope Share State- StillTesting-289',
- 'zAsset-Active Library Scope Participation State-290',
- 'zAddAssetAttr-Library Scope Asset Contributors To Update-291',
- 'zShare-UUID-CMM-4TableStart-292',
- 'SPLzShare-UUID-SPL-4TableStart-293',
- 'zShare-zENT-CMM-294',
- 'SPLzShare-zENT-SPL-295',
- 'zSharePartic-z54SHARE-296',
- 'SPLzSharePartic-z54SHARE-297',
- 'zShare-Status-CMM-298',
- 'SPLzShare-Status-SPL-299',
- 'zShare-Scope Type-CMM-300',
- 'SPLzShare-Scope Type-SPL-301',
- 'zShare-Local Publish State-CMM-302',
- 'SPLzShare-Local Publish State-SPL-303',
- 'zShare-Public Permission-CMM-304',
- 'SPLzShare-Public Permission-SPL-305',
- 'zShare-Originating Scope ID-CMM-306',
- 'SPLzShare-Originating Scope ID-SPL-307',
- 'zShare-Scope ID-CMM-308',
- 'SPLzShare-Scope ID-SPL-309',
- 'zShare-Title-CMM-310',
- 'SPLzShare-Title-SPL-311',
- 'zShare-Share URL-CMM-312',
- 'SPLzShare-Share URL-SPL-313',
- 'zShare-Creation Date-CMM-314',
- 'SPLzShare-Creation Date-SPL-315',
- 'zShare-Start Date-CMM-316',
- 'SPLzShare-Start Date-SPL-317',
- 'zShare-End Date-CMM-318',
- 'SPLzShare-End Date-SPL-319',
- 'zShare-Expiry Date-CMM-320',
- 'SPLzShare-Expiry Date-SPL-321',
- 'zShare-Cloud Item Count-CMM-322',
- 'SPLzShare-Cloud Item Count-SPL-323',
- 'zShare-Asset Count-CMM-324',
- 'SPLzShare-Asset Count-SPL-325',
- 'zShare-Cloud Photo Count-CMM-326',
- 'SPLzShare-Cloud Photo Count-SPL-327',
- 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-328',
- 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-329',
- 'zShare-Photos Count-CMM-330',
- 'SPLzShare-Photos Count-CMM-SPL-331',
- 'zShare-Uploaded Photos Count-CMM-332',
- 'SPLzShare-Uploaded Photos Count-SPL-333',
- 'zShare-Cloud Video Count-CMM-334',
- 'SPLzShare-Cloud Video Count-SPL-335',
- 'zShare-Videos Count-CMM-336',
- 'SPLzShare-Videos Count-SPL-337',
- 'zShare-Uploaded Videos Count-CMM-338',
- 'SPLzShare-Uploaded Videos Count-SPL-339',
- 'zShare-Force Sync Attempted-CMM-340',
- 'SPLzShare-Force Sync Attempted-SPL-341',
- 'zShare-Cloud Local State-CMM-342',
- 'SPLzShare-Cloud Local State-SPL-343',
- 'zShare-Scope Syncing State-CMM-344',
- 'SPLzShare-Scope Syncing State-SPL-345',
- 'zShare-Auto Share Policy-CMM-346',
- 'SPLzShare-Auto Share Policy-SPL-347',
- 'zShare-Should Notify On Upload Completion-CMM-348',
- 'SPLzShare-Should Notify On Upload Completion-SPL-349',
- 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-350',
- 'zShare-Trashed State-CMM-351',
- 'SPLzShare-Trashed State-SPL-352',
- 'zShare-Cloud Delete State-CMM-353',
- 'SPLzShare-Cloud Delete State-SPL-354',
- 'zShare-Trashed Date-CMM-355',
- 'SPLzShare-Trashed Date-SPL-356',
- 'zShare-LastParticipant Asset Trash Notification Date-CMM-357',
- 'SPLzShare-LastParticipant Asset Trash Notification Date-SPL-358',
- 'zShare-Last Participant Asset Trash Notification View Date-CMM-359',
- 'SPLzShare-Last Participant Asset Trash Notification View Date-SPL-360',
- 'zShare-Exit Source-CMM-361',
- 'SPLzShare-Exit Source-SPL-362',
- 'zShare-SPL_Exit State-CMM-363',
- 'SPLzShare-SPL_Exit State-SPL-364',
- 'zShare-Exit Type-CMM-365',
- 'SPLzShare-Exit Type-SPL-366',
- 'zShare-Should Ignor Budgets-CMM-367',
- 'SPLzShare-Should Ignor Budgets-SPL-368',
- 'zShare-Preview State-CMM-369',
- 'SPLzShare-Preview State-SPL-370',
- 'zShare-Preview Data-CMM-371',
- 'SPLzShare-Preview Data-SPL-372',
- 'zShare-Rules-CMM-373',
- 'SPLzShare-Rules-SPL-374',
- 'zShare-Thumbnail Image Data-CMM-375',
- 'SPLzShare-Thumbnail Image Data-SPL-376',
- 'zShare-Participant Cloud Update State-CMM-377',
- 'SPLzShare-Participant Cloud Update State-SPL-378',
- 'zSharePartic-UUID-4TableStart-379',
- 'SPLzSharePartic-UUID-4TableStart-380',
- 'zSharePartic-Acceptance Status-381',
- 'SPLzSharePartic-Acceptance Status-382',
- 'zSharePartic-Is Current User-383',
- 'SPLzSharePartic-Is Current User-384',
- 'zSharePartic-Role-385',
- 'SPLzSharePartic-Role-386',
- 'zSharePartic-Premission-387',
- 'SPLzSharePartic-Premission-388',
- 'zSharePartic-Participant ID-389',
- 'SPLzSharePartic-Participant ID-390',
- 'zSharePartic-User ID-391',
- 'SPLzSharePartic-User ID-392',
- 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-393',
- 'SPLzSharePartic-zPK-4TableStart-394',
- 'zSharePartic-zPK-4TableStart-395',
- 'zSharePartic-Email Address-396',
- 'SPLzSharePartic-Email Address-397',
- 'zSharePartic-Phone Number-398',
- 'SPLzSharePartic-Phone Number-399',
- 'zSharePartic-Exit State-400',
- 'SPLzSharePartic-Exit State-401',
- 'ParentzGenAlbum-UUID-4TableStart-402',
- 'zGenAlbum-UUID-4TableStart-403',
- 'SWYConverszGenAlbum-UUID-4TableStart-404',
- 'ParentzGenAlbum-Cloud GUID-4TableStart-405',
- 'zGenAlbum-Cloud GUID-4TableStart-406',
- 'SWYConverszGenAlbum-Cloud GUID-4TableStart-407',
- 'zCldShareAlbumInvRec-Album GUID-4TableStart-408',
- 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-409',
- 'zGenAlbum-Project Render UUID-4TableStart-410',
- 'SWYConverszGenAlbum-Project Render UUID-4TableStart-411',
- 'zAlbumList-Needs Reordering Number-412',
- 'zGenAlbum-zENT- Entity-413',
- 'ParentzGenAlbum-Kind-414',
- 'zGenAlbum-Album Kind-415',
- 'SWYConverszGenAlbum-Album Kind-416',
- 'ParentzGenAlbum-Cloud-Local-State-417',
- 'zGenAlbum-Cloud_Local_State-418',
- 'SWYConverszGenAlbum-Cloud_Local_State-419',
- 'ParentzGenAlbum- Title-420',
- 'zGenAlbum- Title-User&System Applied-421',
- 'SWYConverszGenAlbum- Title -User&System Applied-422',
- 'zGenAlbum-Import Session ID-SWY-423',
- 'zAsset- Conversation= zGenAlbum_zPK-424',
- 'SWYConverszGenAlbum- Import Session ID-SWY-425',
- 'zGenAlbum-Imported by Bundle Identifier-426',
- 'SWYzGenAlbum-Imported by Bundle Identifier-427',
- 'SWYConverszGenAlbum- Syndicate-428',
- 'ParentzGenAlbum-Creation Date-429',
- 'zGenAlbum-Creation Date-430',
- 'SWYConverszGenAlbum-Creation Date-431',
- 'zGenAlbum-Cloud Creation Date-432',
- 'SWYConverszGenAlbum-Cloud Creation Date-433',
- 'zGenAlbum-Start Date-434',
- 'SWYConverszGenAlbum-Start Date-435',
- 'zGenAlbum-End Date-436',
- 'SWYConverszGenAlbum-End Date-437',
- 'zGenAlbum-Cloud Subscription Date-438',
- 'SWYConverszGenAlbum-Cloud Subscription Date-439',
- 'ParentzGenAlbum-Pending Items Count-440',
- 'zGenAlbum-Pending Items Count-441',
- 'SWYConverszGenAlbum-Pending Items Count-442',
- 'ParentzGenAlbum-Pending Items Type-443',
- 'zGenAlbum-Pending Items Type-444',
- 'SWYConverszGenAlbum-Pending Items Type-445',
- 'zGenAlbum- Cached Photos Count-446',
- 'SWYConverszGenAlbum- Cached Photos Count-447',
- 'zGenAlbum- Cached Videos Count-448',
- 'SWYConverszGenAlbum- Cached Videos Count-449',
- 'zGenAlbum- Cached Count-450',
- 'SWYConverszGenAlbum- Cached Count-451',
- 'ParentzGenAlbum-Sync Event Order Key-452',
- 'zGenAlbum-Sync Event Order Key-453',
- 'SWYConverszGenAlbum-Sync Event Order Key-454',
- 'zGenAlbum-Has Unseen Content-455',
- 'SWYConverszGenAlbum-Has Unseen Content-456',
- 'zGenAlbum-Unseen Asset Count-457',
- 'SWYConverszGenAlbum-Unseen Asset Count-458',
- 'zGenAlbum-is Owned-459',
- 'SWYConverszGenAlbum-is Owned-460',
- 'zGenAlbum-Cloud Relationship State-461',
- 'SWYConverszGenAlbum-Cloud Relationship State-462',
- 'zGenAlbum-Cloud Relationship State Local-463',
- 'SWYConverszGenAlbum-Cloud Relationship State Local-464',
- 'zGenAlbum-Cloud Owner Mail Key-465',
- 'SWYConverszGenAlbum-Cloud Owner Mail Key-466',
- 'zGenAlbum-Cloud Owner Frist Name-467',
- 'SWYConverszGenAlbum-Cloud Owner Frist Name-468',
- 'zGenAlbum-Cloud Owner Last Name-469',
- 'SWYConverszGenAlbum-Cloud Owner Last Name-470',
- 'zGenAlbum-Cloud Owner Full Name-471',
- 'SWYConverszGenAlbum-Cloud Owner Full Name-472',
- 'zGenAlbum-Cloud Person ID-473',
- 'SWYConverszGenAlbum-Cloud Person ID-474',
- 'zAsset-Cloud Owner Hashed Person ID-475',
- 'zGenAlbum-Cloud Owner Hashed Person ID-476',
- 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-477',
- 'zGenAlbum-Local Cloud Multi-Contributors Enabled-478',
- 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-479',
- 'zGenAlbum-Cloud Multi-Contributors Enabled-480',
- 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-481',
- 'zGenAlbum-Cloud Album Sub Type-482',
- 'SWYConverszGenAlbum-Cloud Album Sub Type-483',
- 'zGenAlbum-Cloud Contribution Date-484',
- 'SWYConverszGenAlbum-Cloud Contribution Date-485',
- 'zGenAlbum-Cloud Last Interesting Change Date-486',
- 'SWYConverszGenAlbum-Cloud Last Interesting Change Date-487',
- 'zGenAlbum-Cloud Notification Enabled-488',
- 'SWYConverszGenAlbum-Cloud Notification Enabled-489',
- 'ParentzGenAlbum-Pinned-490',
- 'zGenAlbum-Pinned-491',
- 'SWYConverszGenAlbum-Pinned-492',
- 'ParentzGenAlbum-Custom Sort Key-493',
- 'zGenAlbum-Custom Sort Key-494',
- 'SWYConverszGenAlbum-Custom Sort Key-495',
- 'ParentzGenAlbum-Custom Sort Ascending-496',
- 'zGenAlbum-Custom Sort Ascending-497',
- 'SWYConverszGenAlbum-Custom Sort Ascending-498',
- 'ParentzGenAlbum-Is Prototype-499',
- 'zGenAlbum-Is Prototype-500',
- 'SWYConverszGenAlbum-Is Prototype-501',
- 'ParentzGenAlbum-Project Document Type-502',
- 'zGenAlbum-Project Document Type-503',
- 'SWYConverszGenAlbum-Project Document Type-504',
- 'ParentzGenAlbum-Custom Query Type-505',
- 'zGenAlbum-Custom Query Type-506',
- 'SWYConverszGenAlbum-Custom Query Type-507',
- 'ParentzGenAlbum-Trashed State-508',
- 'ParentzGenAlbum-Trash Date-509',
- 'zGenAlbum-Trashed State-510',
- 'zGenAlbum-Trash Date-511',
- 'SWYConverszGenAlbum-Trashed State-512',
- 'SWYConverszGenAlbum-Trash Date-513',
- 'ParentzGenAlbum-Cloud Delete State-514',
- 'zGenAlbum-Cloud Delete State-515',
- 'SWYConverszGenAlbum-Cloud Delete State-516',
- 'zGenAlbum-Cloud Owner Whitelisted-517',
- 'SWYConverszGenAlbum-Cloud Owner Whitelisted-518',
- 'zGenAlbum-Cloud Local Public URL Enabled-519',
- 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-520',
- 'zGenAlbum-Cloud Public URL Enabled-521',
- 'zGenAlbum-Public URL-522',
- 'SWYConverszGenAlbum-Cloud Public URL Enabled-523',
- 'SWYConverszGenAlbum-Public URL-524',
- 'zGenAlbum-Key Asset Face Thumb Index-525',
- 'SWYConverszGenAlbum-Key Asset Face Thumb Index-526',
- 'zGenAlbum-Project Text Extension ID-527',
- 'SWYConverszGenAlbum-Project Text Extension ID-528',
- 'zGenAlbum-User Query Data-529',
- 'SWYConverszGenAlbum-User Query Data-530',
- 'zGenAlbum-Custom Query Parameters-531',
- 'SWYConverszGenAlbum-Custom Query Parameters-532',
- 'zGenAlbum-Project Data-533',
- 'SWYConverszGenAlbum-Project Data-534',
- 'zGenAlbum-Search Index Rebuild State-535',
- 'SWYConverszGenAlbum-Search Index Rebuild State-536',
- 'zGenAlbum-Duplicate Type-537',
- 'SWYConverszGenAlbum-Duplicate Type-538',
- 'zGenAlbum-Privacy State-539',
- 'SWYConverszGenAlbum-Privacy State-540',
- 'zCldShareAlbumInvRec-zUUID-4TableStart-541',
- 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-542',
- 'zCldShareAlbumInvRec-Invitation State Local-543',
- 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-544',
- 'zCldShareAlbumInvRec-Subscription Date-545',
- 'zCldShareAlbumInvRec-Invitee First Name-546',
- 'zCldShareAlbumInvRec-Invitee Last Name-547',
- 'zCldShareAlbumInvRec-Invitee Full Name-548',
- 'zCldShareAlbumInvRec-Invitee Hashed Person ID-549',
- 'zCldShareAlbumInvRec-Invitee Email Key-550',
- 'zGenAlbum-Key Asset Face ID-551',
- 'zFaceCrop-Face Area Points-552',
- 'zAsset-Face Adjustment Version-553',
- 'zAddAssetAttr-Face Analysis Version-554',
- 'zDetFace-Asset Visible-555',
- 'zPerson-Face Count-556',
- 'zDetFace-Face Crop-557',
- 'zDetFace-Face Algorithm Version-558',
- 'zDetFace-Adjustment Version-559',
- 'zDetFace-UUID-4TableStart-560',
- 'zPerson-Person UUID-4TableStart-561',
- 'zDetFace-Confirmed Face Crop Generation State-562',
- 'zDetFace-Manual-563',
- 'zDetFace-Detection Type-564',
- 'zPerson-Detection Type-565',
- 'zDetFace-VIP Model Type-566',
- 'zDetFace-Name Source-567',
- 'zDetFace-Cloud Name Source-568',
- 'zPerson-Merge Candidate Confidence-569',
- 'zPerson-Person URI-570',
- 'zPerson-Display Name-571',
- 'zPerson-Full Name-572',
- 'zPerson-Cloud Verified Type-573',
- 'zFaceCrop-State-574',
- 'zFaceCrop-Type-575',
- 'zFaceCrop-UUID-4TableStart-576',
- 'zPerson-Type-577',
- 'zPerson-Verified Type-578',
- 'zPerson-Gender Type-579',
- 'zDetFace-Gender Type-580',
- 'zDetFace-Center X-581',
- 'zDetFace-Center Y-582',
- 'zPerson-Age Type Estimate-583',
- 'zDetFace-Age Type Estimate-584',
- 'zDetFace-Ethnicity Type-585',
- 'zDetFace-Skin Tone Type-586',
- 'zDetFace-Hair Type-587',
- 'zDetFace-Hair Color Type-588',
- 'zDetFace-Head Gear Type-589',
- 'zDetFace-Facial Hair Type-590',
- 'zDetFace-Has Face Mask-591',
- 'zDetFace-Pose Type-592',
- 'zDetFace-Face Expression Type-593',
- 'zDetFace-Has Smile-594',
- 'zDetFace-Smile Type-595',
- 'zDetFace-Lip Makeup Type-596',
- 'zDetFace-Eyes State-597',
- 'zDetFace-Is Left Eye Closed-598',
- 'zDetFace-Is Right Eye Closed-599',
- 'zDetFace-Gaze Center X-600',
- 'zDetFace-Gaze Center Y-601',
- 'zDetFace-Face Gaze Type-602',
- 'zDetFace-Eye Glasses Type-603',
- 'zDetFace-Eye Makeup Type-604',
- 'zDetFace-Cluster Squence Number Key-605',
- 'zDetFace-Grouping ID-606',
- 'zDetFace-Master ID-607',
- 'zDetFace-Quality-608',
- 'zDetFace-Quality Measure-609',
- 'zDetFace-Source Height-610',
- 'zDetFace-Source Width-611',
- 'zDetFace-Hidden-Asset Hidden-612',
- 'zDetFace-In Trash-Recently Deleted-613',
- 'zDetFace-Cloud Local State-614',
- 'zDetFace-Training Type-615',
- 'zDetFace.Pose Yaw-616',
- 'zDetFace-Body Center X-617',
- 'zDetFace-Body Center Y-618',
- 'zDetFace-Body Height-619',
- 'zDetFace-Body Width-620',
- 'zDetFace-Roll-621',
- 'zDetFace-Size-622',
- 'zDetFace-Cluster Squence Number-623',
- 'zDetFace-Blur Score-624',
- 'zDetFacePrint-Face Print Version-625',
- 'zMedAnlyAstAttr-Face Count-626',
- 'zDetFaceGroup-UUID-4TableStart-627',
- 'zDetFaceGroup-Person Builder State-628',
- 'zDetFaceGroup-UnNamed Face Count-629',
- 'zPerson-In Person Naming Model-630',
- 'zPerson-Key Face Pick Source Key-631',
- 'zPerson-Manual Order Key-632',
- 'zPerson-Question Type-633',
- 'zPerson-Suggested For Client Type-634',
- 'zPerson-Merge Target Person-635',
- 'zPerson-Cloud Local State-636',
- 'zFaceCrop-Cloud Local State-637',
- 'zFaceCrop-Cloud Type-638',
- 'zPerson-Cloud Delete State-639',
- 'zFaceCrop-Cloud Delete State-640',
- 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-641',
- 'zAsset-Highlight Visibility Score-642',
- 'zMemory-UUID-4TableStart-643',
- 'zMemory-AssetListPredicte-644',
- 'zMemory-Score-645',
- 'zMemory-SubTitle-646',
- 'zMemory-Title-647',
- 'zMemory-Category-648',
- 'zMemory-SubCategory-649',
- 'zMemory-Creation Date-650',
- 'zMemory-Last Enrichment Date-651',
- 'zMemory-User Action Options-652',
- 'zMemory-Favorite Memory-653',
- 'zMemory-View Count-654',
- 'zMemory-Play Count-655',
- 'zMemory-Rejected-656',
- 'zMemory-Share Count-657',
- 'zMemory-Sharing Composition-658',
- 'zMemory-Last Movie Play Date-659',
- 'zMemory-Last Viewed Date-660',
- 'zMemory-Pending Play Count Memory-661',
- 'zMemory-Pending Share Count Memory-662',
- 'zMemory-Pending View Count Memory-663',
- 'zMemory-Pending State-664',
- 'zMemory-Featured State-665',
- 'zMemory-Photos Graph Version-666',
- 'zMemory-Graph Memory Identifier-667',
- 'zMemory-Notification State-668',
- 'zMemory-Cloud Local State-669',
- 'zMemory-Cloud Delete State-670',
- 'zMemory-Story Color Grade Kind-671',
- 'zMemory-Story Serialized Title Category-672',
- 'zMemory-Syndicated Content State-673',
- 'zMemory-Search Index Rebuild State-674',
- 'zMemory-Black Listed Feature-675',
- 'zMoment-UUID-4TableStart-676',
- 'zMoment-Aggregation Score-677',
- 'zMoment-Start Date-678',
- 'zMoment-Representative Date-679',
- 'zMoment-Timezone Offset-680',
- 'zMoment-Modification Date-681',
- 'zMoment-End Date-682',
- 'zMoment-SubTitle-683',
- 'zMoment-Title-684',
- 'zMoment-Originator State-685',
- 'zMoment-Sharing Composition-686',
- 'zMoment-Cached Count Shared-687',
- 'zMoment-Processed Location-688',
- 'zMoment-Approx Latitude-689',
- 'zMoment-Approx Longitude-690',
- 'zMoment-GPS Horizontal Accuracy-691',
- 'zMoment-Cache Count-692',
- 'zMoment-Cached Photos Count-693',
- 'zMoment-Cached Videos Count-694',
- 'zMoment-Trashed State-695',
- 'SBKAzSugg-UUID-4TableStart-696',
- 'SBKAzSugg-Suggestion Context-697',
- 'SBKAzSugg-Sharing Composition-698',
- 'SBKAzSugg-Start Date-699',
- 'SBKAzSugg-State-700',
- 'SBKAzSugg-Featured State-701',
- 'SBKAzSugg-Notification State-702',
- 'SBKAzSugg-Creation Date-703',
- 'SBKAzSugg-End Date-704',
- 'SBKAzSugg-Activation Date-705',
- 'SBKAzSugg-Expunge Date-706',
- 'SBKAzSugg-Relevant Until Date-707',
- 'SBKAzSugg-Title-708',
- 'SBKAzSugg-Sub Title-709',
- 'SBKAzSugg-Cached Count-710',
- 'SBKAzSugg-Cahed Photos Count-711',
- 'SBKAzSugg-Cached Videos Count-712',
- 'SBKAzSugg-Type-713',
- 'SBKAzSugg-Sub Type-714',
- 'SBKAzSugg-Action Data-715',
- 'SBKAzSugg-Version-716',
- 'SBKAzSugg-Cloud Local State-717',
- 'SBKAzSugg-Cloud Delete State-718',
- 'SBRAzSugg-UUID-4TableStart-719',
- 'SBRAzSugg-Suggestion Context-720',
- 'SBRAzSugg-Sharing Composition-721',
- 'SBRAzSugg-Start Date-722',
- 'SBRAzSugg-State-723',
- 'SBRAzSugg-Featured State-724',
- 'SBRAzSugg-Notification State-725',
- 'SBRAzSugg-Creation Date-726',
- 'SBRAzSugg-End Date-727',
- 'SBRAzSugg-Activation Date-728',
- 'SBRAzSugg-Expunge Date-729',
- 'SBRAzSugg-Relevant Until Date-730',
- 'SBRAzSugg-Title-731',
- 'SBRAzSugg-Sub Title-732',
- 'SBRAzSugg-Cached Count-733',
- 'SBRAzSugg-Cahed Photos Count-734',
- 'SBRAzSugg-Cached Videos Count-735',
- 'SBRAzSugg-Type-736',
- 'SBRAzSugg-Sub Type-737',
- 'SBRAzSugg-Action Data-738',
- 'SBRAzSugg-Version-739',
- 'SBRAzSugg-Cloud Local State-740',
- 'SBRAzSugg-Cloud Delete State-741',
- 'zMedAnlyAstAttr-Media Analysis Version-742',
- 'zMedAnlyAstAttr-Audio Classification-743',
- 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-744',
- 'zMedAnlyAstAttr-Best Video Range Start Time Scale-745',
- 'zMedAnlyAstAttr-Best Video Range Duration Value-746',
- 'zMedAnlyAstAttr-Best Video Range Start Value-747',
- 'zMedAnlyAstAttr-Packed Best Playback Rect-748',
- 'zMedAnlyAstAttr-Activity Score-749',
- 'zMedAnlyAstAttr-Video Score-750',
- 'zMedAnlyAstAttr-Audio Score-751',
- 'zMedAnlyAstAttr-Wallpaper Score-752',
- 'zMedAnlyAstAttr-AutoPlay Suggestion Score-753',
- 'zMedAnlyAstAttr-Blurriness Score-754',
- 'zMedAnlyAstAttr-Exposure Score-755',
- 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-756',
- 'zMedAnlyAstAttr-Probable Rotation Direction-757',
- 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-758',
- 'zAssetAnalyState-Asset UUID-4TableStart-759',
- 'zAssetAnalyState-Analyisis State-760',
- 'zAssetAnalyState-Worker Flags-761',
- 'zAssetAnalyState-Worker Type-762',
- 'zAssetAnalyState-Ignore Until Date-763',
- 'zAssetAnalyState-Last Ignored Date-764',
- 'zAssetAnalyState-Sort Token-765',
- 'zMedAnlyAstAttr-Character Recognition Attr-766',
- 'zCharRecogAttr-Algorithm Version-767',
- 'zCharRecogAttr-Adjustment Version-768',
- 'zMedAnlyAstAttr-Visual Search Attributes-769',
- 'zVisualSearchAttr-Algorithm Version-770',
- 'zVisualSearchAttr-Adjustment Version-771',
- 'zAsset-Overall Aesthetic Score-772',
- 'zCompAssetAttr-Behavioral Score-773',
- 'zCompAssetAttr-Failure Score zCompAssetAttr-774',
- 'zCompAssetAttr-Harmonious Color Score-775',
- 'zCompAssetAttr-Immersiveness Score-776',
- 'zCompAssetAttr-Interaction Score-777',
- 'zCompAssetAttr-Intersting Subject Score-778',
- 'zCompAssetAttr-Intrusive Object Presence Score-779',
- 'zCompAssetAttr-Lively Color Score-780',
- 'zCompAssetAttr-Low Light-781',
- 'zCompAssetAttr-Noise Score-782',
- 'zCompAssetAttr-Pleasant Camera Tilt Score-783',
- 'zCompAssetAttr-Pleasant Composition Score-784',
- 'zCompAssetAttr-Pleasant Lighting Score-785',
- 'zCompAssetAttr-Pleasant Pattern Score-786',
- 'zCompAssetAttr-Pleasant Perspective Score-787',
- 'zCompAssetAttr-Pleasant Post Processing Score-788',
- 'zCompAssetAttr-Pleasant Reflection Score-789',
- 'zCompAssetAttrPleasant Symmetry Score-790',
- 'zCompAssetAttr-Sharply Focused Subject Score-791',
- 'zCompAssetAttr-Tastfully Blurred Score-792',
- 'zCompAssetAttr-Well Chosen Subject Score-793',
- 'zCompAssetAttr-Well Framed Subject Score-794',
- 'zCompAssetAttr-Well Timeed Shot Score-795',
- 'zCldRes-Asset UUID-4TableStart-796',
- 'zCldRes-Cloud Local State-797',
- 'zCldRes-File Size-798',
- 'zCldRes-Height-799',
- 'zCldRes-Is Available-800',
- 'zCldRes-Is Locally Available-801',
- 'zCldRes-Prefetch Count-802',
- 'zCldRes-Source Type-803',
- 'zCldRes-Type-804',
- 'zCldRes-Width-805',
- 'zCldRes-Date Created-806',
- 'zCldRes-Last OnDemand Download Date-807',
- 'zCldRes-Last Prefetch Date-808',
- 'zCldRes-Prunedat-809',
- 'zCldRes-File Path-810',
- 'zCldRes-Fingerprint-811',
- 'zCldRes-Item ID-812',
- 'zCldRes-UniID-813',
- 'zUserFeedback-UUID-4TableStart-814',
- 'zUserFeedback-Feature-815',
- 'zUserFeedback-Type-816',
- 'zUserFeedback-Last Modified Date-817',
- 'zUserFeedback-Context-818',
- 'zUserFeedback-Cloud Local State-819',
- 'zUserFeedback-Cloud Delete State-820',
- 'zAddAssetAttr-zPK-821',
- 'zAddAssetAttr-zENT-822',
- 'ZAddAssetAttr-zOPT-823',
- 'zAddAssetAttr-zAsset= zAsset_zPK-824',
- 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-825',
- 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-826',
- 'zAddAssetAttr-Master Fingerprint-827',
- 'zAddAssetAttr-Public Global UUID-828',
- 'zAddAssetAttr-Deferred Photo Identifier-829',
- 'zAddAssetAttr-Original Assets UUID-830',
- 'zAddAssetAttr-Import Session ID-831',
- 'zAddAssetAttr-Originating Asset Identifier-832',
- 'zAddAssetAttr.Adjusted Fingerprint-833',
- 'zAlbumList-zPK= Album List Key-834',
- 'zAlbumList-zENT-835',
- 'zAlbumList-zOPT-836',
- 'zAlbumList-ID Key-837',
- 'zAlbumList-UUID-838',
- 'zAsset-zPK-839',
- 'zAsset-zENT-840',
- 'zAsset-zOPT-841',
- 'zAsset-Master= zCldMast-zPK-842',
- 'zAsset-Extended Attributes= zExtAttr-zPK-843',
- 'zAsset-Import Session Key-844',
- 'zAsset-Trashed by Participant= zSharePartic_zPK-845',
- 'zAsset-Photo Analysis Attributes Key-846',
- 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-847',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-848',
- 'zAsset-Moment Share Key= zShare-zPK-849',
- 'zAsset-zMoment Key= zMoment-zPK-850',
- 'zAsset-Computed Attributes Asset Key-851',
- 'zAsset-Highlight Being Assets-HBA Key-852',
- 'zAsset-Highlight Being Extended Assets-HBEA Key-853',
- 'zAsset-Highlight Being Key Asset Private-HBKAP Key-854',
- 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-855',
- 'zAsset-Highligh Being Summary Assets-HBSA Key-856',
- 'zAsset-Day Group Highlight Being Assets-DGHBA Key-857',
- 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-858',
- 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-859',
- 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-860',
- 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-861',
- 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-862',
- 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-863',
- 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-864',
- 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-865',
- 'zAsset-Promotion Score-866',
- 'zAsset-Media Analysis Attributes Key-867',
- 'zAsset-Media Group UUID-868',
- 'zAsset-UUID = store.cloudphotodb-869',
- 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-870',
- 'zAsset.Cloud Collection GUID-871',
- 'zAsset-Avalanche UUID-872',
- 'zAssetAnalyState-zPK-873',
- 'zAssetAnalyState-zEnt-874',
- 'zAssetAnalyState-zOpt-875',
- 'zAssetAnalyState-Asset= zAsset-zPK-876',
- 'zAssetAnalyState-Asset UUID-877',
- 'zAsstContrib-zPK-878',
- 'zAsstContrib-zEnt-879',
- 'zAsstContrib-zOpt-880',
- 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-881',
- 'zAsstContrib-Participant= zSharePartic-zPK-882',
- 'zAssetDes-zPK-883',
- 'zAssetDes-zENT-884',
- 'zAssetDes-zOPT-885',
- 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-886',
- 'zCharRecogAttr-zPK-887',
- 'zCharRecogAttr-zENT-888',
- 'zCharRecogAttr-zOPT-889',
- 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-890',
- 'zCldFeedEnt-zPK= zCldShared keys-891',
- 'zCldFeedEnt-zENT-892',
- 'zCldFeedEnt-zOPT-893',
- 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-894',
- 'zCldFeedEnt-Entry Invitation Record GUID-895',
- 'zCldFeedEnt-Entry Cloud Asset GUID-896',
- 'zCldMast-zPK= zAsset-Master-897',
- 'zCldMast-zENT-898',
- 'zCldMast-zOPT-899',
- 'zCldMast-Moment Share Key= zShare-zPK-900',
- 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-901',
- 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-902',
- 'zCldMast-Originating Asset ID-903',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-904',
- 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-905',
- 'CMzCldMastMedData-zENT-906',
- 'CMzCldMastMedData-zOPT-907',
- 'CMzCldMastMedData-CldMast= zCldMast-zPK-908',
- 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-909',
- 'AAAzCldMastMedData-zENT-910',
- 'AAAzCldMastMedData-zOPT-911',
- 'AAAzCldMastMedData-CldMast key-912',
- 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-913',
- 'zCldRes-zPK-914',
- 'zCldRes-zENT-915',
- 'zCldRes-zOPT-916',
- 'zCldRes-Asset= zAsset-zPK-917',
- 'zCldRes-Cloud Master= zCldMast-zPK-918',
- 'zCldRes-Asset UUID-919',
- 'zCldShareAlbumInvRec-zPK-920',
- 'zCldShareAlbumInvRec-zEnt-921',
- 'zCldShareAlbumInvRec-zOpt-922',
- 'zCldShareAlbumInvRec-Album Key-923',
- 'zCldShareAlbumInvRec-FOK Album Key-924',
- 'zCldShareAlbumInvRec-Album GUID-925',
- 'zCldShareAlbumInvRec-zUUID-926',
- 'zCldShareAlbumInvRec-Cloud GUID-927',
- 'zCldSharedComment-zPK-928',
- 'zCldSharedComment-zENT-929',
- 'zCldSharedComment-zOPT-930',
- 'zCldSharedComment-Commented Asset Key= zAsset-zPK-931',
- 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-932',
- 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-933',
- 'zCldSharedComment-Liked Asset Key= zAsset-zPK-934',
- 'zCldSharedComment-CldFeedLikeCommentEntry Key-935',
- 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-936',
- 'zCldSharedComment-Cloud GUID-937',
- 'zCompAssetAttr-zPK-938',
- 'zCompAssetAttr-zEnt-939',
- 'zCompAssetAttr-zOpt-940',
- 'zCompAssetAttr-Asset Key-941',
- 'zDetFace-zPK-942',
- 'zDetFace-zEnt-943',
- 'zDetFace.zOpt-944',
- 'zDetFace-Asset= zAsset-zPK or Asset Containing Face-945',
- 'zDetFace-Person= zPerson-zPK-946',
- 'zDetFace-Person Being Key Face-947',
- 'zDetFace-Face Print-948',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-949',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-950',
- 'zDetFace-UUID-951',
- 'zDetFaceGroup-zPK-952',
- 'zDetFaceGroup-zENT-953',
- 'zDetFaceGroup-zOPT-954',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-955',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-956',
- 'zDetFaceGroup-UUID-957',
- 'zDetFacePrint-zPK-958',
- 'zDetFacePrint-zEnt-959',
- 'zDetFacePrint-zOpt-960',
- 'zDetFacePrint-Face Key-961',
- 'zExtAttr-zPK= zAsset-zExtendedAttributes-962',
- 'zExtAttr-zENT-963',
- 'zExtAttr-zOPT-964',
- 'zExtAttr-Asset Key-965',
- 'zFaceCrop-zPK-966',
- 'zFaceCrop-zEnt-967',
- 'zFaceCrop-zOpt-968',
- 'zFaceCrop-Asset Key-969',
- 'zFaceCrop-Invalid Merge Canidate Person UUID-970',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-971',
- 'zFaceCrop-Face Key-972',
- 'zFaceCrop-UUID-973',
- 'zGenAlbum-zPK=26AlbumLists= 26Albums-974',
- 'zGenAlbum-zENT-975',
- 'zGenAlbum-zOpt-976',
- 'zGenAlbum-Key Asset-Key zAsset-zPK-977',
- 'zGenAlbum-Secondary Key Asset-978',
- 'zGenAlbum-Tertiary Key Asset-979',
- 'zGenAlbum-Custom Key Asset-980',
- 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-981',
- 'zGenAlbum-FOK Parent Folder-982',
- 'zGenAlbum-zSyndicate-983',
- 'zGenAlbum-UUID-984',
- 'SWYConverszGenAlbum-UUID-985',
- 'zGenAlbum-Cloud_GUID = store.cloudphotodb-986',
- 'SWYConverszGenAlbum-Cloud GUID-987',
- 'zGenAlbum-Project Render UUID-988',
- 'SWYConverszGenAlbum-Project Render UUID-989',
- 'zIntResou-zPK-990',
- 'zIntResou-zENT-991',
- 'zIntResou-zOPT-992',
- 'zIntResou-Asset= zAsset_zPK-993',
- 'zIntResou-Fingerprint-994',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-995',
- 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-996',
- 'zMedAnlyAstAttr-zEnt-997',
- 'zMedAnlyAstAttr-zOpt-998',
- 'zMedAnlyAstAttr-Asset= zAsset-zPK-999',
- 'zMemory-zPK-1000',
- 'zMemory-zENT-1001',
- 'zMemory-zOPT-1002',
- 'zMemory-Key Asset= zAsset-zPK-1003',
- 'zMemory-UUID-1004',
- 'zMoment-zPK-1005',
- 'zMoment-zENT-1006',
- 'zMoment-zOPT-1007',
- 'zMoment-Highlight Key-1008',
- 'zMoment-UUID-1009',
- 'zPerson-zPK=zDetFace-Person-1010',
- 'zPerson-zEnt-1011',
- 'zPerson-zOpt-1012',
- 'zPerson-Share Participant= zSharePartic-zPK-1013',
- 'zPerson-KeyFace=zDetFace-zPK-1014',
- 'zPerson-Assoc Face Group Key-1015',
- 'zPerson-Person UUID-1016',
- 'zPhotoAnalysisAssetAttr-zPK-1017',
- 'zPhotoAnalysisAssetAttr-zEnt-1018',
- 'zPhotoAnalysisAssetAttr-zOpt-1019',
- 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1020',
- 'zSceneP-zPK-1021',
- 'zSceneP-zENT-1022',
- 'zSceneP-zOPT-1023',
- 'zShare-zPK-1024',
- 'zShare-zENT-1025',
- 'zShare-zOPT-1026',
- 'zShare-UUID-1027',
- 'SPLzShare-UUID-1028',
- 'zShare-Scope ID = store.cloudphotodb-1029',
- 'zSharePartic-zPK-1030',
- 'zSharePartic-zENT-1031',
- 'zSharePartic-zOPT-1032',
- 'zSharePartic-Share Key= zShare-zPK-1033',
- 'zSharePartic-Person= zPerson-zPK-1034',
- 'zSharePartic-UUID-1035',
- 'SBKAzSugg-zPK-1036',
- 'SBKAzSugg-zENT-1037',
- 'SBKAzSugg-zOPT-1038',
- 'SBKAzSugg-UUID-1039',
- 'SBRAzSugg-zPK-1040',
- 'SBRAzSugg-zENT-1041',
- 'SBRAzSugg-zOPT-1042',
- 'SBRAzSugg-UUID-1043',
- 'z3SuggBRA-3RepAssets1-1044',
- 'z3SuggBRA-58SuggBeingRepAssets-1045',
- 'z3SuggBKA-58SuggBeingKeyAssets= zSugg-zPK-1046',
- 'z3SuggBKA-3KeyAssets= zAsset-zPK-1047',
- 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1048',
- 'zUnmAdj-zOPT-1049',
- 'zUnmAdj-zENT-1050',
- 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1051',
- 'zUnmAdj-UUID-1052',
- 'zUnmAdj-Other Adjustments Fingerprint-1053',
- 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1054',
- 'zUserFeedback-zPK-1055',
- 'zUserFeedback-zENT-1056',
- 'zUserFeedback-zOPT-1057',
- 'zUserFeedback-Person= zPerson-zPK-1058',
- 'zUserFeedback-Memory= zMemory-zPK-1059',
- 'zUserFeedback-UUID-1060',
- 'zVisualSearchAttr-zPK-1061',
- 'zVisualSearchAttr-zENT-1062',
- 'zVisualSearchAttr-zOPT-1063',
- 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1064',
- 'z27AlbumList-27Albums= zGenAlbum-zPK-1065',
- 'z27AlbumList-Album List Key-1066',
- 'z27AlbumList-FOK27Albums Key-1067',
- 'z28Assets-28Albums= zGenAlbum-zPK-1068',
- 'z28Assets-3Asset Key= zAsset-zPK in the Album-1069',
- 'z28Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1070',
- 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1071',
- 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1072',
- 'z3MemoryBCAs-44MemoriesBeingCuratedAssets= zMemory-zPK-1073',
- 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1074',
- 'z3MemoryBECAs-44MemoriesBeingExtCuratedAssets= zMemory-zPK-1075',
- 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1076',
- 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK-1077',
- 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1078',
- 'z3MemoryBUCAs-44MemoriesBeingUserCuratedAssets= zMemory-zPK-1079',
- 'z3MemoryBCAs-44Memories Being Custom User Assets-1080',
- 'z3MemoryBCAs-3Custom User Assets-1081',
- 'z3MemoryBCAs-FOK-3Custom User Assets-1082')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph96.2-iOS16_Ref_for_Asset_Analysis-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph96.2-iOS16_Ref_for_Asset_Analysis-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ '''
- else:
- logfunc('No data available for iOS 16 Syndication.photoslibrary-database-Photos.sqlite')
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
+ row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
+ row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
+ row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
+ row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
+ row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
+ row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
+ row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
+ row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
+ row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
+ row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
+ row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
+ row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
+ row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
+ row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
+ row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
+ row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
+ row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
+ row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
+ row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
+ row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307],
+ row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315],
+ row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323],
+ row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331],
+ row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339],
+ row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347],
+ row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355],
+ row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363],
+ row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371],
+ row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379],
+ row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387],
+ row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395],
+ row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403],
+ row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411],
+ row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419],
+ row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427],
+ row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435],
+ row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443],
+ row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451],
+ row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459],
+ row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467],
+ row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475],
+ row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483],
+ row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491],
+ row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499],
+ row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507],
+ row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515],
+ row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523],
+ row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531],
+ row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539],
+ row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547],
+ row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555],
+ row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563],
+ row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571],
+ row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579],
+ row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587],
+ row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595],
+ row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603],
+ row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611],
+ row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619],
+ row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627],
+ row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635],
+ row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643],
+ row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651],
+ row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659],
+ row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667],
+ row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675],
+ row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683],
+ row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691],
+ row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699],
+ row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707],
+ row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715],
+ row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723],
+ row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731],
+ row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739],
+ row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747],
+ row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755],
+ row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763],
+ row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771],
+ row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779],
+ row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787],
+ row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795],
+ row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803],
+ row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811],
+ row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819],
+ row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827],
+ row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835],
+ row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843],
+ row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851],
+ row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859],
+ row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867],
+ row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875],
+ row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883],
+ row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891],
+ row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899],
+ row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907],
+ row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915],
+ row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923],
+ row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931],
+ row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939],
+ row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947],
+ row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955],
+ row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963],
+ row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971],
+ row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979],
+ row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987],
+ row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995],
+ row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002],
+ row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009],
+ row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016],
+ row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023],
+ row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030],
+ row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037],
+ row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044],
+ row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051],
+ row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058],
+ row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065],
+ row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072],
+ row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079],
+ row[1080], row[1081], row[1082]))
- db.close()
- return
+ data_headers = (('zAsset-Added Date-0', 'datetime'),
+ 'zAsset- SortToken -CameraRoll-1',
+ 'zAsset Complete-2',
+ 'zAsset-zPK-4QueryStart-3',
+ 'zAddAssetAttr-zPK-4QueryStart-4',
+ 'zAsset-UUID = store.cloudphotodb-4QueryStart-5',
+ 'zAddAssetAttr-Master Fingerprint-4TableStart-6',
+ 'zIntResou-Fingerprint-4TableStart-7',
+ 'zAsset-Bundle Scope-8',
+ 'zAsset-Syndication State-9',
+ 'zAsset-Cloud is My Asset-10',
+ 'zAsset-Cloud is deletable-Asset-11',
+ 'zAsset-Cloud_Local_State-12',
+ 'zAsset-Visibility State-13',
+ 'zExtAttr-Camera Make-14',
+ 'zExtAttr-Camera Model-15',
+ 'zExtAttr-Lens Model-16',
+ 'zExtAttr-Flash Fired-17',
+ 'zExtAttr-Focal Lenght-18',
+ 'zExtAttr-Focal Lenth in 35MM-19',
+ 'zExtAttr-Digital Zoom Ratio-20',
+ 'zAsset-Derived Camera Capture Device-21',
+ 'zAddAssetAttr-Camera Captured Device-22',
+ 'zAddAssetAttr-Imported by-23',
+ 'zCldMast-Imported By-24',
+ 'zAddAssetAttr.Imported by Bundle Identifier-25',
+ 'zAddAssetAttr-Imported By Display Name-26',
+ 'zCldMast-Imported by Bundle ID-27',
+ 'zCldMast-Imported by Display Name-28',
+ 'zAsset-Saved Asset Type-29',
+ 'zAsset-Directory-Path-30',
+ 'zAsset-Filename-31',
+ 'zAddAssetAttr- Original Filename-32',
+ 'zCldMast- Original Filename-33',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-34',
+ 'zAsset-Active Library Scope Participation State -4QueryStart-35',
+ 'zAsset-Library Scope Share State- StillTesting -4QueryStart-36',
+ 'zShare-Cloud Photo Count-SPL -4QueryStart-37',
+ 'zShare-Cloud Video Count-SPL -4QueryStart-38',
+ ('zAddAssetAttr-Date Created Source-39', 'datetime'),
+ ('zAsset-Date Created-40', 'datetime'),
+ ('zCldMast-Creation Date-41', 'datetime'),
+ ('zIntResou-CldMst Date Created-42', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-43',
+ 'zAddAssetAttr-Time Zone Offset-44',
+ 'zAddAssetAttr-Inferred Time Zone Offset-45',
+ 'zAddAssetAttr-EXIF-String-46',
+ ('zAsset-Modification Date-47', 'datetime'),
+ ('zAsset-Last Shared Date-48', 'datetime'),
+ 'zCldMast-Cloud Local State-49',
+ ('zCldMast-Import Date-50', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-51', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-4QueryStart-52',
+ ('zAddAssetAttr-Alt Import Image Date-53', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-54',
+ ('zAsset-Cloud Batch Publish Date-55', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-56', 'datetime'),
+ 'zAsset-Cloud Download Requests-57',
+ 'zAsset-Cloud Batch ID-58',
+ 'zAddAssetAttr-Upload Attempts-59',
+ 'zAsset-Latitude-60',
+ 'zExtAttr-Latitude-61',
+ 'zAsset-Longitude-62',
+ 'zExtAttr-Longitude-63',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-64',
+ 'zAddAssetAttr-Location Hash-65',
+ 'zAddAssetAttr-Shifted Location Valid-66',
+ 'zAddAssetAttr-Shifted Location Data-67',
+ 'zAddAssetAttr-Reverse Location Is Valid-68',
+ 'zAddAssetAttr-Reverse Location Data-69',
+ 'ParentzGenAlbum-UUID-4QueryStart-70',
+ 'zGenAlbum-UUID-4QueryStart-71',
+ 'SWYConverszGenAlbum-UUID-4QueryStart-72',
+ 'ParentzGenAlbum-Cloud GUID-4QueryStart-73',
+ 'zGenAlbum-Cloud GUID-4QueryStart-74',
+ 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-75',
+ 'zCldShareAlbumInvRec-Album GUID-4QueryStart-76',
+ 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-77',
+ 'zGenAlbum-Project Render UUID-4QueryStart-78',
+ 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-79',
+ 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-80',
+ 'zGenAlbum-Cloud_Local_State-4QueryStart-81',
+ 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-82',
+ ('ParentzGenAlbum- Creation Date- 4QueryStart-83', 'datetime'),
+ ('zGenAlbum- Creation Date- 4QueryStart-84', 'datetime'),
+ ('SWYConverszGenAlbum- Creation Date- 4QueryStart-85', 'datetime'),
+ ('zGenAlbum- Cloud Creation Date- 4QueryStart-86', 'datetime'),
+ ('SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-87', 'datetime'),
+ ('zGenAlbum- Start Date- 4QueryStart-88', 'datetime'),
+ ('SWYConverszGenAlbum- Start Date- 4QueryStart-89', 'datetime'),
+ ('zGenAlbum- End Date- 4QueryStart-90', 'datetime'),
+ ('SWYConverszGenAlbum- End Date- 4QueryStart-91', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date- 4QueryStart-92', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-93', 'datetime'),
+ 'ParentzGenAlbum- Title- 4QueryStart-94',
+ 'zGenAlbum- Title-User&System Applied- 4QueryStart-95',
+ 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-96',
+ 'zGenAlbum-Import Session ID-SWY- 4QueryStart-97',
+ 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-98',
+ 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-99',
+ 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-100',
+ 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-101',
+ 'SWYConverszGenAlbum- Syndicate-4QueryStart-102',
+ 'zGenAlbum-zENT- Entity- 4QueryStart-103',
+ 'ParentzGenAlbum- Kind- 4QueryStart-104',
+ 'zGenAlbum-Album Kind- 4QueryStart-105',
+ 'SWYConverszGenAlbum-Album Kind- 4QueryStart-106',
+ 'AAAzCldMastMedData-zOPT-107',
+ 'zAddAssetAttr-Media Metadata Type-108',
+ 'AAAzCldMastMedData-Data-109',
+ 'CldMasterzCldMastMedData-zOPT-110',
+ 'zCldMast-Media Metadata Type-111',
+ 'CMzCldMastMedData-Data-112',
+ 'zAsset-Search Index Rebuild State-113',
+ 'zAddAssetAttr-Syndication History-114',
+ 'zMedAnlyAstAttr-Syndication Processing Version-115',
+ 'zMedAnlyAstAttr-Syndication Processing Value-116',
+ 'zAsset-Orientation-117',
+ 'zAddAssetAttr-Original Orientation-118',
+ 'zAsset-Kind-119',
+ 'zAsset-Kind-Sub-Type-120',
+ 'zAddAssetAttr-Cloud Kind Sub Type-121',
+ 'zAsset-Playback Style-122',
+ 'zAsset-Playback Variation-123',
+ 'zAsset-Video Duration-124',
+ 'zExtAttr-Duration-125',
+ 'zAsset-Video CP Duration-126',
+ 'zAddAssetAttr-Video CP Duration Time Scale-127',
+ 'zAsset-Video CP Visibility State-128',
+ 'zAddAssetAttr-Video CP Display Value-129',
+ 'zAddAssetAttr-Video CP Display Time Scale-130',
+ 'zIntResou-Datastore Class ID-131',
+ 'zAsset-Cloud Placeholder Kind-132',
+ 'zIntResou-Local Availability-133',
+ 'zIntResou-Local Availability Target-134',
+ 'zIntResou-Cloud Local State-135',
+ 'zIntResou-Remote Availability-136',
+ 'zIntResou-Remote Availability Target-137',
+ 'zIntResou-Transient Cloud Master-138',
+ 'zIntResou-Side Car Index-139',
+ 'zIntResou- File ID-140',
+ 'zIntResou-Version-141',
+ 'zAddAssetAttr- Original-File-Size-142',
+ 'zIntResou-Resource Type-143',
+ 'zIntResou-Datastore Sub-Type-144',
+ 'zIntResou-Cloud Source Type-145',
+ 'zIntResou-Data Length-146',
+ 'zIntResou-Recipe ID-147',
+ ('zIntResou-Cloud Last Prefetch Date-148', 'datetime'),
+ 'zIntResou-Cloud Prefetch Count-149',
+ ('zIntResou- Cloud-Last-OnDemand Download-Date-150', 'datetime'),
+ 'zIntResou-UniformTypeID_UTI_Conformance_Hint-151',
+ 'zIntResou-Compact-UTI-152',
+ 'zAsset-Uniform Type ID-153',
+ 'zAsset-Original Color Space-154',
+ 'zCldMast-Uniform_Type_ID-155',
+ 'zCldMast-Full Size JPEG Source-156',
+ 'zAsset-HDR Gain-157',
+ 'zAsset-zHDR_Type-158',
+ 'zExtAttr-Codec-159',
+ 'zIntResou-Codec Four Char Code Name-160',
+ 'zCldMast-Codec Name-161',
+ 'zCldMast-Video Frame Rate-162',
+ 'zCldMast-Placeholder State-163',
+ 'zAsset-Depth_Type-164',
+ 'zAsset-Avalanche UUID-4TableStart-165',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-166',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-167',
+ 'zAddAssetAttr-Cloud Recovery State-168',
+ 'zAddAssetAttr-Cloud State Recovery Attempts Count-169',
+ 'zAsset-Deferred Processing Needed-170',
+ 'zAsset-Video Deferred Processing Needed-171',
+ 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-172',
+ 'zAddAssetAttr-Deferred Processing Candidate Options-173',
+ 'zAsset-Has Adjustments-Camera-Effects-Filters-174',
+ 'zUnmAdj-UUID-4TableStart-175',
+ 'zAsset-Adjustment Timestamp-176',
+ 'zUnmAdj-Adjustment Timestamp-177',
+ 'zAddAssetAttr-Editor Bundle ID-178',
+ 'zUnmAdj-Editor Localized Name-179',
+ 'zUnmAdj-Adjustment Format ID-180',
+ 'zAddAssetAttr-Montage-181',
+ 'zUnmAdj-Adjustment Render Types-182',
+ 'zUnmAdj-Adjustment Format Version-183',
+ 'zUnmAdj-Adjustment Base Image Format-184',
+ 'zAsset-Favorite-185',
+ 'zAsset-Hidden-186',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-187',
+ ('zAsset-Trashed Date-188', 'datetime'),
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-189',
+ 'zAsset-Delete-Reason-190',
+ 'zIntResou-Trash State-191',
+ ('zIntResou-Trashed Date-192', 'datetime'),
+ 'zAsset-Cloud Delete State-193',
+ 'zIntResou-Cloud Delete State-194',
+ 'zAddAssetAttr-PTP Trashed State-195',
+ 'zIntResou-PTP Trashed State-196',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-197',
+ 'zMedAnlyAstAttr-Media Analysis Timestamp-198',
+ ('zAsset-Analysis State Modification Date-199', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-200',
+ 'zAddAssetAttr- View Count-201',
+ 'zAddAssetAttr- Pending Play Count-202',
+ 'zAddAssetAttr- Play Count-203',
+ 'zAddAssetAttr- Pending Share Count-204',
+ 'zAddAssetAttr- Share Count-205',
+ 'zAddAssetAttr-Allowed for Analysis-206',
+ 'zAddAssetAttr-Scene Analysis Version-207',
+ 'zAddAssetAttr-Scene Analysis is From Preview-208',
+ 'zAddAssetAttr-Scene Analysis Timestamp-209',
+ 'zAsset-Duplication Asset Visibility State-210',
+ 'zAddAssetAttr-Destination Asset Copy State-211',
+ 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-212',
+ 'zAddAssetAttr-Source Asset for Duplication Scope ID-213',
+ 'zCldMast-Source Master For Duplication Scope ID-214',
+ 'zAddAssetAttr-Source Asset For Duplication ID-215',
+ 'zCldMast-Source Master for Duplication ID-216',
+ 'zAddAssetAttr-Variation Suggestions States-217',
+ 'zAsset-High Frame Rate State-218',
+ 'zAsset-Video Key Frame Time Scale-219',
+ 'zAsset-Video Key Frame Value-220',
+ 'zExtAttr-ISO-221',
+ 'zExtAttr-Metering Mode-222',
+ 'zExtAttr-Sample Rate-223',
+ 'zExtAttr-Track Format-224',
+ 'zExtAttr-White Balance-225',
+ 'zExtAttr-Aperture-226',
+ 'zExtAttr-BitRate-227',
+ 'zExtAttr-Exposure Bias-228',
+ 'zExtAttr-Frames Per Second-229',
+ 'zExtAttr-Shutter Speed-230',
+ 'zExtAttr-Slush Scene Bias-231',
+ 'zExtAttr-Slush Version-232',
+ 'zExtAttr-Slush Preset-233',
+ 'zExtAttr-Slush Warm Bias-234',
+ 'zAsset-Height-235',
+ 'zAddAssetAttr-Original Height-236',
+ 'zIntResou-Unoriented Height-237',
+ 'zAsset-Width-238',
+ 'zAddAssetAttr-Original Width-239',
+ 'zIntResou-Unoriented Width-240',
+ 'zShare-Thumbnail Image Data-241',
+ 'SPLzShare-Thumbnail Image Data-242',
+ 'zAsset-Thumbnail Index-243',
+ 'zAddAssetAttr-Embedded Thumbnail Height-244',
+ 'zAddAssetAttr-Embedded Thumbnail Length-245',
+ 'zAddAssetAttr-Embedded Thumbnail Offset-246',
+ 'zAddAssetAttr-Embedded Thumbnail Width-247',
+ 'zAsset-Packed Acceptable Crop Rect-248',
+ 'zAsset-Packed Badge Attributes-249',
+ 'zAsset-Packed Preferred Crop Rect-250',
+ 'zAsset-Curation Score-251',
+ 'zAsset-Camera Processing Adjustment State-252',
+ 'zAsset-Depth Type-253',
+ 'zAsset-Is Magic Carpet-QuicktimeMOVfile-254',
+ 'zAddAssetAttr-Orig Resource Choice-255',
+ 'zAddAssetAttr-Spatial Over Capture Group ID-256',
+ 'zAddAssetAttr-Place Annotation Data-257',
+ 'zAddAssetAttr-Distance Identity-258',
+ 'zAddAssetAttr-Edited IPTC Attributes-259',
+ 'zAssetDes-Long Description-260',
+ 'zAddAssetAttr-Asset Description-261',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-262',
+ 'zAddAssetAttr-Accessibility Description-263',
+ 'zAddAssetAttr-Photo Stream Tag ID-264',
+ 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-265',
+ 'zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-266',
+ ('zCldFeedEnt-Entry Date-267', 'datetime'),
+ 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-268',
+ 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-269',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-270',
+ 'zCldFeedEnt-Entry Priority Number-271',
+ 'zCldFeedEnt-Entry Type Number-272',
+ 'zCldSharedComment-Cloud GUID-4TableStart-273',
+ ('zCldSharedComment-Date-274', 'datetime'),
+ ('zCldSharedComment-Comment Client Date-275', 'datetime'),
+ ('zAsset-Cloud Last Viewed Comment Date-276', 'datetime'),
+ 'zCldSharedComment-Type-277',
+ 'zCldSharedComment-Comment Text-278',
+ 'zCldSharedComment-Commenter Hashed Person ID-279',
+ 'zCldSharedComment-Batch Comment-280',
+ 'zCldSharedComment-Is a Caption-281',
+ 'zAsset-Cloud Has Comments by Me-282',
+ 'zCldSharedComment-Is My Comment-283',
+ 'zCldSharedComment-Is Deletable-284',
+ 'zAsset-Cloud Has Comments Conversation-285',
+ 'zAsset-Cloud Has Unseen Comments-286',
+ 'zCldSharedComment-Liked-287',
+ 'zAddAssetAttr-Share Type-288',
+ 'zAsset-Library Scope Share State- StillTesting-289',
+ 'zAsset-Active Library Scope Participation State-290',
+ 'zAddAssetAttr-Library Scope Asset Contributors To Update-291',
+ 'zShare-UUID-CMM-4TableStart-292',
+ 'SPLzShare-UUID-SPL-4TableStart-293',
+ 'zShare-zENT-CMM-294',
+ 'SPLzShare-zENT-SPL-295',
+ 'zSharePartic-z54SHARE-296',
+ 'SPLzSharePartic-z54SHARE-297',
+ 'zShare-Status-CMM-298',
+ 'SPLzShare-Status-SPL-299',
+ 'zShare-Scope Type-CMM-300',
+ 'SPLzShare-Scope Type-SPL-301',
+ 'zShare-Local Publish State-CMM-302',
+ 'SPLzShare-Local Publish State-SPL-303',
+ 'zShare-Public Permission-CMM-304',
+ 'SPLzShare-Public Permission-SPL-305',
+ 'zShare-Originating Scope ID-CMM-306',
+ 'SPLzShare-Originating Scope ID-SPL-307',
+ 'zShare-Scope ID-CMM-308',
+ 'SPLzShare-Scope ID-SPL-309',
+ 'zShare-Title-CMM-310',
+ 'SPLzShare-Title-SPL-311',
+ 'zShare-Share URL-CMM-312',
+ 'SPLzShare-Share URL-SPL-313',
+ ('zShare-Creation Date-CMM-314', 'datetime'),
+ ('SPLzShare-Creation Date-SPL-315', 'datetime'),
+ ('zShare-Start Date-CMM-316', 'datetime'),
+ ('SPLzShare-Start Date-SPL-317', 'datetime'),
+ ('zShare-End Date-CMM-318', 'datetime'),
+ ('SPLzShare-End Date-SPL-319', 'datetime'),
+ ('zShare-Expiry Date-CMM-320', 'datetime'),
+ ('SPLzShare-Expiry Date-SPL-321', 'datetime'),
+ 'zShare-Cloud Item Count-CMM-322',
+ 'SPLzShare-Cloud Item Count-SPL-323',
+ 'zShare-Asset Count-CMM-324',
+ 'SPLzShare-Asset Count-SPL-325',
+ 'zShare-Cloud Photo Count-CMM-326',
+ 'SPLzShare-Cloud Photo Count-SPL-327',
+ 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-328',
+ 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-329',
+ 'zShare-Photos Count-CMM-330',
+ 'SPLzShare-Photos Count-CMM-SPL-331',
+ 'zShare-Uploaded Photos Count-CMM-332',
+ 'SPLzShare-Uploaded Photos Count-SPL-333',
+ 'zShare-Cloud Video Count-CMM-334',
+ 'SPLzShare-Cloud Video Count-SPL-335',
+ 'zShare-Videos Count-CMM-336',
+ 'SPLzShare-Videos Count-SPL-337',
+ 'zShare-Uploaded Videos Count-CMM-338',
+ 'SPLzShare-Uploaded Videos Count-SPL-339',
+ 'zShare-Force Sync Attempted-CMM-340',
+ 'SPLzShare-Force Sync Attempted-SPL-341',
+ 'zShare-Cloud Local State-CMM-342',
+ 'SPLzShare-Cloud Local State-SPL-343',
+ 'zShare-Scope Syncing State-CMM-344',
+ 'SPLzShare-Scope Syncing State-SPL-345',
+ 'zShare-Auto Share Policy-CMM-346',
+ 'SPLzShare-Auto Share Policy-SPL-347',
+ 'zShare-Should Notify On Upload Completion-CMM-348',
+ 'SPLzShare-Should Notify On Upload Completion-SPL-349',
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-350',
+ 'zShare-Trashed State-CMM-351',
+ 'SPLzShare-Trashed State-SPL-352',
+ 'zShare-Cloud Delete State-CMM-353',
+ 'SPLzShare-Cloud Delete State-SPL-354',
+ ('zShare-Trashed Date-CMM-355', 'datetime'),
+ ('SPLzShare-Trashed Date-SPL-356', 'datetime'),
+ ('zShare-LastParticipant Asset Trash Notification Date-CMM-357', 'datetime'),
+ ('SPLzShare-LastParticipant Asset Trash Notification Date-SPL-358', 'datetime'),
+ ('zShare-Last Participant Asset Trash Notification View Date-CMM-359', 'datetime'),
+ ('SPLzShare-Last Participant Asset Trash Notification View Date-SPL-360', 'datetime'),
+ 'zShare-Exit Source-CMM-361',
+ 'SPLzShare-Exit Source-SPL-362',
+ 'zShare-SPL_Exit State-CMM-363',
+ 'SPLzShare-SPL_Exit State-SPL-364',
+ 'zShare-Exit Type-CMM-365',
+ 'SPLzShare-Exit Type-SPL-366',
+ 'zShare-Should Ignor Budgets-CMM-367',
+ 'SPLzShare-Should Ignor Budgets-SPL-368',
+ 'zShare-Preview State-CMM-369',
+ 'SPLzShare-Preview State-SPL-370',
+ 'zShare-Preview Data-CMM-371',
+ 'SPLzShare-Preview Data-SPL-372',
+ 'zShare-Rules-CMM-373',
+ 'SPLzShare-Rules-SPL-374',
+ 'zShare-Thumbnail Image Data-CMM-375',
+ 'SPLzShare-Thumbnail Image Data-SPL-376',
+ 'zShare-Participant Cloud Update State-CMM-377',
+ 'SPLzShare-Participant Cloud Update State-SPL-378',
+ 'zSharePartic-UUID-4TableStart-379',
+ 'SPLzSharePartic-UUID-4TableStart-380',
+ 'zSharePartic-Acceptance Status-381',
+ 'SPLzSharePartic-Acceptance Status-382',
+ 'zSharePartic-Is Current User-383',
+ 'SPLzSharePartic-Is Current User-384',
+ 'zSharePartic-Role-385',
+ 'SPLzSharePartic-Role-386',
+ 'zSharePartic-Premission-387',
+ 'SPLzSharePartic-Premission-388',
+ 'zSharePartic-Participant ID-389',
+ 'SPLzSharePartic-Participant ID-390',
+ 'zSharePartic-User ID-391',
+ 'SPLzSharePartic-User ID-392',
+ 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-393',
+ 'SPLzSharePartic-zPK-4TableStart-394',
+ 'zSharePartic-zPK-4TableStart-395',
+ 'zSharePartic-Email Address-396',
+ 'SPLzSharePartic-Email Address-397',
+ 'zSharePartic-Phone Number-398',
+ 'SPLzSharePartic-Phone Number-399',
+ 'zSharePartic-Exit State-400',
+ 'SPLzSharePartic-Exit State-401',
+ 'ParentzGenAlbum-UUID-4TableStart-402',
+ 'zGenAlbum-UUID-4TableStart-403',
+ 'SWYConverszGenAlbum-UUID-4TableStart-404',
+ 'ParentzGenAlbum-Cloud GUID-4TableStart-405',
+ 'zGenAlbum-Cloud GUID-4TableStart-406',
+ 'SWYConverszGenAlbum-Cloud GUID-4TableStart-407',
+ 'zCldShareAlbumInvRec-Album GUID-4TableStart-408',
+ 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-409',
+ 'zGenAlbum-Project Render UUID-4TableStart-410',
+ 'SWYConverszGenAlbum-Project Render UUID-4TableStart-411',
+ 'zAlbumList-Needs Reordering Number-412',
+ 'zGenAlbum-zENT- Entity-413',
+ 'ParentzGenAlbum-Kind-414',
+ 'zGenAlbum-Album Kind-415',
+ 'SWYConverszGenAlbum-Album Kind-416',
+ 'ParentzGenAlbum-Cloud-Local-State-417',
+ 'zGenAlbum-Cloud_Local_State-418',
+ 'SWYConverszGenAlbum-Cloud_Local_State-419',
+ 'ParentzGenAlbum- Title-420',
+ 'zGenAlbum- Title-User&System Applied-421',
+ 'SWYConverszGenAlbum- Title -User&System Applied-422',
+ 'zGenAlbum-Import Session ID-SWY-423',
+ 'zAsset- Conversation= zGenAlbum_zPK-424',
+ 'SWYConverszGenAlbum- Import Session ID-SWY-425',
+ 'zGenAlbum-Imported by Bundle Identifier-426',
+ 'SWYzGenAlbum-Imported by Bundle Identifier-427',
+ 'SWYConverszGenAlbum- Syndicate-428',
+ ('ParentzGenAlbum-Creation Date-429', 'datetime'),
+ ('zGenAlbum-Creation Date-430', 'datetime'),
+ ('SWYConverszGenAlbum-Creation Date-431', 'datetime'),
+ ('zGenAlbum-Cloud Creation Date-432', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Creation Date-433', 'datetime'),
+ ('zGenAlbum-Start Date-434', 'datetime'),
+ ('SWYConverszGenAlbum-Start Date-435', 'datetime'),
+ ('zGenAlbum-End Date-436', 'datetime'),
+ ('SWYConverszGenAlbum-End Date-437', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-438', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Subscription Date-439', 'datetime'),
+ 'ParentzGenAlbum-Pending Items Count-440',
+ 'zGenAlbum-Pending Items Count-441',
+ 'SWYConverszGenAlbum-Pending Items Count-442',
+ 'ParentzGenAlbum-Pending Items Type-443',
+ 'zGenAlbum-Pending Items Type-444',
+ 'SWYConverszGenAlbum-Pending Items Type-445',
+ 'zGenAlbum- Cached Photos Count-446',
+ 'SWYConverszGenAlbum- Cached Photos Count-447',
+ 'zGenAlbum- Cached Videos Count-448',
+ 'SWYConverszGenAlbum- Cached Videos Count-449',
+ 'zGenAlbum- Cached Count-450',
+ 'SWYConverszGenAlbum- Cached Count-451',
+ 'ParentzGenAlbum-Sync Event Order Key-452',
+ 'zGenAlbum-Sync Event Order Key-453',
+ 'SWYConverszGenAlbum-Sync Event Order Key-454',
+ 'zGenAlbum-Has Unseen Content-455',
+ 'SWYConverszGenAlbum-Has Unseen Content-456',
+ 'zGenAlbum-Unseen Asset Count-457',
+ 'SWYConverszGenAlbum-Unseen Asset Count-458',
+ 'zGenAlbum-is Owned-459',
+ 'SWYConverszGenAlbum-is Owned-460',
+ 'zGenAlbum-Cloud Relationship State-461',
+ 'SWYConverszGenAlbum-Cloud Relationship State-462',
+ 'zGenAlbum-Cloud Relationship State Local-463',
+ 'SWYConverszGenAlbum-Cloud Relationship State Local-464',
+ 'zGenAlbum-Cloud Owner Mail Key-465',
+ 'SWYConverszGenAlbum-Cloud Owner Mail Key-466',
+ 'zGenAlbum-Cloud Owner Frist Name-467',
+ 'SWYConverszGenAlbum-Cloud Owner Frist Name-468',
+ 'zGenAlbum-Cloud Owner Last Name-469',
+ 'SWYConverszGenAlbum-Cloud Owner Last Name-470',
+ 'zGenAlbum-Cloud Owner Full Name-471',
+ 'SWYConverszGenAlbum-Cloud Owner Full Name-472',
+ 'zGenAlbum-Cloud Person ID-473',
+ 'SWYConverszGenAlbum-Cloud Person ID-474',
+ 'zAsset-Cloud Owner Hashed Person ID-475',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-476',
+ 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-477',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-478',
+ 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-479',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-480',
+ 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-481',
+ 'zGenAlbum-Cloud Album Sub Type-482',
+ 'SWYConverszGenAlbum-Cloud Album Sub Type-483',
+ ('zGenAlbum-Cloud Contribution Date-484', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Contribution Date-485', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-486', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Last Interesting Change Date-487', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-488',
+ 'SWYConverszGenAlbum-Cloud Notification Enabled-489',
+ 'ParentzGenAlbum-Pinned-490',
+ 'zGenAlbum-Pinned-491',
+ 'SWYConverszGenAlbum-Pinned-492',
+ 'ParentzGenAlbum-Custom Sort Key-493',
+ 'zGenAlbum-Custom Sort Key-494',
+ 'SWYConverszGenAlbum-Custom Sort Key-495',
+ 'ParentzGenAlbum-Custom Sort Ascending-496',
+ 'zGenAlbum-Custom Sort Ascending-497',
+ 'SWYConverszGenAlbum-Custom Sort Ascending-498',
+ 'ParentzGenAlbum-Is Prototype-499',
+ 'zGenAlbum-Is Prototype-500',
+ 'SWYConverszGenAlbum-Is Prototype-501',
+ 'ParentzGenAlbum-Project Document Type-502',
+ 'zGenAlbum-Project Document Type-503',
+ 'SWYConverszGenAlbum-Project Document Type-504',
+ 'ParentzGenAlbum-Custom Query Type-505',
+ 'zGenAlbum-Custom Query Type-506',
+ 'SWYConverszGenAlbum-Custom Query Type-507',
+ 'ParentzGenAlbum-Trashed State-508',
+ ('ParentzGenAlbum-Trash Date-509', 'datetime'),
+ 'zGenAlbum-Trashed State-510',
+ ('zGenAlbum-Trash Date-511', 'datetime'),
+ 'SWYConverszGenAlbum-Trashed State-512',
+ ('SWYConverszGenAlbum-Trash Date-513', 'datetime'),
+ 'ParentzGenAlbum-Cloud Delete State-514',
+ 'zGenAlbum-Cloud Delete State-515',
+ 'SWYConverszGenAlbum-Cloud Delete State-516',
+ 'zGenAlbum-Cloud Owner Whitelisted-517',
+ 'SWYConverszGenAlbum-Cloud Owner Whitelisted-518',
+ 'zGenAlbum-Cloud Local Public URL Enabled-519',
+ 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-520',
+ 'zGenAlbum-Cloud Public URL Enabled-521',
+ 'zGenAlbum-Public URL-522',
+ 'SWYConverszGenAlbum-Cloud Public URL Enabled-523',
+ 'SWYConverszGenAlbum-Public URL-524',
+ 'zGenAlbum-Key Asset Face Thumb Index-525',
+ 'SWYConverszGenAlbum-Key Asset Face Thumb Index-526',
+ 'zGenAlbum-Project Text Extension ID-527',
+ 'SWYConverszGenAlbum-Project Text Extension ID-528',
+ 'zGenAlbum-User Query Data-529',
+ 'SWYConverszGenAlbum-User Query Data-530',
+ 'zGenAlbum-Custom Query Parameters-531',
+ 'SWYConverszGenAlbum-Custom Query Parameters-532',
+ 'zGenAlbum-Project Data-533',
+ 'SWYConverszGenAlbum-Project Data-534',
+ 'zGenAlbum-Search Index Rebuild State-535',
+ 'SWYConverszGenAlbum-Search Index Rebuild State-536',
+ 'zGenAlbum-Duplicate Type-537',
+ 'SWYConverszGenAlbum-Duplicate Type-538',
+ 'zGenAlbum-Privacy State-539',
+ 'SWYConverszGenAlbum-Privacy State-540',
+ 'zCldShareAlbumInvRec-zUUID-4TableStart-541',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-542',
+ 'zCldShareAlbumInvRec-Invitation State Local-543',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-544',
+ ('zCldShareAlbumInvRec-Subscription Date-545', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-546',
+ 'zCldShareAlbumInvRec-Invitee Last Name-547',
+ 'zCldShareAlbumInvRec-Invitee Full Name-548',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-549',
+ 'zCldShareAlbumInvRec-Invitee Email Key-550',
+ 'zGenAlbum-Key Asset Face ID-551',
+ 'zFaceCrop-Face Area Points-552',
+ 'zAsset-Face Adjustment Version-553',
+ 'zAddAssetAttr-Face Analysis Version-554',
+ 'zDetFace-Asset Visible-555',
+ 'zPerson-Face Count-556',
+ 'zDetFace-Face Crop-557',
+ 'zDetFace-Face Algorithm Version-558',
+ 'zDetFace-Adjustment Version-559',
+ 'zDetFace-UUID-4TableStart-560',
+ 'zPerson-Person UUID-4TableStart-561',
+ 'zDetFace-Confirmed Face Crop Generation State-562',
+ 'zDetFace-Manual-563',
+ 'zDetFace-Detection Type-564',
+ 'zPerson-Detection Type-565',
+ 'zDetFace-VIP Model Type-566',
+ 'zDetFace-Name Source-567',
+ 'zDetFace-Cloud Name Source-568',
+ 'zPerson-Merge Candidate Confidence-569',
+ 'zPerson-Person URI-570',
+ 'zPerson-Display Name-571',
+ 'zPerson-Full Name-572',
+ 'zPerson-Cloud Verified Type-573',
+ 'zFaceCrop-State-574',
+ 'zFaceCrop-Type-575',
+ 'zFaceCrop-UUID-4TableStart-576',
+ 'zPerson-Type-577',
+ 'zPerson-Verified Type-578',
+ 'zPerson-Gender Type-579',
+ 'zDetFace-Gender Type-580',
+ 'zDetFace-Center X-581',
+ 'zDetFace-Center Y-582',
+ 'zPerson-Age Type Estimate-583',
+ 'zDetFace-Age Type Estimate-584',
+ 'zDetFace-Ethnicity Type-585',
+ 'zDetFace-Skin Tone Type-586',
+ 'zDetFace-Hair Type-587',
+ 'zDetFace-Hair Color Type-588',
+ 'zDetFace-Head Gear Type-589',
+ 'zDetFace-Facial Hair Type-590',
+ 'zDetFace-Has Face Mask-591',
+ 'zDetFace-Pose Type-592',
+ 'zDetFace-Face Expression Type-593',
+ 'zDetFace-Has Smile-594',
+ 'zDetFace-Smile Type-595',
+ 'zDetFace-Lip Makeup Type-596',
+ 'zDetFace-Eyes State-597',
+ 'zDetFace-Is Left Eye Closed-598',
+ 'zDetFace-Is Right Eye Closed-599',
+ 'zDetFace-Gaze Center X-600',
+ 'zDetFace-Gaze Center Y-601',
+ 'zDetFace-Face Gaze Type-602',
+ 'zDetFace-Eye Glasses Type-603',
+ 'zDetFace-Eye Makeup Type-604',
+ 'zDetFace-Cluster Squence Number Key-605',
+ 'zDetFace-Grouping ID-606',
+ 'zDetFace-Master ID-607',
+ 'zDetFace-Quality-608',
+ 'zDetFace-Quality Measure-609',
+ 'zDetFace-Source Height-610',
+ 'zDetFace-Source Width-611',
+ 'zDetFace-Hidden-Asset Hidden-612',
+ 'zDetFace-In Trash-Recently Deleted-613',
+ 'zDetFace-Cloud Local State-614',
+ 'zDetFace-Training Type-615',
+ 'zDetFace.Pose Yaw-616',
+ 'zDetFace-Body Center X-617',
+ 'zDetFace-Body Center Y-618',
+ 'zDetFace-Body Height-619',
+ 'zDetFace-Body Width-620',
+ 'zDetFace-Roll-621',
+ 'zDetFace-Size-622',
+ 'zDetFace-Cluster Squence Number-623',
+ 'zDetFace-Blur Score-624',
+ 'zDetFacePrint-Face Print Version-625',
+ 'zMedAnlyAstAttr-Face Count-626',
+ 'zDetFaceGroup-UUID-4TableStart-627',
+ 'zDetFaceGroup-Person Builder State-628',
+ 'zDetFaceGroup-UnNamed Face Count-629',
+ 'zPerson-In Person Naming Model-630',
+ 'zPerson-Key Face Pick Source Key-631',
+ 'zPerson-Manual Order Key-632',
+ 'zPerson-Question Type-633',
+ 'zPerson-Suggested For Client Type-634',
+ 'zPerson-Merge Target Person-635',
+ 'zPerson-Cloud Local State-636',
+ 'zFaceCrop-Cloud Local State-637',
+ 'zFaceCrop-Cloud Type-638',
+ 'zPerson-Cloud Delete State-639',
+ 'zFaceCrop-Cloud Delete State-640',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-641',
+ 'zAsset-Highlight Visibility Score-642',
+ 'zMemory-UUID-4TableStart-643',
+ 'zMemory-AssetListPredicte-644',
+ 'zMemory-Score-645',
+ 'zMemory-SubTitle-646',
+ 'zMemory-Title-647',
+ 'zMemory-Category-648',
+ 'zMemory-SubCategory-649',
+ ('zMemory-Creation Date-650', 'datetime'),
+ ('zMemory-Last Enrichment Date-651', 'datetime'),
+ 'zMemory-User Action Options-652',
+ 'zMemory-Favorite Memory-653',
+ 'zMemory-View Count-654',
+ 'zMemory-Play Count-655',
+ 'zMemory-Rejected-656',
+ 'zMemory-Share Count-657',
+ 'zMemory-Sharing Composition-658',
+ ('zMemory-Last Movie Play Date-659', 'datetime'),
+ ('zMemory-Last Viewed Date-660', 'datetime'),
+ 'zMemory-Pending Play Count Memory-661',
+ 'zMemory-Pending Share Count Memory-662',
+ 'zMemory-Pending View Count Memory-663',
+ 'zMemory-Pending State-664',
+ 'zMemory-Featured State-665',
+ 'zMemory-Photos Graph Version-666',
+ 'zMemory-Graph Memory Identifier-667',
+ 'zMemory-Notification State-668',
+ 'zMemory-Cloud Local State-669',
+ 'zMemory-Cloud Delete State-670',
+ 'zMemory-Story Color Grade Kind-671',
+ 'zMemory-Story Serialized Title Category-672',
+ 'zMemory-Syndicated Content State-673',
+ 'zMemory-Search Index Rebuild State-674',
+ 'zMemory-Black Listed Feature-675',
+ 'zMoment-UUID-4TableStart-676',
+ 'zMoment-Aggregation Score-677',
+ ('zMoment-Start Date-678', 'datetime'),
+ ('zMoment-Representative Date-679', 'datetime'),
+ 'zMoment-Timezone Offset-680',
+ ('zMoment-Modification Date-681', 'datetime'),
+ ('zMoment-End Date-682', 'datetime'),
+ 'zMoment-SubTitle-683',
+ 'zMoment-Title-684',
+ 'zMoment-Originator State-685',
+ 'zMoment-Sharing Composition-686',
+ 'zMoment-Cached Count Shared-687',
+ 'zMoment-Processed Location-688',
+ 'zMoment-Approx Latitude-689',
+ 'zMoment-Approx Longitude-690',
+ 'zMoment-GPS Horizontal Accuracy-691',
+ 'zMoment-Cache Count-692',
+ 'zMoment-Cached Photos Count-693',
+ 'zMoment-Cached Videos Count-694',
+ 'zMoment-Trashed State-695',
+ 'SBKAzSugg-UUID-4TableStart-696',
+ 'SBKAzSugg-Suggestion Context-697',
+ 'SBKAzSugg-Sharing Composition-698',
+ ('SBKAzSugg-Start Date-699', 'datetime'),
+ 'SBKAzSugg-State-700',
+ 'SBKAzSugg-Featured State-701',
+ 'SBKAzSugg-Notification State-702',
+ ('SBKAzSugg-Creation Date-703', 'datetime'),
+ ('SBKAzSugg-End Date-704', 'datetime'),
+ ('SBKAzSugg-Activation Date-705', 'datetime'),
+ ('SBKAzSugg-Expunge Date-706', 'datetime'),
+ ('SBKAzSugg-Relevant Until Date-707', 'datetime'),
+ 'SBKAzSugg-Title-708',
+ 'SBKAzSugg-Sub Title-709',
+ 'SBKAzSugg-Cached Count-710',
+ 'SBKAzSugg-Cahed Photos Count-711',
+ 'SBKAzSugg-Cached Videos Count-712',
+ 'SBKAzSugg-Type-713',
+ 'SBKAzSugg-Sub Type-714',
+ 'SBKAzSugg-Action Data-715',
+ 'SBKAzSugg-Version-716',
+ 'SBKAzSugg-Cloud Local State-717',
+ 'SBKAzSugg-Cloud Delete State-718',
+ 'SBRAzSugg-UUID-4TableStart-719',
+ 'SBRAzSugg-Suggestion Context-720',
+ 'SBRAzSugg-Sharing Composition-721',
+ ('SBRAzSugg-Start Date-722', 'datetime'),
+ 'SBRAzSugg-State-723',
+ 'SBRAzSugg-Featured State-724',
+ 'SBRAzSugg-Notification State-725',
+ ('SBRAzSugg-Creation Date-726', 'datetime'),
+ ('SBRAzSugg-End Date-727', 'datetime'),
+ ('SBRAzSugg-Activation Date-728', 'datetime'),
+ ('SBRAzSugg-Expunge Date-729', 'datetime'),
+ ('SBRAzSugg-Relevant Until Date-730', 'datetime'),
+ 'SBRAzSugg-Title-731',
+ 'SBRAzSugg-Sub Title-732',
+ 'SBRAzSugg-Cached Count-733',
+ 'SBRAzSugg-Cahed Photos Count-734',
+ 'SBRAzSugg-Cached Videos Count-735',
+ 'SBRAzSugg-Type-736',
+ 'SBRAzSugg-Sub Type-737',
+ 'SBRAzSugg-Action Data-738',
+ 'SBRAzSugg-Version-739',
+ 'SBRAzSugg-Cloud Local State-740',
+ 'SBRAzSugg-Cloud Delete State-741',
+ 'zMedAnlyAstAttr-Media Analysis Version-742',
+ 'zMedAnlyAstAttr-Audio Classification-743',
+ 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-744',
+ 'zMedAnlyAstAttr-Best Video Range Start Time Scale-745',
+ 'zMedAnlyAstAttr-Best Video Range Duration Value-746',
+ 'zMedAnlyAstAttr-Best Video Range Start Value-747',
+ 'zMedAnlyAstAttr-Packed Best Playback Rect-748',
+ 'zMedAnlyAstAttr-Activity Score-749',
+ 'zMedAnlyAstAttr-Video Score-750',
+ 'zMedAnlyAstAttr-Audio Score-751',
+ 'zMedAnlyAstAttr-Wallpaper Score-752',
+ 'zMedAnlyAstAttr-AutoPlay Suggestion Score-753',
+ 'zMedAnlyAstAttr-Blurriness Score-754',
+ 'zMedAnlyAstAttr-Exposure Score-755',
+ 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-756',
+ 'zMedAnlyAstAttr-Probable Rotation Direction-757',
+ 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-758',
+ 'zAssetAnalyState-Asset UUID-4TableStart-759',
+ 'zAssetAnalyState-Analyisis State-760',
+ 'zAssetAnalyState-Worker Flags-761',
+ 'zAssetAnalyState-Worker Type-762',
+ ('zAssetAnalyState-Ignore Until Date-763', 'datetime'),
+ ('zAssetAnalyState-Last Ignored Date-764', 'datetime'),
+ ('zAssetAnalyState-Sort Token-765', 'datetime'),
+ 'zMedAnlyAstAttr-Character Recognition Attr-766',
+ 'zCharRecogAttr-Algorithm Version-767',
+ 'zCharRecogAttr-Adjustment Version-768',
+ 'zMedAnlyAstAttr-Visual Search Attributes-769',
+ 'zVisualSearchAttr-Algorithm Version-770',
+ 'zVisualSearchAttr-Adjustment Version-771',
+ 'zAsset-Overall Aesthetic Score-772',
+ 'zCompAssetAttr-Behavioral Score-773',
+ 'zCompAssetAttr-Failure Score zCompAssetAttr-774',
+ 'zCompAssetAttr-Harmonious Color Score-775',
+ 'zCompAssetAttr-Immersiveness Score-776',
+ 'zCompAssetAttr-Interaction Score-777',
+ 'zCompAssetAttr-Intersting Subject Score-778',
+ 'zCompAssetAttr-Intrusive Object Presence Score-779',
+ 'zCompAssetAttr-Lively Color Score-780',
+ 'zCompAssetAttr-Low Light-781',
+ 'zCompAssetAttr-Noise Score-782',
+ 'zCompAssetAttr-Pleasant Camera Tilt Score-783',
+ 'zCompAssetAttr-Pleasant Composition Score-784',
+ 'zCompAssetAttr-Pleasant Lighting Score-785',
+ 'zCompAssetAttr-Pleasant Pattern Score-786',
+ 'zCompAssetAttr-Pleasant Perspective Score-787',
+ 'zCompAssetAttr-Pleasant Post Processing Score-788',
+ 'zCompAssetAttr-Pleasant Reflection Score-789',
+ 'zCompAssetAttrPleasant Symmetry Score-790',
+ 'zCompAssetAttr-Sharply Focused Subject Score-791',
+ 'zCompAssetAttr-Tastfully Blurred Score-792',
+ 'zCompAssetAttr-Well Chosen Subject Score-793',
+ 'zCompAssetAttr-Well Framed Subject Score-794',
+ 'zCompAssetAttr-Well Timeed Shot Score-795',
+ 'zCldRes-Asset UUID-4TableStart-796',
+ 'zCldRes-Cloud Local State-797',
+ 'zCldRes-File Size-798',
+ 'zCldRes-Height-799',
+ 'zCldRes-Is Available-800',
+ 'zCldRes-Is Locally Available-801',
+ 'zCldRes-Prefetch Count-802',
+ 'zCldRes-Source Type-803',
+ 'zCldRes-Type-804',
+ 'zCldRes-Width-805',
+ ('zCldRes-Date Created-806', 'datetime'),
+ ('zCldRes-Last OnDemand Download Date-807', 'datetime'),
+ ('zCldRes-Last Prefetch Date-808', 'datetime'),
+ 'zCldRes-Prunedat-809',
+ 'zCldRes-File Path-810',
+ 'zCldRes-Fingerprint-811',
+ 'zCldRes-Item ID-812',
+ 'zCldRes-UniID-813',
+ 'zUserFeedback-UUID-4TableStart-814',
+ 'zUserFeedback-Feature-815',
+ 'zUserFeedback-Type-816',
+ ('zUserFeedback-Last Modified Date-817', 'datetime'),
+ 'zUserFeedback-Context-818',
+ 'zUserFeedback-Cloud Local State-819',
+ 'zUserFeedback-Cloud Delete State-820',
+ 'zAddAssetAttr-zPK-821',
+ 'zAddAssetAttr-zENT-822',
+ 'ZAddAssetAttr-zOPT-823',
+ 'zAddAssetAttr-zAsset= zAsset_zPK-824',
+ 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-825',
+ 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-826',
+ 'zAddAssetAttr-Master Fingerprint-827',
+ 'zAddAssetAttr-Public Global UUID-828',
+ 'zAddAssetAttr-Deferred Photo Identifier-829',
+ 'zAddAssetAttr-Original Assets UUID-830',
+ 'zAddAssetAttr-Import Session ID-831',
+ 'zAddAssetAttr-Originating Asset Identifier-832',
+ 'zAddAssetAttr.Adjusted Fingerprint-833',
+ 'zAlbumList-zPK= Album List Key-834',
+ 'zAlbumList-zENT-835',
+ 'zAlbumList-zOPT-836',
+ 'zAlbumList-ID Key-837',
+ 'zAlbumList-UUID-838',
+ 'zAsset-zPK-839',
+ 'zAsset-zENT-840',
+ 'zAsset-zOPT-841',
+ 'zAsset-Master= zCldMast-zPK-842',
+ 'zAsset-Extended Attributes= zExtAttr-zPK-843',
+ 'zAsset-Import Session Key-844',
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-845',
+ 'zAsset-Photo Analysis Attributes Key-846',
+ 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-847',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-848',
+ 'zAsset-Moment Share Key= zShare-zPK-849',
+ 'zAsset-zMoment Key= zMoment-zPK-850',
+ 'zAsset-Computed Attributes Asset Key-851',
+ 'zAsset-Highlight Being Assets-HBA Key-852',
+ 'zAsset-Highlight Being Extended Assets-HBEA Key-853',
+ 'zAsset-Highlight Being Key Asset Private-HBKAP Key-854',
+ 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-855',
+ 'zAsset-Highligh Being Summary Assets-HBSA Key-856',
+ 'zAsset-Day Group Highlight Being Assets-DGHBA Key-857',
+ 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-858',
+ 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-859',
+ 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-860',
+ 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-861',
+ 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-862',
+ 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-863',
+ 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-864',
+ 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-865',
+ 'zAsset-Promotion Score-866',
+ 'zAsset-Media Analysis Attributes Key-867',
+ 'zAsset-Media Group UUID-868',
+ 'zAsset-UUID = store.cloudphotodb-869',
+ 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-870',
+ 'zAsset.Cloud Collection GUID-871',
+ 'zAsset-Avalanche UUID-872',
+ 'zAssetAnalyState-zPK-873',
+ 'zAssetAnalyState-zEnt-874',
+ 'zAssetAnalyState-zOpt-875',
+ 'zAssetAnalyState-Asset= zAsset-zPK-876',
+ 'zAssetAnalyState-Asset UUID-877',
+ 'zAsstContrib-zPK-878',
+ 'zAsstContrib-zEnt-879',
+ 'zAsstContrib-zOpt-880',
+ 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-881',
+ 'zAsstContrib-Participant= zSharePartic-zPK-882',
+ 'zAssetDes-zPK-883',
+ 'zAssetDes-zENT-884',
+ 'zAssetDes-zOPT-885',
+ 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-886',
+ 'zCharRecogAttr-zPK-887',
+ 'zCharRecogAttr-zENT-888',
+ 'zCharRecogAttr-zOPT-889',
+ 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-890',
+ 'zCldFeedEnt-zPK= zCldShared keys-891',
+ 'zCldFeedEnt-zENT-892',
+ 'zCldFeedEnt-zOPT-893',
+ 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-894',
+ 'zCldFeedEnt-Entry Invitation Record GUID-895',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-896',
+ 'zCldMast-zPK= zAsset-Master-897',
+ 'zCldMast-zENT-898',
+ 'zCldMast-zOPT-899',
+ 'zCldMast-Moment Share Key= zShare-zPK-900',
+ 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-901',
+ 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-902',
+ 'zCldMast-Originating Asset ID-903',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-904',
+ 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-905',
+ 'CMzCldMastMedData-zENT-906',
+ 'CMzCldMastMedData-zOPT-907',
+ 'CMzCldMastMedData-CldMast= zCldMast-zPK-908',
+ 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-909',
+ 'AAAzCldMastMedData-zENT-910',
+ 'AAAzCldMastMedData-zOPT-911',
+ 'AAAzCldMastMedData-CldMast key-912',
+ 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-913',
+ 'zCldRes-zPK-914',
+ 'zCldRes-zENT-915',
+ 'zCldRes-zOPT-916',
+ 'zCldRes-Asset= zAsset-zPK-917',
+ 'zCldRes-Cloud Master= zCldMast-zPK-918',
+ 'zCldRes-Asset UUID-919',
+ 'zCldShareAlbumInvRec-zPK-920',
+ 'zCldShareAlbumInvRec-zEnt-921',
+ 'zCldShareAlbumInvRec-zOpt-922',
+ 'zCldShareAlbumInvRec-Album Key-923',
+ 'zCldShareAlbumInvRec-FOK Album Key-924',
+ 'zCldShareAlbumInvRec-Album GUID-925',
+ 'zCldShareAlbumInvRec-zUUID-926',
+ 'zCldShareAlbumInvRec-Cloud GUID-927',
+ 'zCldSharedComment-zPK-928',
+ 'zCldSharedComment-zENT-929',
+ 'zCldSharedComment-zOPT-930',
+ 'zCldSharedComment-Commented Asset Key= zAsset-zPK-931',
+ 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-932',
+ 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-933',
+ 'zCldSharedComment-Liked Asset Key= zAsset-zPK-934',
+ 'zCldSharedComment-CldFeedLikeCommentEntry Key-935',
+ 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-936',
+ 'zCldSharedComment-Cloud GUID-937',
+ 'zCompAssetAttr-zPK-938',
+ 'zCompAssetAttr-zEnt-939',
+ 'zCompAssetAttr-zOpt-940',
+ 'zCompAssetAttr-Asset Key-941',
+ 'zDetFace-zPK-942',
+ 'zDetFace-zEnt-943',
+ 'zDetFace.zOpt-944',
+ 'zDetFace-Asset= zAsset-zPK or Asset Containing Face-945',
+ 'zDetFace-Person= zPerson-zPK-946',
+ 'zDetFace-Person Being Key Face-947',
+ 'zDetFace-Face Print-948',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-949',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-950',
+ 'zDetFace-UUID-951',
+ 'zDetFaceGroup-zPK-952',
+ 'zDetFaceGroup-zENT-953',
+ 'zDetFaceGroup-zOPT-954',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-955',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-956',
+ 'zDetFaceGroup-UUID-957',
+ 'zDetFacePrint-zPK-958',
+ 'zDetFacePrint-zEnt-959',
+ 'zDetFacePrint-zOpt-960',
+ 'zDetFacePrint-Face Key-961',
+ 'zExtAttr-zPK= zAsset-zExtendedAttributes-962',
+ 'zExtAttr-zENT-963',
+ 'zExtAttr-zOPT-964',
+ 'zExtAttr-Asset Key-965',
+ 'zFaceCrop-zPK-966',
+ 'zFaceCrop-zEnt-967',
+ 'zFaceCrop-zOpt-968',
+ 'zFaceCrop-Asset Key-969',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-970',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-971',
+ 'zFaceCrop-Face Key-972',
+ 'zFaceCrop-UUID-973',
+ 'zGenAlbum-zPK=26AlbumLists= 26Albums-974',
+ 'zGenAlbum-zENT-975',
+ 'zGenAlbum-zOpt-976',
+ 'zGenAlbum-Key Asset-Key zAsset-zPK-977',
+ 'zGenAlbum-Secondary Key Asset-978',
+ 'zGenAlbum-Tertiary Key Asset-979',
+ 'zGenAlbum-Custom Key Asset-980',
+ 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-981',
+ 'zGenAlbum-FOK Parent Folder-982',
+ 'zGenAlbum-zSyndicate-983',
+ 'zGenAlbum-UUID-984',
+ 'SWYConverszGenAlbum-UUID-985',
+ 'zGenAlbum-Cloud_GUID = store.cloudphotodb-986',
+ 'SWYConverszGenAlbum-Cloud GUID-987',
+ 'zGenAlbum-Project Render UUID-988',
+ 'SWYConverszGenAlbum-Project Render UUID-989',
+ 'zIntResou-zPK-990',
+ 'zIntResou-zENT-991',
+ 'zIntResou-zOPT-992',
+ 'zIntResou-Asset= zAsset_zPK-993',
+ 'zIntResou-Fingerprint-994',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-995',
+ 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-996',
+ 'zMedAnlyAstAttr-zEnt-997',
+ 'zMedAnlyAstAttr-zOpt-998',
+ 'zMedAnlyAstAttr-Asset= zAsset-zPK-999',
+ 'zMemory-zPK-1000',
+ 'zMemory-zENT-1001',
+ 'zMemory-zOPT-1002',
+ 'zMemory-Key Asset= zAsset-zPK-1003',
+ 'zMemory-UUID-1004',
+ 'zMoment-zPK-1005',
+ 'zMoment-zENT-1006',
+ 'zMoment-zOPT-1007',
+ 'zMoment-Highlight Key-1008',
+ 'zMoment-UUID-1009',
+ 'zPerson-zPK=zDetFace-Person-1010',
+ 'zPerson-zEnt-1011',
+ 'zPerson-zOpt-1012',
+ 'zPerson-Share Participant= zSharePartic-zPK-1013',
+ 'zPerson-KeyFace=zDetFace-zPK-1014',
+ 'zPerson-Assoc Face Group Key-1015',
+ 'zPerson-Person UUID-1016',
+ 'zPhotoAnalysisAssetAttr-zPK-1017',
+ 'zPhotoAnalysisAssetAttr-zEnt-1018',
+ 'zPhotoAnalysisAssetAttr-zOpt-1019',
+ 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1020',
+ 'zSceneP-zPK-1021',
+ 'zSceneP-zENT-1022',
+ 'zSceneP-zOPT-1023',
+ 'zShare-zPK-1024',
+ 'zShare-zENT-1025',
+ 'zShare-zOPT-1026',
+ 'zShare-UUID-1027',
+ 'SPLzShare-UUID-1028',
+ 'zShare-Scope ID = store.cloudphotodb-1029',
+ 'zSharePartic-zPK-1030',
+ 'zSharePartic-zENT-1031',
+ 'zSharePartic-zOPT-1032',
+ 'zSharePartic-Share Key= zShare-zPK-1033',
+ 'zSharePartic-Person= zPerson-zPK-1034',
+ 'zSharePartic-UUID-1035',
+ 'SBKAzSugg-zPK-1036',
+ 'SBKAzSugg-zENT-1037',
+ 'SBKAzSugg-zOPT-1038',
+ 'SBKAzSugg-UUID-1039',
+ 'SBRAzSugg-zPK-1040',
+ 'SBRAzSugg-zENT-1041',
+ 'SBRAzSugg-zOPT-1042',
+ 'SBRAzSugg-UUID-1043',
+ 'z3SuggBRA-3RepAssets1-1044',
+ 'z3SuggBRA-58SuggBeingRepAssets-1045',
+ 'z3SuggBKA-58SuggBeingKeyAssets= zSugg-zPK-1046',
+ 'z3SuggBKA-3KeyAssets= zAsset-zPK-1047',
+ 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1048',
+ 'zUnmAdj-zOPT-1049',
+ 'zUnmAdj-zENT-1050',
+ 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1051',
+ 'zUnmAdj-UUID-1052',
+ 'zUnmAdj-Other Adjustments Fingerprint-1053',
+ 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1054',
+ 'zUserFeedback-zPK-1055',
+ 'zUserFeedback-zENT-1056',
+ 'zUserFeedback-zOPT-1057',
+ 'zUserFeedback-Person= zPerson-zPK-1058',
+ 'zUserFeedback-Memory= zMemory-zPK-1059',
+ 'zUserFeedback-UUID-1060',
+ 'zVisualSearchAttr-zPK-1061',
+ 'zVisualSearchAttr-zENT-1062',
+ 'zVisualSearchAttr-zOPT-1063',
+ 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1064',
+ 'z27AlbumList-27Albums= zGenAlbum-zPK-1065',
+ 'z27AlbumList-Album List Key-1066',
+ 'z27AlbumList-FOK27Albums Key-1067',
+ 'z28Assets-28Albums= zGenAlbum-zPK-1068',
+ 'z28Assets-3Asset Key= zAsset-zPK in the Album-1069',
+ 'z28Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1070',
+ 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1071',
+ 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1072',
+ 'z3MemoryBCAs-44MemoriesBeingCuratedAssets= zMemory-zPK-1073',
+ 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1074',
+ 'z3MemoryBECAs-44MemoriesBeingExtCuratedAssets= zMemory-zPK-1075',
+ 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1076',
+ 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK-1077',
+ 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1078',
+ 'z3MemoryBUCAs-44MemoriesBeingUserCuratedAssets= zMemory-zPK-1079',
+ 'z3MemoryBCAs-44Memories Being Custom User Assets-1080',
+ 'z3MemoryBCAs-3Custom User Assets-1081',
+ 'z3MemoryBCAs-FOK-3Custom User Assets-1082')
+ data_list = get_sqlite_db_records(source_path, query)
-
-__artifacts_v2__ = {
- 'Ph96-1-iOS16_Ref_for_Asset_Analysis-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite 96.1 iOS16 Reference for Asset Analysis',
- 'description': 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest'
- ' set of decoded data based on testing and research conducted by Scott Koenig'
- ' https://theforensicscooter.com/. I recommend opening the TSV generated reports'
- ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer'
- ' to view, search and filter the results.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '1.0',
- 'date': '2024-04-19',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph96ios16refforassetanalysisphdapsql'
- },
- 'Ph96-2-iOS16_Ref_for_Asset_Analysis-SyndPL': {
- 'name': 'SyndPL Photos.sqlite 96.2 iOS16 Reference for Asset Analysis',
- 'description': 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.'
- ' This parser includes the largest set of decoded data based on testing and research'
- ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the'
- ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md'
- ' TimelineExplorer to view, search and filter the results.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '1.0',
- 'date': '2024-04-19',
- 'requirements': 'Acquisition that contains Syndication.photoslibrary-database-Photos.sqlite',
- 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis',
- 'notes': '',
- 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',
- 'function': 'get_ph96ios16refforassetanalysissyndpl'
- }
-}
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph97iOS17REFforAssetAnalysis.py b/scripts/artifacts/Ph97iOS17REFforAssetAnalysis.py
index bd286e87..59fc9b90 100644
--- a/scripts/artifacts/Ph97iOS17REFforAssetAnalysis.py
+++ b/scripts/artifacts/Ph97iOS17REFforAssetAnalysis.py
@@ -1,41 +1,66 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 1.0
-#
-# Description:
-# Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest set of decoded data based on
-# testing and research conducted by Scott Koenig https://theforensicscooter.com/ and
-# queries found at https://github.com/ScottKjr3347.
-# I recommend opening the TSV generated reports with Zimmerman's Tools https://ericzimmerman.github.io/#!index.md
-# TimelineExplorer to view, search and filter the results.
-#
+__artifacts_v2__ = {
+ 'Ph97_1iOS17RefforAssetAnalysisPhDaPsql': {
+ 'name': 'Ph97.1-iOS17_Ref_for_Asset_Analysis-PhDaPsql',
+ 'description': 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest'
+ ' set of decoded data based on testing and research conducted by Scott Koenig'
+ ' https://theforensicscooter.com/. I recommend opening the TSV generated reports'
+ ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer'
+ ' to view, search and filter the results.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ },
+ 'Ph97_2iOS17RefforAssetAnalysisSyndPL': {
+ 'name': 'Ph97.2-iOS17_Ref_for_Asset_Analysis-SyndPL',
+ 'description': 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.'
+ ' This parser includes the largest set of decoded data based on testing and research'
+ ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the'
+ ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md'
+ ' TimelineExplorer to view, search and filter the results.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains Syndication.photoslibrary-database-Photos.sqlite',
+ 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis',
+ 'notes': '',
+ 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
+@artifact_processor
+def Ph97_1iOS17RefforAssetAnalysisPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
-def get_ph97ios17refforassetanalysisphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
-
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if (version.parse(iosversion) <= version.parse("16.7.7")) or (version.parse(iosversion) >= version.parse("18")):
- logfunc(f"Unsupported version for PhotoData-Photos.sqlite reference for asset analysis from iOS " + iosversion)
- if (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ logfunc(f"Unsupported version for PhotoData-Photos.sqlite for iOS " + iosversion)
+ return (), [], source_path
+ if (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("17.6")):
+ source_path = get_file_path(files_found, "Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -2285,7 +2310,7 @@ def get_ph97ios17refforassetanalysisphdapsql(files_found, report_folder, seeker,
zAssetAnalyState.ZWORKERTYPE AS 'zAssetAnalyState-Worker Type',
DateTime(zAssetAnalyState.ZIGNOREUNTILDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Ignore Until Date',
DateTime(zAssetAnalyState.ZLASTIGNOREDDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Last Ignored Date',
- zAssetAnalyState.ZSORTTOKEN AS 'zAssetAnalyState-Sort Token',
+ DateTime(zAssetAnalyState.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Sort Token',
zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES AS 'zMedAnlyAstAttr-Character Recognition Attr',
zCharRecogAttr.ZALGORITHMVERSION AS 'zCharRecogAttr-Algorithm Version',
zCharRecogAttr.ZADJUSTMENTVERSION AS 'zCharRecogAttr-Adjustment Version',
@@ -2568,8 +2593,8 @@ def get_ph97ios17refforassetanalysisphdapsql(files_found, report_folder, seeker,
SBRAzSugg.Z_OPT AS 'SBRAzSugg-zOPT',
SBRAzSugg.ZUUID AS 'SBRAzSugg-UUID',
z3SuggBRA.Z_3REPRESENTATIVEASSETS1 AS 'z3SuggBRA-3RepAssets1',
- z3SuggBRA.Z_58SUGGESTIONSBEINGREPRESENTATIVEASSETS AS 'z3SuggBRA-58SuggBeingRepAssets',
- z3SuggBKA.Z_58SUGGESTIONSBEINGKEYASSETS AS 'z3SuggBKA-58SuggBeingKeyAssets= zSugg-zPK',
+ z3SuggBRA.Z_59SUGGESTIONSBEINGREPRESENTATIVEASSETS AS 'z3SuggBRA-59SuggBeingRepAssets',
+ z3SuggBKA.Z_59SUGGESTIONSBEINGKEYASSETS AS 'z3SuggBKA-59SuggBeingKeyAssets= zSugg-zPK',
z3SuggBKA.Z_3KEYASSETS AS 'z3SuggBKA-3KeyAssets= zAsset-zPK',
zUnmAdj.Z_PK AS 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key',
zUnmAdj.Z_OPT AS 'zUnmAdj-zOPT',
@@ -2653,1293 +2678,1258 @@ def get_ph97ios17refforassetanalysisphdapsql(files_found, report_folder, seeker,
LEFT JOIN ZUSERFEEDBACK zUserFeedback ON zUserFeedback.ZMEMORY = zMemory.Z_PK
LEFT JOIN ZMOMENT zMoment ON zMoment.Z_PK = zAsset.ZMOMENT
LEFT JOIN Z_3SUGGESTIONSBEINGKEYASSETS z3SuggBKA ON z3SuggBKA.Z_3KEYASSETS = zAsset.Z_PK
- LEFT JOIN ZSUGGESTION SBKAzSugg ON SBKAzSugg.Z_PK = z3SuggBKA.Z_58SUGGESTIONSBEINGKEYASSETS
+ LEFT JOIN ZSUGGESTION SBKAzSugg ON SBKAzSugg.Z_PK = z3SuggBKA.Z_59SUGGESTIONSBEINGKEYASSETS
LEFT JOIN Z_3SUGGESTIONSBEINGREPRESENTATIVEASSETS z3SuggBRA ON z3SuggBRA.Z_3REPRESENTATIVEASSETS1 = zAsset.Z_PK
- LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_58SUGGESTIONSBEINGREPRESENTATIVEASSETS
+ LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_59SUGGESTIONSBEINGREPRESENTATIVEASSETS
ORDER BY zAsset.ZADDEDDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
- row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
- row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
- row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
- row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
- row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
- row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
- row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
- row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
- row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
- row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
- row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
- row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
- row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
- row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
- row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
- row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
- row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
- row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
- row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
- row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307],
- row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315],
- row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323],
- row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331],
- row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339],
- row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347],
- row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355],
- row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363],
- row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371],
- row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379],
- row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387],
- row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395],
- row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403],
- row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411],
- row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419],
- row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427],
- row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435],
- row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443],
- row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451],
- row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459],
- row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467],
- row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475],
- row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483],
- row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491],
- row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499],
- row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507],
- row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515],
- row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523],
- row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531],
- row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539],
- row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547],
- row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555],
- row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563],
- row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571],
- row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579],
- row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587],
- row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595],
- row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603],
- row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611],
- row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619],
- row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627],
- row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635],
- row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643],
- row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651],
- row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659],
- row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667],
- row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675],
- row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683],
- row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691],
- row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699],
- row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707],
- row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715],
- row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723],
- row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731],
- row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739],
- row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747],
- row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755],
- row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763],
- row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771],
- row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779],
- row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787],
- row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795],
- row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803],
- row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811],
- row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819],
- row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827],
- row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835],
- row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843],
- row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851],
- row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859],
- row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867],
- row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875],
- row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883],
- row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891],
- row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899],
- row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907],
- row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915],
- row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923],
- row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931],
- row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939],
- row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947],
- row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955],
- row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963],
- row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971],
- row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979],
- row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987],
- row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995],
- row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002],
- row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009],
- row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016],
- row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023],
- row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030],
- row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037],
- row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044],
- row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051],
- row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058],
- row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065],
- row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072],
- row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079],
- row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086],
- row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093]))
-
- counter += 1
-
- description = 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest' \
- ' set of decoded data based on testing and research conducted by Scott Koenig' \
- ' https://theforensicscooter.com/. I recommend opening the TSV generated reports' \
- ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer' \
- ' to view, search and filter the results.'
- report = ArtifactHtmlReport('Ph97.1-iOS17_Ref_for_Asset_Analysis-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph97.1-iOS17_Ref_for_Asset_Analysis-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Added Date-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset Complete-2',
- 'zAsset-zPK-4QueryStart-3',
- 'zAddAssetAttr-zPK-4QueryStart-4',
- 'zAsset-UUID = store.cloudphotodb-4QueryStart-5',
- 'zAddAssetAttr-Master Fingerprint-4TableStart-6',
- 'zIntResou-Fingerprint-4TableStart-7',
- 'zAsset-Bundle Scope-8',
- 'zAsset-Syndication State-9',
- 'zAsset-Cloud is My Asset-10',
- 'zAsset-Cloud is deletable-Asset-11',
- 'zAsset-Cloud_Local_State-12',
- 'zAsset-Visibility State-13',
- 'zExtAttr-Camera Make-14',
- 'zExtAttr-Camera Model-15',
- 'zExtAttr-Lens Model-16',
- 'zExtAttr-Flash Fired-17',
- 'zExtAttr-Focal Lenght-18',
- 'zExtAttr-Focal Lenth in 35MM-19',
- 'zExtAttr-Digital Zoom Ratio-20',
- 'zAsset-Derived Camera Capture Device-21',
- 'zAddAssetAttr-Camera Captured Device-22',
- 'zAddAssetAttr-Imported by-23',
- 'zCldMast-Imported By-24',
- 'zAddAssetAttr.Imported by Bundle Identifier-25',
- 'zAddAssetAttr-Imported By Display Name-26',
- 'zCldMast-Imported by Bundle ID-27',
- 'zCldMast-Imported by Display Name-28',
- 'zAsset-Saved Asset Type-29',
- 'zAsset-Directory-Path-30',
- 'zAsset-Filename-31',
- 'zAddAssetAttr- Original Filename-32',
- 'zCldMast- Original Filename-33',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-34',
- 'zAsset-Active Library Scope Participation State -4QueryStart-35',
- 'zAsset-Library Scope Share State- StillTesting -4QueryStart-36',
- 'SPLzShare-Cloud Photo Count-SPL -4QueryStart-37',
- 'SPLzShare-Cloud Video Count-SPL -4QueryStart-38',
- 'zAddAssetAttr-Date Created Source-39',
- 'zAsset-Date Created-40',
- 'zCldMast-Creation Date-41',
- 'zIntResou-CldMst Date Created-42',
- 'zAddAssetAttr-Time Zone Name-43',
- 'zAddAssetAttr-Time Zone Offset-44',
- 'zAddAssetAttr-Inferred Time Zone Offset-45',
- 'zAddAssetAttr-EXIF-String-46',
- 'zAsset-Modification Date-47',
- 'zAddAssetAttr-Last Viewed Date-48',
- 'zAsset-Last Shared Date-49',
- 'zCldMast-Cloud Local State-50',
- 'zCldMast-Import Date-51',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-52',
- 'zAddAssetAttr-Import Session ID-4QueryStart-53',
- 'zAddAssetAttr-Alt Import Image Date-54',
- 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-55',
- 'zAsset-Cloud Batch Publish Date-56',
- 'zAsset-Cloud Server Publish Date-57',
- 'zAsset-Cloud Download Requests-58',
- 'zAsset-Cloud Batch ID-59',
- 'zAddAssetAttr-Upload Attempts-60',
- 'zAsset-Latitude-61',
- 'zExtAttr-Latitude-62',
- 'zAsset-Longitude-63',
- 'zExtAttr-Longitude-64',
- 'zAddAssetAttr-GPS Horizontal Accuracy-65',
- 'zAddAssetAttr-Location Hash-66',
- 'zAddAssetAttr-Shifted Location Valid-67',
- 'zAddAssetAttr-Shifted Location Data-68',
- 'zAddAssetAttr-Reverse Location Is Valid-69',
- 'zAddAssetAttr-Reverse Location Data-70',
- 'ParentzGenAlbum-UUID-4QueryStart-71',
- 'zGenAlbum-UUID-4QueryStart-72',
- 'SWYConverszGenAlbum-UUID-4QueryStart-73',
- 'ParentzGenAlbum-Cloud GUID-4QueryStart-74',
- 'zGenAlbum-Cloud GUID-4QueryStart-75',
- 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-76',
- 'zCldShareAlbumInvRec-Album GUID-4QueryStart-77',
- 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-78',
- 'zGenAlbum-Project Render UUID-4QueryStart-79',
- 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-80',
- 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-81',
- 'zGenAlbum-Cloud_Local_State-4QueryStart-82',
- 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-83',
- 'ParentzGenAlbum- Creation Date- 4QueryStart-84',
- 'zGenAlbum- Creation Date- 4QueryStart-85',
- 'SWYConverszGenAlbum- Creation Date- 4QueryStart-86',
- 'zGenAlbum- Cloud Creation Date- 4QueryStart-87',
- 'SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-88',
- 'zGenAlbum- Start Date- 4QueryStart-89',
- 'SWYConverszGenAlbum- Start Date- 4QueryStart-90',
- 'zGenAlbum- End Date- 4QueryStart-91',
- 'SWYConverszGenAlbum- End Date- 4QueryStart-92',
- 'zGenAlbum-Cloud Subscription Date- 4QueryStart-93',
- 'SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-94',
- 'ParentzGenAlbum- Title- 4QueryStart-95',
- 'zGenAlbum- Title-User&System Applied- 4QueryStart-96',
- 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-97',
- 'zGenAlbum-Import Session ID-SWY- 4QueryStart-98',
- 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-99',
- 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-100',
- 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-101',
- 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-102',
- 'SWYConverszGenAlbum- Syndicate-4QueryStart-103',
- 'zGenAlbum-zENT- Entity- 4QueryStart-104',
- 'ParentzGenAlbum- Kind- 4QueryStart-105',
- 'zGenAlbum-Album Kind- 4QueryStart-106',
- 'SWYConverszGenAlbum-Album Kind- 4QueryStart-107',
- 'AAAzCldMastMedData-zOPT-108',
- 'zAddAssetAttr-Media Metadata Type-109',
- 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-110',
- 'AAAzCldMastMedData-Data-111',
- 'CldMasterzCldMastMedData-zOPT-112',
- 'zCldMast-Media Metadata Type-113',
- 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-114',
- 'CMzCldMastMedData-Data-115',
- 'zAsset-Search Index Rebuild State-116',
- 'zAddAssetAttr-Syndication History-117',
- 'zMedAnlyAstAttr-Syndication Processing Version-118',
- 'zMedAnlyAstAttr-Syndication Processing Value-119',
- 'zAsset-Orientation-120',
- 'zAddAssetAttr-Original Orientation-121',
- 'zAsset-Kind-122',
- 'zAsset-Kind-Sub-Type-123',
- 'zAddAssetAttr-Cloud Kind Sub Type-124',
- 'zAsset-Playback Style-125',
- 'zAsset-Playback Variation-126',
- 'zAsset-Video Duration-127',
- 'zExtAttr-Duration-128',
- 'zAsset-Video CP Duration-129',
- 'zAddAssetAttr-Video CP Duration Time Scale-130',
- 'zAsset-Video CP Visibility State-131',
- 'zAddAssetAttr-Video CP Display Value-132',
- 'zAddAssetAttr-Video CP Display Time Scale-133',
- 'zIntResou-Datastore Class ID-134',
- 'zAsset-Cloud Placeholder Kind-135',
- 'zIntResou-Local Availability-136',
- 'zIntResou-Local Availability Target-137',
- 'zIntResou-Cloud Local State-138',
- 'zIntResou-Remote Availability-139',
- 'zIntResou-Remote Availability Target-140',
- 'zIntResou-Transient Cloud Master-141',
- 'zIntResou-Side Car Index-142',
- 'zIntResou- File ID-143',
- 'zIntResou-Version-144',
- 'zAddAssetAttr- Original-File-Size-145',
- 'zIntResou-Resource Type-146',
- 'zIntResou-Datastore Sub-Type-147',
- 'zIntResou-Cloud Source Type-148',
- 'zIntResou-Data Length-149',
- 'zIntResou-Recipe ID-150',
- 'zIntResou-Cloud Last Prefetch Date-151',
- 'zIntResou-Cloud Prefetch Count-152',
- 'zIntResou- Cloud-Last-OnDemand Download-Date-153',
- 'zIntResou-UniformTypeID_UTI_Conformance_Hint-154',
- 'zIntResou-Compact-UTI-155',
- 'zAsset-Uniform Type ID-156',
- 'zAsset-Original Color Space-157',
- 'zCldMast-Uniform_Type_ID-158',
- 'zCldMast-Full Size JPEG Source-159',
- 'zAsset-HDR Gain-160',
- 'zAsset-zHDR_Type-161',
- 'zExtAttr-Codec-162',
- 'zIntResou-Codec Four Char Code Name-163',
- 'zCldMast-Codec Name-164',
- 'zCldMast-Video Frame Rate-165',
- 'zCldMast-Placeholder State-166',
- 'zAsset-Depth_Type-167',
- 'zAsset-Avalanche UUID-4TableStart-168',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-169',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-170',
- 'zAddAssetAttr-Cloud Recovery State-171',
- 'zAddAssetAttr-Cloud State Recovery Attempts Count-172',
- 'zAsset-Deferred Processing Needed-173',
- 'zAsset-Video Deferred Processing Needed-174',
- 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-175',
- 'zAddAssetAttr-Deferred Processing Candidate Options-176',
- 'zAsset-Has Adjustments-Camera-Effects-Filters-177',
- 'zUnmAdj-UUID-4TableStart-178',
- 'zAsset-Adjustment Timestamp-179',
- 'zUnmAdj-Adjustment Timestamp-180',
- 'zAddAssetAttr-Editor Bundle ID-181',
- 'zUnmAdj-Editor Localized Name-182',
- 'zUnmAdj-Adjustment Format ID-183',
- 'zAddAssetAttr-Montage-184',
- 'zUnmAdj-Adjustment Render Types-185',
- 'zUnmAdj-Adjustment Format Version-186',
- 'zUnmAdj-Adjustment Base Image Format-187',
- 'zAsset-Favorite-188',
- 'zAsset-Hidden-189',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-190',
- 'zAsset-Trashed Date-191',
- 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-192',
- 'zAsset-Delete-Reason-193',
- 'zIntResou-Trash State-194',
- 'zIntResou-Trashed Date-195',
- 'zAsset-Cloud Delete State-196',
- 'zIntResou-Cloud Delete State-197',
- 'zAddAssetAttr-PTP Trashed State-198',
- 'zIntResou-PTP Trashed State-199',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-200',
- 'zMedAnlyAstAttr-Media Analysis Timestamp-201',
- 'zAsset-Analysis State Modificaion Date-202',
- 'zAddAssetAttr- Pending View Count-203',
- 'zAddAssetAttr- View Count-204',
- 'zAddAssetAttr- Pending Play Count-205',
- 'zAddAssetAttr- Play Count-206',
- 'zAddAssetAttr- Pending Share Count-207',
- 'zAddAssetAttr- Share Count-208',
- 'zAddAssetAttr-Allowed for Analysis-209',
- 'zAddAssetAttr-Scene Analysis Version-210',
- 'zAddAssetAttr-Scene Analysis is From Preview-211',
- 'zAddAssetAttr-Scene Analysis Timestamp-212',
- 'zAsset-Duplication Asset Visibility State-213',
- 'zAddAssetAttr-Destination Asset Copy State-214',
- 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-215',
- 'zAddAssetAttr-Source Asset for Duplication Scope ID-216',
- 'zCldMast-Source Master For Duplication Scope ID-217',
- 'zAddAssetAttr-Source Asset For Duplication ID-218',
- 'zCldMast-Source Master for Duplication ID-219',
- 'zAddAssetAttr-Variation Suggestions States-220',
- 'zAsset-High Frame Rate State-221',
- 'zAsset-Video Key Frame Time Scale-222',
- 'zAsset-Video Key Frame Value-223',
- 'zExtAttr-ISO-224',
- 'zExtAttr-Metering Mode-225',
- 'zExtAttr-Sample Rate-226',
- 'zExtAttr-Track Format-227',
- 'zExtAttr-White Balance-228',
- 'zExtAttr-Aperture-229',
- 'zExtAttr-BitRate-230',
- 'zExtAttr-Exposure Bias-231',
- 'zExtAttr-Frames Per Second-232',
- 'zExtAttr-Shutter Speed-233',
- 'zExtAttr-Slush Scene Bias-234',
- 'zExtAttr-Slush Version-235',
- 'zExtAttr-Slush Preset-236',
- 'zExtAttr-Slush Warm Bias-237',
- 'zAsset-Height-238',
- 'zAddAssetAttr-Original Height-239',
- 'zIntResou-Unoriented Height-240',
- 'zAsset-Width-241',
- 'zAddAssetAttr-Original Width-242',
- 'zIntResou-Unoriented Width-243',
- 'zShare-Thumbnail Image Data-244',
- 'SPLzShare-Thumbnail Image Data-245',
- 'zAsset-Thumbnail Index-246',
- 'zAddAssetAttr-Embedded Thumbnail Height-247',
- 'zAddAssetAttr-Embedded Thumbnail Length-248',
- 'zAddAssetAttr-Embedded Thumbnail Offset-249',
- 'zAddAssetAttr-Embedded Thumbnail Width-250',
- 'zAsset-Packed Acceptable Crop Rect-251',
- 'zAsset-Packed Badge Attributes-252',
- 'zAsset-Packed Preferred Crop Rect-253',
- 'zAsset-Curation Score-254',
- 'zAsset-Camera Processing Adjustment State-255',
- 'zAsset-Depth Type-256',
- 'zAsset-Is Magic Carpet-QuicktimeMOVfile-257',
- 'zAddAssetAttr-Orig Resource Choice-258',
- 'zAsset-Spatial Type-259',
- 'zAddAssetAttr-Spatial Over Capture Group ID-260',
- 'zAddAssetAttr-Place Annotation Data-261',
- 'zAddAssetAttr-Distance Identity-262',
- 'zAddAssetAttr-Edited IPTC Attributes-263',
- 'zAssetDes-Long Description-264',
- 'zAddAssetAttr-Asset Description-265',
- 'zAddAssetAttr-Title-Comments via Cloud Website-266',
- 'zAddAssetAttr-Accessibility Description-267',
- 'zAddAssetAttr-Photo Stream Tag ID-268',
- 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-269',
- 'zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-270',
- 'zCldFeedEnt-Entry Date-271',
- 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-272',
- 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-273',
- 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-274',
- 'zCldFeedEnt-Entry Priority Number-275',
- 'zCldFeedEnt-Entry Type Number-276',
- 'zCldSharedComment-Cloud GUID-4TableStart-277',
- 'zCldSharedComment-Date-278',
- 'zCldSharedComment-Comment Client Date-279',
- 'zAsset-Cloud Last Viewed Comment Date-280',
- 'zCldSharedComment-Type-281',
- 'zCldSharedComment-Comment Text-282',
- 'zCldSharedComment-Commenter Hashed Person ID-283',
- 'zCldSharedComment-Batch Comment-284',
- 'zCldSharedComment-Is a Caption-285',
- 'zAsset-Cloud Has Comments by Me-286',
- 'zCldSharedComment-Is My Comment-287',
- 'zCldSharedComment-Is Deletable-288',
- 'zAsset-Cloud Has Comments Conversation-289',
- 'zAsset-Cloud Has Unseen Comments-290',
- 'zCldSharedComment-Liked-291',
- 'zAddAssetAttr-Share Type-292',
- 'zAsset-Library Scope Share State- StillTesting-293',
- 'zAsset-Active Library Scope Participation State-294',
- 'zAddAssetAttr-Library Scope Asset Contributors To Update-295',
- 'zShare-UUID-CMM-4TableStart-296',
- 'SPLzShare-UUID-SPL-4TableStart-297',
- 'zShare-zENT-CMM-298',
- 'SPLzShare-zENT-SPL-299',
- 'zSharePartic-z54SHARE-300',
- 'SPLzSharePartic-z54SHARE-301',
- 'zShare-Status-CMM-302',
- 'SPLzShare-Status-SPL-303',
- 'zShare-Scope Type-CMM-304',
- 'SPLzShare-Scope Type-SPL-305',
- 'zShare-Local Publish State-CMM-306',
- 'SPLzShare-Local Publish State-SPL-307',
- 'zShare-Public Permission-CMM-308',
- 'SPLzShare-Public Permission-SPL-309',
- 'zShare-Originating Scope ID-CMM-310',
- 'SPLzShare-Originating Scope ID-SPL-311',
- 'zShare-Scope ID-CMM-312',
- 'SPLzShare-Scope ID-SPL-313',
- 'zShare-Title-CMM-314',
- 'SPLzShare-Title-SPL-315',
- 'zShare-Share URL-CMM-316',
- 'SPLzShare-Share URL-SPL-317',
- 'zShare-Creation Date-CMM-318',
- 'SPLzShare-Creation Date-SPL-319',
- 'zShare-Start Date-CMM-320',
- 'SPLzShare-Start Date-SPL-321',
- 'zShare-End Date-CMM-322',
- 'SPLzShare-End Date-SPL-323',
- 'zShare-Expiry Date-CMM-324',
- 'SPLzShare-Expiry Date-SPL-325',
- 'zShare-Cloud Item Count-CMM-326',
- 'SPLzShare-Cloud Item Count-SPL-327',
- 'zShare-Asset Count-CMM-328',
- 'SPLzShare-Asset Count-SPL-329',
- 'zShare-Cloud Photo Count-CMM-330',
- 'SPLzShare-Cloud Photo Count-SPL-331',
- 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-332',
- 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-333',
- 'zShare-Photos Count-CMM-334',
- 'SPLzShare-Photos Count-CMM-SPL-335',
- 'zShare-Uploaded Photos Count-CMM-336',
- 'SPLzShare-Uploaded Photos Count-SPL-337',
- 'zShare-Cloud Video Count-CMM-338',
- 'SPLzShare-Cloud Video Count-SPL-339',
- 'zShare-Videos Count-CMM-340',
- 'SPLzShare-Videos Count-SPL-341',
- 'zShare-Uploaded Videos Count-CMM-342',
- 'SPLzShare-Uploaded Videos Count-SPL-343',
- 'zShare-Force Sync Attempted-CMM-344',
- 'SPLzShare-Force Sync Attempted-SPL-345',
- 'zShare-Cloud Local State-CMM-346',
- 'SPLzShare-Cloud Local State-SPL-347',
- 'zShare-Scope Syncing State-CMM-348',
- 'SPLzShare-Scope Syncing State-SPL-349',
- 'zShare-Auto Share Policy-CMM-350',
- 'SPLzShare-Auto Share Policy-SPL-351',
- 'zShare-Should Notify On Upload Completion-CMM-352',
- 'SPLzShare-Should Notify On Upload Completion-SPL-353',
- 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-354',
- 'zShare-Trashed State-CMM-355',
- 'SPLzShare-Trashed State-SPL-356',
- 'zShare-Cloud Delete State-CMM-357',
- 'SPLzShare-Cloud Delete State-SPL-358',
- 'zShare-Trashed Date-CMM-359',
- 'SPLzShare-Trashed Date-SPL-360',
- 'zShare-LastParticipant Asset Trash Notification Date-CMM-361',
- 'SPLzShare-LastParticipant Asset Trash Notification Date-SPL-362',
- 'zShare-Last Participant Asset Trash Notification View Date-CMM-363',
- 'SPLzShare-Last Participant Asset Trash Notification View Date-SPL-364',
- 'zShare-Exit Source-CMM-365',
- 'SPLzShare-Exit Source-SPL-366',
- 'zShare-SPL_Exit State-CMM-367',
- 'SPLzShare-SPL_Exit State-SPL-368',
- 'zShare-Exit Type-CMM-369',
- 'SPLzShare-Exit Type-SPL-370',
- 'zShare-Should Ignor Budgets-CMM-371',
- 'SPLzShare-Should Ignor Budgets-SPL-372',
- 'zShare-Preview State-CMM-373',
- 'SPLzShare-Preview State-SPL-374',
- 'zShare-Preview Data-CMM-375',
- 'SPLzShare-Preview Data-SPL-376',
- 'zShare-Rules-CMM-377',
- 'SPLzShare-Rules-SPL-378',
- 'zShare-Thumbnail Image Data-CMM-379',
- 'SPLzShare-Thumbnail Image Data-SPL-380',
- 'zShare-Participant Cloud Update State-CMM-381',
- 'SPLzShare-Participant Cloud Update State-SPL-382',
- 'zSharePartic-UUID-4TableStart-383',
- 'SPLzSharePartic-UUID-4TableStart-384',
- 'zSharePartic-Acceptance Status-385',
- 'SPLzSharePartic-Acceptance Status-386',
- 'zSharePartic-Is Current User-387',
- 'SPLzSharePartic-Is Current User-388',
- 'zSharePartic-Role-389',
- 'SPLzSharePartic-Role-390',
- 'zSharePartic-Premission-391',
- 'SPLzSharePartic-Premission-392',
- 'zSharePartic-Participant ID-393',
- 'SPLzSharePartic-Participant ID-394',
- 'zSharePartic-User ID-395',
- 'SPLzSharePartic-User ID-396',
- 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-397',
- 'SPLzSharePartic-zPK-4TableStart-398',
- 'zSharePartic-zPK-4TableStart-399',
- 'zSharePartic-Email Address-400',
- 'SPLzSharePartic-Email Address-401',
- 'zSharePartic-Phone Number-402',
- 'SPLzSharePartic-Phone Number-403',
- 'zSharePartic-Exit State-404',
- 'SPLzSharePartic-Exit State-405',
- 'ParentzGenAlbum-UUID-4TableStart-406',
- 'zGenAlbum-UUID-4TableStart-407',
- 'SWYConverszGenAlbum-UUID-4TableStart-408',
- 'ParentzGenAlbum-Cloud GUID-4TableStart-409',
- 'zGenAlbum-Cloud GUID-4TableStart-410',
- 'SWYConverszGenAlbum-Cloud GUID-4TableStart-411',
- 'zCldShareAlbumInvRec-Album GUID-4TableStart-412',
- 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-413',
- 'zGenAlbum-Project Render UUID-4TableStart-414',
- 'SWYConverszGenAlbum-Project Render UUID-4TableStart-415',
- 'zAlbumList-Needs Reordering Number-416',
- 'zGenAlbum-zENT- Entity-417',
- 'ParentzGenAlbum-Kind-418',
- 'zGenAlbum-Album Kind-419',
- 'SWYConverszGenAlbum-Album Kind-420',
- 'ParentzGenAlbum-Cloud-Local-State-421',
- 'zGenAlbum-Cloud_Local_State-422',
- 'SWYConverszGenAlbum-Cloud_Local_State-423',
- 'ParentzGenAlbum- Title-424',
- 'zGenAlbum- Title-User&System Applied-425',
- 'SWYConverszGenAlbum- Title -User&System Applied-426',
- 'zGenAlbum-Import Session ID-SWY-427',
- 'zAsset- Conversation= zGenAlbum_zPK-428',
- 'SWYConverszGenAlbum- Import Session ID-SWY-429',
- 'zGenAlbum-Imported by Bundle Identifier-430',
- 'SWYzGenAlbum-Imported by Bundle Identifier-431',
- 'SWYConverszGenAlbum- Syndicate-432',
- 'ParentzGenAlbum-Creation Date-433',
- 'zGenAlbum-Creation Date-434',
- 'SWYConverszGenAlbum-Creation Date-435',
- 'zGenAlbum-Cloud Creation Date-436',
- 'SWYConverszGenAlbum-Cloud Creation Date-437',
- 'zGenAlbum-Start Date-438',
- 'SWYConverszGenAlbum-Start Date-439',
- 'zGenAlbum-End Date-440',
- 'SWYConverszGenAlbum-End Date-441',
- 'zGenAlbum-Cloud Subscription Date-442',
- 'SWYConverszGenAlbum-Cloud Subscription Date-443',
- 'ParentzGenAlbum-Pending Items Count-444',
- 'zGenAlbum-Pending Items Count-445',
- 'SWYConverszGenAlbum-Pending Items Count-446',
- 'ParentzGenAlbum-Pending Items Type-447',
- 'zGenAlbum-Pending Items Type-448',
- 'SWYConverszGenAlbum-Pending Items Type-449',
- 'zGenAlbum- Cached Photos Count-450',
- 'SWYConverszGenAlbum- Cached Photos Count-451',
- 'zGenAlbum- Cached Videos Count-452',
- 'SWYConverszGenAlbum- Cached Videos Count-453',
- 'zGenAlbum- Cached Count-454',
- 'SWYConverszGenAlbum- Cached Count-455',
- 'ParentzGenAlbum-Sync Event Order Key-456',
- 'zGenAlbum-Sync Event Order Key-457',
- 'SWYConverszGenAlbum-Sync Event Order Key-458',
- 'zGenAlbum-Has Unseen Content-459',
- 'SWYConverszGenAlbum-Has Unseen Content-460',
- 'zGenAlbum-Unseen Asset Count-461',
- 'SWYConverszGenAlbum-Unseen Asset Count-462',
- 'zGenAlbum-is Owned-463',
- 'SWYConverszGenAlbum-is Owned-464',
- 'zGenAlbum-Cloud Relationship State-465',
- 'SWYConverszGenAlbum-Cloud Relationship State-466',
- 'zGenAlbum-Cloud Relationship State Local-467',
- 'SWYConverszGenAlbum-Cloud Relationship State Local-468',
- 'zGenAlbum-Cloud Owner Mail Key-469',
- 'SWYConverszGenAlbum-Cloud Owner Mail Key-470',
- 'zGenAlbum-Cloud Owner Frist Name-471',
- 'SWYConverszGenAlbum-Cloud Owner Frist Name-472',
- 'zGenAlbum-Cloud Owner Last Name-473',
- 'SWYConverszGenAlbum-Cloud Owner Last Name-474',
- 'zGenAlbum-Cloud Owner Full Name-475',
- 'SWYConverszGenAlbum-Cloud Owner Full Name-476',
- 'zGenAlbum-Cloud Person ID-477',
- 'SWYConverszGenAlbum-Cloud Person ID-478',
- 'zAsset-Cloud Owner Hashed Person ID-479',
- 'zGenAlbum-Cloud Owner Hashed Person ID-480',
- 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-481',
- 'zGenAlbum-Local Cloud Multi-Contributors Enabled-482',
- 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-483',
- 'zGenAlbum-Cloud Multi-Contributors Enabled-484',
- 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-485',
- 'zGenAlbum-Cloud Album Sub Type-486',
- 'SWYConverszGenAlbum-Cloud Album Sub Type-487',
- 'zGenAlbum-Cloud Contribution Date-488',
- 'SWYConverszGenAlbum-Cloud Contribution Date-489',
- 'zGenAlbum-Cloud Last Interesting Change Date-490',
- 'SWYConverszGenAlbum-Cloud Last Interesting Change Date-491',
- 'zGenAlbum-Cloud Notification Enabled-492',
- 'SWYConverszGenAlbum-Cloud Notification Enabled-493',
- 'ParentzGenAlbum-Pinned-494',
- 'zGenAlbum-Pinned-495',
- 'SWYConverszGenAlbum-Pinned-496',
- 'ParentzGenAlbum-Custom Sort Key-497',
- 'zGenAlbum-Custom Sort Key-498',
- 'SWYConverszGenAlbum-Custom Sort Key-499',
- 'ParentzGenAlbum-Custom Sort Ascending-500',
- 'zGenAlbum-Custom Sort Ascending-501',
- 'SWYConverszGenAlbum-Custom Sort Ascending-502',
- 'ParentzGenAlbum-Is Prototype-503',
- 'zGenAlbum-Is Prototype-504',
- 'SWYConverszGenAlbum-Is Prototype-505',
- 'ParentzGenAlbum-Project Document Type-506',
- 'zGenAlbum-Project Document Type-507',
- 'SWYConverszGenAlbum-Project Document Type-508',
- 'ParentzGenAlbum-Custom Query Type-509',
- 'zGenAlbum-Custom Query Type-510',
- 'SWYConverszGenAlbum-Custom Query Type-511',
- 'ParentzGenAlbum-Trashed State-512',
- 'ParentzGenAlbum-Trash Date-513',
- 'zGenAlbum-Trashed State-514',
- 'zGenAlbum-Trash Date-515',
- 'SWYConverszGenAlbum-Trashed State-516',
- 'SWYConverszGenAlbum-Trash Date-517',
- 'ParentzGenAlbum-Cloud Delete State-518',
- 'zGenAlbum-Cloud Delete State-519',
- 'SWYConverszGenAlbum-Cloud Delete State-520',
- 'zGenAlbum-Cloud Owner Whitelisted-521',
- 'SWYConverszGenAlbum-Cloud Owner Whitelisted-522',
- 'zGenAlbum-Cloud Local Public URL Enabled-523',
- 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-524',
- 'zGenAlbum-Cloud Public URL Enabled-525',
- 'zGenAlbum-Public URL-526',
- 'SWYConverszGenAlbum-Cloud Public URL Enabled-527',
- 'SWYConverszGenAlbum-Public URL-528',
- 'zGenAlbum-Key Asset Face Thumb Index-529',
- 'SWYConverszGenAlbum-Key Asset Face Thumb Index-530',
- 'zGenAlbum-Project Text Extension ID-531',
- 'SWYConverszGenAlbum-Project Text Extension ID-532',
- 'zGenAlbum-User Query Data-533',
- 'SWYConverszGenAlbum-User Query Data-534',
- 'zGenAlbum-Custom Query Parameters-535',
- 'SWYConverszGenAlbum-Custom Query Parameters-536',
- 'zGenAlbum-Project Data-537',
- 'SWYConverszGenAlbum-Project Data-538',
- 'zGenAlbum-Search Index Rebuild State-539',
- 'SWYConverszGenAlbum-Search Index Rebuild State-540',
- 'zGenAlbum-Duplicate Type-541',
- 'SWYConverszGenAlbum-Duplicate Type-542',
- 'zGenAlbum-Privacy State-543',
- 'SWYConverszGenAlbum-Privacy State-544',
- 'zCldShareAlbumInvRec-zUUID-4TableStart-545',
- 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-546',
- 'zCldShareAlbumInvRec-Invitation State Local-547',
- 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-548',
- 'zCldShareAlbumInvRec-Subscription Date-549',
- 'zCldShareAlbumInvRec-Invitee First Name-550',
- 'zCldShareAlbumInvRec-Invitee Last Name-551',
- 'zCldShareAlbumInvRec-Invitee Full Name-552',
- 'zCldShareAlbumInvRec-Invitee Hashed Person ID-553',
- 'zCldShareAlbumInvRec-Invitee Email Key-554',
- 'zGenAlbum-Key Asset Face ID-555',
- 'zFaceCrop-Face Area Points-556',
- 'zAsset-Face Adjustment Version-557',
- 'zAddAssetAttr-Face Analysis Version-558',
- 'zDetFace-Asset Visible-559',
- 'zPerson-Face Count-560',
- 'zDetFace-Face Crop-561',
- 'zDetFace-Face Algorithm Version-562',
- 'zDetFace-Adjustment Version-563',
- 'zDetFace-UUID-4TableStart-564',
- 'zPerson-Person UUID-4TableStart-565',
- 'zPerson - MD ID-566',
- 'zPerson - Asset Sort Order-567',
- 'zDetFace-Confirmed Face Crop Generation State-568',
- 'zDetFace-Manual-569',
- 'zDetFace-Detection Type-570',
- 'zPerson-Detection Type-571',
- 'zDetFace-VIP Model Type-572',
- 'zDetFace-Name Source-573',
- 'zDetFace-Cloud Name Source-574',
- 'zPerson-Merge Candidate Confidence-575',
- 'zPerson-Person URI-576',
- 'zPerson-Display Name-577',
- 'zPerson-Full Name-578',
- 'zPerson-Cloud Verified Type-579',
- 'zFaceCrop-State-580',
- 'zFaceCrop-Type-581',
- 'zFaceCrop-UUID-4TableStart-582',
- 'zPerson-Type-583',
- 'zPerson-Verified Type-584',
- 'zPerson-Gender Type-585',
- 'zDetFace-Gender Type-586',
- 'zDetFace-Center X-587',
- 'zDetFace-Center Y-588',
- 'zPerson-Age Type Estimate-589',
- 'zDetFace-Age Type Estimate-590',
- 'zDetFace-Ethnicity Type-591',
- 'zDetFace-Skin Tone Type-592',
- 'zDetFace-Hair Type-593',
- 'zDetFace-Hair Color Type-594',
- 'zDetFace-Head Gear Type-595',
- 'zDetFace-Facial Hair Type-596',
- 'zDetFace-Has Face Mask-597',
- 'zDetFace-Pose Type-598',
- 'zDetFace-Face Expression Type-599',
- 'zDetFace-Has Smile-600',
- 'zDetFace-Smile Type-601',
- 'zDetFace-Lip Makeup Type-602',
- 'zDetFace-Eyes State-603',
- 'zDetFace-Is Left Eye Closed-604',
- 'zDetFace-Is Right Eye Closed-605',
- 'zDetFace-Gaze Center X-606',
- 'zDetFace-Gaze Center Y-607',
- 'zDetFace-Face Gaze Type-608',
- 'zDetFace-Eye Glasses Type-609',
- 'zDetFace-Eye Makeup Type-610',
- 'zDetFace-Cluster Squence Number Key-611',
- 'zDetFace-Grouping ID-612',
- 'zDetFace-Master ID-613',
- 'zDetFace-Quality-614',
- 'zDetFace-Quality Measure-615',
- 'zDetFace-Source Height-616',
- 'zDetFace-Source Width-617',
- 'zDetFace-Hidden-Asset Hidden-618',
- 'zDetFace-In Trash-Recently Deleted-619',
- 'zDetFace-Cloud Local State-620',
- 'zDetFace-Training Type-621',
- 'zDetFace.Pose Yaw-622',
- 'zDetFace-Body Center X-623',
- 'zDetFace-Body Center Y-624',
- 'zDetFace-Body Height-625',
- 'zDetFace-Body Width-626',
- 'zDetFace-Roll-627',
- 'zDetFace-Size-628',
- 'zDetFace-Cluster Squence Number-629',
- 'zDetFace-Blur Score-630',
- 'zDetFacePrint-Face Print Version-631',
- 'zMedAnlyAstAttr-Face Count-632',
- 'zDetFaceGroup-UUID-4TableStart-633',
- 'zDetFaceGroup-Person Builder State-634',
- 'zDetFaceGroup-UnNamed Face Count-635',
- 'zPerson-In Person Naming Model-636',
- 'zPerson-Key Face Pick Source Key-637',
- 'zPerson-Manual Order Key-638',
- 'zPerson-Question Type-639',
- 'zPerson-Suggested For Client Type-640',
- 'zPerson-Merge Target Person-641',
- 'zPerson-Cloud Local State-642',
- 'zFaceCrop-Cloud Local State-643',
- 'zFaceCrop-Cloud Type-644',
- 'zPerson-Cloud Delete State-645',
- 'zFaceCrop-Cloud Delete State-646',
- 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-647',
- 'zAsset-Highlight Visibility Score-648',
- 'zMemory-UUID-4TableStart-649',
- 'zMemory-AssetListPredicte-650',
- 'zMemory-Score-651',
- 'zMemory-SubTitle-652',
- 'zMemory-Title-653',
- 'zMemory-Category-654',
- 'zMemory-SubCategory-655',
- 'zMemory-Creation Date-656',
- 'zMemory-Last Enrichment Date-657',
- 'zMemory-User Action Options-658',
- 'zMemory-Favorite Memory-659',
- 'zMemory-View Count-660',
- 'zMemory-Play Count-661',
- 'zMemory-Rejected-662',
- 'zMemory-Share Count-663',
- 'zMemory-Sharing Composition-664',
- 'zMemory-Last Movie Play Date-665',
- 'zMemory-Last Viewed Date-666',
- 'zMemory-Pending Play Count Memory-667',
- 'zMemory-Pending Share Count Memory-668',
- 'zMemory-Pending View Count Memory-669',
- 'zMemory-Pending State-670',
- 'zMemory-Featured State-671',
- 'zMemory-Photos Graph Version-672',
- 'zMemory-Graph Memory Identifier-673',
- 'zMemory-Notification State-674',
- 'zMemory-Cloud Local State-675',
- 'zMemory-Cloud Delete State-676',
- 'zMemory-Story Color Grade Kind-677',
- 'zMemory-Story Serialized Title Category-678',
- 'zMemory-Syndicated Content State-679',
- 'zMemory-Search Index Rebuild State-680',
- 'zMemory-Black Listed Feature-681',
- 'zMoment-UUID-4TableStart-682',
- 'zMoment-Aggregation Score-683',
- 'zMoment-Start Date-684',
- 'zMoment-Representative Date-685',
- 'zMoment-Timezone Offset-686',
- 'zMoment-Modification Date-687',
- 'zMoment-End Date-688',
- 'zMoment-SubTitle-689',
- 'zMoment-Title-690',
- 'zMoment-Originator State-691',
- 'zMoment-Sharing Composition-692',
- 'zMoment-Cached Count Shared-693',
- 'zMoment-Processed Location-694',
- 'zMoment-Approx Latitude-695',
- 'zMoment-Approx Longitude-696',
- 'zMoment-GPS Horizontal Accuracy-697',
- 'zMoment-Cache Count-698',
- 'zMoment-Cached Photos Count-699',
- 'zMoment-Cached Videos Count-700',
- 'zMoment-Trashed State-701',
- 'SBKAzSugg-UUID-4TableStart-702',
- 'SBKAzSugg-Suggestion Context-703',
- 'SBKAzSugg-Sharing Composition-704',
- 'SBKAzSugg-Start Date-705',
- 'SBKAzSugg-State-706',
- 'SBKAzSugg-Featured State-707',
- 'SBKAzSugg- Available Features-708',
- 'SBKAzSugg-Notification State-709',
- 'SBKAzSugg-Creation Date-710',
- 'SBKAzSugg-End Date-711',
- 'SBKAzSugg-Activation Date-712',
- 'SBKAzSugg-Expunge Date-713',
- 'SBKAzSugg-Relevant Until Date-714',
- 'SBKAzSugg-Title-715',
- 'SBKAzSugg-Sub Title-716',
- 'SBKAzSugg-Cached Count-717',
- 'SBKAzSugg-Cahed Photos Count-718',
- 'SBKAzSugg-Cached Videos Count-719',
- 'SBKAzSugg-Type-720',
- 'SBKAzSugg-Sub Type-721',
- 'SBKAzSugg-Action Data-722',
- 'SBKAzSugg-Version-723',
- 'SBKAzSugg-Cloud Local State-724',
- 'SBKAzSugg-Cloud Delete State-725',
- 'SBRAzSugg-UUID-4TableStart-726',
- 'SBRAzSugg-Suggestion Context-727',
- 'SBRAzSugg-Sharing Composition-728',
- 'SBRAzSugg-Start Date-729',
- 'SBRAzSugg-State-730',
- 'SBRAzSugg-Featured State-731',
- 'SBRAzSugg- Available Features-732',
- 'SBRAzSugg-Notification State-733',
- 'SBRAzSugg-Creation Date-734',
- 'SBRAzSugg-End Date-735',
- 'SBRAzSugg-Activation Date-736',
- 'SBRAzSugg-Expunge Date-737',
- 'SBRAzSugg-Relevant Until Date-738',
- 'SBRAzSugg-Title-739',
- 'SBRAzSugg-Sub Title-740',
- 'SBRAzSugg-Cached Count-741',
- 'SBRAzSugg-Cahed Photos Count-742',
- 'SBRAzSugg-Cached Videos Count-743',
- 'SBRAzSugg-Type-744',
- 'SBRAzSugg-Sub Type-745',
- 'SBRAzSugg-Action Data-746',
- 'SBRAzSugg-Version-747',
- 'SBRAzSugg-Cloud Local State-748',
- 'SBRAzSugg-Cloud Delete State-749',
- 'zMedAnlyAstAttr-Media Analysis Version-750',
- 'zMedAnlyAstAttr-Audio Classification-751',
- 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-752',
- 'zMedAnlyAstAttr-Best Video Range Start Time Scale-753',
- 'zMedAnlyAstAttr-Best Video Range Duration Value-754',
- 'zMedAnlyAstAttr-Best Video Range Start Value-755',
- 'zMedAnlyAstAttr-Packed Best Playback Rect-756',
- 'zMedAnlyAstAttr-Activity Score-757',
- 'zMedAnlyAstAttr-Video Score-758',
- 'zMedAnlyAstAttr-Audio Score-759',
- 'zMedAnlyAstAttr-Wallpaper Score-760',
- 'zMedAnlyAstAttr-AutoPlay Suggestion Score-761',
- 'zMedAnlyAstAttr-Blurriness Score-762',
- 'zMedAnlyAstAttr-Exposure Score-763',
- 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-764',
- 'zMedAnlyAstAttr-Probable Rotation Direction-765',
- 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-766',
- 'zAssetAnalyState-Asset UUID-4TableStart-767',
- 'zAssetAnalyState-Analyisis State-768',
- 'zAssetAnalyState-Worker Flags-769',
- 'zAssetAnalyState-Worker Type-770',
- 'zAssetAnalyState-Ignore Until Date-771',
- 'zAssetAnalyState-Last Ignored Date-772',
- 'zAssetAnalyState-Sort Token-773',
- 'zMedAnlyAstAttr-Character Recognition Attr-774',
- 'zCharRecogAttr-Algorithm Version-775',
- 'zCharRecogAttr-Adjustment Version-776',
- 'zMedAnlyAstAttr-Visual Search Attributes-777',
- 'zVisualSearchAttr-Algorithm Version-778',
- 'zVisualSearchAttr-Adjustment Version-779',
- 'zVisualSearchAttr - Sticker Confidence Algorithm Version-780',
- 'zVisualSearchAttr - Sticker Confidence Score-781',
- 'zAsset-Sticker Confidence Score-782',
- 'zAsset-Overall Aesthetic Score-783',
- 'zCompAssetAttr-Behavioral Score-784',
- 'zCompAssetAttr-Failure Score zCompAssetAttr-785',
- 'zCompAssetAttr-Harmonious Color Score-786',
- 'zCompAssetAttr-Immersiveness Score-787',
- 'zCompAssetAttr-Interaction Score-788',
- 'zCompAssetAttr-Intersting Subject Score-789',
- 'zCompAssetAttr-Intrusive Object Presence Score-790',
- 'zCompAssetAttr-Lively Color Score-791',
- 'zCompAssetAttr-Low Light-792',
- 'zCompAssetAttr-Noise Score-793',
- 'zCompAssetAttr-Pleasant Camera Tilt Score-794',
- 'zCompAssetAttr-Pleasant Composition Score-795',
- 'zCompAssetAttr-Pleasant Lighting Score-796',
- 'zCompAssetAttr-Pleasant Pattern Score-797',
- 'zCompAssetAttr-Pleasant Perspective Score-798',
- 'zCompAssetAttr-Pleasant Post Processing Score-799',
- 'zCompAssetAttr-Pleasant Reflection Score-800',
- 'zCompAssetAttrPleasant Symmetry Score-801',
- 'zCompAssetAttr-Sharply Focused Subject Score-802',
- 'zCompAssetAttr-Tastfully Blurred Score-803',
- 'zCompAssetAttr-Well Chosen Subject Score-804',
- 'zCompAssetAttr-Well Framed Subject Score-805',
- 'zCompAssetAttr-Well Timeed Shot Score-806',
- 'zCldRes-Asset UUID-4TableStart-807',
- 'zCldRes-Cloud Local State-808',
- 'zCldRes-File Size-809',
- 'zCldRes-Height-810',
- 'zCldRes-Is Available-811',
- 'zCldRes-Is Locally Available-812',
- 'zCldRes-Prefetch Count-813',
- 'zCldRes-Source Type-814',
- 'zCldRes-Type-815',
- 'zCldRes-Width-816',
- 'zCldRes-Date Created-817',
- 'zCldRes-Last OnDemand Download Date-818',
- 'zCldRes-Last Prefetch Date-819',
- 'zCldRes-Prunedat-820',
- 'zCldRes-File Path-821',
- 'zCldRes-Fingerprint-822',
- 'zCldRes-Item ID-823',
- 'zCldRes-UniID-824',
- 'zUserFeedback-UUID-4TableStart-825',
- 'zUserFeedback-Feature-826',
- 'zUserFeedback-Type-827',
- 'zUserFeedback-Last Modified Date-828',
- 'zUserFeedback-Context-829',
- 'zUserFeedback-Cloud Local State-830',
- 'zUserFeedback-Cloud Delete State-831',
- 'zUserFeedback - Creation Type-832',
- 'zAddAssetAttr-zPK-833',
- 'zAddAssetAttr-zENT-834',
- 'ZAddAssetAttr-zOPT-835',
- 'zAddAssetAttr-zAsset= zAsset_zPK-836',
- 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-837',
- 'zAddAssetAttr-Master Fingerprint-838',
- 'zAddAssetAttr-Public Global UUID-839',
- 'zAddAssetAttr-Deferred Photo Identifier-840',
- 'zAddAssetAttr-Original Assets UUID-841',
- 'zAddAssetAttr-Import Session ID-842',
- 'zAddAssetAttr-Originating Asset Identifier-843',
- 'zAddAssetAttr.Adjusted Fingerprint-844',
- 'zAlbumList-zPK= Album List Key-845',
- 'zAlbumList-zENT-846',
- 'zAlbumList-zOPT-847',
- 'zAlbumList-ID Key-848',
- 'zAlbumList-UUID-849',
- 'zAsset-zPK-850',
- 'zAsset-zENT-851',
- 'zAsset-zOPT-852',
- 'zAsset-Master= zCldMast-zPK-853',
- 'zAsset-Extended Attributes= zExtAttr-zPK-854',
- 'zAsset-Import Session Key-855',
- 'zAsset-Trashed by Participant= zSharePartic_zPK-856',
- 'zAsset-Photo Analysis Attributes Key-857',
- 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-858',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-859',
- 'zAsset-Moment Share Key= zShare-zPK-860',
- 'zAsset-zMoment Key= zMoment-zPK-861',
- 'zAsset-Computed Attributes Asset Key-862',
- 'zAsset-Highlight Being Assets-HBA Key-863',
- 'zAsset-Highlight Being Extended Assets-HBEA Key-864',
- 'zAsset-Highlight Being Key Asset Private-HBKAP Key-865',
- 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-866',
- 'zAsset-Highligh Being Summary Assets-HBSA Key-867',
- 'zAsset-Day Group Highlight Being Assets-DGHBA Key-868',
- 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-869',
- 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-870',
- 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-871',
- 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-872',
- 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-873',
- 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-874',
- 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-875',
- 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-876',
- 'zAsset-Promotion Score-877',
- 'zAsset-Iconic Score-878',
- 'zAsset-Media Analysis Attributes Key-879',
- 'zAsset-Media Group UUID-880',
- 'zAsset-UUID = store.cloudphotodb-881',
- 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-882',
- 'zAsset.Cloud Collection GUID-883',
- 'zAsset-Avalanche UUID-884',
- 'zAssetAnalyState-zPK-885',
- 'zAssetAnalyState-zEnt-886',
- 'zAssetAnalyState-zOpt-887',
- 'zAssetAnalyState-Asset= zAsset-zPK-888',
- 'zAssetAnalyState-Asset UUID-889',
- 'zAsstContrib-zPK-890',
- 'zAsstContrib-zEnt-891',
- 'zAsstContrib-zOpt-892',
- 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-893',
- 'zAsstContrib-Participant= zSharePartic-zPK-894',
- 'zAssetDes-zPK-895',
- 'zAssetDes-zENT-896',
- 'zAssetDes-zOPT-897',
- 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-898',
- 'zCharRecogAttr-zPK-899',
- 'zCharRecogAttr-zENT-900',
- 'zCharRecogAttr-zOPT-901',
- 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-902',
- 'zCldFeedEnt-zPK= zCldShared keys-903',
- 'zCldFeedEnt-zENT-904',
- 'zCldFeedEnt-zOPT-905',
- 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-906',
- 'zCldFeedEnt-Entry Invitation Record GUID-907',
- 'zCldFeedEnt-Entry Cloud Asset GUID-908',
- 'zCldMast-zPK= zAsset-Master-909',
- 'zCldMast-zENT-910',
- 'zCldMast-zOPT-911',
- 'zCldMast-Moment Share Key= zShare-zPK-912',
- 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-913',
- 'zCldMast-Originating Asset ID-914',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-915',
- 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-916',
- 'CMzCldMastMedData-zENT-917',
- 'CMzCldMastMedData-zOPT-918',
- 'CMzCldMastMedData-CldMast= zCldMast-zPK-919',
- 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-920',
- 'AAAzCldMastMedData-zENT-921',
- 'AAAzCldMastMedData-zOPT-922',
- 'AAAzCldMastMedData-CldMast key-923',
- 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-924',
- 'zCldRes-zPK-925',
- 'zCldRes-zENT-926',
- 'zCldRes-zOPT-927',
- 'zCldRes-Asset= zAsset-zPK-928',
- 'zCldRes-Cloud Master= zCldMast-zPK-929',
- 'zCldRes-Asset UUID-930',
- 'zCldShareAlbumInvRec-zPK-931',
- 'zCldShareAlbumInvRec-zEnt-932',
- 'zCldShareAlbumInvRec-zOpt-933',
- 'zCldShareAlbumInvRec-Album Key-934',
- 'zCldShareAlbumInvRec-FOK Album Key-935',
- 'zCldShareAlbumInvRec-Album GUID-936',
- 'zCldShareAlbumInvRec-zUUID-937',
- 'zCldShareAlbumInvRec-Cloud GUID-938',
- 'zCldSharedComment-zPK-939',
- 'zCldSharedComment-zENT-940',
- 'zCldSharedComment-zOPT-941',
- 'zCldSharedComment-Commented Asset Key= zAsset-zPK-942',
- 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-943',
- 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-944',
- 'zCldSharedComment-Liked Asset Key= zAsset-zPK-945',
- 'zCldSharedComment-CldFeedLikeCommentEntry Key-946',
- 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-947',
- 'zCldSharedComment-Cloud GUID-948',
- 'zCompAssetAttr-zPK-949',
- 'zCompAssetAttr-zEnt-950',
- 'zCompAssetAttr-zOpt-951',
- 'zCompAssetAttr-Asset Key-952',
- 'zDetFace-zPK-953',
- 'zDetFace-zEnt-954',
- 'zDetFace.zOpt-955',
- 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face-956',
- 'zDetFace-PersonForFace= zPerson-zPK-957',
- 'zDetFace-Person Being Key Face-958',
- 'zDetFace-Face Print-959',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-960',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-961',
- 'zDetFace-UUID-962',
- 'zDetFaceGroup-zPK-963',
- 'zDetFaceGroup-zENT-964',
- 'zDetFaceGroup-zOPT-965',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-966',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-967',
- 'zDetFaceGroup-UUID-968',
- 'zDetFacePrint-zPK-969',
- 'zDetFacePrint-zEnt-970',
- 'zDetFacePrint-zOpt-971',
- 'zDetFacePrint-Face Key-972',
- 'zExtAttr-zPK= zAsset-zExtendedAttributes-973',
- 'zExtAttr-zENT-974',
- 'zExtAttr-zOPT-975',
- 'zExtAttr-Asset Key-976',
- 'zFaceCrop-zPK-977',
- 'zFaceCrop-zEnt-978',
- 'zFaceCrop-zOpt-979',
- 'zFaceCrop-Asset Key-980',
- 'zFaceCrop-Invalid Merge Canidate Person UUID-981',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-982',
- 'zFaceCrop-Face Key-983',
- 'zFaceCrop-UUID-984',
- 'zGenAlbum-zPK=26AlbumLists= 26Albums-985',
- 'zGenAlbum-zENT-986',
- 'zGenAlbum-zOpt-987',
- 'zGenAlbum-Key Asset-Key zAsset-zPK-988',
- 'zGenAlbum-Secondary Key Asset-989',
- 'zGenAlbum-Tertiary Key Asset-990',
- 'zGenAlbum-Custom Key Asset-991',
- 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-992',
- 'zGenAlbum-FOK Parent Folder-993',
- 'zGenAlbum-zSyndicate-994',
- 'zGenAlbum-UUID-995',
- 'SWYConverszGenAlbum-UUID-996',
- 'zGenAlbum-Cloud_GUID = store.cloudphotodb-997',
- 'SWYConverszGenAlbum-Cloud GUID-998',
- 'zGenAlbum-Project Render UUID-999',
- 'SWYConverszGenAlbum-Project Render UUID-1000',
- 'zIntResou-zPK-1001',
- 'zIntResou-zENT-1002',
- 'zIntResou-zOPT-1003',
- 'zIntResou-Asset= zAsset_zPK-1004',
- 'zIntResou-Fingerprint-1005',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-1006',
- 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1007',
- 'zMedAnlyAstAttr-zEnt-1008',
- 'zMedAnlyAstAttr-zOpt-1009',
- 'zMedAnlyAstAttr-Asset= zAsset-zPK-1010',
- 'zMemory-zPK-1011',
- 'zMemory-zENT-1012',
- 'zMemory-zOPT-1013',
- 'zMemory-Key Asset= zAsset-zPK-1014',
- 'zMemory-UUID-1015',
- 'zMoment-zPK-1016',
- 'zMoment-zENT-1017',
- 'zMoment-zOPT-1018',
- 'zMoment-Highlight Key-1019',
- 'zMoment-UUID-1020',
- 'zPerson-zPK=zDetFace-Person-1021',
- 'zPerson-zEnt-1022',
- 'zPerson-zOpt-1023',
- 'zPerson-Share Participant= zSharePartic-zPK-1024',
- 'zPerson-KeyFace=zDetFace-zPK-1025',
- 'zPerson-Assoc Face Group Key-1026',
- 'zPerson-Person UUID-1027',
- 'zPhotoAnalysisAssetAttr-zPK-1028',
- 'zPhotoAnalysisAssetAttr-zEnt-1029',
- 'zPhotoAnalysisAssetAttr-zOpt-1030',
- 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1031',
- 'zSceneP-zPK-1032',
- 'zSceneP-zENT-1033',
- 'zSceneP-zOPT-1034',
- 'zShare-zPK-1035',
- 'zShare-zENT-1036',
- 'zShare-zOPT-1037',
- 'zShare-UUID-1038',
- 'SPLzShare-UUID-1039',
- 'zShare-Scope ID = store.cloudphotodb-1040',
- 'zSharePartic-zPK-1041',
- 'zSharePartic-zENT-1042',
- 'zSharePartic-zOPT-1043',
- 'zSharePartic-Share Key= zShare-zPK-1044',
- 'zSharePartic-Person= zPerson-zPK-1045',
- 'zSharePartic-UUID-1046',
- 'SBKAzSugg-zPK-1047',
- 'SBKAzSugg-zENT-1048',
- 'SBKAzSugg-zOPT-1049',
- 'SBKAzSugg-UUID-1050',
- 'SBRAzSugg-zPK-1051',
- 'SBRAzSugg-zENT-1052',
- 'SBRAzSugg-zOPT-1053',
- 'SBRAzSugg-UUID-1054',
- 'z3SuggBRA-3RepAssets1-1055',
- 'z3SuggBRA-58SuggBeingRepAssets-1056',
- 'z3SuggBKA-58SuggBeingKeyAssets= zSugg-zPK-1057',
- 'z3SuggBKA-3KeyAssets= zAsset-zPK-1058',
- 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1059',
- 'zUnmAdj-zOPT-1060',
- 'zUnmAdj-zENT-1061',
- 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1062',
- 'zUnmAdj-UUID-1063',
- 'zUnmAdj-Other Adjustments Fingerprint-1064',
- 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1065',
- 'zUserFeedback-zPK-1066',
- 'zUserFeedback-zENT-1067',
- 'zUserFeedback-zOPT-1068',
- 'zUserFeedback-Person= zPerson-zPK-1069',
- 'zUserFeedback-Memory= zMemory-zPK-1070',
- 'zUserFeedback-UUID-1071',
- 'zVisualSearchAttr-zPK-1072',
- 'zVisualSearchAttr-zENT-1073',
- 'zVisualSearchAttr-zOPT-1074',
- 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1075',
- 'z27AlbumList-27Albums= zGenAlbum-zPK-1076',
- 'z27AlbumList-Album List Key-1077',
- 'z27AlbumList-FOK27Albums Key-1078',
- 'z28Assets-28Albums= zGenAlbum-zPK-1079',
- 'z28Assets-3Asset Key= zAsset-zPK in the Album-1080',
- 'z28Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1081',
- 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1082',
- 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1083',
- 'z3MemoryBCAs-44MemoriesBeingCuratedAssets= zMemory-zPK-1084',
- 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1085',
- 'z3MemoryBECAs-44MemoriesBeingExtCuratedAssets= zMemory-zPK-1086',
- 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1087',
- 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK-1088',
- 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1089',
- 'z3MemoryBUCAs-44MemoriesBeingUserCuratedAssets= zMemory-zPK-1090',
- 'z3MemoryBCAs-44Memories Being Custom User Assets-1091',
- 'z3MemoryBCAs-3Custom User Assets-1092',
- 'z3MemoryBCAs-FOK-3Custom User Assets-1093')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph97.1-iOS17_Ref_for_Asset_Analysis-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
+ '''
- tlactivity = 'Ph97.1-iOS17_Ref_for_Asset_Analysis-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
+ row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
+ row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
+ row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
+ row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
+ row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
+ row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
+ row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
+ row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
+ row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
+ row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
+ row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
+ row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
+ row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
+ row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
+ row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
+ row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
+ row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
+ row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
+ row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
+ row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307],
+ row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315],
+ row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323],
+ row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331],
+ row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339],
+ row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347],
+ row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355],
+ row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363],
+ row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371],
+ row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379],
+ row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387],
+ row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395],
+ row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403],
+ row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411],
+ row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419],
+ row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427],
+ row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435],
+ row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443],
+ row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451],
+ row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459],
+ row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467],
+ row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475],
+ row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483],
+ row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491],
+ row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499],
+ row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507],
+ row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515],
+ row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523],
+ row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531],
+ row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539],
+ row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547],
+ row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555],
+ row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563],
+ row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571],
+ row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579],
+ row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587],
+ row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595],
+ row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603],
+ row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611],
+ row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619],
+ row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627],
+ row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635],
+ row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643],
+ row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651],
+ row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659],
+ row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667],
+ row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675],
+ row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683],
+ row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691],
+ row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699],
+ row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707],
+ row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715],
+ row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723],
+ row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731],
+ row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739],
+ row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747],
+ row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755],
+ row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763],
+ row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771],
+ row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779],
+ row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787],
+ row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795],
+ row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803],
+ row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811],
+ row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819],
+ row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827],
+ row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835],
+ row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843],
+ row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851],
+ row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859],
+ row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867],
+ row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875],
+ row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883],
+ row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891],
+ row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899],
+ row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907],
+ row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915],
+ row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923],
+ row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931],
+ row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939],
+ row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947],
+ row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955],
+ row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963],
+ row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971],
+ row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979],
+ row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987],
+ row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995],
+ row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002],
+ row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009],
+ row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016],
+ row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023],
+ row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030],
+ row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037],
+ row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044],
+ row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051],
+ row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058],
+ row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065],
+ row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072],
+ row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079],
+ row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086],
+ row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093]))
- else:
- logfunc('No data available for iOS 17 PhotoData-Photos.sqlite')
+ data_headers = (('zAsset-Added Date-0', 'datetime'),
+ 'zAsset- SortToken -CameraRoll-1',
+ 'zAsset Complete-2',
+ 'zAsset-zPK-4QueryStart-3',
+ 'zAddAssetAttr-zPK-4QueryStart-4',
+ 'zAsset-UUID = store.cloudphotodb-4QueryStart-5',
+ 'zAddAssetAttr-Master Fingerprint-4TableStart-6',
+ 'zIntResou-Fingerprint-4TableStart-7',
+ 'zAsset-Bundle Scope-8',
+ 'zAsset-Syndication State-9',
+ 'zAsset-Cloud is My Asset-10',
+ 'zAsset-Cloud is deletable-Asset-11',
+ 'zAsset-Cloud_Local_State-12',
+ 'zAsset-Visibility State-13',
+ 'zExtAttr-Camera Make-14',
+ 'zExtAttr-Camera Model-15',
+ 'zExtAttr-Lens Model-16',
+ 'zExtAttr-Flash Fired-17',
+ 'zExtAttr-Focal Lenght-18',
+ 'zExtAttr-Focal Lenth in 35MM-19',
+ 'zExtAttr-Digital Zoom Ratio-20',
+ 'zAsset-Derived Camera Capture Device-21',
+ 'zAddAssetAttr-Camera Captured Device-22',
+ 'zAddAssetAttr-Imported by-23',
+ 'zCldMast-Imported By-24',
+ 'zAddAssetAttr.Imported by Bundle Identifier-25',
+ 'zAddAssetAttr-Imported By Display Name-26',
+ 'zCldMast-Imported by Bundle ID-27',
+ 'zCldMast-Imported by Display Name-28',
+ 'zAsset-Saved Asset Type-29',
+ 'zAsset-Directory-Path-30',
+ 'zAsset-Filename-31',
+ 'zAddAssetAttr- Original Filename-32',
+ 'zCldMast- Original Filename-33',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-34',
+ 'zAsset-Active Library Scope Participation State -4QueryStart-35',
+ 'zAsset-Library Scope Share State- StillTesting -4QueryStart-36',
+ 'SPLzShare-Cloud Photo Count-SPL -4QueryStart-37',
+ 'SPLzShare-Cloud Video Count-SPL -4QueryStart-38',
+ ('zAddAssetAttr-Date Created Source-39', 'datetime'),
+ ('zAsset-Date Created-40', 'datetime'),
+ ('zCldMast-Creation Date-41', 'datetime'),
+ ('zIntResou-CldMst Date Created-42', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-43',
+ 'zAddAssetAttr-Time Zone Offset-44',
+ 'zAddAssetAttr-Inferred Time Zone Offset-45',
+ 'zAddAssetAttr-EXIF-String-46',
+ ('zAsset-Modification Date-47', 'datetime'),
+ ('zAddAssetAttr-Last Viewed Date-48', 'datetime'),
+ ('zAsset-Last Shared Date-49', 'datetime'),
+ 'zCldMast-Cloud Local State-50',
+ ('zCldMast-Import Date-51', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-52', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-4QueryStart-53',
+ ('zAddAssetAttr-Alt Import Image Date-54', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-55',
+ ('zAsset-Cloud Batch Publish Date-56', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-57', 'datetime'),
+ 'zAsset-Cloud Download Requests-58',
+ 'zAsset-Cloud Batch ID-59',
+ 'zAddAssetAttr-Upload Attempts-60',
+ 'zAsset-Latitude-61',
+ 'zExtAttr-Latitude-62',
+ 'zAsset-Longitude-63',
+ 'zExtAttr-Longitude-64',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-65',
+ 'zAddAssetAttr-Location Hash-66',
+ 'zAddAssetAttr-Shifted Location Valid-67',
+ 'zAddAssetAttr-Shifted Location Data-68',
+ 'zAddAssetAttr-Reverse Location Is Valid-69',
+ 'zAddAssetAttr-Reverse Location Data-70',
+ 'ParentzGenAlbum-UUID-4QueryStart-71',
+ 'zGenAlbum-UUID-4QueryStart-72',
+ 'SWYConverszGenAlbum-UUID-4QueryStart-73',
+ 'ParentzGenAlbum-Cloud GUID-4QueryStart-74',
+ 'zGenAlbum-Cloud GUID-4QueryStart-75',
+ 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-76',
+ 'zCldShareAlbumInvRec-Album GUID-4QueryStart-77',
+ 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-78',
+ 'zGenAlbum-Project Render UUID-4QueryStart-79',
+ 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-80',
+ 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-81',
+ 'zGenAlbum-Cloud_Local_State-4QueryStart-82',
+ 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-83',
+ ('ParentzGenAlbum- Creation Date- 4QueryStart-84', 'datetime'),
+ ('zGenAlbum- Creation Date- 4QueryStart-85', 'datetime'),
+ ('SWYConverszGenAlbum- Creation Date- 4QueryStart-86', 'datetime'),
+ ('zGenAlbum- Cloud Creation Date- 4QueryStart-87', 'datetime'),
+ ('SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-88', 'datetime'),
+ ('zGenAlbum- Start Date- 4QueryStart-89', 'datetime'),
+ ('SWYConverszGenAlbum- Start Date- 4QueryStart-90', 'datetime'),
+ ('zGenAlbum- End Date- 4QueryStart-91', 'datetime'),
+ ('SWYConverszGenAlbum- End Date- 4QueryStart-92', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date- 4QueryStart-93', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-94', 'datetime'),
+ 'ParentzGenAlbum- Title- 4QueryStart-95',
+ 'zGenAlbum- Title-User&System Applied- 4QueryStart-96',
+ 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-97',
+ 'zGenAlbum-Import Session ID-SWY- 4QueryStart-98',
+ 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-99',
+ 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-100',
+ 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-101',
+ 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-102',
+ 'SWYConverszGenAlbum- Syndicate-4QueryStart-103',
+ 'zGenAlbum-zENT- Entity- 4QueryStart-104',
+ 'ParentzGenAlbum- Kind- 4QueryStart-105',
+ 'zGenAlbum-Album Kind- 4QueryStart-106',
+ 'SWYConverszGenAlbum-Album Kind- 4QueryStart-107',
+ 'AAAzCldMastMedData-zOPT-108',
+ 'zAddAssetAttr-Media Metadata Type-109',
+ 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-110',
+ 'AAAzCldMastMedData-Data-111',
+ 'CldMasterzCldMastMedData-zOPT-112',
+ 'zCldMast-Media Metadata Type-113',
+ 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-114',
+ 'CMzCldMastMedData-Data-115',
+ 'zAsset-Search Index Rebuild State-116',
+ 'zAddAssetAttr-Syndication History-117',
+ 'zMedAnlyAstAttr-Syndication Processing Version-118',
+ 'zMedAnlyAstAttr-Syndication Processing Value-119',
+ 'zAsset-Orientation-120',
+ 'zAddAssetAttr-Original Orientation-121',
+ 'zAsset-Kind-122',
+ 'zAsset-Kind-Sub-Type-123',
+ 'zAddAssetAttr-Cloud Kind Sub Type-124',
+ 'zAsset-Playback Style-125',
+ 'zAsset-Playback Variation-126',
+ 'zAsset-Video Duration-127',
+ 'zExtAttr-Duration-128',
+ 'zAsset-Video CP Duration-129',
+ 'zAddAssetAttr-Video CP Duration Time Scale-130',
+ 'zAsset-Video CP Visibility State-131',
+ 'zAddAssetAttr-Video CP Display Value-132',
+ 'zAddAssetAttr-Video CP Display Time Scale-133',
+ 'zIntResou-Datastore Class ID-134',
+ 'zAsset-Cloud Placeholder Kind-135',
+ 'zIntResou-Local Availability-136',
+ 'zIntResou-Local Availability Target-137',
+ 'zIntResou-Cloud Local State-138',
+ 'zIntResou-Remote Availability-139',
+ 'zIntResou-Remote Availability Target-140',
+ 'zIntResou-Transient Cloud Master-141',
+ 'zIntResou-Side Car Index-142',
+ 'zIntResou- File ID-143',
+ 'zIntResou-Version-144',
+ 'zAddAssetAttr- Original-File-Size-145',
+ 'zIntResou-Resource Type-146',
+ 'zIntResou-Datastore Sub-Type-147',
+ 'zIntResou-Cloud Source Type-148',
+ 'zIntResou-Data Length-149',
+ 'zIntResou-Recipe ID-150',
+ ('zIntResou-Cloud Last Prefetch Date-151', 'datetime'),
+ 'zIntResou-Cloud Prefetch Count-152',
+ ('zIntResou- Cloud-Last-OnDemand Download-Date-153', 'datetime'),
+ 'zIntResou-UniformTypeID_UTI_Conformance_Hint-154',
+ 'zIntResou-Compact-UTI-155',
+ 'zAsset-Uniform Type ID-156',
+ 'zAsset-Original Color Space-157',
+ 'zCldMast-Uniform_Type_ID-158',
+ 'zCldMast-Full Size JPEG Source-159',
+ 'zAsset-HDR Gain-160',
+ 'zAsset-zHDR_Type-161',
+ 'zExtAttr-Codec-162',
+ 'zIntResou-Codec Four Char Code Name-163',
+ 'zCldMast-Codec Name-164',
+ 'zCldMast-Video Frame Rate-165',
+ 'zCldMast-Placeholder State-166',
+ 'zAsset-Depth_Type-167',
+ 'zAsset-Avalanche UUID-4TableStart-168',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-169',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-170',
+ 'zAddAssetAttr-Cloud Recovery State-171',
+ 'zAddAssetAttr-Cloud State Recovery Attempts Count-172',
+ 'zAsset-Deferred Processing Needed-173',
+ 'zAsset-Video Deferred Processing Needed-174',
+ 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-175',
+ 'zAddAssetAttr-Deferred Processing Candidate Options-176',
+ 'zAsset-Has Adjustments-Camera-Effects-Filters-177',
+ 'zUnmAdj-UUID-4TableStart-178',
+ ('zAsset-Adjustment Timestamp-179', 'datetime'),
+ ('zUnmAdj-Adjustment Timestamp-180', 'datetime'),
+ 'zAddAssetAttr-Editor Bundle ID-181',
+ 'zUnmAdj-Editor Localized Name-182',
+ 'zUnmAdj-Adjustment Format ID-183',
+ 'zAddAssetAttr-Montage-184',
+ 'zUnmAdj-Adjustment Render Types-185',
+ 'zUnmAdj-Adjustment Format Version-186',
+ 'zUnmAdj-Adjustment Base Image Format-187',
+ 'zAsset-Favorite-188',
+ 'zAsset-Hidden-189',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-190',
+ ('zAsset-Trashed Date-191', 'datetime'),
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-192',
+ 'zAsset-Delete-Reason-193',
+ 'zIntResou-Trash State-194',
+ ('zIntResou-Trashed Date-195', 'datetime'),
+ 'zAsset-Cloud Delete State-196',
+ 'zIntResou-Cloud Delete State-197',
+ 'zAddAssetAttr-PTP Trashed State-198',
+ 'zIntResou-PTP Trashed State-199',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-200',
+ ('zMedAnlyAstAttr-Media Analysis Timestamp-201', 'datetime'),
+ ('zAsset-Analysis State Modification Date-202', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-203',
+ 'zAddAssetAttr- View Count-204',
+ 'zAddAssetAttr- Pending Play Count-205',
+ 'zAddAssetAttr- Play Count-206',
+ 'zAddAssetAttr- Pending Share Count-207',
+ 'zAddAssetAttr- Share Count-208',
+ 'zAddAssetAttr-Allowed for Analysis-209',
+ 'zAddAssetAttr-Scene Analysis Version-210',
+ 'zAddAssetAttr-Scene Analysis is From Preview-211',
+ ('zAddAssetAttr-Scene Analysis Timestamp-212', 'datetime'),
+ 'zAsset-Duplication Asset Visibility State-213',
+ 'zAddAssetAttr-Destination Asset Copy State-214',
+ 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-215',
+ 'zAddAssetAttr-Source Asset for Duplication Scope ID-216',
+ 'zCldMast-Source Master For Duplication Scope ID-217',
+ 'zAddAssetAttr-Source Asset For Duplication ID-218',
+ 'zCldMast-Source Master for Duplication ID-219',
+ 'zAddAssetAttr-Variation Suggestions States-220',
+ 'zAsset-High Frame Rate State-221',
+ 'zAsset-Video Key Frame Time Scale-222',
+ 'zAsset-Video Key Frame Value-223',
+ 'zExtAttr-ISO-224',
+ 'zExtAttr-Metering Mode-225',
+ 'zExtAttr-Sample Rate-226',
+ 'zExtAttr-Track Format-227',
+ 'zExtAttr-White Balance-228',
+ 'zExtAttr-Aperture-229',
+ 'zExtAttr-BitRate-230',
+ 'zExtAttr-Exposure Bias-231',
+ 'zExtAttr-Frames Per Second-232',
+ 'zExtAttr-Shutter Speed-233',
+ 'zExtAttr-Slush Scene Bias-234',
+ 'zExtAttr-Slush Version-235',
+ 'zExtAttr-Slush Preset-236',
+ 'zExtAttr-Slush Warm Bias-237',
+ 'zAsset-Height-238',
+ 'zAddAssetAttr-Original Height-239',
+ 'zIntResou-Unoriented Height-240',
+ 'zAsset-Width-241',
+ 'zAddAssetAttr-Original Width-242',
+ 'zIntResou-Unoriented Width-243',
+ 'zShare-Thumbnail Image Data-244',
+ 'SPLzShare-Thumbnail Image Data-245',
+ 'zAsset-Thumbnail Index-246',
+ 'zAddAssetAttr-Embedded Thumbnail Height-247',
+ 'zAddAssetAttr-Embedded Thumbnail Length-248',
+ 'zAddAssetAttr-Embedded Thumbnail Offset-249',
+ 'zAddAssetAttr-Embedded Thumbnail Width-250',
+ 'zAsset-Packed Acceptable Crop Rect-251',
+ 'zAsset-Packed Badge Attributes-252',
+ 'zAsset-Packed Preferred Crop Rect-253',
+ 'zAsset-Curation Score-254',
+ 'zAsset-Camera Processing Adjustment State-255',
+ 'zAsset-Depth Type-256',
+ 'zAsset-Is Magic Carpet-QuicktimeMOVfile-257',
+ 'zAddAssetAttr-Orig Resource Choice-258',
+ 'zAsset-Spatial Type-259',
+ 'zAddAssetAttr-Spatial Over Capture Group ID-260',
+ 'zAddAssetAttr-Place Annotation Data-261',
+ 'zAddAssetAttr-Distance Identity-262',
+ 'zAddAssetAttr-Edited IPTC Attributes-263',
+ 'zAssetDes-Long Description-264',
+ 'zAddAssetAttr-Asset Description-265',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-266',
+ 'zAddAssetAttr-Accessibility Description-267',
+ 'zAddAssetAttr-Photo Stream Tag ID-268',
+ 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-269',
+ ('zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-270', 'datetime'),
+ ('zCldFeedEnt-Entry Date-271', 'datetime'),
+ 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-272',
+ 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-273',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-274',
+ 'zCldFeedEnt-Entry Priority Number-275',
+ 'zCldFeedEnt-Entry Type Number-276',
+ 'zCldSharedComment-Cloud GUID-4TableStart-277',
+ ('zCldSharedComment-Date-278', 'datetime'),
+ ('zCldSharedComment-Comment Client Date-279', 'datetime'),
+ ('zAsset-Cloud Last Viewed Comment Date-280', 'datetime'),
+ 'zCldSharedComment-Type-281',
+ 'zCldSharedComment-Comment Text-282',
+ 'zCldSharedComment-Commenter Hashed Person ID-283',
+ 'zCldSharedComment-Batch Comment-284',
+ 'zCldSharedComment-Is a Caption-285',
+ 'zAsset-Cloud Has Comments by Me-286',
+ 'zCldSharedComment-Is My Comment-287',
+ 'zCldSharedComment-Is Deletable-288',
+ 'zAsset-Cloud Has Comments Conversation-289',
+ 'zAsset-Cloud Has Unseen Comments-290',
+ 'zCldSharedComment-Liked-291',
+ 'zAddAssetAttr-Share Type-292',
+ 'zAsset-Library Scope Share State- StillTesting-293',
+ 'zAsset-Active Library Scope Participation State-294',
+ 'zAddAssetAttr-Library Scope Asset Contributors To Update-295',
+ 'zShare-UUID-CMM-4TableStart-296',
+ 'SPLzShare-UUID-SPL-4TableStart-297',
+ 'zShare-zENT-CMM-298',
+ 'SPLzShare-zENT-SPL-299',
+ 'zSharePartic-z54SHARE-300',
+ 'SPLzSharePartic-z54SHARE-301',
+ 'zShare-Status-CMM-302',
+ 'SPLzShare-Status-SPL-303',
+ 'zShare-Scope Type-CMM-304',
+ 'SPLzShare-Scope Type-SPL-305',
+ 'zShare-Local Publish State-CMM-306',
+ 'SPLzShare-Local Publish State-SPL-307',
+ 'zShare-Public Permission-CMM-308',
+ 'SPLzShare-Public Permission-SPL-309',
+ 'zShare-Originating Scope ID-CMM-310',
+ 'SPLzShare-Originating Scope ID-SPL-311',
+ 'zShare-Scope ID-CMM-312',
+ 'SPLzShare-Scope ID-SPL-313',
+ 'zShare-Title-CMM-314',
+ 'SPLzShare-Title-SPL-315',
+ 'zShare-Share URL-CMM-316',
+ 'SPLzShare-Share URL-SPL-317',
+ ('zShare-Creation Date-CMM-318', 'datetime'),
+ ('SPLzShare-Creation Date-SPL-319', 'datetime'),
+ ('zShare-Start Date-CMM-320', 'datetime'),
+ ('SPLzShare-Start Date-SPL-321', 'datetime'),
+ ('zShare-End Date-CMM-322', 'datetime'),
+ ('SPLzShare-End Date-SPL-323', 'datetime'),
+ ('zShare-Expiry Date-CMM-324', 'datetime'),
+ ('SPLzShare-Expiry Date-SPL-325', 'datetime'),
+ 'zShare-Cloud Item Count-CMM-326',
+ 'SPLzShare-Cloud Item Count-SPL-327',
+ 'zShare-Asset Count-CMM-328',
+ 'SPLzShare-Asset Count-SPL-329',
+ 'zShare-Cloud Photo Count-CMM-330',
+ 'SPLzShare-Cloud Photo Count-SPL-331',
+ 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-332',
+ 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-333',
+ 'zShare-Photos Count-CMM-334',
+ 'SPLzShare-Photos Count-CMM-SPL-335',
+ 'zShare-Uploaded Photos Count-CMM-336',
+ 'SPLzShare-Uploaded Photos Count-SPL-337',
+ 'zShare-Cloud Video Count-CMM-338',
+ 'SPLzShare-Cloud Video Count-SPL-339',
+ 'zShare-Videos Count-CMM-340',
+ 'SPLzShare-Videos Count-SPL-341',
+ 'zShare-Uploaded Videos Count-CMM-342',
+ 'SPLzShare-Uploaded Videos Count-SPL-343',
+ 'zShare-Force Sync Attempted-CMM-344',
+ 'SPLzShare-Force Sync Attempted-SPL-345',
+ 'zShare-Cloud Local State-CMM-346',
+ 'SPLzShare-Cloud Local State-SPL-347',
+ 'zShare-Scope Syncing State-CMM-348',
+ 'SPLzShare-Scope Syncing State-SPL-349',
+ 'zShare-Auto Share Policy-CMM-350',
+ 'SPLzShare-Auto Share Policy-SPL-351',
+ 'zShare-Should Notify On Upload Completion-CMM-352',
+ 'SPLzShare-Should Notify On Upload Completion-SPL-353',
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-354',
+ 'zShare-Trashed State-CMM-355',
+ 'SPLzShare-Trashed State-SPL-356',
+ 'zShare-Cloud Delete State-CMM-357',
+ 'SPLzShare-Cloud Delete State-SPL-358',
+ ('zShare-Trashed Date-CMM-359', 'datetime'),
+ ('SPLzShare-Trashed Date-SPL-360', 'datetime'),
+ ('zShare-LastParticipant Asset Trash Notification Date-CMM-361', 'datetime'),
+ ('SPLzShare-LastParticipant Asset Trash Notification Date-SPL-362', 'datetime'),
+ ('zShare-Last Participant Asset Trash Notification View Date-CMM-363', 'datetime'),
+ ('SPLzShare-Last Participant Asset Trash Notification View Date-SPL-364', 'datetime'),
+ 'zShare-Exit Source-CMM-365',
+ 'SPLzShare-Exit Source-SPL-366',
+ 'zShare-SPL_Exit State-CMM-367',
+ 'SPLzShare-SPL_Exit State-SPL-368',
+ 'zShare-Exit Type-CMM-369',
+ 'SPLzShare-Exit Type-SPL-370',
+ 'zShare-Should Ignor Budgets-CMM-371',
+ 'SPLzShare-Should Ignor Budgets-SPL-372',
+ 'zShare-Preview State-CMM-373',
+ 'SPLzShare-Preview State-SPL-374',
+ 'zShare-Preview Data-CMM-375',
+ 'SPLzShare-Preview Data-SPL-376',
+ 'zShare-Rules-CMM-377',
+ 'SPLzShare-Rules-SPL-378',
+ 'zShare-Thumbnail Image Data-CMM-379',
+ 'SPLzShare-Thumbnail Image Data-SPL-380',
+ 'zShare-Participant Cloud Update State-CMM-381',
+ 'SPLzShare-Participant Cloud Update State-SPL-382',
+ 'zSharePartic-UUID-4TableStart-383',
+ 'SPLzSharePartic-UUID-4TableStart-384',
+ 'zSharePartic-Acceptance Status-385',
+ 'SPLzSharePartic-Acceptance Status-386',
+ 'zSharePartic-Is Current User-387',
+ 'SPLzSharePartic-Is Current User-388',
+ 'zSharePartic-Role-389',
+ 'SPLzSharePartic-Role-390',
+ 'zSharePartic-Premission-391',
+ 'SPLzSharePartic-Premission-392',
+ 'zSharePartic-Participant ID-393',
+ 'SPLzSharePartic-Participant ID-394',
+ 'zSharePartic-User ID-395',
+ 'SPLzSharePartic-User ID-396',
+ 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-397',
+ 'SPLzSharePartic-zPK-4TableStart-398',
+ 'zSharePartic-zPK-4TableStart-399',
+ 'zSharePartic-Email Address-400',
+ 'SPLzSharePartic-Email Address-401',
+ 'zSharePartic-Phone Number-402',
+ 'SPLzSharePartic-Phone Number-403',
+ 'zSharePartic-Exit State-404',
+ 'SPLzSharePartic-Exit State-405',
+ 'ParentzGenAlbum-UUID-4TableStart-406',
+ 'zGenAlbum-UUID-4TableStart-407',
+ 'SWYConverszGenAlbum-UUID-4TableStart-408',
+ 'ParentzGenAlbum-Cloud GUID-4TableStart-409',
+ 'zGenAlbum-Cloud GUID-4TableStart-410',
+ 'SWYConverszGenAlbum-Cloud GUID-4TableStart-411',
+ 'zCldShareAlbumInvRec-Album GUID-4TableStart-412',
+ 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-413',
+ 'zGenAlbum-Project Render UUID-4TableStart-414',
+ 'SWYConverszGenAlbum-Project Render UUID-4TableStart-415',
+ 'zAlbumList-Needs Reordering Number-416',
+ 'zGenAlbum-zENT- Entity-417',
+ 'ParentzGenAlbum-Kind-418',
+ 'zGenAlbum-Album Kind-419',
+ 'SWYConverszGenAlbum-Album Kind-420',
+ 'ParentzGenAlbum-Cloud-Local-State-421',
+ 'zGenAlbum-Cloud_Local_State-422',
+ 'SWYConverszGenAlbum-Cloud_Local_State-423',
+ 'ParentzGenAlbum- Title-424',
+ 'zGenAlbum- Title-User&System Applied-425',
+ 'SWYConverszGenAlbum- Title -User&System Applied-426',
+ 'zGenAlbum-Import Session ID-SWY-427',
+ 'zAsset- Conversation= zGenAlbum_zPK-428',
+ 'SWYConverszGenAlbum- Import Session ID-SWY-429',
+ 'zGenAlbum-Imported by Bundle Identifier-430',
+ 'SWYzGenAlbum-Imported by Bundle Identifier-431',
+ 'SWYConverszGenAlbum- Syndicate-432',
+ ('ParentzGenAlbum-Creation Date-433', 'datetime'),
+ ('zGenAlbum-Creation Date-434', 'datetime'),
+ ('SWYConverszGenAlbum-Creation Date-435', 'datetime'),
+ ('zGenAlbum-Cloud Creation Date-436', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Creation Date-437', 'datetime'),
+ ('zGenAlbum-Start Date-438', 'datetime'),
+ ('SWYConverszGenAlbum-Start Date-439', 'datetime'),
+ ('zGenAlbum-End Date-440', 'datetime'),
+ ('SWYConverszGenAlbum-End Date-441', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-442', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Subscription Date-443', 'datetime'),
+ 'ParentzGenAlbum-Pending Items Count-444',
+ 'zGenAlbum-Pending Items Count-445',
+ 'SWYConverszGenAlbum-Pending Items Count-446',
+ 'ParentzGenAlbum-Pending Items Type-447',
+ 'zGenAlbum-Pending Items Type-448',
+ 'SWYConverszGenAlbum-Pending Items Type-449',
+ 'zGenAlbum- Cached Photos Count-450',
+ 'SWYConverszGenAlbum- Cached Photos Count-451',
+ 'zGenAlbum- Cached Videos Count-452',
+ 'SWYConverszGenAlbum- Cached Videos Count-453',
+ 'zGenAlbum- Cached Count-454',
+ 'SWYConverszGenAlbum- Cached Count-455',
+ 'ParentzGenAlbum-Sync Event Order Key-456',
+ 'zGenAlbum-Sync Event Order Key-457',
+ 'SWYConverszGenAlbum-Sync Event Order Key-458',
+ 'zGenAlbum-Has Unseen Content-459',
+ 'SWYConverszGenAlbum-Has Unseen Content-460',
+ 'zGenAlbum-Unseen Asset Count-461',
+ 'SWYConverszGenAlbum-Unseen Asset Count-462',
+ 'zGenAlbum-is Owned-463',
+ 'SWYConverszGenAlbum-is Owned-464',
+ 'zGenAlbum-Cloud Relationship State-465',
+ 'SWYConverszGenAlbum-Cloud Relationship State-466',
+ 'zGenAlbum-Cloud Relationship State Local-467',
+ 'SWYConverszGenAlbum-Cloud Relationship State Local-468',
+ 'zGenAlbum-Cloud Owner Mail Key-469',
+ 'SWYConverszGenAlbum-Cloud Owner Mail Key-470',
+ 'zGenAlbum-Cloud Owner Frist Name-471',
+ 'SWYConverszGenAlbum-Cloud Owner Frist Name-472',
+ 'zGenAlbum-Cloud Owner Last Name-473',
+ 'SWYConverszGenAlbum-Cloud Owner Last Name-474',
+ 'zGenAlbum-Cloud Owner Full Name-475',
+ 'SWYConverszGenAlbum-Cloud Owner Full Name-476',
+ 'zGenAlbum-Cloud Person ID-477',
+ 'SWYConverszGenAlbum-Cloud Person ID-478',
+ 'zAsset-Cloud Owner Hashed Person ID-479',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-480',
+ 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-481',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-482',
+ 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-483',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-484',
+ 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-485',
+ 'zGenAlbum-Cloud Album Sub Type-486',
+ 'SWYConverszGenAlbum-Cloud Album Sub Type-487',
+ ('zGenAlbum-Cloud Contribution Date-488', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Contribution Date-489', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-490', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Last Interesting Change Date-491', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-492',
+ 'SWYConverszGenAlbum-Cloud Notification Enabled-493',
+ 'ParentzGenAlbum-Pinned-494',
+ 'zGenAlbum-Pinned-495',
+ 'SWYConverszGenAlbum-Pinned-496',
+ 'ParentzGenAlbum-Custom Sort Key-497',
+ 'zGenAlbum-Custom Sort Key-498',
+ 'SWYConverszGenAlbum-Custom Sort Key-499',
+ 'ParentzGenAlbum-Custom Sort Ascending-500',
+ 'zGenAlbum-Custom Sort Ascending-501',
+ 'SWYConverszGenAlbum-Custom Sort Ascending-502',
+ 'ParentzGenAlbum-Is Prototype-503',
+ 'zGenAlbum-Is Prototype-504',
+ 'SWYConverszGenAlbum-Is Prototype-505',
+ 'ParentzGenAlbum-Project Document Type-506',
+ 'zGenAlbum-Project Document Type-507',
+ 'SWYConverszGenAlbum-Project Document Type-508',
+ 'ParentzGenAlbum-Custom Query Type-509',
+ 'zGenAlbum-Custom Query Type-510',
+ 'SWYConverszGenAlbum-Custom Query Type-511',
+ 'ParentzGenAlbum-Trashed State-512',
+ ('ParentzGenAlbum-Trash Date-513', 'datetime'),
+ 'zGenAlbum-Trashed State-514',
+ ('zGenAlbum-Trash Date-515', 'datetime'),
+ 'SWYConverszGenAlbum-Trashed State-516',
+ ('SWYConverszGenAlbum-Trash Date-517', 'datetime'),
+ 'ParentzGenAlbum-Cloud Delete State-518',
+ 'zGenAlbum-Cloud Delete State-519',
+ 'SWYConverszGenAlbum-Cloud Delete State-520',
+ 'zGenAlbum-Cloud Owner Whitelisted-521',
+ 'SWYConverszGenAlbum-Cloud Owner Whitelisted-522',
+ 'zGenAlbum-Cloud Local Public URL Enabled-523',
+ 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-524',
+ 'zGenAlbum-Cloud Public URL Enabled-525',
+ 'zGenAlbum-Public URL-526',
+ 'SWYConverszGenAlbum-Cloud Public URL Enabled-527',
+ 'SWYConverszGenAlbum-Public URL-528',
+ 'zGenAlbum-Key Asset Face Thumb Index-529',
+ 'SWYConverszGenAlbum-Key Asset Face Thumb Index-530',
+ 'zGenAlbum-Project Text Extension ID-531',
+ 'SWYConverszGenAlbum-Project Text Extension ID-532',
+ 'zGenAlbum-User Query Data-533',
+ 'SWYConverszGenAlbum-User Query Data-534',
+ 'zGenAlbum-Custom Query Parameters-535',
+ 'SWYConverszGenAlbum-Custom Query Parameters-536',
+ 'zGenAlbum-Project Data-537',
+ 'SWYConverszGenAlbum-Project Data-538',
+ 'zGenAlbum-Search Index Rebuild State-539',
+ 'SWYConverszGenAlbum-Search Index Rebuild State-540',
+ 'zGenAlbum-Duplicate Type-541',
+ 'SWYConverszGenAlbum-Duplicate Type-542',
+ 'zGenAlbum-Privacy State-543',
+ 'SWYConverszGenAlbum-Privacy State-544',
+ 'zCldShareAlbumInvRec-zUUID-4TableStart-545',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-546',
+ 'zCldShareAlbumInvRec-Invitation State Local-547',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-548',
+ ('zCldShareAlbumInvRec-Subscription Date-549', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-550',
+ 'zCldShareAlbumInvRec-Invitee Last Name-551',
+ 'zCldShareAlbumInvRec-Invitee Full Name-552',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-553',
+ 'zCldShareAlbumInvRec-Invitee Email Key-554',
+ 'zGenAlbum-Key Asset Face ID-555',
+ 'zFaceCrop-Face Area Points-556',
+ 'zAsset-Face Adjustment Version-557',
+ 'zAddAssetAttr-Face Analysis Version-558',
+ 'zDetFace-Asset Visible-559',
+ 'zPerson-Face Count-560',
+ 'zDetFace-Face Crop-561',
+ 'zDetFace-Face Algorithm Version-562',
+ 'zDetFace-Adjustment Version-563',
+ 'zDetFace-UUID-4TableStart-564',
+ 'zPerson-Person UUID-4TableStart-565',
+ 'zPerson - MD ID-566',
+ 'zPerson - Asset Sort Order-567',
+ 'zDetFace-Confirmed Face Crop Generation State-568',
+ 'zDetFace-Manual-569',
+ 'zDetFace-Detection Type-570',
+ 'zPerson-Detection Type-571',
+ 'zDetFace-VIP Model Type-572',
+ 'zDetFace-Name Source-573',
+ 'zDetFace-Cloud Name Source-574',
+ 'zPerson-Merge Candidate Confidence-575',
+ 'zPerson-Person URI-576',
+ 'zPerson-Display Name-577',
+ 'zPerson-Full Name-578',
+ 'zPerson-Cloud Verified Type-579',
+ 'zFaceCrop-State-580',
+ 'zFaceCrop-Type-581',
+ 'zFaceCrop-UUID-4TableStart-582',
+ 'zPerson-Type-583',
+ 'zPerson-Verified Type-584',
+ 'zPerson-Gender Type-585',
+ 'zDetFace-Gender Type-586',
+ 'zDetFace-Center X-587',
+ 'zDetFace-Center Y-588',
+ 'zPerson-Age Type Estimate-589',
+ 'zDetFace-Age Type Estimate-590',
+ 'zDetFace-Ethnicity Type-591',
+ 'zDetFace-Skin Tone Type-592',
+ 'zDetFace-Hair Type-593',
+ 'zDetFace-Hair Color Type-594',
+ 'zDetFace-Head Gear Type-595',
+ 'zDetFace-Facial Hair Type-596',
+ 'zDetFace-Has Face Mask-597',
+ 'zDetFace-Pose Type-598',
+ 'zDetFace-Face Expression Type-599',
+ 'zDetFace-Has Smile-600',
+ 'zDetFace-Smile Type-601',
+ 'zDetFace-Lip Makeup Type-602',
+ 'zDetFace-Eyes State-603',
+ 'zDetFace-Is Left Eye Closed-604',
+ 'zDetFace-Is Right Eye Closed-605',
+ 'zDetFace-Gaze Center X-606',
+ 'zDetFace-Gaze Center Y-607',
+ 'zDetFace-Face Gaze Type-608',
+ 'zDetFace-Eye Glasses Type-609',
+ 'zDetFace-Eye Makeup Type-610',
+ 'zDetFace-Cluster Squence Number Key-611',
+ 'zDetFace-Grouping ID-612',
+ 'zDetFace-Master ID-613',
+ 'zDetFace-Quality-614',
+ 'zDetFace-Quality Measure-615',
+ 'zDetFace-Source Height-616',
+ 'zDetFace-Source Width-617',
+ 'zDetFace-Hidden-Asset Hidden-618',
+ 'zDetFace-In Trash-Recently Deleted-619',
+ 'zDetFace-Cloud Local State-620',
+ 'zDetFace-Training Type-621',
+ 'zDetFace.Pose Yaw-622',
+ 'zDetFace-Body Center X-623',
+ 'zDetFace-Body Center Y-624',
+ 'zDetFace-Body Height-625',
+ 'zDetFace-Body Width-626',
+ 'zDetFace-Roll-627',
+ 'zDetFace-Size-628',
+ 'zDetFace-Cluster Squence Number-629',
+ 'zDetFace-Blur Score-630',
+ 'zDetFacePrint-Face Print Version-631',
+ 'zMedAnlyAstAttr-Face Count-632',
+ 'zDetFaceGroup-UUID-4TableStart-633',
+ 'zDetFaceGroup-Person Builder State-634',
+ 'zDetFaceGroup-UnNamed Face Count-635',
+ 'zPerson-In Person Naming Model-636',
+ 'zPerson-Key Face Pick Source Key-637',
+ 'zPerson-Manual Order Key-638',
+ 'zPerson-Question Type-639',
+ 'zPerson-Suggested For Client Type-640',
+ 'zPerson-Merge Target Person-641',
+ 'zPerson-Cloud Local State-642',
+ 'zFaceCrop-Cloud Local State-643',
+ 'zFaceCrop-Cloud Type-644',
+ 'zPerson-Cloud Delete State-645',
+ 'zFaceCrop-Cloud Delete State-646',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-647',
+ 'zAsset-Highlight Visibility Score-648',
+ 'zMemory-UUID-4TableStart-649',
+ 'zMemory-AssetListPredicte-650',
+ 'zMemory-Score-651',
+ 'zMemory-SubTitle-652',
+ 'zMemory-Title-653',
+ 'zMemory-Category-654',
+ 'zMemory-SubCategory-655',
+ ('zMemory-Creation Date-656', 'datetime'),
+ ('zMemory-Last Enrichment Date-657', 'datetime'),
+ 'zMemory-User Action Options-658',
+ 'zMemory-Favorite Memory-659',
+ 'zMemory-View Count-660',
+ 'zMemory-Play Count-661',
+ 'zMemory-Rejected-662',
+ 'zMemory-Share Count-663',
+ 'zMemory-Sharing Composition-664',
+ ('zMemory-Last Movie Play Date-665', 'datetime'),
+ ('zMemory-Last Viewed Date-666', 'datetime'),
+ 'zMemory-Pending Play Count Memory-667',
+ 'zMemory-Pending Share Count Memory-668',
+ 'zMemory-Pending View Count Memory-669',
+ 'zMemory-Pending State-670',
+ 'zMemory-Featured State-671',
+ 'zMemory-Photos Graph Version-672',
+ 'zMemory-Graph Memory Identifier-673',
+ 'zMemory-Notification State-674',
+ 'zMemory-Cloud Local State-675',
+ 'zMemory-Cloud Delete State-676',
+ 'zMemory-Story Color Grade Kind-677',
+ 'zMemory-Story Serialized Title Category-678',
+ 'zMemory-Syndicated Content State-679',
+ 'zMemory-Search Index Rebuild State-680',
+ 'zMemory-Black Listed Feature-681',
+ 'zMoment-UUID-4TableStart-682',
+ 'zMoment-Aggregation Score-683',
+ ('zMoment-Start Date-684', 'datetime'),
+ ('zMoment-Representative Date-685', 'datetime'),
+ 'zMoment-Timezone Offset-686',
+ ('zMoment-Modification Date-687', 'datetime'),
+ ('zMoment-End Date-688', 'datetime'),
+ 'zMoment-SubTitle-689',
+ 'zMoment-Title-690',
+ 'zMoment-Originator State-691',
+ 'zMoment-Sharing Composition-692',
+ 'zMoment-Cached Count Shared-693',
+ 'zMoment-Processed Location-694',
+ 'zMoment-Approx Latitude-695',
+ 'zMoment-Approx Longitude-696',
+ 'zMoment-GPS Horizontal Accuracy-697',
+ 'zMoment-Cache Count-698',
+ 'zMoment-Cached Photos Count-699',
+ 'zMoment-Cached Videos Count-700',
+ 'zMoment-Trashed State-701',
+ 'SBKAzSugg-UUID-4TableStart-702',
+ 'SBKAzSugg-Suggestion Context-703',
+ 'SBKAzSugg-Sharing Composition-704',
+ ('SBKAzSugg-Start Date-705', 'datetime'),
+ 'SBKAzSugg-State-706',
+ 'SBKAzSugg-Featured State-707',
+ 'SBKAzSugg- Available Features-708',
+ 'SBKAzSugg-Notification State-709',
+ ('SBKAzSugg-Creation Date-710', 'datetime'),
+ ('SBKAzSugg-End Date-711', 'datetime'),
+ ('SBKAzSugg-Activation Date-712', 'datetime'),
+ ('SBKAzSugg-Expunge Date-713', 'datetime'),
+ ('SBKAzSugg-Relevant Until Date-714', 'datetime'),
+ 'SBKAzSugg-Title-715',
+ 'SBKAzSugg-Sub Title-716',
+ 'SBKAzSugg-Cached Count-717',
+ 'SBKAzSugg-Cahed Photos Count-718',
+ 'SBKAzSugg-Cached Videos Count-719',
+ 'SBKAzSugg-Type-720',
+ 'SBKAzSugg-Sub Type-721',
+ 'SBKAzSugg-Action Data-722',
+ 'SBKAzSugg-Version-723',
+ 'SBKAzSugg-Cloud Local State-724',
+ 'SBKAzSugg-Cloud Delete State-725',
+ 'SBRAzSugg-UUID-4TableStart-726',
+ 'SBRAzSugg-Suggestion Context-727',
+ 'SBRAzSugg-Sharing Composition-728',
+ ('SBRAzSugg-Start Date-729', 'datetime'),
+ 'SBRAzSugg-State-730',
+ 'SBRAzSugg-Featured State-731',
+ 'SBRAzSugg- Available Features-732',
+ 'SBRAzSugg-Notification State-733',
+ ('SBRAzSugg-Creation Date-734', 'datetime'),
+ ('SBRAzSugg-End Date-735', 'datetime'),
+ ('SBRAzSugg-Activation Date-736', 'datetime'),
+ ('SBRAzSugg-Expunge Date-737', 'datetime'),
+ ('SBRAzSugg-Relevant Until Date-738', 'datetime'),
+ 'SBRAzSugg-Title-739',
+ 'SBRAzSugg-Sub Title-740',
+ 'SBRAzSugg-Cached Count-741',
+ 'SBRAzSugg-Cahed Photos Count-742',
+ 'SBRAzSugg-Cached Videos Count-743',
+ 'SBRAzSugg-Type-744',
+ 'SBRAzSugg-Sub Type-745',
+ 'SBRAzSugg-Action Data-746',
+ 'SBRAzSugg-Version-747',
+ 'SBRAzSugg-Cloud Local State-748',
+ 'SBRAzSugg-Cloud Delete State-749',
+ 'zMedAnlyAstAttr-Media Analysis Version-750',
+ 'zMedAnlyAstAttr-Audio Classification-751',
+ 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-752',
+ 'zMedAnlyAstAttr-Best Video Range Start Time Scale-753',
+ 'zMedAnlyAstAttr-Best Video Range Duration Value-754',
+ 'zMedAnlyAstAttr-Best Video Range Start Value-755',
+ 'zMedAnlyAstAttr-Packed Best Playback Rect-756',
+ 'zMedAnlyAstAttr-Activity Score-757',
+ 'zMedAnlyAstAttr-Video Score-758',
+ 'zMedAnlyAstAttr-Audio Score-759',
+ 'zMedAnlyAstAttr-Wallpaper Score-760',
+ 'zMedAnlyAstAttr-AutoPlay Suggestion Score-761',
+ 'zMedAnlyAstAttr-Blurriness Score-762',
+ 'zMedAnlyAstAttr-Exposure Score-763',
+ 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-764',
+ 'zMedAnlyAstAttr-Probable Rotation Direction-765',
+ 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-766',
+ 'zAssetAnalyState-Asset UUID-4TableStart-767',
+ 'zAssetAnalyState-Analyisis State-768',
+ 'zAssetAnalyState-Worker Flags-769',
+ 'zAssetAnalyState-Worker Type-770',
+ ('zAssetAnalyState-Ignore Until Date-771', 'datetime'),
+ ('zAssetAnalyState-Last Ignored Date-772', 'datetime'),
+ ('zAssetAnalyState-Sort Token-773', 'datetime'),
+ 'zMedAnlyAstAttr-Character Recognition Attr-774',
+ 'zCharRecogAttr-Algorithm Version-775',
+ 'zCharRecogAttr-Adjustment Version-776',
+ 'zMedAnlyAstAttr-Visual Search Attributes-777',
+ 'zVisualSearchAttr-Algorithm Version-778',
+ 'zVisualSearchAttr-Adjustment Version-779',
+ 'zVisualSearchAttr - Sticker Confidence Algorithm Version-780',
+ 'zVisualSearchAttr - Sticker Confidence Score-781',
+ 'zAsset-Sticker Confidence Score-782',
+ 'zAsset-Overall Aesthetic Score-783',
+ 'zCompAssetAttr-Behavioral Score-784',
+ 'zCompAssetAttr-Failure Score zCompAssetAttr-785',
+ 'zCompAssetAttr-Harmonious Color Score-786',
+ 'zCompAssetAttr-Immersiveness Score-787',
+ 'zCompAssetAttr-Interaction Score-788',
+ 'zCompAssetAttr-Intersting Subject Score-789',
+ 'zCompAssetAttr-Intrusive Object Presence Score-790',
+ 'zCompAssetAttr-Lively Color Score-791',
+ 'zCompAssetAttr-Low Light-792',
+ 'zCompAssetAttr-Noise Score-793',
+ 'zCompAssetAttr-Pleasant Camera Tilt Score-794',
+ 'zCompAssetAttr-Pleasant Composition Score-795',
+ 'zCompAssetAttr-Pleasant Lighting Score-796',
+ 'zCompAssetAttr-Pleasant Pattern Score-797',
+ 'zCompAssetAttr-Pleasant Perspective Score-798',
+ 'zCompAssetAttr-Pleasant Post Processing Score-799',
+ 'zCompAssetAttr-Pleasant Reflection Score-800',
+ 'zCompAssetAttrPleasant Symmetry Score-801',
+ 'zCompAssetAttr-Sharply Focused Subject Score-802',
+ 'zCompAssetAttr-Tastfully Blurred Score-803',
+ 'zCompAssetAttr-Well Chosen Subject Score-804',
+ 'zCompAssetAttr-Well Framed Subject Score-805',
+ 'zCompAssetAttr-Well Timeed Shot Score-806',
+ 'zCldRes-Asset UUID-4TableStart-807',
+ 'zCldRes-Cloud Local State-808',
+ 'zCldRes-File Size-809',
+ 'zCldRes-Height-810',
+ 'zCldRes-Is Available-811',
+ 'zCldRes-Is Locally Available-812',
+ 'zCldRes-Prefetch Count-813',
+ 'zCldRes-Source Type-814',
+ 'zCldRes-Type-815',
+ 'zCldRes-Width-816',
+ ('zCldRes-Date Created-817', 'datetime'),
+ ('zCldRes-Last OnDemand Download Date-818', 'datetime'),
+ ('zCldRes-Last Prefetch Date-819', 'datetime'),
+ 'zCldRes-Prunedat-820',
+ 'zCldRes-File Path-821',
+ 'zCldRes-Fingerprint-822',
+ 'zCldRes-Item ID-823',
+ 'zCldRes-UniID-824',
+ 'zUserFeedback-UUID-4TableStart-825',
+ 'zUserFeedback-Feature-826',
+ 'zUserFeedback-Type-827',
+ ('zUserFeedback-Last Modified Date-828', 'datetime'),
+ 'zUserFeedback-Context-829',
+ 'zUserFeedback-Cloud Local State-830',
+ 'zUserFeedback-Cloud Delete State-831',
+ 'zUserFeedback - Creation Type-832',
+ 'zAddAssetAttr-zPK-833',
+ 'zAddAssetAttr-zENT-834',
+ 'ZAddAssetAttr-zOPT-835',
+ 'zAddAssetAttr-zAsset= zAsset_zPK-836',
+ 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-837',
+ 'zAddAssetAttr-Master Fingerprint-838',
+ 'zAddAssetAttr-Public Global UUID-839',
+ 'zAddAssetAttr-Deferred Photo Identifier-840',
+ 'zAddAssetAttr-Original Assets UUID-841',
+ 'zAddAssetAttr-Import Session ID-842',
+ 'zAddAssetAttr-Originating Asset Identifier-843',
+ 'zAddAssetAttr.Adjusted Fingerprint-844',
+ 'zAlbumList-zPK= Album List Key-845',
+ 'zAlbumList-zENT-846',
+ 'zAlbumList-zOPT-847',
+ 'zAlbumList-ID Key-848',
+ 'zAlbumList-UUID-849',
+ 'zAsset-zPK-850',
+ 'zAsset-zENT-851',
+ 'zAsset-zOPT-852',
+ 'zAsset-Master= zCldMast-zPK-853',
+ 'zAsset-Extended Attributes= zExtAttr-zPK-854',
+ 'zAsset-Import Session Key-855',
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-856',
+ 'zAsset-Photo Analysis Attributes Key-857',
+ 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-858',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-859',
+ 'zAsset-Moment Share Key= zShare-zPK-860',
+ 'zAsset-zMoment Key= zMoment-zPK-861',
+ 'zAsset-Computed Attributes Asset Key-862',
+ 'zAsset-Highlight Being Assets-HBA Key-863',
+ 'zAsset-Highlight Being Extended Assets-HBEA Key-864',
+ 'zAsset-Highlight Being Key Asset Private-HBKAP Key-865',
+ 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-866',
+ 'zAsset-Highligh Being Summary Assets-HBSA Key-867',
+ 'zAsset-Day Group Highlight Being Assets-DGHBA Key-868',
+ 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-869',
+ 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-870',
+ 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-871',
+ 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-872',
+ 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-873',
+ 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-874',
+ 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-875',
+ 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-876',
+ 'zAsset-Promotion Score-877',
+ 'zAsset-Iconic Score-878',
+ 'zAsset-Media Analysis Attributes Key-879',
+ 'zAsset-Media Group UUID-880',
+ 'zAsset-UUID = store.cloudphotodb-881',
+ 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-882',
+ 'zAsset.Cloud Collection GUID-883',
+ 'zAsset-Avalanche UUID-884',
+ 'zAssetAnalyState-zPK-885',
+ 'zAssetAnalyState-zEnt-886',
+ 'zAssetAnalyState-zOpt-887',
+ 'zAssetAnalyState-Asset= zAsset-zPK-888',
+ 'zAssetAnalyState-Asset UUID-889',
+ 'zAsstContrib-zPK-890',
+ 'zAsstContrib-zEnt-891',
+ 'zAsstContrib-zOpt-892',
+ 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-893',
+ 'zAsstContrib-Participant= zSharePartic-zPK-894',
+ 'zAssetDes-zPK-895',
+ 'zAssetDes-zENT-896',
+ 'zAssetDes-zOPT-897',
+ 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-898',
+ 'zCharRecogAttr-zPK-899',
+ 'zCharRecogAttr-zENT-900',
+ 'zCharRecogAttr-zOPT-901',
+ 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-902',
+ 'zCldFeedEnt-zPK= zCldShared keys-903',
+ 'zCldFeedEnt-zENT-904',
+ 'zCldFeedEnt-zOPT-905',
+ 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-906',
+ 'zCldFeedEnt-Entry Invitation Record GUID-907',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-908',
+ 'zCldMast-zPK= zAsset-Master-909',
+ 'zCldMast-zENT-910',
+ 'zCldMast-zOPT-911',
+ 'zCldMast-Moment Share Key= zShare-zPK-912',
+ 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-913',
+ 'zCldMast-Originating Asset ID-914',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-915',
+ 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-916',
+ 'CMzCldMastMedData-zENT-917',
+ 'CMzCldMastMedData-zOPT-918',
+ 'CMzCldMastMedData-CldMast= zCldMast-zPK-919',
+ 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-920',
+ 'AAAzCldMastMedData-zENT-921',
+ 'AAAzCldMastMedData-zOPT-922',
+ 'AAAzCldMastMedData-CldMast key-923',
+ 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-924',
+ 'zCldRes-zPK-925',
+ 'zCldRes-zENT-926',
+ 'zCldRes-zOPT-927',
+ 'zCldRes-Asset= zAsset-zPK-928',
+ 'zCldRes-Cloud Master= zCldMast-zPK-929',
+ 'zCldRes-Asset UUID-930',
+ 'zCldShareAlbumInvRec-zPK-931',
+ 'zCldShareAlbumInvRec-zEnt-932',
+ 'zCldShareAlbumInvRec-zOpt-933',
+ 'zCldShareAlbumInvRec-Album Key-934',
+ 'zCldShareAlbumInvRec-FOK Album Key-935',
+ 'zCldShareAlbumInvRec-Album GUID-936',
+ 'zCldShareAlbumInvRec-zUUID-937',
+ 'zCldShareAlbumInvRec-Cloud GUID-938',
+ 'zCldSharedComment-zPK-939',
+ 'zCldSharedComment-zENT-940',
+ 'zCldSharedComment-zOPT-941',
+ 'zCldSharedComment-Commented Asset Key= zAsset-zPK-942',
+ 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-943',
+ 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-944',
+ 'zCldSharedComment-Liked Asset Key= zAsset-zPK-945',
+ 'zCldSharedComment-CldFeedLikeCommentEntry Key-946',
+ 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-947',
+ 'zCldSharedComment-Cloud GUID-948',
+ 'zCompAssetAttr-zPK-949',
+ 'zCompAssetAttr-zEnt-950',
+ 'zCompAssetAttr-zOpt-951',
+ 'zCompAssetAttr-Asset Key-952',
+ 'zDetFace-zPK-953',
+ 'zDetFace-zEnt-954',
+ 'zDetFace.zOpt-955',
+ 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face-956',
+ 'zDetFace-PersonForFace= zPerson-zPK-957',
+ 'zDetFace-Person Being Key Face-958',
+ 'zDetFace-Face Print-959',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-960',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-961',
+ 'zDetFace-UUID-962',
+ 'zDetFaceGroup-zPK-963',
+ 'zDetFaceGroup-zENT-964',
+ 'zDetFaceGroup-zOPT-965',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-966',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-967',
+ 'zDetFaceGroup-UUID-968',
+ 'zDetFacePrint-zPK-969',
+ 'zDetFacePrint-zEnt-970',
+ 'zDetFacePrint-zOpt-971',
+ 'zDetFacePrint-Face Key-972',
+ 'zExtAttr-zPK= zAsset-zExtendedAttributes-973',
+ 'zExtAttr-zENT-974',
+ 'zExtAttr-zOPT-975',
+ 'zExtAttr-Asset Key-976',
+ 'zFaceCrop-zPK-977',
+ 'zFaceCrop-zEnt-978',
+ 'zFaceCrop-zOpt-979',
+ 'zFaceCrop-Asset Key-980',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-981',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-982',
+ 'zFaceCrop-Face Key-983',
+ 'zFaceCrop-UUID-984',
+ 'zGenAlbum-zPK=26AlbumLists= 26Albums-985',
+ 'zGenAlbum-zENT-986',
+ 'zGenAlbum-zOpt-987',
+ 'zGenAlbum-Key Asset-Key zAsset-zPK-988',
+ 'zGenAlbum-Secondary Key Asset-989',
+ 'zGenAlbum-Tertiary Key Asset-990',
+ 'zGenAlbum-Custom Key Asset-991',
+ 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-992',
+ 'zGenAlbum-FOK Parent Folder-993',
+ 'zGenAlbum-zSyndicate-994',
+ 'zGenAlbum-UUID-995',
+ 'SWYConverszGenAlbum-UUID-996',
+ 'zGenAlbum-Cloud_GUID = store.cloudphotodb-997',
+ 'SWYConverszGenAlbum-Cloud GUID-998',
+ 'zGenAlbum-Project Render UUID-999',
+ 'SWYConverszGenAlbum-Project Render UUID-1000',
+ 'zIntResou-zPK-1001',
+ 'zIntResou-zENT-1002',
+ 'zIntResou-zOPT-1003',
+ 'zIntResou-Asset= zAsset_zPK-1004',
+ 'zIntResou-Fingerprint-1005',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-1006',
+ 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1007',
+ 'zMedAnlyAstAttr-zEnt-1008',
+ 'zMedAnlyAstAttr-zOpt-1009',
+ 'zMedAnlyAstAttr-Asset= zAsset-zPK-1010',
+ 'zMemory-zPK-1011',
+ 'zMemory-zENT-1012',
+ 'zMemory-zOPT-1013',
+ 'zMemory-Key Asset= zAsset-zPK-1014',
+ 'zMemory-UUID-1015',
+ 'zMoment-zPK-1016',
+ 'zMoment-zENT-1017',
+ 'zMoment-zOPT-1018',
+ 'zMoment-Highlight Key-1019',
+ 'zMoment-UUID-1020',
+ 'zPerson-zPK=zDetFace-Person-1021',
+ 'zPerson-zEnt-1022',
+ 'zPerson-zOpt-1023',
+ 'zPerson-Share Participant= zSharePartic-zPK-1024',
+ 'zPerson-KeyFace=zDetFace-zPK-1025',
+ 'zPerson-Assoc Face Group Key-1026',
+ 'zPerson-Person UUID-1027',
+ 'zPhotoAnalysisAssetAttr-zPK-1028',
+ 'zPhotoAnalysisAssetAttr-zEnt-1029',
+ 'zPhotoAnalysisAssetAttr-zOpt-1030',
+ 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1031',
+ 'zSceneP-zPK-1032',
+ 'zSceneP-zENT-1033',
+ 'zSceneP-zOPT-1034',
+ 'zShare-zPK-1035',
+ 'zShare-zENT-1036',
+ 'zShare-zOPT-1037',
+ 'zShare-UUID-1038',
+ 'SPLzShare-UUID-1039',
+ 'zShare-Scope ID = store.cloudphotodb-1040',
+ 'zSharePartic-zPK-1041',
+ 'zSharePartic-zENT-1042',
+ 'zSharePartic-zOPT-1043',
+ 'zSharePartic-Share Key= zShare-zPK-1044',
+ 'zSharePartic-Person= zPerson-zPK-1045',
+ 'zSharePartic-UUID-1046',
+ 'SBKAzSugg-zPK-1047',
+ 'SBKAzSugg-zENT-1048',
+ 'SBKAzSugg-zOPT-1049',
+ 'SBKAzSugg-UUID-1050',
+ 'SBRAzSugg-zPK-1051',
+ 'SBRAzSugg-zENT-1052',
+ 'SBRAzSugg-zOPT-1053',
+ 'SBRAzSugg-UUID-1054',
+ 'z3SuggBRA-3RepAssets1-1055',
+ 'z3SuggBRA-58SuggBeingRepAssets-1056',
+ 'z3SuggBKA-58SuggBeingKeyAssets= zSugg-zPK-1057',
+ 'z3SuggBKA-3KeyAssets= zAsset-zPK-1058',
+ 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1059',
+ 'zUnmAdj-zOPT-1060',
+ 'zUnmAdj-zENT-1061',
+ 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1062',
+ 'zUnmAdj-UUID-1063',
+ 'zUnmAdj-Other Adjustments Fingerprint-1064',
+ 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1065',
+ 'zUserFeedback-zPK-1066',
+ 'zUserFeedback-zENT-1067',
+ 'zUserFeedback-zOPT-1068',
+ 'zUserFeedback-Person= zPerson-zPK-1069',
+ 'zUserFeedback-Memory= zMemory-zPK-1070',
+ 'zUserFeedback-UUID-1071',
+ 'zVisualSearchAttr-zPK-1072',
+ 'zVisualSearchAttr-zENT-1073',
+ 'zVisualSearchAttr-zOPT-1074',
+ 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1075',
+ 'z27AlbumList-27Albums= zGenAlbum-zPK-1076',
+ 'z27AlbumList-Album List Key-1077',
+ 'z27AlbumList-FOK27Albums Key-1078',
+ 'z28Assets-28Albums= zGenAlbum-zPK-1079',
+ 'z28Assets-3Asset Key= zAsset-zPK in the Album-1080',
+ 'z28Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1081',
+ 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1082',
+ 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1083',
+ 'z3MemoryBCAs-44MemoriesBeingCuratedAssets= zMemory-zPK-1084',
+ 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1085',
+ 'z3MemoryBECAs-44MemoriesBeingExtCuratedAssets= zMemory-zPK-1086',
+ 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1087',
+ 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK-1088',
+ 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1089',
+ 'z3MemoryBUCAs-44MemoriesBeingUserCuratedAssets= zMemory-zPK-1090',
+ 'z3MemoryBCAs-44Memories Being Custom User Assets-1091',
+ 'z3MemoryBCAs-3Custom User Assets-1092',
+ 'z3MemoryBCAs-FOK-3Custom User Assets-1093')
+ data_list = get_sqlite_db_records(source_path, query)
- db.close()
- return
-
-
-def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
- break
- if report_folder.endswith('/') or report_folder.endswith('\\'):
- report_folder = report_folder[:-1]
- iosversion = scripts.artifacts.artGlobals.versionf
- if (version.parse(iosversion) <= version.parse("16.7.7")) or (version.parse(iosversion) >= version.parse("18")):
- logfunc("Unsupported version for Syndication.photoslibrary-database-Photos.sqlite reference for asset analysis from iOS " + iosversion)
- if (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ return data_headers, data_list, source_path
+
+ elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")):
+ source_path = get_file_path(files_found, "Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date',
DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
@@ -4129,7 +4119,7 @@ def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, w
END AS 'zAddAssetAttr-Shifted Location Valid',
CASE
WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist'
- ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL'
+ ELSE 'zAddAssetArrt-Shifted_Location_Data_Empty-NULL'
END AS 'zAddAssetAttr-Shifted Location Data',
CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID
WHEN 0 THEN '0-Reverse Location Not Valid-0'
@@ -4264,7 +4254,7 @@ def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, w
ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || ''
END AS 'CldMasterzCldMastMedData-zOPT',
zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type',
- zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData-zPK',
+ zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK',
CASE
WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist'
ELSE 'CMzCldMastMedData-Data_Empty-NULL'
@@ -4278,7 +4268,7 @@ def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, w
CASE zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE
WHEN 0 THEN '0-NA-0'
WHEN 1 THEN '1-STILLTESTING_Wide-Camera_JPG-1'
- WHEN 2 THEN '2-STILLTESTING_Telephoto_Camera_Lens-2'
+ WHEN 2 THEN '2-STILLTESTING_Telephoto_Camear_Lens-2'
WHEN 4 THEN '4-STILLTESTING_SWY_Asset_OrigAssetImport_SystemPackageApp-4'
WHEN 16 THEN '16-STILLTESTING-16'
WHEN 1024 THEN '1024-STILLTESTING_SWY_Asset_OrigAssetImport_NativeCamera-1024'
@@ -4314,7 +4304,7 @@ def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, w
END AS 'zAsset-Kind',
CASE zAsset.ZKINDSUBTYPE
WHEN 0 THEN '0-Still-Photo-0'
- WHEN 1 THEN '1-Panorama-1'
+ WHEN 1 THEN '1-Paorama-1'
WHEN 2 THEN '2-Live-Photo-2'
WHEN 10 THEN '10-SpringBoard-Screenshot-10'
WHEN 100 THEN '100-Video-100'
@@ -4388,7 +4378,7 @@ def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, w
END AS 'zIntResou-Local Availability Target',
CASE zIntResou.ZCLOUDLOCALSTATE
WHEN 0 THEN '0-IR_Asset_Not_Synced_No_IR-CldMastDateCreated-0'
- WHEN 1 THEN '1-IR_Asset_Pending-Upload-1'
+ WHEN 1 THEN '1-IR_Asset_Pening-Upload-1'
WHEN 2 THEN '2-IR_Asset_Photo_Cloud_Share_Asset_On-Local-Device-2'
WHEN 3 THEN '3-IR_Asset_Synced_iCloud-3'
ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDLOCALSTATE || ''
@@ -4418,7 +4408,7 @@ def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, w
WHEN 0 THEN '0-Photo-0'
WHEN 1 THEN '1-Video-1'
WHEN 3 THEN '3-Live-Photo-3'
- WHEN 5 THEN '5-Adjustment-Data-5'
+ WHEN 5 THEN '5-Adjustement-Data-5'
WHEN 6 THEN '6-Screenshot-6'
WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9'
WHEN 13 THEN '13-Movie-13'
@@ -4738,10 +4728,10 @@ def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, w
zExtAttr.ZSLUSHWARMTHBIAS AS 'zExtAttr-Slush Warm Bias',
zAsset.ZHEIGHT AS 'zAsset-Height',
zAddAssetAttr.ZORIGINALHEIGHT AS 'zAddAssetAttr-Original Height',
- zIntResou.ZUNORIENTEDHEIGHT AS 'zIntResou-UnOriented Height',
+ zIntResou.ZUNORIENTEDHEIGHT AS 'zIntResou-Unoriented Height',
zAsset.ZWIDTH AS 'zAsset-Width',
zAddAssetAttr.ZORIGINALWIDTH AS 'zAddAssetAttr-Original Width',
- zIntResou.ZUNORIENTEDWIDTH AS 'zIntResou-UnOriented Width',
+ zIntResou.ZUNORIENTEDWIDTH AS 'zIntResou-Unoriented Width',
zShare.ZTHUMBNAILIMAGEDATA AS 'zShare-Thumbnail Image Data',
SPLzShare.ZTHUMBNAILIMAGEDATA AS 'SPLzShare-Thumbnail Image Data',
zAsset.ZTHUMBNAILINDEX AS 'zAsset-Thumbnail Index',
@@ -4869,20 +4859,20 @@ def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, w
WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
ELSE 'Unknown-New-Value!: ' || SPLzShare.Z_ENT || ''
END AS 'SPLzShare-zENT-SPL',
- CASE zSharePartic.Z54_SHARE
+ CASE zSharePartic.Z55_SHARE
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
- ELSE 'Unknown-New-Value!: ' || zSharePartic.Z54_SHARE || ''
- END AS 'zSharePartic-z54SHARE',
- CASE SPLzSharePartic.Z54_SHARE
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.Z55_SHARE || ''
+ END AS 'zSharePartic-z55SHARE',
+ CASE SPLzSharePartic.Z55_SHARE
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
- ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.Z54_SHARE || ''
- END AS 'SPLzSharePartic-z54SHARE',
+ ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.Z55_SHARE || ''
+ END AS 'SPLzSharePartic-z55SHARE',
CASE zShare.ZSTATUS
WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1'
ELSE 'Unknown-New-Value!: ' || zShare.ZSTATUS || ''
@@ -6189,7 +6179,7 @@ def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, w
zAssetAnalyState.ZWORKERTYPE AS 'zAssetAnalyState-Worker Type',
DateTime(zAssetAnalyState.ZIGNOREUNTILDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Ignore Until Date',
DateTime(zAssetAnalyState.ZLASTIGNOREDDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Last Ignored Date',
- zAssetAnalyState.ZSORTTOKEN AS 'zAssetAnalyState-Sort Token',
+ DateTime(zAssetAnalyState.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Sort Token',
zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES AS 'zMedAnlyAstAttr-Character Recognition Attr',
zCharRecogAttr.ZALGORITHMVERSION AS 'zCharRecogAttr-Algorithm Version',
zCharRecogAttr.ZADJUSTMENTVERSION AS 'zCharRecogAttr-Adjustment Version',
@@ -6472,8 +6462,8 @@ def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, w
SBRAzSugg.Z_OPT AS 'SBRAzSugg-zOPT',
SBRAzSugg.ZUUID AS 'SBRAzSugg-UUID',
z3SuggBRA.Z_3REPRESENTATIVEASSETS1 AS 'z3SuggBRA-3RepAssets1',
- z3SuggBRA.Z_58SUGGESTIONSBEINGREPRESENTATIVEASSETS AS 'z3SuggBRA-58SuggBeingRepAssets',
- z3SuggBKA.Z_58SUGGESTIONSBEINGKEYASSETS AS 'z3SuggBKA-58SuggBeingKeyAssets= zSugg-zPK',
+ z3SuggBRA.Z_59SUGGESTIONSBEINGREPRESENTATIVEASSETS AS 'z3SuggBRA-59SuggBeingRepAssets',
+ z3SuggBKA.Z_59SUGGESTIONSBEINGKEYASSETS AS 'z3SuggBKA-59SuggBeingKeyAssets= zSugg-zPK',
z3SuggBKA.Z_3KEYASSETS AS 'z3SuggBKA-3KeyAssets= zAsset-zPK',
zUnmAdj.Z_PK AS 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key',
zUnmAdj.Z_OPT AS 'zUnmAdj-zOPT',
@@ -6492,22 +6482,22 @@ def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, w
zVisualSearchAttr.Z_ENT AS 'zVisualSearchAttr-zENT',
zVisualSearchAttr.Z_OPT AS 'zVisualSearchAttr-zOPT',
zVisualSearchAttr.ZMEDIAANALYSISASSETATTRIBUTES AS 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK',
- z27AlbumLists.Z_27ALBUMS AS 'z27AlbumList-27Albums= zGenAlbum-zPK',
- z27AlbumLists.Z_2ALBUMLISTS AS 'z27AlbumList-Album List Key',
- z27AlbumLists.Z_FOK_27ALBUMS AS 'z27AlbumList-FOK27Albums Key',
- z28Assets.Z_28ALBUMS AS 'z28Assets-28Albums= zGenAlbum-zPK',
- z28Assets.Z_3ASSETS AS 'z28Assets-3Asset Key= zAsset-zPK in the Album',
- z28Assets.Z_FOK_3ASSETS AS 'z28Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY',
+ z28AlbumLists.Z_28ALBUMS AS 'z28AlbumList-28Albums= zGenAlbum-zPK',
+ z28AlbumLists.Z_2ALBUMLISTS AS 'z28AlbumList-Album List Key',
+ z28AlbumLists.Z_FOK_28ALBUMS AS 'z28AlbumList-FOK28Albums Key',
+ z29Assets.Z_29ALBUMS AS 'z29Assets-29Albums= zGenAlbum-zPK',
+ z29Assets.Z_3ASSETS AS 'z29Assets-3Asset Key= zAsset-zPK in the Album',
+ z29Assets.Z_FOK_3ASSETS AS 'z29Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY',
z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AS 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK',
z3MemoryBCAs.Z_3CURATEDASSETS AS 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK',
- z3MemoryBCAs.Z_44MEMORIESBEINGCURATEDASSETS AS 'z3MemoryBCAs-44MemoriesBeingCuratedAssets= zMemory-zPK',
+ z3MemoryBCAs.Z_45MEMORIESBEINGCURATEDASSETS AS 'z3MemoryBCAs-45MemoriesBeingCuratedAssets= zMemory-zPK',
z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK',
- z3MemoryBECAs.Z_44MEMORIESBEINGEXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-44MemoriesBeingExtCuratedAssets= zMemory-zPK',
+ z3MemoryBECAs.Z_45MEMORIESBEINGEXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-45MemoriesBeingExtCuratedAssets= zMemory-zPK',
z3MemoryBRAs.Z_3REPRESENTATIVEASSETS AS 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK',
- z3MemoryBRAs.Z_44MEMORIESBEINGREPRESENTATIVEASSETS AS 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK',
+ z3MemoryBRAs.Z_45MEMORIESBEINGREPRESENTATIVEASSETS AS 'z3MemoryBRAs-45RepresentativeAssets= zMemory-zPK',
z3MemoryBUCAs.Z_3USERCURATEDASSETS AS 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK',
- z3MemoryBUCAs.Z_44MEMORIESBEINGUSERCURATEDASSETS AS 'z3MemoryBUCAs-44MemoriesBeingUserCuratedAssets= zMemory-zPK',
- z3MemoryBCUAs.Z_44MEMORIESBEINGCUSTOMUSERASSETS AS 'z3MemoryBCAs-44Memories Being Custom User Assets',
+ z3MemoryBUCAs.Z_45MEMORIESBEINGUSERCURATEDASSETS AS 'z3MemoryBUCAs-45MemoriesBeingUserCuratedAssets= zMemory-zPK',
+ z3MemoryBCUAs.Z_45MEMORIESBEINGCUSTOMUSERASSETS AS 'z3MemoryBCAs-45Memories Being Custom User Assets',
z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AS 'z3MemoryBCAs-3Custom User Assets',
z3MemoryBCUAs.Z_FOK_3CUSTOMUSERASSETS AS 'z3MemoryBCAs-FOK-3Custom User Assets'
FROM ZASSET zAsset
@@ -6515,11 +6505,11 @@ def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, w
LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES
LEFT JOIN ZINTERNALRESOURCE zIntResou ON zIntResou.ZASSET = zAsset.Z_PK
LEFT JOIN ZSCENEPRINT zSceneP ON zSceneP.Z_PK = zAddAssetAttr.ZSCENEPRINT
- LEFT JOIN Z_28ASSETS z28Assets ON z28Assets.Z_3ASSETS = zAsset.Z_PK
- LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z28Assets.Z_28ALBUMS
+ LEFT JOIN Z_29ASSETS z29Assets ON z29Assets.Z_3ASSETS = zAsset.Z_PK
+ LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z29Assets.Z_29ALBUMS
LEFT JOIN ZUNMANAGEDADJUSTMENT zUnmAdj ON zAddAssetAttr.ZUNMANAGEDADJUSTMENT = zUnmAdj.Z_PK
- LEFT JOIN Z_27ALBUMLISTS z27AlbumLists ON z27AlbumLists.Z_27ALBUMS = zGenAlbum.Z_PK
- LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z27AlbumLists.Z_2ALBUMLISTS
+ LEFT JOIN Z_28ALBUMLISTS z28AlbumLists ON z28AlbumLists.Z_28ALBUMS = zGenAlbum.Z_PK
+ LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z28AlbumLists.Z_2ALBUMLISTS
LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER
LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION
LEFT JOIN ZASSETDESCRIPTION zAssetDes ON zAssetDes.Z_PK = zAddAssetAttr.ZASSETDESCRIPTION
@@ -6548,1316 +6538,9006 @@ def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, w
LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON
LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP
LEFT JOIN Z_3MEMORIESBEINGCURATEDASSETS z3MemoryBCAs ON zAsset.Z_PK = z3MemoryBCAs.Z_3CURATEDASSETS
- LEFT JOIN ZMEMORY zMemory ON z3MemoryBCAs.Z_44MEMORIESBEINGCURATEDASSETS = zMemory.Z_PK
- LEFT JOIN Z_3MEMORIESBEINGCUSTOMUSERASSETS z3MemoryBCUAs ON zAsset.Z_PK = z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AND z3MemoryBCUAs.Z_44MEMORIESBEINGCUSTOMUSERASSETS = zMemory.Z_PK
- LEFT JOIN Z_3MEMORIESBEINGEXTENDEDCURATEDASSETS z3MemoryBECAs ON zAsset.Z_PK = z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AND z3MemoryBECAs.Z_44MEMORIESBEINGEXTENDEDCURATEDASSETS = zMemory.Z_PK
- LEFT JOIN Z_3MEMORIESBEINGMOVIECURATEDASSETS z3MemoryBMCAs ON zAsset.Z_PK = z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AND z3MemoryBMCAs.Z_44MEMORIESBEINGMOVIECURATEDASSETS = zMemory.Z_PK
- LEFT JOIN Z_3MEMORIESBEINGREPRESENTATIVEASSETS z3MemoryBRAs ON zAsset.Z_PK = z3MemoryBRAs.Z_3REPRESENTATIVEASSETS AND z3MemoryBRAs.Z_44MEMORIESBEINGREPRESENTATIVEASSETS = zMemory.Z_PK
- LEFT JOIN Z_3MEMORIESBEINGUSERCURATEDASSETS z3MemoryBUCAs ON zAsset.Z_PK = z3MemoryBUCAs.Z_3USERCURATEDASSETS AND z3MemoryBUCAs.Z_44MEMORIESBEINGUSERCURATEDASSETS = zMemory.Z_PK
+ LEFT JOIN ZMEMORY zMemory ON z3MemoryBCAs.Z_45MEMORIESBEINGCURATEDASSETS = zMemory.Z_PK
+ LEFT JOIN Z_3MEMORIESBEINGCUSTOMUSERASSETS z3MemoryBCUAs ON zAsset.Z_PK = z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AND z3MemoryBCUAs.Z_45MEMORIESBEINGCUSTOMUSERASSETS = zMemory.Z_PK
+ LEFT JOIN Z_3MEMORIESBEINGEXTENDEDCURATEDASSETS z3MemoryBECAs ON zAsset.Z_PK = z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AND z3MemoryBECAs.Z_45MEMORIESBEINGEXTENDEDCURATEDASSETS = zMemory.Z_PK
+ LEFT JOIN Z_3MEMORIESBEINGMOVIECURATEDASSETS z3MemoryBMCAs ON zAsset.Z_PK = z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AND z3MemoryBMCAs.Z_45MEMORIESBEINGMOVIECURATEDASSETS = zMemory.Z_PK
+ LEFT JOIN Z_3MEMORIESBEINGREPRESENTATIVEASSETS z3MemoryBRAs ON zAsset.Z_PK = z3MemoryBRAs.Z_3REPRESENTATIVEASSETS AND z3MemoryBRAs.Z_45MEMORIESBEINGREPRESENTATIVEASSETS = zMemory.Z_PK
+ LEFT JOIN Z_3MEMORIESBEINGUSERCURATEDASSETS z3MemoryBUCAs ON zAsset.Z_PK = z3MemoryBUCAs.Z_3USERCURATEDASSETS AND z3MemoryBUCAs.Z_45MEMORIESBEINGUSERCURATEDASSETS = zMemory.Z_PK
LEFT JOIN ZUSERFEEDBACK zUserFeedback ON zUserFeedback.ZMEMORY = zMemory.Z_PK
LEFT JOIN ZMOMENT zMoment ON zMoment.Z_PK = zAsset.ZMOMENT
LEFT JOIN Z_3SUGGESTIONSBEINGKEYASSETS z3SuggBKA ON z3SuggBKA.Z_3KEYASSETS = zAsset.Z_PK
- LEFT JOIN ZSUGGESTION SBKAzSugg ON SBKAzSugg.Z_PK = z3SuggBKA.Z_58SUGGESTIONSBEINGKEYASSETS
+ LEFT JOIN ZSUGGESTION SBKAzSugg ON SBKAzSugg.Z_PK = z3SuggBKA.Z_59SUGGESTIONSBEINGKEYASSETS
LEFT JOIN Z_3SUGGESTIONSBEINGREPRESENTATIVEASSETS z3SuggBRA ON z3SuggBRA.Z_3REPRESENTATIVEASSETS1 = zAsset.Z_PK
- LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_58SUGGESTIONSBEINGREPRESENTATIVEASSETS
+ LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_59SUGGESTIONSBEINGREPRESENTATIVEASSETS
ORDER BY zAsset.ZADDEDDATE
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
- row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
- row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
- row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
- row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
- row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
- row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
- row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
- row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
- row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
- row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
- row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
- row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
- row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
- row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
- row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
- row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
- row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
- row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
- row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
- row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307],
- row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315],
- row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323],
- row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331],
- row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339],
- row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347],
- row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355],
- row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363],
- row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371],
- row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379],
- row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387],
- row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395],
- row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403],
- row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411],
- row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419],
- row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427],
- row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435],
- row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443],
- row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451],
- row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459],
- row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467],
- row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475],
- row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483],
- row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491],
- row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499],
- row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507],
- row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515],
- row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523],
- row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531],
- row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539],
- row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547],
- row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555],
- row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563],
- row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571],
- row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579],
- row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587],
- row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595],
- row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603],
- row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611],
- row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619],
- row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627],
- row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635],
- row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643],
- row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651],
- row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659],
- row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667],
- row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675],
- row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683],
- row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691],
- row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699],
- row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707],
- row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715],
- row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723],
- row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731],
- row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739],
- row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747],
- row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755],
- row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763],
- row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771],
- row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779],
- row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787],
- row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795],
- row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803],
- row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811],
- row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819],
- row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827],
- row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835],
- row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843],
- row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851],
- row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859],
- row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867],
- row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875],
- row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883],
- row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891],
- row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899],
- row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907],
- row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915],
- row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923],
- row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931],
- row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939],
- row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947],
- row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955],
- row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963],
- row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971],
- row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979],
- row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987],
- row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995],
- row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002],
- row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009],
- row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016],
- row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023],
- row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030],
- row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037],
- row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044],
- row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051],
- row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058],
- row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065],
- row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072],
- row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079],
- row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086],
- row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093]))
-
- counter += 1
-
- description = 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.' \
- ' This parser includes the largest set of decoded data based on testing and research' \
- ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the' \
- ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md' \
- ' TimelineExplorer to view, search and filter the results.'
- report = ArtifactHtmlReport('Ph97.2-iOS17_Ref_for_Asset_Analysis-SyndPL')
- report.start_artifact_report(report_folder, 'Ph97.2-iOS17_Ref_for_Asset_Analysis-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset-Added Date-0',
- 'zAsset- SortToken -CameraRoll-1',
- 'zAsset Complete-2',
- 'zAsset-zPK-4QueryStart-3',
- 'zAddAssetAttr-zPK-4QueryStart-4',
- 'zAsset-UUID = store.cloudphotodb-4QueryStart-5',
- 'zAddAssetAttr-Master Fingerprint-4TableStart-6',
- 'zIntResou-Fingerprint-4TableStart-7',
- 'zAsset-Bundle Scope-8',
- 'zAsset-Syndication State-9',
- 'zAsset-Cloud is My Asset-10',
- 'zAsset-Cloud is deletable-Asset-11',
- 'zAsset-Cloud_Local_State-12',
- 'zAsset-Visibility State-13',
- 'zExtAttr-Camera Make-14',
- 'zExtAttr-Camera Model-15',
- 'zExtAttr-Lens Model-16',
- 'zExtAttr-Flash Fired-17',
- 'zExtAttr-Focal Lenght-18',
- 'zExtAttr-Focal Lenth in 35MM-19',
- 'zExtAttr-Digital Zoom Ratio-20',
- 'zAsset-Derived Camera Capture Device-21',
- 'zAddAssetAttr-Camera Captured Device-22',
- 'zAddAssetAttr-Imported by-23',
- 'zCldMast-Imported By-24',
- 'zAddAssetAttr.Imported by Bundle Identifier-25',
- 'zAddAssetAttr-Imported By Display Name-26',
- 'zCldMast-Imported by Bundle ID-27',
- 'zCldMast-Imported by Display Name-28',
- 'zAsset-Saved Asset Type-29',
- 'zAsset-Directory-Path-30',
- 'zAsset-Filename-31',
- 'zAddAssetAttr- Original Filename-32',
- 'zCldMast- Original Filename-33',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-34',
- 'zAsset-Active Library Scope Participation State -4QueryStart-35',
- 'zAsset-Library Scope Share State- StillTesting -4QueryStart-36',
- 'SPLzShare-Cloud Photo Count-SPL -4QueryStart-37',
- 'SPLzShare-Cloud Video Count-SPL -4QueryStart-38',
- 'zAddAssetAttr-Date Created Source-39',
- 'zAsset-Date Created-40',
- 'zCldMast-Creation Date-41',
- 'zIntResou-CldMst Date Created-42',
- 'zAddAssetAttr-Time Zone Name-43',
- 'zAddAssetAttr-Time Zone Offset-44',
- 'zAddAssetAttr-Inferred Time Zone Offset-45',
- 'zAddAssetAttr-EXIF-String-46',
- 'zAsset-Modification Date-47',
- 'zAddAssetAttr-Last Viewed Date-48',
- 'zAsset-Last Shared Date-49',
- 'zCldMast-Cloud Local State-50',
- 'zCldMast-Import Date-51',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-52',
- 'zAddAssetAttr-Import Session ID-4QueryStart-53',
- 'zAddAssetAttr-Alt Import Image Date-54',
- 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-55',
- 'zAsset-Cloud Batch Publish Date-56',
- 'zAsset-Cloud Server Publish Date-57',
- 'zAsset-Cloud Download Requests-58',
- 'zAsset-Cloud Batch ID-59',
- 'zAddAssetAttr-Upload Attempts-60',
- 'zAsset-Latitude-61',
- 'zExtAttr-Latitude-62',
- 'zAsset-Longitude-63',
- 'zExtAttr-Longitude-64',
- 'zAddAssetAttr-GPS Horizontal Accuracy-65',
- 'zAddAssetAttr-Location Hash-66',
- 'zAddAssetAttr-Shifted Location Valid-67',
- 'zAddAssetAttr-Shifted Location Data-68',
- 'zAddAssetAttr-Reverse Location Is Valid-69',
- 'zAddAssetAttr-Reverse Location Data-70',
- 'ParentzGenAlbum-UUID-4QueryStart-71',
- 'zGenAlbum-UUID-4QueryStart-72',
- 'SWYConverszGenAlbum-UUID-4QueryStart-73',
- 'ParentzGenAlbum-Cloud GUID-4QueryStart-74',
- 'zGenAlbum-Cloud GUID-4QueryStart-75',
- 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-76',
- 'zCldShareAlbumInvRec-Album GUID-4QueryStart-77',
- 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-78',
- 'zGenAlbum-Project Render UUID-4QueryStart-79',
- 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-80',
- 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-81',
- 'zGenAlbum-Cloud_Local_State-4QueryStart-82',
- 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-83',
- 'ParentzGenAlbum- Creation Date- 4QueryStart-84',
- 'zGenAlbum- Creation Date- 4QueryStart-85',
- 'SWYConverszGenAlbum- Creation Date- 4QueryStart-86',
- 'zGenAlbum- Cloud Creation Date- 4QueryStart-87',
- 'SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-88',
- 'zGenAlbum- Start Date- 4QueryStart-89',
- 'SWYConverszGenAlbum- Start Date- 4QueryStart-90',
- 'zGenAlbum- End Date- 4QueryStart-91',
- 'SWYConverszGenAlbum- End Date- 4QueryStart-92',
- 'zGenAlbum-Cloud Subscription Date- 4QueryStart-93',
- 'SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-94',
- 'ParentzGenAlbum- Title- 4QueryStart-95',
- 'zGenAlbum- Title-User&System Applied- 4QueryStart-96',
- 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-97',
- 'zGenAlbum-Import Session ID-SWY- 4QueryStart-98',
- 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-99',
- 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-100',
- 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-101',
- 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-102',
- 'SWYConverszGenAlbum- Syndicate-4QueryStart-103',
- 'zGenAlbum-zENT- Entity- 4QueryStart-104',
- 'ParentzGenAlbum- Kind- 4QueryStart-105',
- 'zGenAlbum-Album Kind- 4QueryStart-106',
- 'SWYConverszGenAlbum-Album Kind- 4QueryStart-107',
- 'AAAzCldMastMedData-zOPT-108',
- 'zAddAssetAttr-Media Metadata Type-109',
- 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-110',
- 'AAAzCldMastMedData-Data-111',
- 'CldMasterzCldMastMedData-zOPT-112',
- 'zCldMast-Media Metadata Type-113',
- 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-114',
- 'CMzCldMastMedData-Data-115',
- 'zAsset-Search Index Rebuild State-116',
- 'zAddAssetAttr-Syndication History-117',
- 'zMedAnlyAstAttr-Syndication Processing Version-118',
- 'zMedAnlyAstAttr-Syndication Processing Value-119',
- 'zAsset-Orientation-120',
- 'zAddAssetAttr-Original Orientation-121',
- 'zAsset-Kind-122',
- 'zAsset-Kind-Sub-Type-123',
- 'zAddAssetAttr-Cloud Kind Sub Type-124',
- 'zAsset-Playback Style-125',
- 'zAsset-Playback Variation-126',
- 'zAsset-Video Duration-127',
- 'zExtAttr-Duration-128',
- 'zAsset-Video CP Duration-129',
- 'zAddAssetAttr-Video CP Duration Time Scale-130',
- 'zAsset-Video CP Visibility State-131',
- 'zAddAssetAttr-Video CP Display Value-132',
- 'zAddAssetAttr-Video CP Display Time Scale-133',
- 'zIntResou-Datastore Class ID-134',
- 'zAsset-Cloud Placeholder Kind-135',
- 'zIntResou-Local Availability-136',
- 'zIntResou-Local Availability Target-137',
- 'zIntResou-Cloud Local State-138',
- 'zIntResou-Remote Availability-139',
- 'zIntResou-Remote Availability Target-140',
- 'zIntResou-Transient Cloud Master-141',
- 'zIntResou-Side Car Index-142',
- 'zIntResou- File ID-143',
- 'zIntResou-Version-144',
- 'zAddAssetAttr- Original-File-Size-145',
- 'zIntResou-Resource Type-146',
- 'zIntResou-Datastore Sub-Type-147',
- 'zIntResou-Cloud Source Type-148',
- 'zIntResou-Data Length-149',
- 'zIntResou-Recipe ID-150',
- 'zIntResou-Cloud Last Prefetch Date-151',
- 'zIntResou-Cloud Prefetch Count-152',
- 'zIntResou- Cloud-Last-OnDemand Download-Date-153',
- 'zIntResou-UniformTypeID_UTI_Conformance_Hint-154',
- 'zIntResou-Compact-UTI-155',
- 'zAsset-Uniform Type ID-156',
- 'zAsset-Original Color Space-157',
- 'zCldMast-Uniform_Type_ID-158',
- 'zCldMast-Full Size JPEG Source-159',
- 'zAsset-HDR Gain-160',
- 'zAsset-zHDR_Type-161',
- 'zExtAttr-Codec-162',
- 'zIntResou-Codec Four Char Code Name-163',
- 'zCldMast-Codec Name-164',
- 'zCldMast-Video Frame Rate-165',
- 'zCldMast-Placeholder State-166',
- 'zAsset-Depth_Type-167',
- 'zAsset-Avalanche UUID-4TableStart-168',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-169',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-170',
- 'zAddAssetAttr-Cloud Recovery State-171',
- 'zAddAssetAttr-Cloud State Recovery Attempts Count-172',
- 'zAsset-Deferred Processing Needed-173',
- 'zAsset-Video Deferred Processing Needed-174',
- 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-175',
- 'zAddAssetAttr-Deferred Processing Candidate Options-176',
- 'zAsset-Has Adjustments-Camera-Effects-Filters-177',
- 'zUnmAdj-UUID-4TableStart-178',
- 'zAsset-Adjustment Timestamp-179',
- 'zUnmAdj-Adjustment Timestamp-180',
- 'zAddAssetAttr-Editor Bundle ID-181',
- 'zUnmAdj-Editor Localized Name-182',
- 'zUnmAdj-Adjustment Format ID-183',
- 'zAddAssetAttr-Montage-184',
- 'zUnmAdj-Adjustment Render Types-185',
- 'zUnmAdj-Adjustment Format Version-186',
- 'zUnmAdj-Adjustment Base Image Format-187',
- 'zAsset-Favorite-188',
- 'zAsset-Hidden-189',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-190',
- 'zAsset-Trashed Date-191',
- 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-192',
- 'zAsset-Delete-Reason-193',
- 'zIntResou-Trash State-194',
- 'zIntResou-Trashed Date-195',
- 'zAsset-Cloud Delete State-196',
- 'zIntResou-Cloud Delete State-197',
- 'zAddAssetAttr-PTP Trashed State-198',
- 'zIntResou-PTP Trashed State-199',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-200',
- 'zMedAnlyAstAttr-Media Analysis Timestamp-201',
- 'zAsset-Analysis State Modificaion Date-202',
- 'zAddAssetAttr- Pending View Count-203',
- 'zAddAssetAttr- View Count-204',
- 'zAddAssetAttr- Pending Play Count-205',
- 'zAddAssetAttr- Play Count-206',
- 'zAddAssetAttr- Pending Share Count-207',
- 'zAddAssetAttr- Share Count-208',
- 'zAddAssetAttr-Allowed for Analysis-209',
- 'zAddAssetAttr-Scene Analysis Version-210',
- 'zAddAssetAttr-Scene Analysis is From Preview-211',
- 'zAddAssetAttr-Scene Analysis Timestamp-212',
- 'zAsset-Duplication Asset Visibility State-213',
- 'zAddAssetAttr-Destination Asset Copy State-214',
- 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-215',
- 'zAddAssetAttr-Source Asset for Duplication Scope ID-216',
- 'zCldMast-Source Master For Duplication Scope ID-217',
- 'zAddAssetAttr-Source Asset For Duplication ID-218',
- 'zCldMast-Source Master for Duplication ID-219',
- 'zAddAssetAttr-Variation Suggestions States-220',
- 'zAsset-High Frame Rate State-221',
- 'zAsset-Video Key Frame Time Scale-222',
- 'zAsset-Video Key Frame Value-223',
- 'zExtAttr-ISO-224',
- 'zExtAttr-Metering Mode-225',
- 'zExtAttr-Sample Rate-226',
- 'zExtAttr-Track Format-227',
- 'zExtAttr-White Balance-228',
- 'zExtAttr-Aperture-229',
- 'zExtAttr-BitRate-230',
- 'zExtAttr-Exposure Bias-231',
- 'zExtAttr-Frames Per Second-232',
- 'zExtAttr-Shutter Speed-233',
- 'zExtAttr-Slush Scene Bias-234',
- 'zExtAttr-Slush Version-235',
- 'zExtAttr-Slush Preset-236',
- 'zExtAttr-Slush Warm Bias-237',
- 'zAsset-Height-238',
- 'zAddAssetAttr-Original Height-239',
- 'zIntResou-Unoriented Height-240',
- 'zAsset-Width-241',
- 'zAddAssetAttr-Original Width-242',
- 'zIntResou-Unoriented Width-243',
- 'zShare-Thumbnail Image Data-244',
- 'SPLzShare-Thumbnail Image Data-245',
- 'zAsset-Thumbnail Index-246',
- 'zAddAssetAttr-Embedded Thumbnail Height-247',
- 'zAddAssetAttr-Embedded Thumbnail Length-248',
- 'zAddAssetAttr-Embedded Thumbnail Offset-249',
- 'zAddAssetAttr-Embedded Thumbnail Width-250',
- 'zAsset-Packed Acceptable Crop Rect-251',
- 'zAsset-Packed Badge Attributes-252',
- 'zAsset-Packed Preferred Crop Rect-253',
- 'zAsset-Curation Score-254',
- 'zAsset-Camera Processing Adjustment State-255',
- 'zAsset-Depth Type-256',
- 'zAsset-Is Magic Carpet-QuicktimeMOVfile-257',
- 'zAddAssetAttr-Orig Resource Choice-258',
- 'zAsset-Spatial Type-259',
- 'zAddAssetAttr-Spatial Over Capture Group ID-260',
- 'zAddAssetAttr-Place Annotation Data-261',
- 'zAddAssetAttr-Distance Identity-262',
- 'zAddAssetAttr-Edited IPTC Attributes-263',
- 'zAssetDes-Long Description-264',
- 'zAddAssetAttr-Asset Description-265',
- 'zAddAssetAttr-Title-Comments via Cloud Website-266',
- 'zAddAssetAttr-Accessibility Description-267',
- 'zAddAssetAttr-Photo Stream Tag ID-268',
- 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-269',
- 'zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-270',
- 'zCldFeedEnt-Entry Date-271',
- 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-272',
- 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-273',
- 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-274',
- 'zCldFeedEnt-Entry Priority Number-275',
- 'zCldFeedEnt-Entry Type Number-276',
- 'zCldSharedComment-Cloud GUID-4TableStart-277',
- 'zCldSharedComment-Date-278',
- 'zCldSharedComment-Comment Client Date-279',
- 'zAsset-Cloud Last Viewed Comment Date-280',
- 'zCldSharedComment-Type-281',
- 'zCldSharedComment-Comment Text-282',
- 'zCldSharedComment-Commenter Hashed Person ID-283',
- 'zCldSharedComment-Batch Comment-284',
- 'zCldSharedComment-Is a Caption-285',
- 'zAsset-Cloud Has Comments by Me-286',
- 'zCldSharedComment-Is My Comment-287',
- 'zCldSharedComment-Is Deletable-288',
- 'zAsset-Cloud Has Comments Conversation-289',
- 'zAsset-Cloud Has Unseen Comments-290',
- 'zCldSharedComment-Liked-291',
- 'zAddAssetAttr-Share Type-292',
- 'zAsset-Library Scope Share State- StillTesting-293',
- 'zAsset-Active Library Scope Participation State-294',
- 'zAddAssetAttr-Library Scope Asset Contributors To Update-295',
- 'zShare-UUID-CMM-4TableStart-296',
- 'SPLzShare-UUID-SPL-4TableStart-297',
- 'zShare-zENT-CMM-298',
- 'SPLzShare-zENT-SPL-299',
- 'zSharePartic-z54SHARE-300',
- 'SPLzSharePartic-z54SHARE-301',
- 'zShare-Status-CMM-302',
- 'SPLzShare-Status-SPL-303',
- 'zShare-Scope Type-CMM-304',
- 'SPLzShare-Scope Type-SPL-305',
- 'zShare-Local Publish State-CMM-306',
- 'SPLzShare-Local Publish State-SPL-307',
- 'zShare-Public Permission-CMM-308',
- 'SPLzShare-Public Permission-SPL-309',
- 'zShare-Originating Scope ID-CMM-310',
- 'SPLzShare-Originating Scope ID-SPL-311',
- 'zShare-Scope ID-CMM-312',
- 'SPLzShare-Scope ID-SPL-313',
- 'zShare-Title-CMM-314',
- 'SPLzShare-Title-SPL-315',
- 'zShare-Share URL-CMM-316',
- 'SPLzShare-Share URL-SPL-317',
- 'zShare-Creation Date-CMM-318',
- 'SPLzShare-Creation Date-SPL-319',
- 'zShare-Start Date-CMM-320',
- 'SPLzShare-Start Date-SPL-321',
- 'zShare-End Date-CMM-322',
- 'SPLzShare-End Date-SPL-323',
- 'zShare-Expiry Date-CMM-324',
- 'SPLzShare-Expiry Date-SPL-325',
- 'zShare-Cloud Item Count-CMM-326',
- 'SPLzShare-Cloud Item Count-SPL-327',
- 'zShare-Asset Count-CMM-328',
- 'SPLzShare-Asset Count-SPL-329',
- 'zShare-Cloud Photo Count-CMM-330',
- 'SPLzShare-Cloud Photo Count-SPL-331',
- 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-332',
- 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-333',
- 'zShare-Photos Count-CMM-334',
- 'SPLzShare-Photos Count-CMM-SPL-335',
- 'zShare-Uploaded Photos Count-CMM-336',
- 'SPLzShare-Uploaded Photos Count-SPL-337',
- 'zShare-Cloud Video Count-CMM-338',
- 'SPLzShare-Cloud Video Count-SPL-339',
- 'zShare-Videos Count-CMM-340',
- 'SPLzShare-Videos Count-SPL-341',
- 'zShare-Uploaded Videos Count-CMM-342',
- 'SPLzShare-Uploaded Videos Count-SPL-343',
- 'zShare-Force Sync Attempted-CMM-344',
- 'SPLzShare-Force Sync Attempted-SPL-345',
- 'zShare-Cloud Local State-CMM-346',
- 'SPLzShare-Cloud Local State-SPL-347',
- 'zShare-Scope Syncing State-CMM-348',
- 'SPLzShare-Scope Syncing State-SPL-349',
- 'zShare-Auto Share Policy-CMM-350',
- 'SPLzShare-Auto Share Policy-SPL-351',
- 'zShare-Should Notify On Upload Completion-CMM-352',
- 'SPLzShare-Should Notify On Upload Completion-SPL-353',
- 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-354',
- 'zShare-Trashed State-CMM-355',
- 'SPLzShare-Trashed State-SPL-356',
- 'zShare-Cloud Delete State-CMM-357',
- 'SPLzShare-Cloud Delete State-SPL-358',
- 'zShare-Trashed Date-CMM-359',
- 'SPLzShare-Trashed Date-SPL-360',
- 'zShare-LastParticipant Asset Trash Notification Date-CMM-361',
- 'SPLzShare-LastParticipant Asset Trash Notification Date-SPL-362',
- 'zShare-Last Participant Asset Trash Notification View Date-CMM-363',
- 'SPLzShare-Last Participant Asset Trash Notification View Date-SPL-364',
- 'zShare-Exit Source-CMM-365',
- 'SPLzShare-Exit Source-SPL-366',
- 'zShare-SPL_Exit State-CMM-367',
- 'SPLzShare-SPL_Exit State-SPL-368',
- 'zShare-Exit Type-CMM-369',
- 'SPLzShare-Exit Type-SPL-370',
- 'zShare-Should Ignor Budgets-CMM-371',
- 'SPLzShare-Should Ignor Budgets-SPL-372',
- 'zShare-Preview State-CMM-373',
- 'SPLzShare-Preview State-SPL-374',
- 'zShare-Preview Data-CMM-375',
- 'SPLzShare-Preview Data-SPL-376',
- 'zShare-Rules-CMM-377',
- 'SPLzShare-Rules-SPL-378',
- 'zShare-Thumbnail Image Data-CMM-379',
- 'SPLzShare-Thumbnail Image Data-SPL-380',
- 'zShare-Participant Cloud Update State-CMM-381',
- 'SPLzShare-Participant Cloud Update State-SPL-382',
- 'zSharePartic-UUID-4TableStart-383',
- 'SPLzSharePartic-UUID-4TableStart-384',
- 'zSharePartic-Acceptance Status-385',
- 'SPLzSharePartic-Acceptance Status-386',
- 'zSharePartic-Is Current User-387',
- 'SPLzSharePartic-Is Current User-388',
- 'zSharePartic-Role-389',
- 'SPLzSharePartic-Role-390',
- 'zSharePartic-Premission-391',
- 'SPLzSharePartic-Premission-392',
- 'zSharePartic-Participant ID-393',
- 'SPLzSharePartic-Participant ID-394',
- 'zSharePartic-User ID-395',
- 'SPLzSharePartic-User ID-396',
- 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-397',
- 'SPLzSharePartic-zPK-4TableStart-398',
- 'zSharePartic-zPK-4TableStart-399',
- 'zSharePartic-Email Address-400',
- 'SPLzSharePartic-Email Address-401',
- 'zSharePartic-Phone Number-402',
- 'SPLzSharePartic-Phone Number-403',
- 'zSharePartic-Exit State-404',
- 'SPLzSharePartic-Exit State-405',
- 'ParentzGenAlbum-UUID-4TableStart-406',
- 'zGenAlbum-UUID-4TableStart-407',
- 'SWYConverszGenAlbum-UUID-4TableStart-408',
- 'ParentzGenAlbum-Cloud GUID-4TableStart-409',
- 'zGenAlbum-Cloud GUID-4TableStart-410',
- 'SWYConverszGenAlbum-Cloud GUID-4TableStart-411',
- 'zCldShareAlbumInvRec-Album GUID-4TableStart-412',
- 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-413',
- 'zGenAlbum-Project Render UUID-4TableStart-414',
- 'SWYConverszGenAlbum-Project Render UUID-4TableStart-415',
- 'zAlbumList-Needs Reordering Number-416',
- 'zGenAlbum-zENT- Entity-417',
- 'ParentzGenAlbum-Kind-418',
- 'zGenAlbum-Album Kind-419',
- 'SWYConverszGenAlbum-Album Kind-420',
- 'ParentzGenAlbum-Cloud-Local-State-421',
- 'zGenAlbum-Cloud_Local_State-422',
- 'SWYConverszGenAlbum-Cloud_Local_State-423',
- 'ParentzGenAlbum- Title-424',
- 'zGenAlbum- Title-User&System Applied-425',
- 'SWYConverszGenAlbum- Title -User&System Applied-426',
- 'zGenAlbum-Import Session ID-SWY-427',
- 'zAsset- Conversation= zGenAlbum_zPK-428',
- 'SWYConverszGenAlbum- Import Session ID-SWY-429',
- 'zGenAlbum-Imported by Bundle Identifier-430',
- 'SWYzGenAlbum-Imported by Bundle Identifier-431',
- 'SWYConverszGenAlbum- Syndicate-432',
- 'ParentzGenAlbum-Creation Date-433',
- 'zGenAlbum-Creation Date-434',
- 'SWYConverszGenAlbum-Creation Date-435',
- 'zGenAlbum-Cloud Creation Date-436',
- 'SWYConverszGenAlbum-Cloud Creation Date-437',
- 'zGenAlbum-Start Date-438',
- 'SWYConverszGenAlbum-Start Date-439',
- 'zGenAlbum-End Date-440',
- 'SWYConverszGenAlbum-End Date-441',
- 'zGenAlbum-Cloud Subscription Date-442',
- 'SWYConverszGenAlbum-Cloud Subscription Date-443',
- 'ParentzGenAlbum-Pending Items Count-444',
- 'zGenAlbum-Pending Items Count-445',
- 'SWYConverszGenAlbum-Pending Items Count-446',
- 'ParentzGenAlbum-Pending Items Type-447',
- 'zGenAlbum-Pending Items Type-448',
- 'SWYConverszGenAlbum-Pending Items Type-449',
- 'zGenAlbum- Cached Photos Count-450',
- 'SWYConverszGenAlbum- Cached Photos Count-451',
- 'zGenAlbum- Cached Videos Count-452',
- 'SWYConverszGenAlbum- Cached Videos Count-453',
- 'zGenAlbum- Cached Count-454',
- 'SWYConverszGenAlbum- Cached Count-455',
- 'ParentzGenAlbum-Sync Event Order Key-456',
- 'zGenAlbum-Sync Event Order Key-457',
- 'SWYConverszGenAlbum-Sync Event Order Key-458',
- 'zGenAlbum-Has Unseen Content-459',
- 'SWYConverszGenAlbum-Has Unseen Content-460',
- 'zGenAlbum-Unseen Asset Count-461',
- 'SWYConverszGenAlbum-Unseen Asset Count-462',
- 'zGenAlbum-is Owned-463',
- 'SWYConverszGenAlbum-is Owned-464',
- 'zGenAlbum-Cloud Relationship State-465',
- 'SWYConverszGenAlbum-Cloud Relationship State-466',
- 'zGenAlbum-Cloud Relationship State Local-467',
- 'SWYConverszGenAlbum-Cloud Relationship State Local-468',
- 'zGenAlbum-Cloud Owner Mail Key-469',
- 'SWYConverszGenAlbum-Cloud Owner Mail Key-470',
- 'zGenAlbum-Cloud Owner Frist Name-471',
- 'SWYConverszGenAlbum-Cloud Owner Frist Name-472',
- 'zGenAlbum-Cloud Owner Last Name-473',
- 'SWYConverszGenAlbum-Cloud Owner Last Name-474',
- 'zGenAlbum-Cloud Owner Full Name-475',
- 'SWYConverszGenAlbum-Cloud Owner Full Name-476',
- 'zGenAlbum-Cloud Person ID-477',
- 'SWYConverszGenAlbum-Cloud Person ID-478',
- 'zAsset-Cloud Owner Hashed Person ID-479',
- 'zGenAlbum-Cloud Owner Hashed Person ID-480',
- 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-481',
- 'zGenAlbum-Local Cloud Multi-Contributors Enabled-482',
- 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-483',
- 'zGenAlbum-Cloud Multi-Contributors Enabled-484',
- 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-485',
- 'zGenAlbum-Cloud Album Sub Type-486',
- 'SWYConverszGenAlbum-Cloud Album Sub Type-487',
- 'zGenAlbum-Cloud Contribution Date-488',
- 'SWYConverszGenAlbum-Cloud Contribution Date-489',
- 'zGenAlbum-Cloud Last Interesting Change Date-490',
- 'SWYConverszGenAlbum-Cloud Last Interesting Change Date-491',
- 'zGenAlbum-Cloud Notification Enabled-492',
- 'SWYConverszGenAlbum-Cloud Notification Enabled-493',
- 'ParentzGenAlbum-Pinned-494',
- 'zGenAlbum-Pinned-495',
- 'SWYConverszGenAlbum-Pinned-496',
- 'ParentzGenAlbum-Custom Sort Key-497',
- 'zGenAlbum-Custom Sort Key-498',
- 'SWYConverszGenAlbum-Custom Sort Key-499',
- 'ParentzGenAlbum-Custom Sort Ascending-500',
- 'zGenAlbum-Custom Sort Ascending-501',
- 'SWYConverszGenAlbum-Custom Sort Ascending-502',
- 'ParentzGenAlbum-Is Prototype-503',
- 'zGenAlbum-Is Prototype-504',
- 'SWYConverszGenAlbum-Is Prototype-505',
- 'ParentzGenAlbum-Project Document Type-506',
- 'zGenAlbum-Project Document Type-507',
- 'SWYConverszGenAlbum-Project Document Type-508',
- 'ParentzGenAlbum-Custom Query Type-509',
- 'zGenAlbum-Custom Query Type-510',
- 'SWYConverszGenAlbum-Custom Query Type-511',
- 'ParentzGenAlbum-Trashed State-512',
- 'ParentzGenAlbum-Trash Date-513',
- 'zGenAlbum-Trashed State-514',
- 'zGenAlbum-Trash Date-515',
- 'SWYConverszGenAlbum-Trashed State-516',
- 'SWYConverszGenAlbum-Trash Date-517',
- 'ParentzGenAlbum-Cloud Delete State-518',
- 'zGenAlbum-Cloud Delete State-519',
- 'SWYConverszGenAlbum-Cloud Delete State-520',
- 'zGenAlbum-Cloud Owner Whitelisted-521',
- 'SWYConverszGenAlbum-Cloud Owner Whitelisted-522',
- 'zGenAlbum-Cloud Local Public URL Enabled-523',
- 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-524',
- 'zGenAlbum-Cloud Public URL Enabled-525',
- 'zGenAlbum-Public URL-526',
- 'SWYConverszGenAlbum-Cloud Public URL Enabled-527',
- 'SWYConverszGenAlbum-Public URL-528',
- 'zGenAlbum-Key Asset Face Thumb Index-529',
- 'SWYConverszGenAlbum-Key Asset Face Thumb Index-530',
- 'zGenAlbum-Project Text Extension ID-531',
- 'SWYConverszGenAlbum-Project Text Extension ID-532',
- 'zGenAlbum-User Query Data-533',
- 'SWYConverszGenAlbum-User Query Data-534',
- 'zGenAlbum-Custom Query Parameters-535',
- 'SWYConverszGenAlbum-Custom Query Parameters-536',
- 'zGenAlbum-Project Data-537',
- 'SWYConverszGenAlbum-Project Data-538',
- 'zGenAlbum-Search Index Rebuild State-539',
- 'SWYConverszGenAlbum-Search Index Rebuild State-540',
- 'zGenAlbum-Duplicate Type-541',
- 'SWYConverszGenAlbum-Duplicate Type-542',
- 'zGenAlbum-Privacy State-543',
- 'SWYConverszGenAlbum-Privacy State-544',
- 'zCldShareAlbumInvRec-zUUID-4TableStart-545',
- 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-546',
- 'zCldShareAlbumInvRec-Invitation State Local-547',
- 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-548',
- 'zCldShareAlbumInvRec-Subscription Date-549',
- 'zCldShareAlbumInvRec-Invitee First Name-550',
- 'zCldShareAlbumInvRec-Invitee Last Name-551',
- 'zCldShareAlbumInvRec-Invitee Full Name-552',
- 'zCldShareAlbumInvRec-Invitee Hashed Person ID-553',
- 'zCldShareAlbumInvRec-Invitee Email Key-554',
- 'zGenAlbum-Key Asset Face ID-555',
- 'zFaceCrop-Face Area Points-556',
- 'zAsset-Face Adjustment Version-557',
- 'zAddAssetAttr-Face Analysis Version-558',
- 'zDetFace-Asset Visible-559',
- 'zPerson-Face Count-560',
- 'zDetFace-Face Crop-561',
- 'zDetFace-Face Algorithm Version-562',
- 'zDetFace-Adjustment Version-563',
- 'zDetFace-UUID-4TableStart-564',
- 'zPerson-Person UUID-4TableStart-565',
- 'zPerson - MD ID-566',
- 'zPerson - Asset Sort Order-567',
- 'zDetFace-Confirmed Face Crop Generation State-568',
- 'zDetFace-Manual-569',
- 'zDetFace-Detection Type-570',
- 'zPerson-Detection Type-571',
- 'zDetFace-VIP Model Type-572',
- 'zDetFace-Name Source-573',
- 'zDetFace-Cloud Name Source-574',
- 'zPerson-Merge Candidate Confidence-575',
- 'zPerson-Person URI-576',
- 'zPerson-Display Name-577',
- 'zPerson-Full Name-578',
- 'zPerson-Cloud Verified Type-579',
- 'zFaceCrop-State-580',
- 'zFaceCrop-Type-581',
- 'zFaceCrop-UUID-4TableStart-582',
- 'zPerson-Type-583',
- 'zPerson-Verified Type-584',
- 'zPerson-Gender Type-585',
- 'zDetFace-Gender Type-586',
- 'zDetFace-Center X-587',
- 'zDetFace-Center Y-588',
- 'zPerson-Age Type Estimate-589',
- 'zDetFace-Age Type Estimate-590',
- 'zDetFace-Ethnicity Type-591',
- 'zDetFace-Skin Tone Type-592',
- 'zDetFace-Hair Type-593',
- 'zDetFace-Hair Color Type-594',
- 'zDetFace-Head Gear Type-595',
- 'zDetFace-Facial Hair Type-596',
- 'zDetFace-Has Face Mask-597',
- 'zDetFace-Pose Type-598',
- 'zDetFace-Face Expression Type-599',
- 'zDetFace-Has Smile-600',
- 'zDetFace-Smile Type-601',
- 'zDetFace-Lip Makeup Type-602',
- 'zDetFace-Eyes State-603',
- 'zDetFace-Is Left Eye Closed-604',
- 'zDetFace-Is Right Eye Closed-605',
- 'zDetFace-Gaze Center X-606',
- 'zDetFace-Gaze Center Y-607',
- 'zDetFace-Face Gaze Type-608',
- 'zDetFace-Eye Glasses Type-609',
- 'zDetFace-Eye Makeup Type-610',
- 'zDetFace-Cluster Squence Number Key-611',
- 'zDetFace-Grouping ID-612',
- 'zDetFace-Master ID-613',
- 'zDetFace-Quality-614',
- 'zDetFace-Quality Measure-615',
- 'zDetFace-Source Height-616',
- 'zDetFace-Source Width-617',
- 'zDetFace-Hidden-Asset Hidden-618',
- 'zDetFace-In Trash-Recently Deleted-619',
- 'zDetFace-Cloud Local State-620',
- 'zDetFace-Training Type-621',
- 'zDetFace.Pose Yaw-622',
- 'zDetFace-Body Center X-623',
- 'zDetFace-Body Center Y-624',
- 'zDetFace-Body Height-625',
- 'zDetFace-Body Width-626',
- 'zDetFace-Roll-627',
- 'zDetFace-Size-628',
- 'zDetFace-Cluster Squence Number-629',
- 'zDetFace-Blur Score-630',
- 'zDetFacePrint-Face Print Version-631',
- 'zMedAnlyAstAttr-Face Count-632',
- 'zDetFaceGroup-UUID-4TableStart-633',
- 'zDetFaceGroup-Person Builder State-634',
- 'zDetFaceGroup-UnNamed Face Count-635',
- 'zPerson-In Person Naming Model-636',
- 'zPerson-Key Face Pick Source Key-637',
- 'zPerson-Manual Order Key-638',
- 'zPerson-Question Type-639',
- 'zPerson-Suggested For Client Type-640',
- 'zPerson-Merge Target Person-641',
- 'zPerson-Cloud Local State-642',
- 'zFaceCrop-Cloud Local State-643',
- 'zFaceCrop-Cloud Type-644',
- 'zPerson-Cloud Delete State-645',
- 'zFaceCrop-Cloud Delete State-646',
- 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-647',
- 'zAsset-Highlight Visibility Score-648',
- 'zMemory-UUID-4TableStart-649',
- 'zMemory-AssetListPredicte-650',
- 'zMemory-Score-651',
- 'zMemory-SubTitle-652',
- 'zMemory-Title-653',
- 'zMemory-Category-654',
- 'zMemory-SubCategory-655',
- 'zMemory-Creation Date-656',
- 'zMemory-Last Enrichment Date-657',
- 'zMemory-User Action Options-658',
- 'zMemory-Favorite Memory-659',
- 'zMemory-View Count-660',
- 'zMemory-Play Count-661',
- 'zMemory-Rejected-662',
- 'zMemory-Share Count-663',
- 'zMemory-Sharing Composition-664',
- 'zMemory-Last Movie Play Date-665',
- 'zMemory-Last Viewed Date-666',
- 'zMemory-Pending Play Count Memory-667',
- 'zMemory-Pending Share Count Memory-668',
- 'zMemory-Pending View Count Memory-669',
- 'zMemory-Pending State-670',
- 'zMemory-Featured State-671',
- 'zMemory-Photos Graph Version-672',
- 'zMemory-Graph Memory Identifier-673',
- 'zMemory-Notification State-674',
- 'zMemory-Cloud Local State-675',
- 'zMemory-Cloud Delete State-676',
- 'zMemory-Story Color Grade Kind-677',
- 'zMemory-Story Serialized Title Category-678',
- 'zMemory-Syndicated Content State-679',
- 'zMemory-Search Index Rebuild State-680',
- 'zMemory-Black Listed Feature-681',
- 'zMoment-UUID-4TableStart-682',
- 'zMoment-Aggregation Score-683',
- 'zMoment-Start Date-684',
- 'zMoment-Representative Date-685',
- 'zMoment-Timezone Offset-686',
- 'zMoment-Modification Date-687',
- 'zMoment-End Date-688',
- 'zMoment-SubTitle-689',
- 'zMoment-Title-690',
- 'zMoment-Originator State-691',
- 'zMoment-Sharing Composition-692',
- 'zMoment-Cached Count Shared-693',
- 'zMoment-Processed Location-694',
- 'zMoment-Approx Latitude-695',
- 'zMoment-Approx Longitude-696',
- 'zMoment-GPS Horizontal Accuracy-697',
- 'zMoment-Cache Count-698',
- 'zMoment-Cached Photos Count-699',
- 'zMoment-Cached Videos Count-700',
- 'zMoment-Trashed State-701',
- 'SBKAzSugg-UUID-4TableStart-702',
- 'SBKAzSugg-Suggestion Context-703',
- 'SBKAzSugg-Sharing Composition-704',
- 'SBKAzSugg-Start Date-705',
- 'SBKAzSugg-State-706',
- 'SBKAzSugg-Featured State-707',
- 'SBKAzSugg- Available Features-708',
- 'SBKAzSugg-Notification State-709',
- 'SBKAzSugg-Creation Date-710',
- 'SBKAzSugg-End Date-711',
- 'SBKAzSugg-Activation Date-712',
- 'SBKAzSugg-Expunge Date-713',
- 'SBKAzSugg-Relevant Until Date-714',
- 'SBKAzSugg-Title-715',
- 'SBKAzSugg-Sub Title-716',
- 'SBKAzSugg-Cached Count-717',
- 'SBKAzSugg-Cahed Photos Count-718',
- 'SBKAzSugg-Cached Videos Count-719',
- 'SBKAzSugg-Type-720',
- 'SBKAzSugg-Sub Type-721',
- 'SBKAzSugg-Action Data-722',
- 'SBKAzSugg-Version-723',
- 'SBKAzSugg-Cloud Local State-724',
- 'SBKAzSugg-Cloud Delete State-725',
- 'SBRAzSugg-UUID-4TableStart-726',
- 'SBRAzSugg-Suggestion Context-727',
- 'SBRAzSugg-Sharing Composition-728',
- 'SBRAzSugg-Start Date-729',
- 'SBRAzSugg-State-730',
- 'SBRAzSugg-Featured State-731',
- 'SBRAzSugg- Available Features-732',
- 'SBRAzSugg-Notification State-733',
- 'SBRAzSugg-Creation Date-734',
- 'SBRAzSugg-End Date-735',
- 'SBRAzSugg-Activation Date-736',
- 'SBRAzSugg-Expunge Date-737',
- 'SBRAzSugg-Relevant Until Date-738',
- 'SBRAzSugg-Title-739',
- 'SBRAzSugg-Sub Title-740',
- 'SBRAzSugg-Cached Count-741',
- 'SBRAzSugg-Cahed Photos Count-742',
- 'SBRAzSugg-Cached Videos Count-743',
- 'SBRAzSugg-Type-744',
- 'SBRAzSugg-Sub Type-745',
- 'SBRAzSugg-Action Data-746',
- 'SBRAzSugg-Version-747',
- 'SBRAzSugg-Cloud Local State-748',
- 'SBRAzSugg-Cloud Delete State-749',
- 'zMedAnlyAstAttr-Media Analysis Version-750',
- 'zMedAnlyAstAttr-Audio Classification-751',
- 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-752',
- 'zMedAnlyAstAttr-Best Video Range Start Time Scale-753',
- 'zMedAnlyAstAttr-Best Video Range Duration Value-754',
- 'zMedAnlyAstAttr-Best Video Range Start Value-755',
- 'zMedAnlyAstAttr-Packed Best Playback Rect-756',
- 'zMedAnlyAstAttr-Activity Score-757',
- 'zMedAnlyAstAttr-Video Score-758',
- 'zMedAnlyAstAttr-Audio Score-759',
- 'zMedAnlyAstAttr-Wallpaper Score-760',
- 'zMedAnlyAstAttr-AutoPlay Suggestion Score-761',
- 'zMedAnlyAstAttr-Blurriness Score-762',
- 'zMedAnlyAstAttr-Exposure Score-763',
- 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-764',
- 'zMedAnlyAstAttr-Probable Rotation Direction-765',
- 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-766',
- 'zAssetAnalyState-Asset UUID-4TableStart-767',
- 'zAssetAnalyState-Analyisis State-768',
- 'zAssetAnalyState-Worker Flags-769',
- 'zAssetAnalyState-Worker Type-770',
- 'zAssetAnalyState-Ignore Until Date-771',
- 'zAssetAnalyState-Last Ignored Date-772',
- 'zAssetAnalyState-Sort Token-773',
- 'zMedAnlyAstAttr-Character Recognition Attr-774',
- 'zCharRecogAttr-Algorithm Version-775',
- 'zCharRecogAttr-Adjustment Version-776',
- 'zMedAnlyAstAttr-Visual Search Attributes-777',
- 'zVisualSearchAttr-Algorithm Version-778',
- 'zVisualSearchAttr-Adjustment Version-779',
- 'zVisualSearchAttr - Sticker Confidence Algorithm Version-780',
- 'zVisualSearchAttr - Sticker Confidence Score-781',
- 'zAsset-Sticker Confidence Score-782',
- 'zAsset-Overall Aesthetic Score-783',
- 'zCompAssetAttr-Behavioral Score-784',
- 'zCompAssetAttr-Failure Score zCompAssetAttr-785',
- 'zCompAssetAttr-Harmonious Color Score-786',
- 'zCompAssetAttr-Immersiveness Score-787',
- 'zCompAssetAttr-Interaction Score-788',
- 'zCompAssetAttr-Intersting Subject Score-789',
- 'zCompAssetAttr-Intrusive Object Presence Score-790',
- 'zCompAssetAttr-Lively Color Score-791',
- 'zCompAssetAttr-Low Light-792',
- 'zCompAssetAttr-Noise Score-793',
- 'zCompAssetAttr-Pleasant Camera Tilt Score-794',
- 'zCompAssetAttr-Pleasant Composition Score-795',
- 'zCompAssetAttr-Pleasant Lighting Score-796',
- 'zCompAssetAttr-Pleasant Pattern Score-797',
- 'zCompAssetAttr-Pleasant Perspective Score-798',
- 'zCompAssetAttr-Pleasant Post Processing Score-799',
- 'zCompAssetAttr-Pleasant Reflection Score-800',
- 'zCompAssetAttrPleasant Symmetry Score-801',
- 'zCompAssetAttr-Sharply Focused Subject Score-802',
- 'zCompAssetAttr-Tastfully Blurred Score-803',
- 'zCompAssetAttr-Well Chosen Subject Score-804',
- 'zCompAssetAttr-Well Framed Subject Score-805',
- 'zCompAssetAttr-Well Timeed Shot Score-806',
- 'zCldRes-Asset UUID-4TableStart-807',
- 'zCldRes-Cloud Local State-808',
- 'zCldRes-File Size-809',
- 'zCldRes-Height-810',
- 'zCldRes-Is Available-811',
- 'zCldRes-Is Locally Available-812',
- 'zCldRes-Prefetch Count-813',
- 'zCldRes-Source Type-814',
- 'zCldRes-Type-815',
- 'zCldRes-Width-816',
- 'zCldRes-Date Created-817',
- 'zCldRes-Last OnDemand Download Date-818',
- 'zCldRes-Last Prefetch Date-819',
- 'zCldRes-Prunedat-820',
- 'zCldRes-File Path-821',
- 'zCldRes-Fingerprint-822',
- 'zCldRes-Item ID-823',
- 'zCldRes-UniID-824',
- 'zUserFeedback-UUID-4TableStart-825',
- 'zUserFeedback-Feature-826',
- 'zUserFeedback-Type-827',
- 'zUserFeedback-Last Modified Date-828',
- 'zUserFeedback-Context-829',
- 'zUserFeedback-Cloud Local State-830',
- 'zUserFeedback-Cloud Delete State-831',
- 'zUserFeedback - Creation Type-832',
- 'zAddAssetAttr-zPK-833',
- 'zAddAssetAttr-zENT-834',
- 'ZAddAssetAttr-zOPT-835',
- 'zAddAssetAttr-zAsset= zAsset_zPK-836',
- 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-837',
- 'zAddAssetAttr-Master Fingerprint-838',
- 'zAddAssetAttr-Public Global UUID-839',
- 'zAddAssetAttr-Deferred Photo Identifier-840',
- 'zAddAssetAttr-Original Assets UUID-841',
- 'zAddAssetAttr-Import Session ID-842',
- 'zAddAssetAttr-Originating Asset Identifier-843',
- 'zAddAssetAttr.Adjusted Fingerprint-844',
- 'zAlbumList-zPK= Album List Key-845',
- 'zAlbumList-zENT-846',
- 'zAlbumList-zOPT-847',
- 'zAlbumList-ID Key-848',
- 'zAlbumList-UUID-849',
- 'zAsset-zPK-850',
- 'zAsset-zENT-851',
- 'zAsset-zOPT-852',
- 'zAsset-Master= zCldMast-zPK-853',
- 'zAsset-Extended Attributes= zExtAttr-zPK-854',
- 'zAsset-Import Session Key-855',
- 'zAsset-Trashed by Participant= zSharePartic_zPK-856',
- 'zAsset-Photo Analysis Attributes Key-857',
- 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-858',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-859',
- 'zAsset-Moment Share Key= zShare-zPK-860',
- 'zAsset-zMoment Key= zMoment-zPK-861',
- 'zAsset-Computed Attributes Asset Key-862',
- 'zAsset-Highlight Being Assets-HBA Key-863',
- 'zAsset-Highlight Being Extended Assets-HBEA Key-864',
- 'zAsset-Highlight Being Key Asset Private-HBKAP Key-865',
- 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-866',
- 'zAsset-Highligh Being Summary Assets-HBSA Key-867',
- 'zAsset-Day Group Highlight Being Assets-DGHBA Key-868',
- 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-869',
- 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-870',
- 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-871',
- 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-872',
- 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-873',
- 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-874',
- 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-875',
- 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-876',
- 'zAsset-Promotion Score-877',
- 'zAsset-Iconic Score-878',
- 'zAsset-Media Analysis Attributes Key-879',
- 'zAsset-Media Group UUID-880',
- 'zAsset-UUID = store.cloudphotodb-881',
- 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-882',
- 'zAsset.Cloud Collection GUID-883',
- 'zAsset-Avalanche UUID-884',
- 'zAssetAnalyState-zPK-885',
- 'zAssetAnalyState-zEnt-886',
- 'zAssetAnalyState-zOpt-887',
- 'zAssetAnalyState-Asset= zAsset-zPK-888',
- 'zAssetAnalyState-Asset UUID-889',
- 'zAsstContrib-zPK-890',
- 'zAsstContrib-zEnt-891',
- 'zAsstContrib-zOpt-892',
- 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-893',
- 'zAsstContrib-Participant= zSharePartic-zPK-894',
- 'zAssetDes-zPK-895',
- 'zAssetDes-zENT-896',
- 'zAssetDes-zOPT-897',
- 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-898',
- 'zCharRecogAttr-zPK-899',
- 'zCharRecogAttr-zENT-900',
- 'zCharRecogAttr-zOPT-901',
- 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-902',
- 'zCldFeedEnt-zPK= zCldShared keys-903',
- 'zCldFeedEnt-zENT-904',
- 'zCldFeedEnt-zOPT-905',
- 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-906',
- 'zCldFeedEnt-Entry Invitation Record GUID-907',
- 'zCldFeedEnt-Entry Cloud Asset GUID-908',
- 'zCldMast-zPK= zAsset-Master-909',
- 'zCldMast-zENT-910',
- 'zCldMast-zOPT-911',
- 'zCldMast-Moment Share Key= zShare-zPK-912',
- 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-913',
- 'zCldMast-Originating Asset ID-914',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-915',
- 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-916',
- 'CMzCldMastMedData-zENT-917',
- 'CMzCldMastMedData-zOPT-918',
- 'CMzCldMastMedData-CldMast= zCldMast-zPK-919',
- 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-920',
- 'AAAzCldMastMedData-zENT-921',
- 'AAAzCldMastMedData-zOPT-922',
- 'AAAzCldMastMedData-CldMast key-923',
- 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-924',
- 'zCldRes-zPK-925',
- 'zCldRes-zENT-926',
- 'zCldRes-zOPT-927',
- 'zCldRes-Asset= zAsset-zPK-928',
- 'zCldRes-Cloud Master= zCldMast-zPK-929',
- 'zCldRes-Asset UUID-930',
- 'zCldShareAlbumInvRec-zPK-931',
- 'zCldShareAlbumInvRec-zEnt-932',
- 'zCldShareAlbumInvRec-zOpt-933',
- 'zCldShareAlbumInvRec-Album Key-934',
- 'zCldShareAlbumInvRec-FOK Album Key-935',
- 'zCldShareAlbumInvRec-Album GUID-936',
- 'zCldShareAlbumInvRec-zUUID-937',
- 'zCldShareAlbumInvRec-Cloud GUID-938',
- 'zCldSharedComment-zPK-939',
- 'zCldSharedComment-zENT-940',
- 'zCldSharedComment-zOPT-941',
- 'zCldSharedComment-Commented Asset Key= zAsset-zPK-942',
- 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-943',
- 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-944',
- 'zCldSharedComment-Liked Asset Key= zAsset-zPK-945',
- 'zCldSharedComment-CldFeedLikeCommentEntry Key-946',
- 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-947',
- 'zCldSharedComment-Cloud GUID-948',
- 'zCompAssetAttr-zPK-949',
- 'zCompAssetAttr-zEnt-950',
- 'zCompAssetAttr-zOpt-951',
- 'zCompAssetAttr-Asset Key-952',
- 'zDetFace-zPK-953',
- 'zDetFace-zEnt-954',
- 'zDetFace.zOpt-955',
- 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face-956',
- 'zDetFace-PersonForFace= zPerson-zPK-957',
- 'zDetFace-Person Being Key Face-958',
- 'zDetFace-Face Print-959',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-960',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-961',
- 'zDetFace-UUID-962',
- 'zDetFaceGroup-zPK-963',
- 'zDetFaceGroup-zENT-964',
- 'zDetFaceGroup-zOPT-965',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-966',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-967',
- 'zDetFaceGroup-UUID-968',
- 'zDetFacePrint-zPK-969',
- 'zDetFacePrint-zEnt-970',
- 'zDetFacePrint-zOpt-971',
- 'zDetFacePrint-Face Key-972',
- 'zExtAttr-zPK= zAsset-zExtendedAttributes-973',
- 'zExtAttr-zENT-974',
- 'zExtAttr-zOPT-975',
- 'zExtAttr-Asset Key-976',
- 'zFaceCrop-zPK-977',
- 'zFaceCrop-zEnt-978',
- 'zFaceCrop-zOpt-979',
- 'zFaceCrop-Asset Key-980',
- 'zFaceCrop-Invalid Merge Canidate Person UUID-981',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-982',
- 'zFaceCrop-Face Key-983',
- 'zFaceCrop-UUID-984',
- 'zGenAlbum-zPK=26AlbumLists= 26Albums-985',
- 'zGenAlbum-zENT-986',
- 'zGenAlbum-zOpt-987',
- 'zGenAlbum-Key Asset-Key zAsset-zPK-988',
- 'zGenAlbum-Secondary Key Asset-989',
- 'zGenAlbum-Tertiary Key Asset-990',
- 'zGenAlbum-Custom Key Asset-991',
- 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-992',
- 'zGenAlbum-FOK Parent Folder-993',
- 'zGenAlbum-zSyndicate-994',
- 'zGenAlbum-UUID-995',
- 'SWYConverszGenAlbum-UUID-996',
- 'zGenAlbum-Cloud_GUID = store.cloudphotodb-997',
- 'SWYConverszGenAlbum-Cloud GUID-998',
- 'zGenAlbum-Project Render UUID-999',
- 'SWYConverszGenAlbum-Project Render UUID-1000',
- 'zIntResou-zPK-1001',
- 'zIntResou-zENT-1002',
- 'zIntResou-zOPT-1003',
- 'zIntResou-Asset= zAsset_zPK-1004',
- 'zIntResou-Fingerprint-1005',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-1006',
- 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1007',
- 'zMedAnlyAstAttr-zEnt-1008',
- 'zMedAnlyAstAttr-zOpt-1009',
- 'zMedAnlyAstAttr-Asset= zAsset-zPK-1010',
- 'zMemory-zPK-1011',
- 'zMemory-zENT-1012',
- 'zMemory-zOPT-1013',
- 'zMemory-Key Asset= zAsset-zPK-1014',
- 'zMemory-UUID-1015',
- 'zMoment-zPK-1016',
- 'zMoment-zENT-1017',
- 'zMoment-zOPT-1018',
- 'zMoment-Highlight Key-1019',
- 'zMoment-UUID-1020',
- 'zPerson-zPK=zDetFace-Person-1021',
- 'zPerson-zEnt-1022',
- 'zPerson-zOpt-1023',
- 'zPerson-Share Participant= zSharePartic-zPK-1024',
- 'zPerson-KeyFace=zDetFace-zPK-1025',
- 'zPerson-Assoc Face Group Key-1026',
- 'zPerson-Person UUID-1027',
- 'zPhotoAnalysisAssetAttr-zPK-1028',
- 'zPhotoAnalysisAssetAttr-zEnt-1029',
- 'zPhotoAnalysisAssetAttr-zOpt-1030',
- 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1031',
- 'zSceneP-zPK-1032',
- 'zSceneP-zENT-1033',
- 'zSceneP-zOPT-1034',
- 'zShare-zPK-1035',
- 'zShare-zENT-1036',
- 'zShare-zOPT-1037',
- 'zShare-UUID-1038',
- 'SPLzShare-UUID-1039',
- 'zShare-Scope ID = store.cloudphotodb-1040',
- 'zSharePartic-zPK-1041',
- 'zSharePartic-zENT-1042',
- 'zSharePartic-zOPT-1043',
- 'zSharePartic-Share Key= zShare-zPK-1044',
- 'zSharePartic-Person= zPerson-zPK-1045',
- 'zSharePartic-UUID-1046',
- 'SBKAzSugg-zPK-1047',
- 'SBKAzSugg-zENT-1048',
- 'SBKAzSugg-zOPT-1049',
- 'SBKAzSugg-UUID-1050',
- 'SBRAzSugg-zPK-1051',
- 'SBRAzSugg-zENT-1052',
- 'SBRAzSugg-zOPT-1053',
- 'SBRAzSugg-UUID-1054',
- 'z3SuggBRA-3RepAssets1-1055',
- 'z3SuggBRA-58SuggBeingRepAssets-1056',
- 'z3SuggBKA-58SuggBeingKeyAssets= zSugg-zPK-1057',
- 'z3SuggBKA-3KeyAssets= zAsset-zPK-1058',
- 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1059',
- 'zUnmAdj-zOPT-1060',
- 'zUnmAdj-zENT-1061',
- 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1062',
- 'zUnmAdj-UUID-1063',
- 'zUnmAdj-Other Adjustments Fingerprint-1064',
- 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1065',
- 'zUserFeedback-zPK-1066',
- 'zUserFeedback-zENT-1067',
- 'zUserFeedback-zOPT-1068',
- 'zUserFeedback-Person= zPerson-zPK-1069',
- 'zUserFeedback-Memory= zMemory-zPK-1070',
- 'zUserFeedback-UUID-1071',
- 'zVisualSearchAttr-zPK-1072',
- 'zVisualSearchAttr-zENT-1073',
- 'zVisualSearchAttr-zOPT-1074',
- 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1075',
- 'z27AlbumList-27Albums= zGenAlbum-zPK-1076',
- 'z27AlbumList-Album List Key-1077',
- 'z27AlbumList-FOK27Albums Key-1078',
- 'z28Assets-28Albums= zGenAlbum-zPK-1079',
- 'z28Assets-3Asset Key= zAsset-zPK in the Album-1080',
- 'z28Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1081',
- 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1082',
- 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1083',
- 'z3MemoryBCAs-44MemoriesBeingCuratedAssets= zMemory-zPK-1084',
- 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1085',
- 'z3MemoryBECAs-44MemoriesBeingExtCuratedAssets= zMemory-zPK-1086',
- 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1087',
- 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK-1088',
- 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1089',
- 'z3MemoryBUCAs-44MemoriesBeingUserCuratedAssets= zMemory-zPK-1090',
- 'z3MemoryBCAs-44Memories Being Custom User Assets-1091',
- 'z3MemoryBCAs-3Custom User Assets-1092',
- 'z3MemoryBCAs-FOK-3Custom User Assets-1093')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph97.2-iOS17_Ref_for_Asset_Analysis-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
+ row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
+ row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
+ row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
+ row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
+ row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
+ row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
+ row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
+ row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
+ row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
+ row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
+ row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
+ row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
+ row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
+ row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
+ row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
+ row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
+ row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
+ row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
+ row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
+ row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307],
+ row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315],
+ row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323],
+ row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331],
+ row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339],
+ row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347],
+ row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355],
+ row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363],
+ row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371],
+ row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379],
+ row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387],
+ row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395],
+ row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403],
+ row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411],
+ row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419],
+ row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427],
+ row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435],
+ row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443],
+ row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451],
+ row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459],
+ row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467],
+ row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475],
+ row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483],
+ row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491],
+ row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499],
+ row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507],
+ row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515],
+ row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523],
+ row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531],
+ row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539],
+ row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547],
+ row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555],
+ row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563],
+ row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571],
+ row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579],
+ row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587],
+ row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595],
+ row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603],
+ row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611],
+ row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619],
+ row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627],
+ row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635],
+ row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643],
+ row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651],
+ row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659],
+ row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667],
+ row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675],
+ row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683],
+ row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691],
+ row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699],
+ row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707],
+ row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715],
+ row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723],
+ row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731],
+ row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739],
+ row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747],
+ row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755],
+ row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763],
+ row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771],
+ row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779],
+ row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787],
+ row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795],
+ row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803],
+ row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811],
+ row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819],
+ row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827],
+ row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835],
+ row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843],
+ row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851],
+ row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859],
+ row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867],
+ row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875],
+ row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883],
+ row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891],
+ row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899],
+ row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907],
+ row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915],
+ row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923],
+ row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931],
+ row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939],
+ row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947],
+ row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955],
+ row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963],
+ row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971],
+ row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979],
+ row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987],
+ row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995],
+ row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002],
+ row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009],
+ row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016],
+ row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023],
+ row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030],
+ row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037],
+ row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044],
+ row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051],
+ row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058],
+ row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065],
+ row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072],
+ row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079],
+ row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086],
+ row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093]))
- tlactivity = 'Ph97.2-iOS17_Ref_for_Asset_Analysis-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ data_headers = (('zAsset-Added Date-0', 'datetime'),
+ 'zAsset- SortToken -CameraRoll-1',
+ 'zAsset Complete-2',
+ 'zAsset-zPK-4QueryStart-3',
+ 'zAddAssetAttr-zPK-4QueryStart-4',
+ 'zAsset-UUID = store.cloudphotodb-4QueryStart-5',
+ 'zAddAssetAttr-Master Fingerprint-4TableStart-6',
+ 'zIntResou-Fingerprint-4TableStart-7',
+ 'zAsset-Bundle Scope-8',
+ 'zAsset-Syndication State-9',
+ 'zAsset-Cloud is My Asset-10',
+ 'zAsset-Cloud is deletable-Asset-11',
+ 'zAsset-Cloud_Local_State-12',
+ 'zAsset-Visibility State-13',
+ 'zExtAttr-Camera Make-14',
+ 'zExtAttr-Camera Model-15',
+ 'zExtAttr-Lens Model-16',
+ 'zExtAttr-Flash Fired-17',
+ 'zExtAttr-Focal Lenght-18',
+ 'zExtAttr-Focal Lenth in 35MM-19',
+ 'zExtAttr-Digital Zoom Ratio-20',
+ 'zAsset-Derived Camera Capture Device-21',
+ 'zAddAssetAttr-Camera Captured Device-22',
+ 'zAddAssetAttr-Imported by-23',
+ 'zCldMast-Imported By-24',
+ 'zAddAssetAttr.Imported by Bundle Identifier-25',
+ 'zAddAssetAttr-Imported By Display Name-26',
+ 'zCldMast-Imported by Bundle ID-27',
+ 'zCldMast-Imported by Display Name-28',
+ 'zAsset-Saved Asset Type-29',
+ 'zAsset-Directory-Path-30',
+ 'zAsset-Filename-31',
+ 'zAddAssetAttr- Original Filename-32',
+ 'zCldMast- Original Filename-33',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-34',
+ 'zAsset-Active Library Scope Participation State -4QueryStart-35',
+ 'zAsset-Library Scope Share State- StillTesting -4QueryStart-36',
+ 'SPLzShare-Cloud Photo Count-SPL -4QueryStart-37',
+ 'SPLzShare-Cloud Video Count-SPL -4QueryStart-38',
+ ('zAddAssetAttr-Date Created Source-39', 'datetime'),
+ ('zAsset-Date Created-40', 'datetime'),
+ ('zCldMast-Creation Date-41', 'datetime'),
+ ('zIntResou-CldMst Date Created-42', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-43',
+ 'zAddAssetAttr-Time Zone Offset-44',
+ 'zAddAssetAttr-Inferred Time Zone Offset-45',
+ 'zAddAssetAttr-EXIF-String-46',
+ ('zAsset-Modification Date-47', 'datetime'),
+ ('zAddAssetAttr-Last Viewed Date-48', 'datetime'),
+ ('zAsset-Last Shared Date-49', 'datetime'),
+ 'zCldMast-Cloud Local State-50',
+ ('zCldMast-Import Date-51', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-52', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-4QueryStart-53',
+ ('zAddAssetAttr-Alt Import Image Date-54', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-55',
+ ('zAsset-Cloud Batch Publish Date-56', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-57', 'datetime'),
+ 'zAsset-Cloud Download Requests-58',
+ 'zAsset-Cloud Batch ID-59',
+ 'zAddAssetAttr-Upload Attempts-60',
+ 'zAsset-Latitude-61',
+ 'zExtAttr-Latitude-62',
+ 'zAsset-Longitude-63',
+ 'zExtAttr-Longitude-64',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-65',
+ 'zAddAssetAttr-Location Hash-66',
+ 'zAddAssetAttr-Shifted Location Valid-67',
+ 'zAddAssetAttr-Shifted Location Data-68',
+ 'zAddAssetAttr-Reverse Location Is Valid-69',
+ 'zAddAssetAttr-Reverse Location Data-70',
+ 'ParentzGenAlbum-UUID-4QueryStart-71',
+ 'zGenAlbum-UUID-4QueryStart-72',
+ 'SWYConverszGenAlbum-UUID-4QueryStart-73',
+ 'ParentzGenAlbum-Cloud GUID-4QueryStart-74',
+ 'zGenAlbum-Cloud GUID-4QueryStart-75',
+ 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-76',
+ 'zCldShareAlbumInvRec-Album GUID-4QueryStart-77',
+ 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-78',
+ 'zGenAlbum-Project Render UUID-4QueryStart-79',
+ 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-80',
+ 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-81',
+ 'zGenAlbum-Cloud_Local_State-4QueryStart-82',
+ 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-83',
+ ('ParentzGenAlbum- Creation Date- 4QueryStart-84', 'datetime'),
+ ('zGenAlbum- Creation Date- 4QueryStart-85', 'datetime'),
+ ('SWYConverszGenAlbum- Creation Date- 4QueryStart-86', 'datetime'),
+ ('zGenAlbum- Cloud Creation Date- 4QueryStart-87', 'datetime'),
+ ('SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-88', 'datetime'),
+ ('zGenAlbum- Start Date- 4QueryStart-89', 'datetime'),
+ ('SWYConverszGenAlbum- Start Date- 4QueryStart-90', 'datetime'),
+ ('zGenAlbum- End Date- 4QueryStart-91', 'datetime'),
+ ('SWYConverszGenAlbum- End Date- 4QueryStart-92', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date- 4QueryStart-93', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-94', 'datetime'),
+ 'ParentzGenAlbum- Title- 4QueryStart-95',
+ 'zGenAlbum- Title-User&System Applied- 4QueryStart-96',
+ 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-97',
+ 'zGenAlbum-Import Session ID-SWY- 4QueryStart-98',
+ 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-99',
+ 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-100',
+ 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-101',
+ 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-102',
+ 'SWYConverszGenAlbum- Syndicate-4QueryStart-103',
+ 'zGenAlbum-zENT- Entity- 4QueryStart-104',
+ 'ParentzGenAlbum- Kind- 4QueryStart-105',
+ 'zGenAlbum-Album Kind- 4QueryStart-106',
+ 'SWYConverszGenAlbum-Album Kind- 4QueryStart-107',
+ 'AAAzCldMastMedData-zOPT-108',
+ 'zAddAssetAttr-Media Metadata Type-109',
+ 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-110',
+ 'AAAzCldMastMedData-Data-111',
+ 'CldMasterzCldMastMedData-zOPT-112',
+ 'zCldMast-Media Metadata Type-113',
+ 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-114',
+ 'CMzCldMastMedData-Data-115',
+ 'zAsset-Search Index Rebuild State-116',
+ 'zAddAssetAttr-Syndication History-117',
+ 'zMedAnlyAstAttr-Syndication Processing Version-118',
+ 'zMedAnlyAstAttr-Syndication Processing Value-119',
+ 'zAsset-Orientation-120',
+ 'zAddAssetAttr-Original Orientation-121',
+ 'zAsset-Kind-122',
+ 'zAsset-Kind-Sub-Type-123',
+ 'zAddAssetAttr-Cloud Kind Sub Type-124',
+ 'zAsset-Playback Style-125',
+ 'zAsset-Playback Variation-126',
+ 'zAsset-Video Duration-127',
+ 'zExtAttr-Duration-128',
+ 'zAsset-Video CP Duration-129',
+ 'zAddAssetAttr-Video CP Duration Time Scale-130',
+ 'zAsset-Video CP Visibility State-131',
+ 'zAddAssetAttr-Video CP Display Value-132',
+ 'zAddAssetAttr-Video CP Display Time Scale-133',
+ 'zIntResou-Datastore Class ID-134',
+ 'zAsset-Cloud Placeholder Kind-135',
+ 'zIntResou-Local Availability-136',
+ 'zIntResou-Local Availability Target-137',
+ 'zIntResou-Cloud Local State-138',
+ 'zIntResou-Remote Availability-139',
+ 'zIntResou-Remote Availability Target-140',
+ 'zIntResou-Transient Cloud Master-141',
+ 'zIntResou-Side Car Index-142',
+ 'zIntResou- File ID-143',
+ 'zIntResou-Version-144',
+ 'zAddAssetAttr- Original-File-Size-145',
+ 'zIntResou-Resource Type-146',
+ 'zIntResou-Datastore Sub-Type-147',
+ 'zIntResou-Cloud Source Type-148',
+ 'zIntResou-Data Length-149',
+ 'zIntResou-Recipe ID-150',
+ ('zIntResou-Cloud Last Prefetch Date-151', 'datetime'),
+ 'zIntResou-Cloud Prefetch Count-152',
+ ('zIntResou- Cloud-Last-OnDemand Download-Date-153', 'datetime'),
+ 'zIntResou-UniformTypeID_UTI_Conformance_Hint-154',
+ 'zIntResou-Compact-UTI-155',
+ 'zAsset-Uniform Type ID-156',
+ 'zAsset-Original Color Space-157',
+ 'zCldMast-Uniform_Type_ID-158',
+ 'zCldMast-Full Size JPEG Source-159',
+ 'zAsset-HDR Gain-160',
+ 'zAsset-zHDR_Type-161',
+ 'zExtAttr-Codec-162',
+ 'zIntResou-Codec Four Char Code Name-163',
+ 'zCldMast-Codec Name-164',
+ 'zCldMast-Video Frame Rate-165',
+ 'zCldMast-Placeholder State-166',
+ 'zAsset-Depth_Type-167',
+ 'zAsset-Avalanche UUID-4TableStart-168',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-169',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-170',
+ 'zAddAssetAttr-Cloud Recovery State-171',
+ 'zAddAssetAttr-Cloud State Recovery Attempts Count-172',
+ 'zAsset-Deferred Processing Needed-173',
+ 'zAsset-Video Deferred Processing Needed-174',
+ 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-175',
+ 'zAddAssetAttr-Deferred Processing Candidate Options-176',
+ 'zAsset-Has Adjustments-Camera-Effects-Filters-177',
+ 'zUnmAdj-UUID-4TableStart-178',
+ ('zAsset-Adjustment Timestamp-179', 'datetime'),
+ ('zUnmAdj-Adjustment Timestamp-180', 'datetime'),
+ 'zAddAssetAttr-Editor Bundle ID-181',
+ 'zUnmAdj-Editor Localized Name-182',
+ 'zUnmAdj-Adjustment Format ID-183',
+ 'zAddAssetAttr-Montage-184',
+ 'zUnmAdj-Adjustment Render Types-185',
+ 'zUnmAdj-Adjustment Format Version-186',
+ 'zUnmAdj-Adjustment Base Image Format-187',
+ 'zAsset-Favorite-188',
+ 'zAsset-Hidden-189',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-190',
+ ('zAsset-Trashed Date-191', 'datetime'),
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-192',
+ 'zAsset-Delete-Reason-193',
+ 'zIntResou-Trash State-194',
+ ('zIntResou-Trashed Date-195', 'datetime'),
+ 'zAsset-Cloud Delete State-196',
+ 'zIntResou-Cloud Delete State-197',
+ 'zAddAssetAttr-PTP Trashed State-198',
+ 'zIntResou-PTP Trashed State-199',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-200',
+ ('zMedAnlyAstAttr-Media Analysis Timestamp-201', 'datetime'),
+ ('zAsset-Analysis State Modification Date-202', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-203',
+ 'zAddAssetAttr- View Count-204',
+ 'zAddAssetAttr- Pending Play Count-205',
+ 'zAddAssetAttr- Play Count-206',
+ 'zAddAssetAttr- Pending Share Count-207',
+ 'zAddAssetAttr- Share Count-208',
+ 'zAddAssetAttr-Allowed for Analysis-209',
+ 'zAddAssetAttr-Scene Analysis Version-210',
+ 'zAddAssetAttr-Scene Analysis is From Preview-211',
+ ('zAddAssetAttr-Scene Analysis Timestamp-212', 'datetime'),
+ 'zAsset-Duplication Asset Visibility State-213',
+ 'zAddAssetAttr-Destination Asset Copy State-214',
+ 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-215',
+ 'zAddAssetAttr-Source Asset for Duplication Scope ID-216',
+ 'zCldMast-Source Master For Duplication Scope ID-217',
+ 'zAddAssetAttr-Source Asset For Duplication ID-218',
+ 'zCldMast-Source Master for Duplication ID-219',
+ 'zAddAssetAttr-Variation Suggestions States-220',
+ 'zAsset-High Frame Rate State-221',
+ 'zAsset-Video Key Frame Time Scale-222',
+ 'zAsset-Video Key Frame Value-223',
+ 'zExtAttr-ISO-224',
+ 'zExtAttr-Metering Mode-225',
+ 'zExtAttr-Sample Rate-226',
+ 'zExtAttr-Track Format-227',
+ 'zExtAttr-White Balance-228',
+ 'zExtAttr-Aperture-229',
+ 'zExtAttr-BitRate-230',
+ 'zExtAttr-Exposure Bias-231',
+ 'zExtAttr-Frames Per Second-232',
+ 'zExtAttr-Shutter Speed-233',
+ 'zExtAttr-Slush Scene Bias-234',
+ 'zExtAttr-Slush Version-235',
+ 'zExtAttr-Slush Preset-236',
+ 'zExtAttr-Slush Warm Bias-237',
+ 'zAsset-Height-238',
+ 'zAddAssetAttr-Original Height-239',
+ 'zIntResou-Unoriented Height-240',
+ 'zAsset-Width-241',
+ 'zAddAssetAttr-Original Width-242',
+ 'zIntResou-Unoriented Width-243',
+ 'zShare-Thumbnail Image Data-244',
+ 'SPLzShare-Thumbnail Image Data-245',
+ 'zAsset-Thumbnail Index-246',
+ 'zAddAssetAttr-Embedded Thumbnail Height-247',
+ 'zAddAssetAttr-Embedded Thumbnail Length-248',
+ 'zAddAssetAttr-Embedded Thumbnail Offset-249',
+ 'zAddAssetAttr-Embedded Thumbnail Width-250',
+ 'zAsset-Packed Acceptable Crop Rect-251',
+ 'zAsset-Packed Badge Attributes-252',
+ 'zAsset-Packed Preferred Crop Rect-253',
+ 'zAsset-Curation Score-254',
+ 'zAsset-Camera Processing Adjustment State-255',
+ 'zAsset-Depth Type-256',
+ 'zAsset-Is Magic Carpet-QuicktimeMOVfile-257',
+ 'zAddAssetAttr-Orig Resource Choice-258',
+ 'zAsset-Spatial Type-259',
+ 'zAddAssetAttr-Spatial Over Capture Group ID-260',
+ 'zAddAssetAttr-Place Annotation Data-261',
+ 'zAddAssetAttr-Distance Identity-262',
+ 'zAddAssetAttr-Edited IPTC Attributes-263',
+ 'zAssetDes-Long Description-264',
+ 'zAddAssetAttr-Asset Description-265',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-266',
+ 'zAddAssetAttr-Accessibility Description-267',
+ 'zAddAssetAttr-Photo Stream Tag ID-268',
+ 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-269',
+ ('zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-270', 'datetime'),
+ ('zCldFeedEnt-Entry Date-271', 'datetime'),
+ 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-272',
+ 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-273',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-274',
+ 'zCldFeedEnt-Entry Priority Number-275',
+ 'zCldFeedEnt-Entry Type Number-276',
+ 'zCldSharedComment-Cloud GUID-4TableStart-277',
+ ('zCldSharedComment-Date-278', 'datetime'),
+ ('zCldSharedComment-Comment Client Date-279', 'datetime'),
+ ('zAsset-Cloud Last Viewed Comment Date-280', 'datetime'),
+ 'zCldSharedComment-Type-281',
+ 'zCldSharedComment-Comment Text-282',
+ 'zCldSharedComment-Commenter Hashed Person ID-283',
+ 'zCldSharedComment-Batch Comment-284',
+ 'zCldSharedComment-Is a Caption-285',
+ 'zAsset-Cloud Has Comments by Me-286',
+ 'zCldSharedComment-Is My Comment-287',
+ 'zCldSharedComment-Is Deletable-288',
+ 'zAsset-Cloud Has Comments Conversation-289',
+ 'zAsset-Cloud Has Unseen Comments-290',
+ 'zCldSharedComment-Liked-291',
+ 'zAddAssetAttr-Share Type-292',
+ 'zAsset-Library Scope Share State- StillTesting-293',
+ 'zAsset-Active Library Scope Participation State-294',
+ 'zAddAssetAttr-Library Scope Asset Contributors To Update-295',
+ 'zShare-UUID-CMM-4TableStart-296',
+ 'SPLzShare-UUID-SPL-4TableStart-297',
+ 'zShare-zENT-CMM-298',
+ 'SPLzShare-zENT-SPL-299',
+ 'zSharePartic-z54SHARE-300',
+ 'SPLzSharePartic-z54SHARE-301',
+ 'zShare-Status-CMM-302',
+ 'SPLzShare-Status-SPL-303',
+ 'zShare-Scope Type-CMM-304',
+ 'SPLzShare-Scope Type-SPL-305',
+ 'zShare-Local Publish State-CMM-306',
+ 'SPLzShare-Local Publish State-SPL-307',
+ 'zShare-Public Permission-CMM-308',
+ 'SPLzShare-Public Permission-SPL-309',
+ 'zShare-Originating Scope ID-CMM-310',
+ 'SPLzShare-Originating Scope ID-SPL-311',
+ 'zShare-Scope ID-CMM-312',
+ 'SPLzShare-Scope ID-SPL-313',
+ 'zShare-Title-CMM-314',
+ 'SPLzShare-Title-SPL-315',
+ 'zShare-Share URL-CMM-316',
+ 'SPLzShare-Share URL-SPL-317',
+ ('zShare-Creation Date-CMM-318', 'datetime'),
+ ('SPLzShare-Creation Date-SPL-319', 'datetime'),
+ ('zShare-Start Date-CMM-320', 'datetime'),
+ ('SPLzShare-Start Date-SPL-321', 'datetime'),
+ ('zShare-End Date-CMM-322', 'datetime'),
+ ('SPLzShare-End Date-SPL-323', 'datetime'),
+ ('zShare-Expiry Date-CMM-324', 'datetime'),
+ ('SPLzShare-Expiry Date-SPL-325', 'datetime'),
+ 'zShare-Cloud Item Count-CMM-326',
+ 'SPLzShare-Cloud Item Count-SPL-327',
+ 'zShare-Asset Count-CMM-328',
+ 'SPLzShare-Asset Count-SPL-329',
+ 'zShare-Cloud Photo Count-CMM-330',
+ 'SPLzShare-Cloud Photo Count-SPL-331',
+ 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-332',
+ 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-333',
+ 'zShare-Photos Count-CMM-334',
+ 'SPLzShare-Photos Count-CMM-SPL-335',
+ 'zShare-Uploaded Photos Count-CMM-336',
+ 'SPLzShare-Uploaded Photos Count-SPL-337',
+ 'zShare-Cloud Video Count-CMM-338',
+ 'SPLzShare-Cloud Video Count-SPL-339',
+ 'zShare-Videos Count-CMM-340',
+ 'SPLzShare-Videos Count-SPL-341',
+ 'zShare-Uploaded Videos Count-CMM-342',
+ 'SPLzShare-Uploaded Videos Count-SPL-343',
+ 'zShare-Force Sync Attempted-CMM-344',
+ 'SPLzShare-Force Sync Attempted-SPL-345',
+ 'zShare-Cloud Local State-CMM-346',
+ 'SPLzShare-Cloud Local State-SPL-347',
+ 'zShare-Scope Syncing State-CMM-348',
+ 'SPLzShare-Scope Syncing State-SPL-349',
+ 'zShare-Auto Share Policy-CMM-350',
+ 'SPLzShare-Auto Share Policy-SPL-351',
+ 'zShare-Should Notify On Upload Completion-CMM-352',
+ 'SPLzShare-Should Notify On Upload Completion-SPL-353',
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-354',
+ 'zShare-Trashed State-CMM-355',
+ 'SPLzShare-Trashed State-SPL-356',
+ 'zShare-Cloud Delete State-CMM-357',
+ 'SPLzShare-Cloud Delete State-SPL-358',
+ ('zShare-Trashed Date-CMM-359', 'datetime'),
+ ('SPLzShare-Trashed Date-SPL-360', 'datetime'),
+ ('zShare-LastParticipant Asset Trash Notification Date-CMM-361', 'datetime'),
+ ('SPLzShare-LastParticipant Asset Trash Notification Date-SPL-362', 'datetime'),
+ ('zShare-Last Participant Asset Trash Notification View Date-CMM-363', 'datetime'),
+ ('SPLzShare-Last Participant Asset Trash Notification View Date-SPL-364', 'datetime'),
+ 'zShare-Exit Source-CMM-365',
+ 'SPLzShare-Exit Source-SPL-366',
+ 'zShare-SPL_Exit State-CMM-367',
+ 'SPLzShare-SPL_Exit State-SPL-368',
+ 'zShare-Exit Type-CMM-369',
+ 'SPLzShare-Exit Type-SPL-370',
+ 'zShare-Should Ignor Budgets-CMM-371',
+ 'SPLzShare-Should Ignor Budgets-SPL-372',
+ 'zShare-Preview State-CMM-373',
+ 'SPLzShare-Preview State-SPL-374',
+ 'zShare-Preview Data-CMM-375',
+ 'SPLzShare-Preview Data-SPL-376',
+ 'zShare-Rules-CMM-377',
+ 'SPLzShare-Rules-SPL-378',
+ 'zShare-Thumbnail Image Data-CMM-379',
+ 'SPLzShare-Thumbnail Image Data-SPL-380',
+ 'zShare-Participant Cloud Update State-CMM-381',
+ 'SPLzShare-Participant Cloud Update State-SPL-382',
+ 'zSharePartic-UUID-4TableStart-383',
+ 'SPLzSharePartic-UUID-4TableStart-384',
+ 'zSharePartic-Acceptance Status-385',
+ 'SPLzSharePartic-Acceptance Status-386',
+ 'zSharePartic-Is Current User-387',
+ 'SPLzSharePartic-Is Current User-388',
+ 'zSharePartic-Role-389',
+ 'SPLzSharePartic-Role-390',
+ 'zSharePartic-Premission-391',
+ 'SPLzSharePartic-Premission-392',
+ 'zSharePartic-Participant ID-393',
+ 'SPLzSharePartic-Participant ID-394',
+ 'zSharePartic-User ID-395',
+ 'SPLzSharePartic-User ID-396',
+ 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-397',
+ 'SPLzSharePartic-zPK-4TableStart-398',
+ 'zSharePartic-zPK-4TableStart-399',
+ 'zSharePartic-Email Address-400',
+ 'SPLzSharePartic-Email Address-401',
+ 'zSharePartic-Phone Number-402',
+ 'SPLzSharePartic-Phone Number-403',
+ 'zSharePartic-Exit State-404',
+ 'SPLzSharePartic-Exit State-405',
+ 'ParentzGenAlbum-UUID-4TableStart-406',
+ 'zGenAlbum-UUID-4TableStart-407',
+ 'SWYConverszGenAlbum-UUID-4TableStart-408',
+ 'ParentzGenAlbum-Cloud GUID-4TableStart-409',
+ 'zGenAlbum-Cloud GUID-4TableStart-410',
+ 'SWYConverszGenAlbum-Cloud GUID-4TableStart-411',
+ 'zCldShareAlbumInvRec-Album GUID-4TableStart-412',
+ 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-413',
+ 'zGenAlbum-Project Render UUID-4TableStart-414',
+ 'SWYConverszGenAlbum-Project Render UUID-4TableStart-415',
+ 'zAlbumList-Needs Reordering Number-416',
+ 'zGenAlbum-zENT- Entity-417',
+ 'ParentzGenAlbum-Kind-418',
+ 'zGenAlbum-Album Kind-419',
+ 'SWYConverszGenAlbum-Album Kind-420',
+ 'ParentzGenAlbum-Cloud-Local-State-421',
+ 'zGenAlbum-Cloud_Local_State-422',
+ 'SWYConverszGenAlbum-Cloud_Local_State-423',
+ 'ParentzGenAlbum- Title-424',
+ 'zGenAlbum- Title-User&System Applied-425',
+ 'SWYConverszGenAlbum- Title -User&System Applied-426',
+ 'zGenAlbum-Import Session ID-SWY-427',
+ 'zAsset- Conversation= zGenAlbum_zPK-428',
+ 'SWYConverszGenAlbum- Import Session ID-SWY-429',
+ 'zGenAlbum-Imported by Bundle Identifier-430',
+ 'SWYzGenAlbum-Imported by Bundle Identifier-431',
+ 'SWYConverszGenAlbum- Syndicate-432',
+ ('ParentzGenAlbum-Creation Date-433', 'datetime'),
+ ('zGenAlbum-Creation Date-434', 'datetime'),
+ ('SWYConverszGenAlbum-Creation Date-435', 'datetime'),
+ ('zGenAlbum-Cloud Creation Date-436', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Creation Date-437', 'datetime'),
+ ('zGenAlbum-Start Date-438', 'datetime'),
+ ('SWYConverszGenAlbum-Start Date-439', 'datetime'),
+ ('zGenAlbum-End Date-440', 'datetime'),
+ ('SWYConverszGenAlbum-End Date-441', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-442', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Subscription Date-443', 'datetime'),
+ 'ParentzGenAlbum-Pending Items Count-444',
+ 'zGenAlbum-Pending Items Count-445',
+ 'SWYConverszGenAlbum-Pending Items Count-446',
+ 'ParentzGenAlbum-Pending Items Type-447',
+ 'zGenAlbum-Pending Items Type-448',
+ 'SWYConverszGenAlbum-Pending Items Type-449',
+ 'zGenAlbum- Cached Photos Count-450',
+ 'SWYConverszGenAlbum- Cached Photos Count-451',
+ 'zGenAlbum- Cached Videos Count-452',
+ 'SWYConverszGenAlbum- Cached Videos Count-453',
+ 'zGenAlbum- Cached Count-454',
+ 'SWYConverszGenAlbum- Cached Count-455',
+ 'ParentzGenAlbum-Sync Event Order Key-456',
+ 'zGenAlbum-Sync Event Order Key-457',
+ 'SWYConverszGenAlbum-Sync Event Order Key-458',
+ 'zGenAlbum-Has Unseen Content-459',
+ 'SWYConverszGenAlbum-Has Unseen Content-460',
+ 'zGenAlbum-Unseen Asset Count-461',
+ 'SWYConverszGenAlbum-Unseen Asset Count-462',
+ 'zGenAlbum-is Owned-463',
+ 'SWYConverszGenAlbum-is Owned-464',
+ 'zGenAlbum-Cloud Relationship State-465',
+ 'SWYConverszGenAlbum-Cloud Relationship State-466',
+ 'zGenAlbum-Cloud Relationship State Local-467',
+ 'SWYConverszGenAlbum-Cloud Relationship State Local-468',
+ 'zGenAlbum-Cloud Owner Mail Key-469',
+ 'SWYConverszGenAlbum-Cloud Owner Mail Key-470',
+ 'zGenAlbum-Cloud Owner Frist Name-471',
+ 'SWYConverszGenAlbum-Cloud Owner Frist Name-472',
+ 'zGenAlbum-Cloud Owner Last Name-473',
+ 'SWYConverszGenAlbum-Cloud Owner Last Name-474',
+ 'zGenAlbum-Cloud Owner Full Name-475',
+ 'SWYConverszGenAlbum-Cloud Owner Full Name-476',
+ 'zGenAlbum-Cloud Person ID-477',
+ 'SWYConverszGenAlbum-Cloud Person ID-478',
+ 'zAsset-Cloud Owner Hashed Person ID-479',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-480',
+ 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-481',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-482',
+ 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-483',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-484',
+ 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-485',
+ 'zGenAlbum-Cloud Album Sub Type-486',
+ 'SWYConverszGenAlbum-Cloud Album Sub Type-487',
+ ('zGenAlbum-Cloud Contribution Date-488', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Contribution Date-489', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-490', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Last Interesting Change Date-491', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-492',
+ 'SWYConverszGenAlbum-Cloud Notification Enabled-493',
+ 'ParentzGenAlbum-Pinned-494',
+ 'zGenAlbum-Pinned-495',
+ 'SWYConverszGenAlbum-Pinned-496',
+ 'ParentzGenAlbum-Custom Sort Key-497',
+ 'zGenAlbum-Custom Sort Key-498',
+ 'SWYConverszGenAlbum-Custom Sort Key-499',
+ 'ParentzGenAlbum-Custom Sort Ascending-500',
+ 'zGenAlbum-Custom Sort Ascending-501',
+ 'SWYConverszGenAlbum-Custom Sort Ascending-502',
+ 'ParentzGenAlbum-Is Prototype-503',
+ 'zGenAlbum-Is Prototype-504',
+ 'SWYConverszGenAlbum-Is Prototype-505',
+ 'ParentzGenAlbum-Project Document Type-506',
+ 'zGenAlbum-Project Document Type-507',
+ 'SWYConverszGenAlbum-Project Document Type-508',
+ 'ParentzGenAlbum-Custom Query Type-509',
+ 'zGenAlbum-Custom Query Type-510',
+ 'SWYConverszGenAlbum-Custom Query Type-511',
+ 'ParentzGenAlbum-Trashed State-512',
+ ('ParentzGenAlbum-Trash Date-513', 'datetime'),
+ 'zGenAlbum-Trashed State-514',
+ ('zGenAlbum-Trash Date-515', 'datetime'),
+ 'SWYConverszGenAlbum-Trashed State-516',
+ ('SWYConverszGenAlbum-Trash Date-517', 'datetime'),
+ 'ParentzGenAlbum-Cloud Delete State-518',
+ 'zGenAlbum-Cloud Delete State-519',
+ 'SWYConverszGenAlbum-Cloud Delete State-520',
+ 'zGenAlbum-Cloud Owner Whitelisted-521',
+ 'SWYConverszGenAlbum-Cloud Owner Whitelisted-522',
+ 'zGenAlbum-Cloud Local Public URL Enabled-523',
+ 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-524',
+ 'zGenAlbum-Cloud Public URL Enabled-525',
+ 'zGenAlbum-Public URL-526',
+ 'SWYConverszGenAlbum-Cloud Public URL Enabled-527',
+ 'SWYConverszGenAlbum-Public URL-528',
+ 'zGenAlbum-Key Asset Face Thumb Index-529',
+ 'SWYConverszGenAlbum-Key Asset Face Thumb Index-530',
+ 'zGenAlbum-Project Text Extension ID-531',
+ 'SWYConverszGenAlbum-Project Text Extension ID-532',
+ 'zGenAlbum-User Query Data-533',
+ 'SWYConverszGenAlbum-User Query Data-534',
+ 'zGenAlbum-Custom Query Parameters-535',
+ 'SWYConverszGenAlbum-Custom Query Parameters-536',
+ 'zGenAlbum-Project Data-537',
+ 'SWYConverszGenAlbum-Project Data-538',
+ 'zGenAlbum-Search Index Rebuild State-539',
+ 'SWYConverszGenAlbum-Search Index Rebuild State-540',
+ 'zGenAlbum-Duplicate Type-541',
+ 'SWYConverszGenAlbum-Duplicate Type-542',
+ 'zGenAlbum-Privacy State-543',
+ 'SWYConverszGenAlbum-Privacy State-544',
+ 'zCldShareAlbumInvRec-zUUID-4TableStart-545',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-546',
+ 'zCldShareAlbumInvRec-Invitation State Local-547',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-548',
+ ('zCldShareAlbumInvRec-Subscription Date-549', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-550',
+ 'zCldShareAlbumInvRec-Invitee Last Name-551',
+ 'zCldShareAlbumInvRec-Invitee Full Name-552',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-553',
+ 'zCldShareAlbumInvRec-Invitee Email Key-554',
+ 'zGenAlbum-Key Asset Face ID-555',
+ 'zFaceCrop-Face Area Points-556',
+ 'zAsset-Face Adjustment Version-557',
+ 'zAddAssetAttr-Face Analysis Version-558',
+ 'zDetFace-Asset Visible-559',
+ 'zPerson-Face Count-560',
+ 'zDetFace-Face Crop-561',
+ 'zDetFace-Face Algorithm Version-562',
+ 'zDetFace-Adjustment Version-563',
+ 'zDetFace-UUID-4TableStart-564',
+ 'zPerson-Person UUID-4TableStart-565',
+ 'zPerson - MD ID-566',
+ 'zPerson - Asset Sort Order-567',
+ 'zDetFace-Confirmed Face Crop Generation State-568',
+ 'zDetFace-Manual-569',
+ 'zDetFace-Detection Type-570',
+ 'zPerson-Detection Type-571',
+ 'zDetFace-VIP Model Type-572',
+ 'zDetFace-Name Source-573',
+ 'zDetFace-Cloud Name Source-574',
+ 'zPerson-Merge Candidate Confidence-575',
+ 'zPerson-Person URI-576',
+ 'zPerson-Display Name-577',
+ 'zPerson-Full Name-578',
+ 'zPerson-Cloud Verified Type-579',
+ 'zFaceCrop-State-580',
+ 'zFaceCrop-Type-581',
+ 'zFaceCrop-UUID-4TableStart-582',
+ 'zPerson-Type-583',
+ 'zPerson-Verified Type-584',
+ 'zPerson-Gender Type-585',
+ 'zDetFace-Gender Type-586',
+ 'zDetFace-Center X-587',
+ 'zDetFace-Center Y-588',
+ 'zPerson-Age Type Estimate-589',
+ 'zDetFace-Age Type Estimate-590',
+ 'zDetFace-Ethnicity Type-591',
+ 'zDetFace-Skin Tone Type-592',
+ 'zDetFace-Hair Type-593',
+ 'zDetFace-Hair Color Type-594',
+ 'zDetFace-Head Gear Type-595',
+ 'zDetFace-Facial Hair Type-596',
+ 'zDetFace-Has Face Mask-597',
+ 'zDetFace-Pose Type-598',
+ 'zDetFace-Face Expression Type-599',
+ 'zDetFace-Has Smile-600',
+ 'zDetFace-Smile Type-601',
+ 'zDetFace-Lip Makeup Type-602',
+ 'zDetFace-Eyes State-603',
+ 'zDetFace-Is Left Eye Closed-604',
+ 'zDetFace-Is Right Eye Closed-605',
+ 'zDetFace-Gaze Center X-606',
+ 'zDetFace-Gaze Center Y-607',
+ 'zDetFace-Face Gaze Type-608',
+ 'zDetFace-Eye Glasses Type-609',
+ 'zDetFace-Eye Makeup Type-610',
+ 'zDetFace-Cluster Squence Number Key-611',
+ 'zDetFace-Grouping ID-612',
+ 'zDetFace-Master ID-613',
+ 'zDetFace-Quality-614',
+ 'zDetFace-Quality Measure-615',
+ 'zDetFace-Source Height-616',
+ 'zDetFace-Source Width-617',
+ 'zDetFace-Hidden-Asset Hidden-618',
+ 'zDetFace-In Trash-Recently Deleted-619',
+ 'zDetFace-Cloud Local State-620',
+ 'zDetFace-Training Type-621',
+ 'zDetFace.Pose Yaw-622',
+ 'zDetFace-Body Center X-623',
+ 'zDetFace-Body Center Y-624',
+ 'zDetFace-Body Height-625',
+ 'zDetFace-Body Width-626',
+ 'zDetFace-Roll-627',
+ 'zDetFace-Size-628',
+ 'zDetFace-Cluster Squence Number-629',
+ 'zDetFace-Blur Score-630',
+ 'zDetFacePrint-Face Print Version-631',
+ 'zMedAnlyAstAttr-Face Count-632',
+ 'zDetFaceGroup-UUID-4TableStart-633',
+ 'zDetFaceGroup-Person Builder State-634',
+ 'zDetFaceGroup-UnNamed Face Count-635',
+ 'zPerson-In Person Naming Model-636',
+ 'zPerson-Key Face Pick Source Key-637',
+ 'zPerson-Manual Order Key-638',
+ 'zPerson-Question Type-639',
+ 'zPerson-Suggested For Client Type-640',
+ 'zPerson-Merge Target Person-641',
+ 'zPerson-Cloud Local State-642',
+ 'zFaceCrop-Cloud Local State-643',
+ 'zFaceCrop-Cloud Type-644',
+ 'zPerson-Cloud Delete State-645',
+ 'zFaceCrop-Cloud Delete State-646',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-647',
+ 'zAsset-Highlight Visibility Score-648',
+ 'zMemory-UUID-4TableStart-649',
+ 'zMemory-AssetListPredicte-650',
+ 'zMemory-Score-651',
+ 'zMemory-SubTitle-652',
+ 'zMemory-Title-653',
+ 'zMemory-Category-654',
+ 'zMemory-SubCategory-655',
+ ('zMemory-Creation Date-656', 'datetime'),
+ ('zMemory-Last Enrichment Date-657', 'datetime'),
+ 'zMemory-User Action Options-658',
+ 'zMemory-Favorite Memory-659',
+ 'zMemory-View Count-660',
+ 'zMemory-Play Count-661',
+ 'zMemory-Rejected-662',
+ 'zMemory-Share Count-663',
+ 'zMemory-Sharing Composition-664',
+ ('zMemory-Last Movie Play Date-665', 'datetime'),
+ ('zMemory-Last Viewed Date-666', 'datetime'),
+ 'zMemory-Pending Play Count Memory-667',
+ 'zMemory-Pending Share Count Memory-668',
+ 'zMemory-Pending View Count Memory-669',
+ 'zMemory-Pending State-670',
+ 'zMemory-Featured State-671',
+ 'zMemory-Photos Graph Version-672',
+ 'zMemory-Graph Memory Identifier-673',
+ 'zMemory-Notification State-674',
+ 'zMemory-Cloud Local State-675',
+ 'zMemory-Cloud Delete State-676',
+ 'zMemory-Story Color Grade Kind-677',
+ 'zMemory-Story Serialized Title Category-678',
+ 'zMemory-Syndicated Content State-679',
+ 'zMemory-Search Index Rebuild State-680',
+ 'zMemory-Black Listed Feature-681',
+ 'zMoment-UUID-4TableStart-682',
+ 'zMoment-Aggregation Score-683',
+ ('zMoment-Start Date-684', 'datetime'),
+ ('zMoment-Representative Date-685', 'datetime'),
+ 'zMoment-Timezone Offset-686',
+ ('zMoment-Modification Date-687', 'datetime'),
+ ('zMoment-End Date-688', 'datetime'),
+ 'zMoment-SubTitle-689',
+ 'zMoment-Title-690',
+ 'zMoment-Originator State-691',
+ 'zMoment-Sharing Composition-692',
+ 'zMoment-Cached Count Shared-693',
+ 'zMoment-Processed Location-694',
+ 'zMoment-Approx Latitude-695',
+ 'zMoment-Approx Longitude-696',
+ 'zMoment-GPS Horizontal Accuracy-697',
+ 'zMoment-Cache Count-698',
+ 'zMoment-Cached Photos Count-699',
+ 'zMoment-Cached Videos Count-700',
+ 'zMoment-Trashed State-701',
+ 'SBKAzSugg-UUID-4TableStart-702',
+ 'SBKAzSugg-Suggestion Context-703',
+ 'SBKAzSugg-Sharing Composition-704',
+ ('SBKAzSugg-Start Date-705', 'datetime'),
+ 'SBKAzSugg-State-706',
+ 'SBKAzSugg-Featured State-707',
+ 'SBKAzSugg- Available Features-708',
+ 'SBKAzSugg-Notification State-709',
+ ('SBKAzSugg-Creation Date-710', 'datetime'),
+ ('SBKAzSugg-End Date-711', 'datetime'),
+ ('SBKAzSugg-Activation Date-712', 'datetime'),
+ ('SBKAzSugg-Expunge Date-713', 'datetime'),
+ ('SBKAzSugg-Relevant Until Date-714', 'datetime'),
+ 'SBKAzSugg-Title-715',
+ 'SBKAzSugg-Sub Title-716',
+ 'SBKAzSugg-Cached Count-717',
+ 'SBKAzSugg-Cahed Photos Count-718',
+ 'SBKAzSugg-Cached Videos Count-719',
+ 'SBKAzSugg-Type-720',
+ 'SBKAzSugg-Sub Type-721',
+ 'SBKAzSugg-Action Data-722',
+ 'SBKAzSugg-Version-723',
+ 'SBKAzSugg-Cloud Local State-724',
+ 'SBKAzSugg-Cloud Delete State-725',
+ 'SBRAzSugg-UUID-4TableStart-726',
+ 'SBRAzSugg-Suggestion Context-727',
+ 'SBRAzSugg-Sharing Composition-728',
+ ('SBRAzSugg-Start Date-729', 'datetime'),
+ 'SBRAzSugg-State-730',
+ 'SBRAzSugg-Featured State-731',
+ 'SBRAzSugg- Available Features-732',
+ 'SBRAzSugg-Notification State-733',
+ ('SBRAzSugg-Creation Date-734', 'datetime'),
+ ('SBRAzSugg-End Date-735', 'datetime'),
+ ('SBRAzSugg-Activation Date-736', 'datetime'),
+ ('SBRAzSugg-Expunge Date-737', 'datetime'),
+ ('SBRAzSugg-Relevant Until Date-738', 'datetime'),
+ 'SBRAzSugg-Title-739',
+ 'SBRAzSugg-Sub Title-740',
+ 'SBRAzSugg-Cached Count-741',
+ 'SBRAzSugg-Cahed Photos Count-742',
+ 'SBRAzSugg-Cached Videos Count-743',
+ 'SBRAzSugg-Type-744',
+ 'SBRAzSugg-Sub Type-745',
+ 'SBRAzSugg-Action Data-746',
+ 'SBRAzSugg-Version-747',
+ 'SBRAzSugg-Cloud Local State-748',
+ 'SBRAzSugg-Cloud Delete State-749',
+ 'zMedAnlyAstAttr-Media Analysis Version-750',
+ 'zMedAnlyAstAttr-Audio Classification-751',
+ 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-752',
+ 'zMedAnlyAstAttr-Best Video Range Start Time Scale-753',
+ 'zMedAnlyAstAttr-Best Video Range Duration Value-754',
+ 'zMedAnlyAstAttr-Best Video Range Start Value-755',
+ 'zMedAnlyAstAttr-Packed Best Playback Rect-756',
+ 'zMedAnlyAstAttr-Activity Score-757',
+ 'zMedAnlyAstAttr-Video Score-758',
+ 'zMedAnlyAstAttr-Audio Score-759',
+ 'zMedAnlyAstAttr-Wallpaper Score-760',
+ 'zMedAnlyAstAttr-AutoPlay Suggestion Score-761',
+ 'zMedAnlyAstAttr-Blurriness Score-762',
+ 'zMedAnlyAstAttr-Exposure Score-763',
+ 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-764',
+ 'zMedAnlyAstAttr-Probable Rotation Direction-765',
+ 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-766',
+ 'zAssetAnalyState-Asset UUID-4TableStart-767',
+ 'zAssetAnalyState-Analyisis State-768',
+ 'zAssetAnalyState-Worker Flags-769',
+ 'zAssetAnalyState-Worker Type-770',
+ ('zAssetAnalyState-Ignore Until Date-771', 'datetime'),
+ ('zAssetAnalyState-Last Ignored Date-772', 'datetime'),
+ ('zAssetAnalyState-Sort Token-773', 'datetime'),
+ 'zMedAnlyAstAttr-Character Recognition Attr-774',
+ 'zCharRecogAttr-Algorithm Version-775',
+ 'zCharRecogAttr-Adjustment Version-776',
+ 'zMedAnlyAstAttr-Visual Search Attributes-777',
+ 'zVisualSearchAttr-Algorithm Version-778',
+ 'zVisualSearchAttr-Adjustment Version-779',
+ 'zVisualSearchAttr - Sticker Confidence Algorithm Version-780',
+ 'zVisualSearchAttr - Sticker Confidence Score-781',
+ 'zAsset-Sticker Confidence Score-782',
+ 'zAsset-Overall Aesthetic Score-783',
+ 'zCompAssetAttr-Behavioral Score-784',
+ 'zCompAssetAttr-Failure Score zCompAssetAttr-785',
+ 'zCompAssetAttr-Harmonious Color Score-786',
+ 'zCompAssetAttr-Immersiveness Score-787',
+ 'zCompAssetAttr-Interaction Score-788',
+ 'zCompAssetAttr-Intersting Subject Score-789',
+ 'zCompAssetAttr-Intrusive Object Presence Score-790',
+ 'zCompAssetAttr-Lively Color Score-791',
+ 'zCompAssetAttr-Low Light-792',
+ 'zCompAssetAttr-Noise Score-793',
+ 'zCompAssetAttr-Pleasant Camera Tilt Score-794',
+ 'zCompAssetAttr-Pleasant Composition Score-795',
+ 'zCompAssetAttr-Pleasant Lighting Score-796',
+ 'zCompAssetAttr-Pleasant Pattern Score-797',
+ 'zCompAssetAttr-Pleasant Perspective Score-798',
+ 'zCompAssetAttr-Pleasant Post Processing Score-799',
+ 'zCompAssetAttr-Pleasant Reflection Score-800',
+ 'zCompAssetAttrPleasant Symmetry Score-801',
+ 'zCompAssetAttr-Sharply Focused Subject Score-802',
+ 'zCompAssetAttr-Tastfully Blurred Score-803',
+ 'zCompAssetAttr-Well Chosen Subject Score-804',
+ 'zCompAssetAttr-Well Framed Subject Score-805',
+ 'zCompAssetAttr-Well Timeed Shot Score-806',
+ 'zCldRes-Asset UUID-4TableStart-807',
+ 'zCldRes-Cloud Local State-808',
+ 'zCldRes-File Size-809',
+ 'zCldRes-Height-810',
+ 'zCldRes-Is Available-811',
+ 'zCldRes-Is Locally Available-812',
+ 'zCldRes-Prefetch Count-813',
+ 'zCldRes-Source Type-814',
+ 'zCldRes-Type-815',
+ 'zCldRes-Width-816',
+ ('zCldRes-Date Created-817', 'datetime'),
+ ('zCldRes-Last OnDemand Download Date-818', 'datetime'),
+ ('zCldRes-Last Prefetch Date-819', 'datetime'),
+ 'zCldRes-Prunedat-820',
+ 'zCldRes-File Path-821',
+ 'zCldRes-Fingerprint-822',
+ 'zCldRes-Item ID-823',
+ 'zCldRes-UniID-824',
+ 'zUserFeedback-UUID-4TableStart-825',
+ 'zUserFeedback-Feature-826',
+ 'zUserFeedback-Type-827',
+ ('zUserFeedback-Last Modified Date-828', 'datetime'),
+ 'zUserFeedback-Context-829',
+ 'zUserFeedback-Cloud Local State-830',
+ 'zUserFeedback-Cloud Delete State-831',
+ 'zUserFeedback - Creation Type-832',
+ 'zAddAssetAttr-zPK-833',
+ 'zAddAssetAttr-zENT-834',
+ 'ZAddAssetAttr-zOPT-835',
+ 'zAddAssetAttr-zAsset= zAsset_zPK-836',
+ 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-837',
+ 'zAddAssetAttr-Master Fingerprint-838',
+ 'zAddAssetAttr-Public Global UUID-839',
+ 'zAddAssetAttr-Deferred Photo Identifier-840',
+ 'zAddAssetAttr-Original Assets UUID-841',
+ 'zAddAssetAttr-Import Session ID-842',
+ 'zAddAssetAttr-Originating Asset Identifier-843',
+ 'zAddAssetAttr.Adjusted Fingerprint-844',
+ 'zAlbumList-zPK= Album List Key-845',
+ 'zAlbumList-zENT-846',
+ 'zAlbumList-zOPT-847',
+ 'zAlbumList-ID Key-848',
+ 'zAlbumList-UUID-849',
+ 'zAsset-zPK-850',
+ 'zAsset-zENT-851',
+ 'zAsset-zOPT-852',
+ 'zAsset-Master= zCldMast-zPK-853',
+ 'zAsset-Extended Attributes= zExtAttr-zPK-854',
+ 'zAsset-Import Session Key-855',
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-856',
+ 'zAsset-Photo Analysis Attributes Key-857',
+ 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-858',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-859',
+ 'zAsset-Moment Share Key= zShare-zPK-860',
+ 'zAsset-zMoment Key= zMoment-zPK-861',
+ 'zAsset-Computed Attributes Asset Key-862',
+ 'zAsset-Highlight Being Assets-HBA Key-863',
+ 'zAsset-Highlight Being Extended Assets-HBEA Key-864',
+ 'zAsset-Highlight Being Key Asset Private-HBKAP Key-865',
+ 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-866',
+ 'zAsset-Highligh Being Summary Assets-HBSA Key-867',
+ 'zAsset-Day Group Highlight Being Assets-DGHBA Key-868',
+ 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-869',
+ 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-870',
+ 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-871',
+ 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-872',
+ 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-873',
+ 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-874',
+ 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-875',
+ 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-876',
+ 'zAsset-Promotion Score-877',
+ 'zAsset-Iconic Score-878',
+ 'zAsset-Media Analysis Attributes Key-879',
+ 'zAsset-Media Group UUID-880',
+ 'zAsset-UUID = store.cloudphotodb-881',
+ 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-882',
+ 'zAsset.Cloud Collection GUID-883',
+ 'zAsset-Avalanche UUID-884',
+ 'zAssetAnalyState-zPK-885',
+ 'zAssetAnalyState-zEnt-886',
+ 'zAssetAnalyState-zOpt-887',
+ 'zAssetAnalyState-Asset= zAsset-zPK-888',
+ 'zAssetAnalyState-Asset UUID-889',
+ 'zAsstContrib-zPK-890',
+ 'zAsstContrib-zEnt-891',
+ 'zAsstContrib-zOpt-892',
+ 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-893',
+ 'zAsstContrib-Participant= zSharePartic-zPK-894',
+ 'zAssetDes-zPK-895',
+ 'zAssetDes-zENT-896',
+ 'zAssetDes-zOPT-897',
+ 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-898',
+ 'zCharRecogAttr-zPK-899',
+ 'zCharRecogAttr-zENT-900',
+ 'zCharRecogAttr-zOPT-901',
+ 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-902',
+ 'zCldFeedEnt-zPK= zCldShared keys-903',
+ 'zCldFeedEnt-zENT-904',
+ 'zCldFeedEnt-zOPT-905',
+ 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-906',
+ 'zCldFeedEnt-Entry Invitation Record GUID-907',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-908',
+ 'zCldMast-zPK= zAsset-Master-909',
+ 'zCldMast-zENT-910',
+ 'zCldMast-zOPT-911',
+ 'zCldMast-Moment Share Key= zShare-zPK-912',
+ 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-913',
+ 'zCldMast-Originating Asset ID-914',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-915',
+ 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-916',
+ 'CMzCldMastMedData-zENT-917',
+ 'CMzCldMastMedData-zOPT-918',
+ 'CMzCldMastMedData-CldMast= zCldMast-zPK-919',
+ 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-920',
+ 'AAAzCldMastMedData-zENT-921',
+ 'AAAzCldMastMedData-zOPT-922',
+ 'AAAzCldMastMedData-CldMast key-923',
+ 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-924',
+ 'zCldRes-zPK-925',
+ 'zCldRes-zENT-926',
+ 'zCldRes-zOPT-927',
+ 'zCldRes-Asset= zAsset-zPK-928',
+ 'zCldRes-Cloud Master= zCldMast-zPK-929',
+ 'zCldRes-Asset UUID-930',
+ 'zCldShareAlbumInvRec-zPK-931',
+ 'zCldShareAlbumInvRec-zEnt-932',
+ 'zCldShareAlbumInvRec-zOpt-933',
+ 'zCldShareAlbumInvRec-Album Key-934',
+ 'zCldShareAlbumInvRec-FOK Album Key-935',
+ 'zCldShareAlbumInvRec-Album GUID-936',
+ 'zCldShareAlbumInvRec-zUUID-937',
+ 'zCldShareAlbumInvRec-Cloud GUID-938',
+ 'zCldSharedComment-zPK-939',
+ 'zCldSharedComment-zENT-940',
+ 'zCldSharedComment-zOPT-941',
+ 'zCldSharedComment-Commented Asset Key= zAsset-zPK-942',
+ 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-943',
+ 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-944',
+ 'zCldSharedComment-Liked Asset Key= zAsset-zPK-945',
+ 'zCldSharedComment-CldFeedLikeCommentEntry Key-946',
+ 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-947',
+ 'zCldSharedComment-Cloud GUID-948',
+ 'zCompAssetAttr-zPK-949',
+ 'zCompAssetAttr-zEnt-950',
+ 'zCompAssetAttr-zOpt-951',
+ 'zCompAssetAttr-Asset Key-952',
+ 'zDetFace-zPK-953',
+ 'zDetFace-zEnt-954',
+ 'zDetFace.zOpt-955',
+ 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face-956',
+ 'zDetFace-PersonForFace= zPerson-zPK-957',
+ 'zDetFace-Person Being Key Face-958',
+ 'zDetFace-Face Print-959',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-960',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-961',
+ 'zDetFace-UUID-962',
+ 'zDetFaceGroup-zPK-963',
+ 'zDetFaceGroup-zENT-964',
+ 'zDetFaceGroup-zOPT-965',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-966',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-967',
+ 'zDetFaceGroup-UUID-968',
+ 'zDetFacePrint-zPK-969',
+ 'zDetFacePrint-zEnt-970',
+ 'zDetFacePrint-zOpt-971',
+ 'zDetFacePrint-Face Key-972',
+ 'zExtAttr-zPK= zAsset-zExtendedAttributes-973',
+ 'zExtAttr-zENT-974',
+ 'zExtAttr-zOPT-975',
+ 'zExtAttr-Asset Key-976',
+ 'zFaceCrop-zPK-977',
+ 'zFaceCrop-zEnt-978',
+ 'zFaceCrop-zOpt-979',
+ 'zFaceCrop-Asset Key-980',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-981',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-982',
+ 'zFaceCrop-Face Key-983',
+ 'zFaceCrop-UUID-984',
+ 'zGenAlbum-zPK=26AlbumLists= 26Albums-985',
+ 'zGenAlbum-zENT-986',
+ 'zGenAlbum-zOpt-987',
+ 'zGenAlbum-Key Asset-Key zAsset-zPK-988',
+ 'zGenAlbum-Secondary Key Asset-989',
+ 'zGenAlbum-Tertiary Key Asset-990',
+ 'zGenAlbum-Custom Key Asset-991',
+ 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-992',
+ 'zGenAlbum-FOK Parent Folder-993',
+ 'zGenAlbum-zSyndicate-994',
+ 'zGenAlbum-UUID-995',
+ 'SWYConverszGenAlbum-UUID-996',
+ 'zGenAlbum-Cloud_GUID = store.cloudphotodb-997',
+ 'SWYConverszGenAlbum-Cloud GUID-998',
+ 'zGenAlbum-Project Render UUID-999',
+ 'SWYConverszGenAlbum-Project Render UUID-1000',
+ 'zIntResou-zPK-1001',
+ 'zIntResou-zENT-1002',
+ 'zIntResou-zOPT-1003',
+ 'zIntResou-Asset= zAsset_zPK-1004',
+ 'zIntResou-Fingerprint-1005',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-1006',
+ 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1007',
+ 'zMedAnlyAstAttr-zEnt-1008',
+ 'zMedAnlyAstAttr-zOpt-1009',
+ 'zMedAnlyAstAttr-Asset= zAsset-zPK-1010',
+ 'zMemory-zPK-1011',
+ 'zMemory-zENT-1012',
+ 'zMemory-zOPT-1013',
+ 'zMemory-Key Asset= zAsset-zPK-1014',
+ 'zMemory-UUID-1015',
+ 'zMoment-zPK-1016',
+ 'zMoment-zENT-1017',
+ 'zMoment-zOPT-1018',
+ 'zMoment-Highlight Key-1019',
+ 'zMoment-UUID-1020',
+ 'zPerson-zPK=zDetFace-Person-1021',
+ 'zPerson-zEnt-1022',
+ 'zPerson-zOpt-1023',
+ 'zPerson-Share Participant= zSharePartic-zPK-1024',
+ 'zPerson-KeyFace=zDetFace-zPK-1025',
+ 'zPerson-Assoc Face Group Key-1026',
+ 'zPerson-Person UUID-1027',
+ 'zPhotoAnalysisAssetAttr-zPK-1028',
+ 'zPhotoAnalysisAssetAttr-zEnt-1029',
+ 'zPhotoAnalysisAssetAttr-zOpt-1030',
+ 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1031',
+ 'zSceneP-zPK-1032',
+ 'zSceneP-zENT-1033',
+ 'zSceneP-zOPT-1034',
+ 'zShare-zPK-1035',
+ 'zShare-zENT-1036',
+ 'zShare-zOPT-1037',
+ 'zShare-UUID-1038',
+ 'SPLzShare-UUID-1039',
+ 'zShare-Scope ID = store.cloudphotodb-1040',
+ 'zSharePartic-zPK-1041',
+ 'zSharePartic-zENT-1042',
+ 'zSharePartic-zOPT-1043',
+ 'zSharePartic-Share Key= zShare-zPK-1044',
+ 'zSharePartic-Person= zPerson-zPK-1045',
+ 'zSharePartic-UUID-1046',
+ 'SBKAzSugg-zPK-1047',
+ 'SBKAzSugg-zENT-1048',
+ 'SBKAzSugg-zOPT-1049',
+ 'SBKAzSugg-UUID-1050',
+ 'SBRAzSugg-zPK-1051',
+ 'SBRAzSugg-zENT-1052',
+ 'SBRAzSugg-zOPT-1053',
+ 'SBRAzSugg-UUID-1054',
+ 'z3SuggBRA-3RepAssets1-1055',
+ 'z3SuggBRA-59SuggBeingRepAssets-1056',
+ 'z3SuggBKA-59SuggBeingKeyAssets= zSugg-zPK-1057',
+ 'z3SuggBKA-3KeyAssets= zAsset-zPK-1058',
+ 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1059',
+ 'zUnmAdj-zOPT-1060',
+ 'zUnmAdj-zENT-1061',
+ 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1062',
+ 'zUnmAdj-UUID-1063',
+ 'zUnmAdj-Other Adjustments Fingerprint-1064',
+ 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1065',
+ 'zUserFeedback-zPK-1066',
+ 'zUserFeedback-zENT-1067',
+ 'zUserFeedback-zOPT-1068',
+ 'zUserFeedback-Person= zPerson-zPK-1069',
+ 'zUserFeedback-Memory= zMemory-zPK-1070',
+ 'zUserFeedback-UUID-1071',
+ 'zVisualSearchAttr-zPK-1072',
+ 'zVisualSearchAttr-zENT-1073',
+ 'zVisualSearchAttr-zOPT-1074',
+ 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1075',
+ 'z28AlbumList-28Albums= zGenAlbum-zPK-1076',
+ 'z28AlbumList-Album List Key-1077',
+ 'z28AlbumList-FOK28Albums Key-1078',
+ 'z29Assets-29Albums= zGenAlbum-zPK-1079',
+ 'z29Assets-3Asset Key= zAsset-zPK in the Album-1080',
+ 'z29Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1081',
+ 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1082',
+ 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1083',
+ 'z3MemoryBCAs-45MemoriesBeingCuratedAssets= zMemory-zPK-1084',
+ 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1085',
+ 'z3MemoryBECAs-45MemoriesBeingExtCuratedAssets= zMemory-zPK-1086',
+ 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1087',
+ 'z3MemoryBRAs-45RepresentativeAssets= zMemory-zPK-1088',
+ 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1089',
+ 'z3MemoryBUCAs-45MemoriesBeingUserCuratedAssets= zMemory-zPK-1090',
+ 'z3MemoryBCAs-45Memories Being Custom User Assets-1091',
+ 'z3MemoryBCAs-3Custom User Assets-1092',
+ 'z3MemoryBCAs-FOK-3Custom User Assets-1093')
+ data_list = get_sqlite_db_records(source_path, query)
- else:
- logfunc('No data available for iOS 17 Syndication.photoslibrary-database-Photos.sqlite')
+ return data_headers, data_list, source_path
- db.close()
- return
+@artifact_processor
+def Ph97_2iOS17RefforAssetAnalysisSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
+ if source_path.endswith('.sqlite'):
+ break
+ if report_folder.endswith('/') or report_folder.endswith('\\'):
+ report_folder = report_folder[:-1]
+ iosversion = scripts.artifacts.artGlobals.versionf
+ if (version.parse(iosversion) <= version.parse("16.7.7")) or (version.parse(iosversion) >= version.parse("18")):
+ logfunc("Unsupported version for Syndication.photoslibrary for iOS " + iosversion)
+ return (), [], source_path
+ if (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("17.6")):
+ source_path = get_file_path(files_found, "Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
-__artifacts_v2__ = {
- 'Ph97-1-iOS17_Ref_for_Asset_Analysis-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite 97.1 iOS17 Reference for Asset Analysis',
- 'description': 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest'
- ' set of decoded data based on testing and research conducted by Scott Koenig'
- ' https://theforensicscooter.com/. I recommend opening the TSV generated reports'
- ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer'
- ' to view, search and filter the results.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '1.0',
- 'date': '2024-04-19',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph97ios17refforassetanalysisphdapsql'
- },
- 'Ph97-2-iOS17_Ref_for_Asset_Analysis-SyndPL': {
- 'name': 'SyndPL Photos.sqlite 97.2 iOS17 Reference for Asset Analysis',
- 'description': 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.'
- ' This parser includes the largest set of decoded data based on testing and research'
- ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the'
- ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md'
- ' TimelineExplorer to view, search and filter the results.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '1.0',
- 'date': '2024-04-19',
- 'requirements': 'Acquisition that contains Syndication.photoslibrary-database-Photos.sqlite',
- 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis',
- 'notes': '',
- 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',
- 'function': 'get_ph97ios17refforassetanalysissyndpl'
- }
-}
+ query = '''
+ SELECT
+ DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date',
+ DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
+ CASE zAsset.ZCOMPLETE
+ WHEN 1 THEN '1-Yes-1'
+ END AS 'zAsset Complete',
+ zAsset.Z_PK AS 'zAsset-zPK-4QueryStart',
+ zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK-4QueryStart',
+ zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb-4QueryStart',
+ zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint-4TableStart',
+ zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-4TableStart',
+ CASE zAsset.ZBUNDLESCOPE
+ WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0'
+ WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1'
+ WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2'
+ WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || ''
+ END AS 'zAsset-Bundle Scope',
+ CASE zAsset.ZSYNDICATIONSTATE
+ WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0'
+ WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1'
+ WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2'
+ WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3'
+ WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8'
+ WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9'
+ WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || ''
+ END AS 'zAsset-Syndication State',
+ CASE zAsset.ZCLOUDISMYASSET
+ WHEN 0 THEN '0-Not_My_Asset_in_Shared_Album-0'
+ WHEN 1 THEN '1-My_Asset_in_Shared_Album-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISMYASSET || ''
+ END AS 'zAsset-Cloud is My Asset',
+ CASE zAsset.ZCLOUDISDELETABLE
+ WHEN 0 THEN '0-No-0'
+ WHEN 1 THEN '1-Yes-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISDELETABLE || ''
+ END AS 'zAsset-Cloud is deletable-Asset',
+ CASE zAsset.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Album-Conv_or_iCldPhotos_OFF=Asset_Not_Synced-0'
+ WHEN 1 THEN 'iCldPhotos ON=Asset_Can-Be-or-Has-Been_Synced_with_iCloud-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDLOCALSTATE || ''
+ END AS 'zAsset-Cloud_Local_State',
+ CASE zAsset.ZVISIBILITYSTATE
+ WHEN 0 THEN '0-Visible-PL-CameraRoll-0'
+ WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || ''
+ END AS 'zAsset-Visibility State',
+ zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make',
+ zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model',
+ zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model',
+ CASE zExtAttr.ZFLASHFIRED
+ WHEN 0 THEN '0-No Flash-0'
+ WHEN 1 THEN '1-Flash Fired-1'
+ ELSE 'Unknown-New-Value!: ' || zExtAttr.ZFLASHFIRED || ''
+ END AS 'zExtAttr-Flash Fired',
+ zExtAttr.ZFOCALLENGTH AS 'zExtAttr-Focal Lenght',
+ zExtAttr.ZFOCALLENGTHIN35MM AS 'zExtAttr-Focal Lenth in 35MM',
+ zExtAttr.ZDIGITALZOOMRATIO AS 'zExtAttr-Digital Zoom Ratio',
+ CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE
+ WHEN 0 THEN '0-Back-Camera-Other-0'
+ WHEN 1 THEN '1-Front-Camera-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZDERIVEDCAMERACAPTUREDEVICE || ''
+ END AS 'zAsset-Derived Camera Capture Device',
+ CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE
+ WHEN 0 THEN '0-Back-Camera-Other-0'
+ WHEN 1 THEN '1-Front-Camera-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || ''
+ END AS 'zAddAssetAttr-Camera Captured Device',
+ CASE zAddAssetAttr.ZIMPORTEDBY
+ WHEN 0 THEN '0-Cloud-Other-0'
+ WHEN 1 THEN '1-Native-Back-Camera-1'
+ WHEN 2 THEN '2-Native-Front-Camera-2'
+ WHEN 3 THEN '3-Third-Party-App-3'
+ WHEN 4 THEN '4-StillTesting-4'
+ WHEN 5 THEN '5-PhotoBooth_PL-Asset-5'
+ WHEN 6 THEN '6-Third-Party-App-6'
+ WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7'
+ WHEN 8 THEN '8-System-Package-App-8'
+ WHEN 9 THEN '9-Native-App-9'
+ WHEN 10 THEN '10-StillTesting-10'
+ WHEN 11 THEN '11-StillTesting-11'
+ WHEN 12 THEN '12-SWY_Syndication_PL-12'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || ''
+ END AS 'zAddAssetAttr-Imported by',
+ CASE zCldMast.ZIMPORTEDBY
+ WHEN 0 THEN '0-Cloud-Other-0'
+ WHEN 1 THEN '1-Native-Back-Camera-1'
+ WHEN 2 THEN '2-Native-Front-Camera-2'
+ WHEN 3 THEN '3-Third-Party-App-3'
+ WHEN 4 THEN '4-StillTesting-4'
+ WHEN 5 THEN '5-PhotoBooth_PL-Asset-5'
+ WHEN 6 THEN '6-Third-Party-App-6'
+ WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7'
+ WHEN 8 THEN '8-System-Package-App-8'
+ WHEN 9 THEN '9-Native-App-9'
+ WHEN 10 THEN '10-StillTesting-10'
+ WHEN 11 THEN '11-StillTesting-11'
+ WHEN 12 THEN '12-SWY_Syndication_PL-12'
+ ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || ''
+ END AS 'zCldMast-Imported By',
+ zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier',
+ zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name',
+ zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID',
+ zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name',
+ CASE zAsset.ZSAVEDASSETTYPE
+ WHEN 0 THEN '0-Saved-via-other-source-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ WHEN 2 THEN '2-StillTesting-2'
+ WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3'
+ WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4'
+ WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5'
+ WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6'
+ WHEN 7 THEN '7-StillTesting-7'
+ WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8'
+ WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || ''
+ END AS 'zAsset-Saved Asset Type',
+ zAsset.ZDIRECTORY AS 'zAsset-Directory-Path',
+ zAsset.ZFILENAME AS 'zAsset-Filename',
+ zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename',
+ zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename',
+ zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files',
+ CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE
+ WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0'
+ WHEN 1 THEN '1-Asset-In-Active-SPL-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || ''
+ END AS 'zAsset-Active Library Scope Participation State -4QueryStart',
+ CASE zAsset.ZLIBRARYSCOPESHARESTATE
+ WHEN 0 THEN '0-Asset-Not-In-SPL-0'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || ''
+ END AS 'zAsset-Library Scope Share State- StillTesting -4QueryStart',
+ SPLzShare.ZCLOUDPHOTOCOUNT AS 'SPLzShare-Cloud Photo Count-SPL -4QueryStart',
+ SPLzShare.ZCLOUDVIDEOCOUNT AS 'SPLzShare-Cloud Video Count-SPL -4QueryStart',
+ CASE zAddAssetAttr.ZDATECREATEDSOURCE
+ WHEN 0 THEN '0-Cloud-Asset-0'
+ WHEN 1 THEN '1-Local_Asset_EXIF-1'
+ WHEN 3 THEN '3-Local_Asset_No_EXIF-3'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || ''
+ END AS 'zAddAssetAttr-Date Created Source',
+ DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
+ DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date',
+ DateTime(zIntResou.ZCLOUDMASTERDATECREATED + 978307200, 'UNIXEPOCH') AS 'zIntResou-CldMst Date Created',
+ zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name',
+ zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset',
+ zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset',
+ zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String',
+ DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
+ DateTime(zAddAssetAttr.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Viewed Date',
+ DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date',
+ CASE zCldMast.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-Not Synced with Cloud-0'
+ WHEN 1 THEN '1-Pending Upload-1'
+ WHEN 2 THEN '2-StillTesting'
+ WHEN 3 THEN '3-Synced with Cloud-3'
+ ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || ''
+ END AS 'zCldMast-Cloud Local State',
+ DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date',
+ DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files',
+ zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID-4QueryStart',
+ DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date',
+ zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart',
+ DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date',
+ DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date',
+ zAsset.ZCLOUDDOWNLOADREQUESTS AS 'zAsset-Cloud Download Requests',
+ zAsset.ZCLOUDBATCHID AS 'zAsset-Cloud Batch ID',
+ zAddAssetAttr.ZUPLOADATTEMPTS AS 'zAddAssetAttr-Upload Attempts',
+ CASE zAsset.ZLATITUDE
+ WHEN -180.0 THEN '-180.0'
+ ELSE zAsset.ZLATITUDE
+ END AS 'zAsset-Latitude',
+ zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude',
+ CASE zAsset.ZLONGITUDE
+ WHEN -180.0 THEN '-180.0'
+ ELSE zAsset.ZLONGITUDE
+ END AS 'zAsset-Longitude',
+ zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude',
+ CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY
+ WHEN -1.0 THEN '-1.0'
+ ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY
+ END AS 'zAddAssetAttr-GPS Horizontal Accuracy',
+ zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash',
+ CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID
+ WHEN 0 THEN '0-Shifted Location Not Valid-0'
+ WHEN 1 THEN '1-Shifted Location Valid-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || ''
+ END AS 'zAddAssetAttr-Shifted Location Valid',
+ CASE
+ WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist'
+ ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL'
+ END AS 'zAddAssetAttr-Shifted Location Data',
+ CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID
+ WHEN 0 THEN '0-Reverse Location Not Valid-0'
+ WHEN 1 THEN '1-Reverse Location Valid-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || ''
+ END AS 'zAddAssetAttr-Reverse Location Is Valid',
+ CASE
+ WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist'
+ ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL'
+ END AS 'zAddAssetAttr-Reverse Location Data',
+ ParentzGenAlbum.ZUUID AS 'ParentzGenAlbum-UUID-4QueryStart',
+ zGenAlbum.ZUUID AS 'zGenAlbum-UUID-4QueryStart',
+ SWYConverszGenAlbum.ZUUID AS 'SWYConverszGenAlbum-UUID-4QueryStart',
+ ParentzGenAlbum.ZCLOUDGUID AS 'ParentzGenAlbum-Cloud GUID-4QueryStart',
+ zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4QueryStart',
+ SWYConverszGenAlbum.ZCLOUDGUID AS 'SWYConverszGenAlbum-Cloud GUID-4QueryStart',
+ zCldShareAlbumInvRec.ZALBUMGUID AS 'zCldShareAlbumInvRec-Album GUID-4QueryStart',
+ zCldShareAlbumInvRec.ZCLOUDGUID AS 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart',
+ zGenAlbum.ZPROJECTRENDERUUID AS 'zGenAlbum-Project Render UUID-4QueryStart',
+ SWYConverszGenAlbum.ZPROJECTRENDERUUID AS 'SWYConverszGenAlbum-Project Render UUID-4QueryStart',
+ CASE ParentzGenAlbum.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0'
+ WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDLOCALSTATE || ''
+ END AS 'ParentzGenAlbum-Cloud-Local-State-4QueryStart',
+ CASE zGenAlbum.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0'
+ WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDLOCALSTATE || ''
+ END AS 'zGenAlbum-Cloud_Local_State-4QueryStart',
+ CASE SWYConverszGenAlbum.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0'
+ WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDLOCALSTATE || ''
+ END AS 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart',
+ DateTime(ParentzGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum- Creation Date- 4QueryStart',
+ DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- Creation Date- 4QueryStart',
+ DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- Creation Date- 4QueryStart',
+ DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- Cloud Creation Date- 4QueryStart',
+ DateTime(SWYConverszGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart',
+ DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- Start Date- 4QueryStart',
+ DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- Start Date- 4QueryStart',
+ DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- End Date- 4QueryStart',
+ DateTime(SWYConverszGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- End Date- 4QueryStart',
+ DateTime(zGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Subscription Date- 4QueryStart',
+ DateTime(SWYConverszGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart',
+ ParentzGenAlbum.ZTITLE AS 'ParentzGenAlbum- Title- 4QueryStart',
+ zGenAlbum.ZTITLE AS 'zGenAlbum- Title-User&System Applied- 4QueryStart',
+ SWYConverszGenAlbum.ZTITLE AS 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart',
+ zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum-Import Session ID-SWY- 4QueryStart',
+ zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart',
+ SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart',
+ zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart',
+ SWYConverszGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart',
+ CASE SWYConverszGenAlbum.ZSYNDICATE
+ WHEN 1 THEN '1-SWYConverszGenAlbum-Syndicate - SWY-SyncedFile-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSYNDICATE || ''
+ END AS 'SWYConverszGenAlbum- Syndicate-4QueryStart',
+ CASE zGenAlbum.Z_ENT
+ WHEN 27 THEN '27-LPL-SPL-CPL_Album-DecodingVariableBasedOniOS-27'
+ WHEN 28 THEN '28-LPL-SPL-CPL-Shared_Album-DecodingVariableBasedOniOS-28'
+ WHEN 29 THEN '29-Shared_Album-DecodingVariableBasedOniOS-29'
+ WHEN 30 THEN '30-Duplicate_Album-Pending_Merge-30'
+ WHEN 35 THEN '35-SearchIndexRebuild-1600KIND-35'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.Z_ENT || ''
+ END AS 'zGenAlbum-zENT- Entity- 4QueryStart',
+ CASE ParentzGenAlbum.ZKIND
+ WHEN 2 THEN '2-Non-Shared-Album-2'
+ WHEN 1505 THEN '1505-Shared-Album-1505'
+ WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT'
+ WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT'
+ WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509'
+ WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510'
+ WHEN 3571 THEN '3571-Progress-Sync-3571'
+ WHEN 3572 THEN '3572-Progress-OTA-Restore-3572'
+ WHEN 3573 THEN '3573-Progress-FS-Import-3573'
+ WHEN 3998 THEN '3998-Project Root Folder-3998'
+ WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999'
+ WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZKIND || ''
+ END AS 'ParentzGenAlbum- Kind- 4QueryStart',
+ CASE zGenAlbum.ZKIND
+ WHEN 2 THEN '2-Non-Shared-Album-2'
+ WHEN 1505 THEN '1505-Shared-Album-1505'
+ WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT'
+ WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT'
+ WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509'
+ WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510'
+ WHEN 3571 THEN '3571-Progress-Sync-3571'
+ WHEN 3572 THEN '3572-Progress-OTA-Restore-3572'
+ WHEN 3573 THEN '3573-Progress-FS-Import-3573'
+ WHEN 3998 THEN '3998-Project Root Folder-3998'
+ WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999'
+ WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || ''
+ END AS 'zGenAlbum-Album Kind- 4QueryStart',
+ CASE SWYConverszGenAlbum.ZKIND
+ WHEN 2 THEN '2-Non-Shared-Album-2'
+ WHEN 1505 THEN '1505-Shared-Album-1505'
+ WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT'
+ WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT'
+ WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509'
+ WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510'
+ WHEN 3571 THEN '3571-Progress-Sync-3571'
+ WHEN 3572 THEN '3572-Progress-OTA-Restore-3572'
+ WHEN 3573 THEN '3573-Progress-FS-Import-3573'
+ WHEN 3998 THEN '3998-Project Root Folder-3998'
+ WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999'
+ WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZKIND || ''
+ END AS 'SWYConverszGenAlbum-Album Kind- 4QueryStart',
+ CASE AAAzCldMastMedData.Z_OPT
+ WHEN 1 THEN '1-StillTesting-Cloud-1'
+ WHEN 2 THEN '2-StillTesting-This Device-2'
+ WHEN 3 THEN '3-StillTesting-Muted-3'
+ WHEN 4 THEN '4-StillTesting-Unknown-4'
+ WHEN 5 THEN '5-StillTesting-Unknown-5'
+ ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || ''
+ END AS 'AAAzCldMastMedData-zOPT',
+ zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type',
+ zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK',
+ CASE
+ WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist'
+ ELSE 'AAAzCldMastMedData-Data_Empty-NULL'
+ END AS 'AAAzCldMastMedData-Data',
+ CASE CMzCldMastMedData.Z_OPT
+ WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1'
+ WHEN 2 THEN '2-StillTesting-Local_Asset-2'
+ WHEN 3 THEN '3-StillTesting-Muted-3'
+ WHEN 4 THEN '4-StillTesting-Unknown-4'
+ WHEN 5 THEN '5-StillTesting-Unknown-5'
+ ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || ''
+ END AS 'CldMasterzCldMastMedData-zOPT',
+ zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type',
+ zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData-zPK',
+ CASE
+ WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist'
+ ELSE 'CMzCldMastMedData-Data_Empty-NULL'
+ END AS 'CMzCldMastMedData-Data',
+ CASE zAsset.ZSEARCHINDEXREBUILDSTATE
+ WHEN 0 THEN '0-StillTesting-0'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSEARCHINDEXREBUILDSTATE || ''
+ END AS 'zAsset-Search Index Rebuild State',
+ zAddAssetAttr.ZSYNDICATIONHISTORY AS 'zAddAssetAttr-Syndication History',
+ zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVERSION AS 'zMedAnlyAstAttr-Syndication Processing Version',
+ CASE zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE
+ WHEN 0 THEN '0-NA-0'
+ WHEN 1 THEN '1-STILLTESTING_Wide-Camera_JPG-1'
+ WHEN 2 THEN '2-STILLTESTING_Telephoto_Camera_Lens-2'
+ WHEN 4 THEN '4-STILLTESTING_SWY_Asset_OrigAssetImport_SystemPackageApp-4'
+ WHEN 16 THEN '16-STILLTESTING-16'
+ WHEN 1024 THEN '1024-STILLTESTING_SWY_Asset_OrigAssetImport_NativeCamera-1024'
+ WHEN 2048 THEN '2048-STILLTESTING-2048'
+ WHEN 4096 THEN '4096-STILLTESTING_SWY_Asset_Manually_Saved-4096'
+ ELSE 'Unknown-New-Value!: ' || zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE || ''
+ END AS 'zMedAnlyAstAttr-Syndication Processing Value',
+ CASE zAsset.ZORIENTATION
+ WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1'
+ WHEN 2 THEN '2-Horizontal-Camera-(right)-2'
+ WHEN 3 THEN '3-Horizontal-Camera-(right)-3'
+ WHEN 4 THEN '4-Horizontal-Camera-(left)-4'
+ WHEN 5 THEN '5-Vertical-Camera-(top)-5'
+ WHEN 6 THEN '6-Vertical-Camera-(top)-6'
+ WHEN 7 THEN '7-Vertical-Camera-(bottom)-7'
+ WHEN 8 THEN '8-Vertical-Camera-(bottom)-8'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || ''
+ END AS 'zAsset-Orientation',
+ CASE zAddAssetAttr.ZORIGINALORIENTATION
+ WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1'
+ WHEN 2 THEN '2-Horizontal-Camera-(right)-2'
+ WHEN 3 THEN '3-Horizontal-Camera-(right)-3'
+ WHEN 4 THEN '4-Horizontal-Camera-(left)-4'
+ WHEN 5 THEN '5-Vertical-Camera-(top)-5'
+ WHEN 6 THEN '6-Vertical-Camera-(top)-6'
+ WHEN 7 THEN '7-Vertical-Camera-(bottom)-7'
+ WHEN 8 THEN '8-Vertical-Camera-(bottom)-8'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || ''
+ END AS 'zAddAssetAttr-Original Orientation',
+ CASE zAsset.ZKIND
+ WHEN 0 THEN '0-Photo-0'
+ WHEN 1 THEN '1-Video-1'
+ END AS 'zAsset-Kind',
+ CASE zAsset.ZKINDSUBTYPE
+ WHEN 0 THEN '0-Still-Photo-0'
+ WHEN 1 THEN '1-Panorama-1'
+ WHEN 2 THEN '2-Live-Photo-2'
+ WHEN 10 THEN '10-SpringBoard-Screenshot-10'
+ WHEN 100 THEN '100-Video-100'
+ WHEN 101 THEN '101-Slow-Mo-Video-101'
+ WHEN 102 THEN '102-Time-lapse-Video-102'
+ WHEN 103 THEN '103-Replay_Screen_Recording-103'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || ''
+ END AS 'zAsset-Kind-Sub-Type',
+ CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE
+ WHEN 0 THEN '0-Still-Photo-0'
+ WHEN 1 THEN '1-StillTesting'
+ WHEN 2 THEN '2-Live-Photo-2'
+ WHEN 3 THEN '3-Screenshot-3'
+ WHEN 10 THEN '10-SpringBoard-Screenshot-10'
+ WHEN 100 THEN '100-Video-100'
+ WHEN 101 THEN '101-Slow-Mo-Video-101'
+ WHEN 102 THEN '102-Time-lapse-Video-102'
+ WHEN 103 THEN '103-Replay_Screen_Recording-103'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || ''
+ END AS 'zAddAssetAttr-Cloud Kind Sub Type',
+ CASE zAsset.ZPLAYBACKSTYLE
+ WHEN 1 THEN '1-Image-1'
+ WHEN 2 THEN '2-Image-Animated-2'
+ WHEN 3 THEN '3-Live-Photo-3'
+ WHEN 4 THEN '4-Video-4'
+ WHEN 5 THEN '5-Video-Looping-5'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || ''
+ END AS 'zAsset-Playback Style',
+ CASE zAsset.ZPLAYBACKVARIATION
+ WHEN 0 THEN '0-No_Playback_Variation-0'
+ WHEN 1 THEN '1-StillTesting_Playback_Variation-1'
+ WHEN 2 THEN '2-StillTesting_Playback_Variation-2'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || ''
+ END AS 'zAsset-Playback Variation',
+ zAsset.ZDURATION AS 'zAsset-Video Duration',
+ zExtAttr.ZDURATION AS 'zExtAttr-Duration',
+ zAsset.ZVIDEOCPDURATIONVALUE AS 'zAsset-Video CP Duration',
+ zAddAssetAttr.ZVIDEOCPDURATIONTIMESCALE AS 'zAddAssetAttr-Video CP Duration Time Scale',
+ zAsset.ZVIDEOCPVISIBILITYSTATE AS 'zAsset-Video CP Visibility State',
+ zAddAssetAttr.ZVIDEOCPDISPLAYVALUE AS 'zAddAssetAttr-Video CP Display Value',
+ zAddAssetAttr.ZVIDEOCPDISPLAYTIMESCALE AS 'zAddAssetAttr-Video CP Display Time Scale',
+ CASE zIntResou.ZDATASTORECLASSID
+ WHEN 0 THEN '0-LPL-Asset_CPL-Asset-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ WHEN 2 THEN '2-Photo-Cloud-Sharing-Asset-2'
+ WHEN 3 THEN '3-SWY_Syndication_Asset-3'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORECLASSID || ''
+ END AS 'zIntResou-Datastore Class ID',
+ CASE zAsset.ZCLOUDPLACEHOLDERKIND
+ WHEN 0 THEN '0-Local&CloudMaster Asset-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ WHEN 2 THEN '2-StillTesting-2'
+ WHEN 3 THEN '3-JPG-Asset_Only_PhDa-Thumb-V2-3'
+ WHEN 4 THEN '4-LPL-JPG-Asset_CPLAsset-OtherType-4'
+ WHEN 5 THEN '5-Asset_synced_CPL_2_Device-5'
+ WHEN 6 THEN '6-StillTesting-6'
+ WHEN 7 THEN '7-LPL-poster-JPG-Asset_CPLAsset-MP4-7'
+ WHEN 8 THEN '8-LPL-JPG_Asset_CPLAsset-LivePhoto-MOV-8'
+ WHEN 9 THEN '9-CPL_MP4_Asset_Saved_2_LPL-9'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDPLACEHOLDERKIND || ''
+ END AS 'zAsset-Cloud Placeholder Kind',
+ CASE zIntResou.ZLOCALAVAILABILITY
+ WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)'
+ WHEN 1 THEN '1-IR_Asset_Avail_Locally-1'
+ WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || ''
+ END AS 'zIntResou-Local Availability',
+ CASE zIntResou.ZLOCALAVAILABILITYTARGET
+ WHEN 0 THEN '0-StillTesting-0'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITYTARGET || ''
+ END AS 'zIntResou-Local Availability Target',
+ CASE zIntResou.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-IR_Asset_Not_Synced_No_IR-CldMastDateCreated-0'
+ WHEN 1 THEN '1-IR_Asset_Pending-Upload-1'
+ WHEN 2 THEN '2-IR_Asset_Photo_Cloud_Share_Asset_On-Local-Device-2'
+ WHEN 3 THEN '3-IR_Asset_Synced_iCloud-3'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDLOCALSTATE || ''
+ END AS 'zIntResou-Cloud Local State',
+ CASE zIntResou.ZREMOTEAVAILABILITY
+ WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0'
+ WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || ''
+ END AS 'zIntResou-Remote Availability',
+ CASE zIntResou.ZREMOTEAVAILABILITYTARGET
+ WHEN 0 THEN '0-StillTesting-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITYTARGET || ''
+ END AS 'zIntResou-Remote Availability Target',
+ zIntResou.ZTRANSIENTCLOUDMASTER AS 'zIntResou-Transient Cloud Master',
+ zIntResou.ZSIDECARINDEX AS 'zIntResou-Side Car Index',
+ zIntResou.ZFILEID AS 'zIntResou- File ID',
+ CASE zIntResou.ZVERSION
+ WHEN 0 THEN '0-IR_Asset_Standard-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ WHEN 2 THEN '2-IR_Asset_Adjustments-Mutation-2'
+ WHEN 3 THEN '3-IR_Asset_No_IR-CldMastDateCreated-3'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZVERSION || ''
+ END AS 'zIntResou-Version',
+ zAddAssetAttr.ZORIGINALFILESIZE AS 'zAddAssetAttr- Original-File-Size',
+ CASE zIntResou.ZRESOURCETYPE
+ WHEN 0 THEN '0-Photo-0'
+ WHEN 1 THEN '1-Video-1'
+ WHEN 3 THEN '3-Live-Photo-3'
+ WHEN 5 THEN '5-Adjustment-Data-5'
+ WHEN 6 THEN '6-Screenshot-6'
+ WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9'
+ WHEN 13 THEN '13-Movie-13'
+ WHEN 14 THEN '14-Wallpaper-14'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || ''
+ END AS 'zIntResou-Resource Type',
+ CASE zIntResou.ZDATASTORESUBTYPE
+ WHEN 0 THEN '0-No Cloud Inter Resource-0'
+ WHEN 1 THEN '1-Main-Asset-Orig-Size-1'
+ WHEN 2 THEN '2-Photo-with-Adjustments-2'
+ WHEN 3 THEN '3-JPG-Large-Thumb-3'
+ WHEN 4 THEN '4-JPG-Med-Thumb-4'
+ WHEN 5 THEN '5-JPG-Small-Thumb-5'
+ WHEN 6 THEN '6-Video-Med-Data-6'
+ WHEN 7 THEN '7-Video-Small-Data-7'
+ WHEN 8 THEN '8-MP4-Cloud-Share-8'
+ WHEN 9 THEN '9-StillTesting'
+ WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10'
+ WHEN 11 THEN '11-StillTesting'
+ WHEN 12 THEN '12-StillTesting'
+ WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13'
+ WHEN 14 THEN '14-Wallpaper-14'
+ WHEN 15 THEN '15-Has-Markup-and-Adjustments-15'
+ WHEN 16 THEN '16-Video-with-Adjustments-16'
+ WHEN 17 THEN '17-RAW_Photo-17_RT'
+ WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18'
+ WHEN 19 THEN '19-Live-Photo-with-Adjustments-19'
+ WHEN 20 THEN '20-StillTesting'
+ WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21'
+ WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22'
+ WHEN 23 THEN '23-StillTesting'
+ WHEN 24 THEN '24-StillTesting'
+ WHEN 25 THEN '25-StillTesting'
+ WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26'
+ WHEN 27 THEN '27-StillTesting'
+ WHEN 28 THEN '28-MOV-Med-hdr-Data-28'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || ''
+ END AS 'zIntResou-Datastore Sub-Type',
+ CASE zIntResou.ZCLOUDSOURCETYPE
+ WHEN 0 THEN '0-NA-0'
+ WHEN 1 THEN '1-Main-Asset-Orig-Size-1'
+ WHEN 2 THEN '2-Photo-with-Adjustments-2'
+ WHEN 3 THEN '3-JPG-Large-Thumb-3'
+ WHEN 4 THEN '4-JPG-Med-Thumb-4'
+ WHEN 5 THEN '5-JPG-Small-Thumb-5'
+ WHEN 6 THEN '6-Video-Med-Data-6'
+ WHEN 7 THEN '7-Video-Small-Data-7'
+ WHEN 8 THEN '8-MP4-Cloud-Share-8'
+ WHEN 9 THEN '9-StillTesting'
+ WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10'
+ WHEN 11 THEN '11-StillTesting'
+ WHEN 12 THEN '12-StillTesting'
+ WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13'
+ WHEN 14 THEN '14-Wallpaper-14'
+ WHEN 15 THEN '15-Has-Markup-and-Adjustments-15'
+ WHEN 16 THEN '16-Video-with-Adjustments-16'
+ WHEN 17 THEN '17-RAW_Photo-17_RT'
+ WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18'
+ WHEN 19 THEN '19-Live-Photo-with-Adjustments-19'
+ WHEN 20 THEN '20-StillTesting'
+ WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21'
+ WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22'
+ WHEN 23 THEN '23-StillTesting'
+ WHEN 24 THEN '24-StillTesting'
+ WHEN 25 THEN '25-StillTesting'
+ WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26'
+ WHEN 27 THEN '27-StillTesting'
+ WHEN 28 THEN '28-MOV-Med-hdr-Data-28'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDSOURCETYPE || ''
+ END AS 'zIntResou-Cloud Source Type',
+ zIntResou.ZDATALENGTH AS 'zIntResou-Data Length',
+ CASE zIntResou.ZRECIPEID
+ WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0'
+ WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737'
+ WHEN 65739 THEN '65739-JPG_Large_Thumb-65739'
+ WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741'
+ WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743'
+ WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749'
+ WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938'
+ WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072'
+ WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077'
+ WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079'
+ WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081'
+ WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272'
+ WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275'
+ WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277'
+ WHEN 131475 THEN '131475-medium-hdr-MOV-131475'
+ WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683'
+ WHEN 327687 THEN '627687-WallpaperComputeResource-627687'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || ''
+ END AS 'zIntResou-Recipe ID',
+ CASE zIntResou.ZCLOUDLASTPREFETCHDATE
+ WHEN 0 THEN '0-NA-0'
+ ELSE DateTime(zIntResou.ZCLOUDLASTPREFETCHDATE + 978307200, 'UNIXEPOCH')
+ END AS 'zIntResou-Cloud Last Prefetch Date',
+ zIntResou.ZCLOUDPREFETCHCOUNT AS 'zIntResou-Cloud Prefetch Count',
+ DateTime(zIntResou.ZCLOUDLASTONDEMANDDOWNLOADDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou- Cloud-Last-OnDemand Download-Date',
+ CASE zIntResou.ZUTICONFORMANCEHINT
+ WHEN 0 THEN '0-NA-Doesnt_Conform-0'
+ WHEN 1 THEN '1-UTTypeImage-1'
+ WHEN 2 THEN '2-UTTypeProRawPhoto-2'
+ WHEN 3 THEN '3-UTTypeMovie-3'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZUTICONFORMANCEHINT || ''
+ END AS 'zIntResou-UniformTypeID_UTI_Conformance_Hint',
+ CASE zIntResou.ZCOMPACTUTI
+ WHEN 1 THEN '1-JPEG-THM-1'
+ WHEN 3 THEN '3-HEIC-3'
+ WHEN 6 THEN '6-PNG-6'
+ WHEN 7 THEN '7-StillTesting'
+ WHEN 9 THEN '9-DNG-9'
+ WHEN 23 THEN '23-JPEG-HEIC-quicktime-mov-23'
+ WHEN 24 THEN '24-MPEG4-24'
+ WHEN 36 THEN '36-Wallpaper-36'
+ WHEN 37 THEN '37-Adj-Mutation_Data-37'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZCOMPACTUTI || ''
+ END AS 'zIntResou-Compact-UTI',
+ zAsset.ZUNIFORMTYPEIDENTIFIER AS 'zAsset-Uniform Type ID',
+ zAsset.ZORIGINALCOLORSPACE AS 'zAsset-Original Color Space',
+ zCldMast.ZUNIFORMTYPEIDENTIFIER AS 'zCldMast-Uniform_Type_ID',
+ CASE zCldMast.ZFULLSIZEJPEGSOURCE
+ WHEN 0 THEN '0-CldMast-JPEG-Source-Video Still-Testing-0'
+ WHEN 1 THEN '1-CldMast-JPEG-Source-Other- Still-Testing-1'
+ ELSE 'Unknown-New-Value!: ' || zCldMast.ZFULLSIZEJPEGSOURCE || ''
+ END AS 'zCldMast-Full Size JPEG Source',
+ zAsset.ZHDRGAIN AS 'zAsset-HDR Gain',
+ CASE zAsset.ZHDRTYPE
+ WHEN 0 THEN '0-No-HDR-0'
+ WHEN 3 THEN '3-HDR_Photo-3_RT'
+ WHEN 4 THEN '4-Non-HDR_Version-4_RT'
+ WHEN 5 THEN '5-HEVC_Movie-5'
+ WHEN 6 THEN '6-Panorama-6_RT'
+ WHEN 10 THEN '10-HDR-Gain-10'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZHDRTYPE || ''
+ END AS 'zAsset-zHDR_Type',
+ zExtAttr.ZCODEC AS 'zExtAttr-Codec',
+ zIntResou.ZCODECFOURCHARCODENAME AS 'zIntResou-Codec Four Char Code Name',
+ zCldMast.ZCODECNAME AS 'zCldMast-Codec Name',
+ zCldMast.ZVIDEOFRAMERATE AS 'zCldMast-Video Frame Rate',
+ zCldMast.ZPLACEHOLDERSTATE AS 'zCldMast-Placeholder State',
+ CASE zAsset.ZDEPTHTYPE
+ WHEN 0 THEN '0-Not_Portrait-0_RT'
+ ELSE 'Portrait: ' || zAsset.ZDEPTHTYPE || ''
+ END AS 'zAsset-Depth_Type',
+ zAsset.ZAVALANCHEUUID AS 'zAsset-Avalanche UUID-4TableStart',
+ CASE zAsset.ZAVALANCHEPICKTYPE
+ WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT'
+ WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT'
+ WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT'
+ WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT'
+ WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT'
+ WHEN 32 THEN '32-StillTesting-32_RT'
+ WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEPICKTYPE || ''
+ END AS 'zAsset-Avalanche_Pick_Type-BurstAsset',
+ CASE zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE
+ WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT'
+ WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT'
+ WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT'
+ WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT'
+ WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT'
+ WHEN 32 THEN '32-StillTesting-32_RT'
+ WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE || ''
+ END AS 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset',
+ CASE zAddAssetAttr.ZCLOUDRECOVERYSTATE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDRECOVERYSTATE || ''
+ END AS 'zAddAssetAttr-Cloud Recovery State',
+ zAddAssetAttr.ZCLOUDSTATERECOVERYATTEMPTSCOUNT AS 'zAddAssetAttr-Cloud State Recovery Attempts Count',
+ zAsset.ZDEFERREDPROCESSINGNEEDED AS 'zAsset-Deferred Processing Needed',
+ zAsset.ZVIDEODEFERREDPROCESSINGNEEDED AS 'zAsset-Video Deferred Processing Needed',
+ zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart',
+ zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options',
+ CASE zAsset.ZHASADJUSTMENTS
+ WHEN 0 THEN '0-No-Adjustments-0'
+ WHEN 1 THEN '1-Yes-Adjustments-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZHASADJUSTMENTS || ''
+ END AS 'zAsset-Has Adjustments-Camera-Effects-Filters',
+ zUnmAdj.ZUUID AS 'zUnmAdj-UUID-4TableStart',
+ DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp',
+ DateTime(zUnmAdj.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zUnmAdj-Adjustment Timestamp',
+ zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID',
+ zUnmAdj.ZEDITORLOCALIZEDNAME AS 'zUnmAdj-Editor Localized Name',
+ zUnmAdj.ZADJUSTMENTFORMATIDENTIFIER AS 'zUnmAdj-Adjustment Format ID',
+ zAddAssetAttr.ZMONTAGE AS 'zAddAssetAttr-Montage',
+ CASE zUnmAdj.ZADJUSTMENTRENDERTYPES
+ WHEN 0 THEN '0-Standard or Portrait with erros-0'
+ WHEN 1 THEN '1-StillTesting'
+ WHEN 2 THEN '2-Portrait-2'
+ WHEN 3 THEN '3-StillTesting'
+ WHEN 4 THEN '4-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zUnmAdj.ZADJUSTMENTRENDERTYPES || ''
+ END AS 'zUnmAdj-Adjustment Render Types',
+ CASE zUnmAdj.ZADJUSTMENTFORMATVERSION
+ WHEN 1.0 THEN '1.0-Markup-1.0'
+ WHEN 1.1 THEN '1.1-Slow-Mo-1.1'
+ WHEN 1.2 THEN '1.2-StillTesting'
+ WHEN 1.3 THEN '1.3-StillTesting'
+ WHEN 1.4 THEN '1.4-Filter-1.4'
+ WHEN 1.5 THEN '1.5-Adjust-1.5'
+ WHEN 1.6 THEN '1.6-Video-Trim-1.6'
+ WHEN 1.7 THEN '1.7-StillTesting'
+ WHEN 1.8 THEN '1.8-StillTesting'
+ WHEN 1.9 THEN '1.9-StillTesting'
+ WHEN 2.0 THEN '2.0-ScreenshotServices-2.0'
+ ELSE 'Unknown-New-Value!: ' || zUnmAdj.ZADJUSTMENTFORMATVERSION || ''
+ END AS 'zUnmAdj-Adjustment Format Version',
+ zUnmAdj.ZADJUSTMENTBASEIMAGEFORMAT AS 'zUnmAdj-Adjustment Base Image Format',
+ CASE zAsset.ZFAVORITE
+ WHEN 0 THEN '0-Asset Not Favorite-0'
+ WHEN 1 THEN '1-Asset Favorite-1'
+ END AS 'zAsset-Favorite',
+ CASE zAsset.ZHIDDEN
+ WHEN 0 THEN '0-Asset Not Hidden-0'
+ WHEN 1 THEN '1-Asset Hidden-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZHIDDEN || ''
+ END AS 'zAsset-Hidden',
+ CASE zAsset.ZTRASHEDSTATE
+ WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0'
+ WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || ''
+ END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
+ DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
+ zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart',
+ CASE zAsset.ZDELETEREASON
+ WHEN 1 THEN '1-StillTesting Delete-Reason-1'
+ WHEN 2 THEN '2-StillTesting Delete-Reason-2'
+ WHEN 3 THEN '3-StillTesting Delete-Reason-3'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZDELETEREASON || ''
+ END AS 'zAsset-Delete-Reason',
+ CASE zIntResou.ZTRASHEDSTATE
+ WHEN 0 THEN '0-zIntResou-Not In Trash-Recently Deleted-0'
+ WHEN 1 THEN '1-zIntResou-In Trash-Recently Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZTRASHEDSTATE || ''
+ END AS 'zIntResou-Trash State',
+ DateTime(zIntResou.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou-Trashed Date',
+ CASE zAsset.ZCLOUDDELETESTATE
+ WHEN 0 THEN '0-Cloud Asset Not Deleted-0'
+ WHEN 1 THEN '1-Cloud Asset Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDDELETESTATE || ''
+ END AS 'zAsset-Cloud Delete State',
+ CASE zIntResou.ZCLOUDDELETESTATE
+ WHEN 0 THEN '0-Cloud IntResou Not Deleted-0'
+ WHEN 1 THEN '1-Cloud IntResou Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDDELETESTATE || ''
+ END AS 'zIntResou-Cloud Delete State',
+ CASE zAddAssetAttr.ZPTPTRASHEDSTATE
+ WHEN 0 THEN '0-PTP Not in Trash-0'
+ WHEN 1 THEN '1-PTP In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZPTPTRASHEDSTATE || ''
+ END AS 'zAddAssetAttr-PTP Trashed State',
+ CASE zIntResou.ZPTPTRASHEDSTATE
+ WHEN 0 THEN '0-PTP IntResou Not in Trash-0'
+ WHEN 1 THEN '1-PTP IntResou In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZPTPTRASHEDSTATE || ''
+ END AS 'zIntResou-PTP Trashed State',
+ zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart',
+ DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp',
+ DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modificaion Date',
+ zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count',
+ zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count',
+ zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count',
+ zAddAssetAttr.ZPLAYCOUNT AS 'zAddAssetAttr- Play Count',
+ zAddAssetAttr.ZPENDINGSHARECOUNT AS 'zAddAssetAttr- Pending Share Count',
+ zAddAssetAttr.ZSHARECOUNT AS 'zAddAssetAttr- Share Count',
+ CASE zAddAssetAttr.ZALLOWEDFORANALYSIS
+ WHEN 0 THEN '0-Asset Not Allowed For Analysis-0'
+ WHEN 1 THEN '1-Asset Allowed for Analysis-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZALLOWEDFORANALYSIS || ''
+ END AS 'zAddAssetAttr-Allowed for Analysis',
+ zAddAssetAttr.ZSCENEANALYSISVERSION AS 'zAddAssetAttr-Scene Analysis Version',
+ CASE zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW
+ WHEN 0 THEN '0-No-0'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW || ''
+ END AS 'zAddAssetAttr-Scene Analysis is From Preview',
+ DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp',
+ CASE zAsset.ZDUPLICATEASSETVISIBILITYSTATE
+ WHEN 0 THEN '0-No-Duplicates-0'
+ WHEN 1 THEN '1-Has Duplicate-1'
+ WHEN 2 THEN '2-Is a Duplicate-2'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZDUPLICATEASSETVISIBILITYSTATE || ''
+ END AS 'zAsset-Duplication Asset Visibility State',
+ CASE zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE
+ WHEN 0 THEN '0-No Copy-0'
+ WHEN 1 THEN '1-Has A Copy-1'
+ WHEN 2 THEN '2-Has A Copy-2'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE || ''
+ END AS 'zAddAssetAttr-Destination Asset Copy State',
+ CASE zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE
+ WHEN 0 THEN '0-Unknown-StillTesting-0'
+ WHEN 1 THEN '1-Unknown-StillTesting-1'
+ WHEN 2 THEN '2-Unknown-StillTesting-2'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE || ''
+ END AS 'zAddAssetAttr-Duplicate Detector Perceptual Processing State',
+ zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONSCOPEIDENTIFIER AS 'zAddAssetAttr-Source Asset for Duplication Scope ID',
+ zCldMast.ZSOURCEMASTERFORDUPLICATIONSCOPEIDENTIFIER AS 'zCldMast-Source Master For Duplication Scope ID',
+ zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONIDENTIFIER AS 'zAddAssetAttr-Source Asset For Duplication ID',
+ zCldMast.ZSOURCEMASTERFORDUPLICATIONIDENTIFIER AS 'zCldMast-Source Master for Duplication ID',
+ zAddAssetAttr.ZVARIATIONSUGGESTIONSTATES AS 'zAddAssetAttr-Variation Suggestions States',
+ zAsset.ZHIGHFRAMERATESTATE AS 'zAsset-High Frame Rate State',
+ zAsset.ZVIDEOKEYFRAMETIMESCALE AS 'zAsset-Video Key Frame Time Scale',
+ zAsset.ZVIDEOKEYFRAMEVALUE AS 'zAsset-Video Key Frame Value',
+ zExtAttr.ZISO AS 'zExtAttr-ISO',
+ zExtAttr.ZMETERINGMODE AS 'zExtAttr-Metering Mode',
+ zExtAttr.ZSAMPLERATE AS 'zExtAttr-Sample Rate',
+ zExtAttr.ZTRACKFORMAT AS 'zExtAttr-Track Format',
+ zExtAttr.ZWHITEBALANCE AS 'zExtAttr-White Balance',
+ zExtAttr.ZAPERTURE AS 'zExtAttr-Aperture',
+ zExtAttr.ZBITRATE AS 'zExtAttr-BitRate',
+ zExtAttr.ZEXPOSUREBIAS AS 'zExtAttr-Exposure Bias',
+ zExtAttr.ZFPS AS 'zExtAttr-Frames Per Second',
+ zExtAttr.ZSHUTTERSPEED AS 'zExtAttr-Shutter Speed',
+ zExtAttr.ZSLUSHSCENEBIAS AS 'zExtAttr-Slush Scene Bias',
+ zExtAttr.ZSLUSHVERSION AS 'zExtAttr-Slush Version',
+ zExtAttr.ZSLUSHPRESET AS 'zExtAttr-Slush Preset',
+ zExtAttr.ZSLUSHWARMTHBIAS AS 'zExtAttr-Slush Warm Bias',
+ zAsset.ZHEIGHT AS 'zAsset-Height',
+ zAddAssetAttr.ZORIGINALHEIGHT AS 'zAddAssetAttr-Original Height',
+ zIntResou.ZUNORIENTEDHEIGHT AS 'zIntResou-UnOriented Height',
+ zAsset.ZWIDTH AS 'zAsset-Width',
+ zAddAssetAttr.ZORIGINALWIDTH AS 'zAddAssetAttr-Original Width',
+ zIntResou.ZUNORIENTEDWIDTH AS 'zIntResou-UnOriented Width',
+ zShare.ZTHUMBNAILIMAGEDATA AS 'zShare-Thumbnail Image Data',
+ SPLzShare.ZTHUMBNAILIMAGEDATA AS 'SPLzShare-Thumbnail Image Data',
+ zAsset.ZTHUMBNAILINDEX AS 'zAsset-Thumbnail Index',
+ zAddAssetAttr.ZEMBEDDEDTHUMBNAILHEIGHT AS 'zAddAssetAttr-Embedded Thumbnail Height',
+ zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length',
+ zAddAssetAttr.ZEMBEDDEDTHUMBNAILOFFSET AS 'zAddAssetAttr-Embedded Thumbnail Offset',
+ zAddAssetAttr.ZEMBEDDEDTHUMBNAILWIDTH AS 'zAddAssetAttr-Embedded Thumbnail Width',
+ zAsset.ZPACKEDACCEPTABLECROPRECT AS 'zAsset-Packed Acceptable Crop Rect',
+ zAsset.ZPACKEDBADGEATTRIBUTES AS 'zAsset-Packed Badge Attributes',
+ zAsset.ZPACKEDPREFERREDCROPRECT AS 'zAsset-Packed Preferred Crop Rect',
+ zAsset.ZCURATIONSCORE AS 'zAsset-Curation Score',
+ zAsset.ZCAMERAPROCESSINGADJUSTMENTSTATE AS 'zAsset-Camera Processing Adjustment State',
+ zAsset.ZDEPTHTYPE AS 'zAsset-Depth Type',
+ zAsset.ZISMAGICCARPET AS 'zAsset-Is Magic Carpet-QuicktimeMOVfile',
+ CASE zAddAssetAttr.ZORIGINALRESOURCECHOICE
+ WHEN 0 THEN '0-JPEG Original Resource-0'
+ WHEN 1 THEN '1-RAW Original Resource-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZORIGINALRESOURCECHOICE || ''
+ END AS 'zAddAssetAttr-Orig Resource Choice',
+ CASE zAsset.ZSPATIALTYPE
+ WHEN 0 THEN '0-UnknownTesting-0'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSPATIALTYPE || ''
+ END AS 'zAsset-Spatial Type',
+ zAddAssetAttr.ZSPATIALOVERCAPTUREGROUPIDENTIFIER AS 'zAddAssetAttr-Spatial Over Capture Group ID',
+ zAddAssetAttr.ZPLACEANNOTATIONDATA AS 'zAddAssetAttr-Place Annotation Data',
+ zAddAssetAttr.ZDISTANCEIDENTITY AS 'zAddAssetAttr-Distance Identity',
+ zAddAssetAttr.ZEDITEDIPTCATTRIBUTES AS 'zAddAssetAttr-Edited IPTC Attributes',
+ zAssetDes.ZLONGDESCRIPTION AS 'zAssetDes-Long Description',
+ zAddAssetAttr.ZASSETDESCRIPTION AS 'zAddAssetAttr-Asset Description',
+ zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website',
+ zAddAssetAttr.ZACCESSIBILITYDESCRIPTION AS 'zAddAssetAttr-Accessibility Description',
+ zAddAssetAttr.ZPHOTOSTREAMTAGID AS 'zAddAssetAttr-Photo Stream Tag ID',
+ zPhotoAnalysisAssetAttr.ZWALLPAPERPROPERTIESVERSION AS 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version',
+ DateTime(zPhotoAnalysisAssetAttr.ZWALLPAPERPROPERTIESTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp',
+ DateTime(zCldFeedEnt.ZENTRYDATE + 978307200, 'UNIXEPOCH') AS 'zCldFeedEnt-Entry Date',
+ zCldFeedEnt.ZENTRYALBUMGUID AS 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart',
+ zCldFeedEnt.ZENTRYINVITATIONRECORDGUID AS 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart',
+ zCldFeedEnt.ZENTRYCLOUDASSETGUID AS 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart',
+ CASE zCldFeedEnt.ZENTRYPRIORITYNUMBER
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYPRIORITYNUMBER || ''
+ END AS 'zCldFeedEnt-Entry Priority Number',
+ CASE zCldFeedEnt.ZENTRYTYPENUMBER
+ WHEN 1 THEN 'Is My Shared Asset-1'
+ WHEN 2 THEN '2-StillTesting-2'
+ WHEN 3 THEN '3-StillTesting-3'
+ WHEN 4 THEN 'Not My Shared Asset-4'
+ WHEN 5 THEN 'Asset in Album with Invite Record-5'
+ ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYTYPENUMBER || ''
+ END AS 'zCldFeedEnt-Entry Type Number',
+ zCldSharedComment.ZCLOUDGUID AS 'zCldSharedComment-Cloud GUID-4TableStart',
+ DateTime(zCldSharedComment.ZCOMMENTDATE + 978307200, 'UNIXEPOCH') AS 'zCldSharedComment-Date',
+ DateTime(zCldSharedComment.ZCOMMENTCLIENTDATE + 978307200, 'UNIXEPOCH') AS 'zCldSharedComment-Comment Client Date',
+ DateTime(zAsset.ZCLOUDLASTVIEWEDCOMMENTDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Last Viewed Comment Date',
+ zCldSharedComment.ZCOMMENTTYPE AS 'zCldSharedComment-Type',
+ zCldSharedComment.ZCOMMENTTEXT AS 'zCldSharedComment-Comment Text',
+ zCldSharedComment.ZCOMMENTERHASHEDPERSONID AS 'zCldSharedComment-Commenter Hashed Person ID',
+ CASE zCldSharedComment.ZISBATCHCOMMENT
+ WHEN 0 THEN 'Not Batch Comment-0'
+ WHEN 1 THEN 'Batch Comment-1'
+ ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISBATCHCOMMENT || ''
+ END AS 'zCldSharedComment-Batch Comment',
+ CASE zCldSharedComment.ZISCAPTION
+ WHEN 0 THEN 'Not a Caption-0'
+ WHEN 1 THEN 'Caption-1'
+ ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISCAPTION || ''
+ END AS 'zCldSharedComment-Is a Caption',
+ CASE zAsset.ZCLOUDHASCOMMENTSBYME
+ WHEN 1 THEN 'Device Apple Acnt Commented-Liked Asset-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASCOMMENTSBYME || ''
+ END AS 'zAsset-Cloud Has Comments by Me',
+ CASE zCldSharedComment.ZISMYCOMMENT
+ WHEN 0 THEN 'Not My Comment-0'
+ WHEN 1 THEN 'My Comment-1'
+ ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISMYCOMMENT || ''
+ END AS 'zCldSharedComment-Is My Comment',
+ CASE zCldSharedComment.ZISDELETABLE
+ WHEN 0 THEN 'Not Deletable-0'
+ WHEN 1 THEN 'Deletable-1'
+ ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISDELETABLE || ''
+ END AS 'zCldSharedComment-Is Deletable',
+ CASE zAsset.ZCLOUDHASCOMMENTSCONVERSATION
+ WHEN 1 THEN 'Device Apple Acnt Commented-Liked Conversation-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASCOMMENTSCONVERSATION || ''
+ END AS 'zAsset-Cloud Has Comments Conversation',
+ CASE zAsset.ZCLOUDHASUNSEENCOMMENTS
+ WHEN 0 THEN 'zAsset No Unseen Comments-0'
+ WHEN 1 THEN 'zAsset Unseen Comments-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASUNSEENCOMMENTS || ''
+ END AS 'zAsset-Cloud Has Unseen Comments',
+ CASE zCldSharedCommentLiked.ZISLIKE
+ WHEN 0 THEN 'Asset Not Liked-0'
+ WHEN 1 THEN 'Asset Liked-1'
+ ELSE 'Unknown-New-Value!: ' || zCldSharedCommentLiked.ZISLIKE || ''
+ END AS 'zCldSharedComment-Liked',
+ CASE zAddAssetAttr.ZSHARETYPE
+ WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0'
+ WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || ''
+ END AS 'zAddAssetAttr-Share Type',
+ CASE zAsset.ZLIBRARYSCOPESHARESTATE
+ WHEN 0 THEN '0-Asset-Not-In-SPL-0'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || ''
+ END AS 'zAsset-Library Scope Share State- StillTesting',
+ CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE
+ WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0'
+ WHEN 1 THEN '1-Asset-In-Active-SPL-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || ''
+ END AS 'zAsset-Active Library Scope Participation State',
+ zAddAssetAttr.ZLIBRARYSCOPEASSETCONTRIBUTORSTOUPDATE AS 'zAddAssetAttr-Library Scope Asset Contributors To Update',
+ zShare.ZUUID AS 'zShare-UUID-CMM-4TableStart',
+ SPLzShare.ZUUID AS 'SPLzShare-UUID-SPL-4TableStart',
+ CASE zShare.Z_ENT
+ WHEN 55 THEN '55-SPL-Entity-55'
+ WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
+ WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || ''
+ END AS 'zShare-zENT-CMM',
+ CASE SPLzShare.Z_ENT
+ WHEN 55 THEN '55-SPL-Entity-55'
+ WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
+ WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.Z_ENT || ''
+ END AS 'SPLzShare-zENT-SPL',
+ CASE zSharePartic.Z54_SHARE
+ WHEN 55 THEN '55-SPL-Entity-55'
+ WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
+ WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.Z54_SHARE || ''
+ END AS 'zSharePartic-z54SHARE',
+ CASE SPLzSharePartic.Z54_SHARE
+ WHEN 55 THEN '55-SPL-Entity-55'
+ WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
+ WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.Z54_SHARE || ''
+ END AS 'SPLzSharePartic-z54SHARE',
+ CASE zShare.ZSTATUS
+ WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSTATUS || ''
+ END AS 'zShare-Status-CMM',
+ CASE SPLzShare.ZSTATUS
+ WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSTATUS || ''
+ END AS 'SPLzShare-Status-SPL',
+ CASE zShare.ZSCOPETYPE
+ WHEN 2 THEN '2-iCloudLink-CMMoment-2'
+ WHEN 4 THEN '4-iCld-Shared-Photo-Library-SPL-4'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPETYPE || ''
+ END AS 'zShare-Scope Type-CMM',
+ CASE SPLzShare.ZSCOPETYPE
+ WHEN 2 THEN '2-iCloudLink-CMMoment-2'
+ WHEN 4 THEN '4-iCld-Shared-Photo-Library-SPL-4'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSCOPETYPE || ''
+ END AS 'SPLzShare-Scope Type-SPL',
+ CASE zShare.ZLOCALPUBLISHSTATE
+ WHEN 2 THEN '2-Published-2'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZLOCALPUBLISHSTATE || ''
+ END AS 'zShare-Local Publish State-CMM',
+ CASE SPLzShare.ZLOCALPUBLISHSTATE
+ WHEN 2 THEN '2-Published-2'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZLOCALPUBLISHSTATE || ''
+ END AS 'SPLzShare-Local Publish State-SPL',
+ CASE zShare.ZPUBLICPERMISSION
+ WHEN 1 THEN '1-Public_Premission_Denied-Private-1'
+ WHEN 2 THEN '2-Public_Premission_Granted-Public-2'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZPUBLICPERMISSION || ''
+ END AS 'zShare-Public Permission-CMM',
+ CASE SPLzShare.ZPUBLICPERMISSION
+ WHEN 1 THEN '1-Public_Premission_Denied-Private-1'
+ WHEN 2 THEN '2-Public_Premission_Granted-Public-2'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZPUBLICPERMISSION || ''
+ END AS 'SPLzShare-Public Permission-SPL',
+ zShare.ZORIGINATINGSCOPEIDENTIFIER AS 'zShare-Originating Scope ID-CMM',
+ SPLzShare.ZORIGINATINGSCOPEIDENTIFIER AS 'SPLzShare-Originating Scope ID-SPL',
+ zShare.ZSCOPEIDENTIFIER AS 'zShare-Scope ID-CMM',
+ SPLzShare.ZSCOPEIDENTIFIER AS 'SPLzShare-Scope ID-SPL',
+ zShare.ZTITLE AS 'zShare-Title-CMM',
+ SPLzShare.ZTITLE AS 'SPLzShare-Title-SPL',
+ zShare.ZSHAREURL AS 'zShare-Share URL-CMM',
+ SPLzShare.ZSHAREURL AS 'SPLzShare-Share URL-SPL',
+ DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date-CMM',
+ DateTime(SPLzShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Creation Date-SPL',
+ DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date-CMM',
+ DateTime(SPLzShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Start Date-SPL',
+ DateTime(zShare.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-End Date-CMM',
+ DateTime(SPLzShare.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-End Date-SPL',
+ DateTime(zShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Expiry Date-CMM',
+ DateTime(SPLzShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Expiry Date-SPL',
+ zShare.ZCLOUDITEMCOUNT AS 'zShare-Cloud Item Count-CMM',
+ SPLzShare.ZCLOUDITEMCOUNT AS 'SPLzShare-Cloud Item Count-SPL',
+ zShare.ZASSETCOUNT AS 'zShare-Asset Count-CMM',
+ SPLzShare.ZASSETCOUNT AS 'SPLzShare-Asset Count-SPL',
+ zShare.ZCLOUDPHOTOCOUNT AS 'zShare-Cloud Photo Count-CMM',
+ SPLzShare.ZCLOUDPHOTOCOUNT AS 'SPLzShare-Cloud Photo Count-SPL',
+ zShare.ZCOUNTOFASSETSADDEDBYCAMERASMARTSHARING AS 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM',
+ SPLzShare.ZCOUNTOFASSETSADDEDBYCAMERASMARTSHARING AS 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL',
+ zShare.ZPHOTOSCOUNT AS 'zShare-Photos Count-CMM',
+ SPLzShare.ZPHOTOSCOUNT AS 'SPLzShare-Photos Count-CMM-SPL',
+ zShare.ZUPLOADEDPHOTOSCOUNT AS 'zShare-Uploaded Photos Count-CMM',
+ SPLzShare.ZUPLOADEDPHOTOSCOUNT AS 'SPLzShare-Uploaded Photos Count-SPL',
+ zShare.ZCLOUDVIDEOCOUNT AS 'zShare-Cloud Video Count-CMM',
+ SPLzShare.ZCLOUDVIDEOCOUNT AS 'SPLzShare-Cloud Video Count-SPL',
+ zShare.ZVIDEOSCOUNT AS 'zShare-Videos Count-CMM',
+ SPLzShare.ZVIDEOSCOUNT AS 'SPLzShare-Videos Count-SPL',
+ zShare.ZUPLOADEDVIDEOSCOUNT AS 'zShare-Uploaded Videos Count-CMM',
+ SPLzShare.ZUPLOADEDVIDEOSCOUNT AS 'SPLzShare-Uploaded Videos Count-SPL',
+ zShare.ZFORCESYNCATTEMPTED AS 'zShare-Force Sync Attempted-CMM',
+ SPLzShare.ZFORCESYNCATTEMPTED AS 'SPLzShare-Force Sync Attempted-SPL',
+ CASE zShare.ZCLOUDLOCALSTATE
+ WHEN 1 THEN '1-LocalandCloud-SPL-1'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDLOCALSTATE || ''
+ END AS 'zShare-Cloud Local State-CMM',
+ CASE SPLzShare.ZCLOUDLOCALSTATE
+ WHEN 1 THEN '1-LocalandCloud-SPL-1'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZCLOUDLOCALSTATE || ''
+ END AS 'SPLzShare-Cloud Local State-SPL',
+ CASE zShare.ZSCOPESYNCINGSTATE
+ WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPESYNCINGSTATE || ''
+ END AS 'zShare-Scope Syncing State-CMM',
+ CASE SPLzShare.ZSCOPESYNCINGSTATE
+ WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSCOPESYNCINGSTATE || ''
+ END AS 'SPLzShare-Scope Syncing State-SPL',
+ CASE zShare.ZAUTOSHAREPOLICY
+ WHEN 0 THEN '0-AutoShare-OFF_SPL_Test_NotAllAtSetup-0'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZAUTOSHAREPOLICY || ''
+ END AS 'zShare-Auto Share Policy-CMM',
+ CASE SPLzShare.ZAUTOSHAREPOLICY
+ WHEN 0 THEN '0-AutoShare-OFF_SPL_Test_NotAllAtSetup-0'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZAUTOSHAREPOLICY || ''
+ END AS 'SPLzShare-Auto Share Policy-SPL',
+ CASE zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION
+ WHEN 0 THEN '0-DoNotNotify-CMM-0'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION || ''
+ END AS 'zShare-Should Notify On Upload Completion-CMM',
+ CASE SPLzShare.ZSHOULDNOTIFYONUPLOADCOMPLETION
+ WHEN 0 THEN '0-DoNotNotify-SPL-0'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSHOULDNOTIFYONUPLOADCOMPLETION || ''
+ END AS 'SPLzShare-Should Notify On Upload Completion-SPL',
+ zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM',
+ CASE zShare.ZTRASHEDSTATE
+ WHEN 0 THEN '0-Not_in_Trash-0'
+ WHEN 1 THEN '1-In_Trash-1'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZTRASHEDSTATE || ''
+ END AS 'zShare-Trashed State-CMM',
+ CASE SPLzShare.ZTRASHEDSTATE
+ WHEN 0 THEN '0-Not_in_Trash-0'
+ WHEN 1 THEN '1-In_Trash-1'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZTRASHEDSTATE || ''
+ END AS 'SPLzShare-Trashed State-SPL',
+ CASE zShare.ZCLOUDDELETESTATE
+ WHEN 0 THEN '0-Not Deleted-0'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDDELETESTATE || ''
+ END AS 'zShare-Cloud Delete State-CMM',
+ CASE SPLzShare.ZCLOUDDELETESTATE
+ WHEN 0 THEN '0-Not Deleted-0'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZCLOUDDELETESTATE || ''
+ END AS 'SPLzShare-Cloud Delete State-SPL',
+ DateTime(zShare.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Trashed Date-CMM',
+ DateTime(SPLzShare.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Trashed Date-SPL',
+ DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-LastParticipant Asset Trash Notification Date-CMM',
+ DateTime(SPLzShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-LastParticipant Asset Trash Notification Date-SPL',
+ DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Last Participant Asset Trash Notification View Date-CMM',
+ DateTime(SPLzShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Last Participant Asset Trash Notification View Date-SPL',
+ CASE zShare.ZEXITSOURCE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSOURCE || ''
+ END AS 'zShare-Exit Source-CMM',
+ CASE SPLzShare.ZEXITSOURCE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZEXITSOURCE || ''
+ END AS 'SPLzShare-Exit Source-SPL',
+ CASE zShare.ZEXITSTATE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSTATE || ''
+ END AS 'zShare-SPL_Exit State-CMM',
+ CASE SPLzShare.ZEXITSTATE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZEXITSTATE || ''
+ END AS 'SPLzShare-SPL_Exit State-SPL',
+ CASE zShare.ZEXITTYPE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZEXITTYPE || ''
+ END AS 'zShare-Exit Type-CMM',
+ CASE SPLzShare.ZEXITTYPE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZEXITTYPE || ''
+ END AS 'SPLzShare-Exit Type-SPL',
+ CASE zShare.ZSHOULDIGNOREBUDGETS
+ WHEN 1 THEN '1-StillTesting-CMM-1'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDIGNOREBUDGETS || ''
+ END AS 'zShare-Should Ignor Budgets-CMM',
+ CASE SPLzShare.ZSHOULDIGNOREBUDGETS
+ WHEN 1 THEN '1-StillTesting-CMM-1'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSHOULDIGNOREBUDGETS || ''
+ END AS 'SPLzShare-Should Ignor Budgets-SPL',
+ CASE zShare.ZPREVIEWSTATE
+ WHEN 0 THEN '0-NotInPreviewState-StillTesting-SPL-0'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZPREVIEWSTATE || ''
+ END AS 'zShare-Preview State-CMM',
+ CASE SPLzShare.ZPREVIEWSTATE
+ WHEN 0 THEN '0-NotInPreviewState-StillTesting-SPL-0'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZPREVIEWSTATE || ''
+ END AS 'SPLzShare-Preview State-SPL',
+ zShare.ZPREVIEWDATA AS 'zShare-Preview Data-CMM',
+ SPLzShare.ZPREVIEWDATA AS 'SPLzShare-Preview Data-SPL',
+ zShare.ZRULESDATA AS 'zShare-Rules-CMM',
+ SPLzShare.ZRULESDATA AS 'SPLzShare-Rules-SPL',
+ zShare.ZTHUMBNAILIMAGEDATA AS 'zShare-Thumbnail Image Data-CMM',
+ SPLzShare.ZTHUMBNAILIMAGEDATA AS 'SPLzShare-Thumbnail Image Data-SPL',
+ CASE zShare.ZPARTICIPANTCLOUDUPDATESTATE
+ WHEN 2 THEN '2-ParticipantAllowedToUpdate_SPL_StillTesting-2'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZPARTICIPANTCLOUDUPDATESTATE || ''
+ END AS 'zShare-Participant Cloud Update State-CMM',
+ CASE SPLzShare.ZPARTICIPANTCLOUDUPDATESTATE
+ WHEN 2 THEN '2-ParticipantAllowedToUpdate_SPL_StillTesting-2'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZPARTICIPANTCLOUDUPDATESTATE || ''
+ END AS 'SPLzShare-Participant Cloud Update State-SPL',
+ zSharePartic.ZUUID AS 'zSharePartic-UUID-4TableStart',
+ SPLzSharePartic.ZUUID AS 'SPLzSharePartic-UUID-4TableStart',
+ CASE zSharePartic.ZACCEPTANCESTATUS
+ WHEN 1 THEN '1-Invite-Pending_or_Declined-1'
+ WHEN 2 THEN '2-Invite-Accepted-2'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZACCEPTANCESTATUS || ''
+ END AS 'zSharePartic-Acceptance Status',
+ CASE SPLzSharePartic.ZACCEPTANCESTATUS
+ WHEN 1 THEN '1-Invite-Pending_or_Declined-1'
+ WHEN 2 THEN '2-Invite-Accepted-2'
+ ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZACCEPTANCESTATUS || ''
+ END AS 'SPLzSharePartic-Acceptance Status',
+ CASE zSharePartic.ZISCURRENTUSER
+ WHEN 0 THEN '0-Participant-Not_CloudStorageOwner-0'
+ WHEN 1 THEN '1-Participant-Is_CloudStorageOwner-1'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || ''
+ END AS 'zSharePartic-Is Current User',
+ CASE SPLzSharePartic.ZISCURRENTUSER
+ WHEN 0 THEN '0-Participant-Not_CurrentUser-0'
+ WHEN 1 THEN '1-Participant-Is_CurrentUser-1'
+ ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZISCURRENTUSER || ''
+ END AS 'SPLzSharePartic-Is Current User',
+ CASE zSharePartic.ZROLE
+ WHEN 1 THEN '1-Participant-is-Owner-Role-1'
+ WHEN 2 THEN '2-Participant-is-Invitee-Role-2'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZROLE || ''
+ END AS 'zSharePartic-Role',
+ CASE SPLzSharePartic.ZROLE
+ WHEN 1 THEN '1-Participant-is-Owner-Role-1'
+ WHEN 2 THEN '2-Participant-is-Invitee-Role-2'
+ ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZROLE || ''
+ END AS 'SPLzSharePartic-Role',
+ CASE zSharePartic.ZPERMISSION
+ WHEN 3 THEN '3-Participant-has-Full-Premissions-3'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZPERMISSION || ''
+ END AS 'zSharePartic-Premission',
+ CASE SPLzSharePartic.ZPERMISSION
+ WHEN 3 THEN '3-Participant-has-Full-Premissions-3'
+ ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZPERMISSION || ''
+ END AS 'SPLzSharePartic-Premission',
+ zSharePartic.ZPARTICIPANTID AS 'zSharePartic-Participant ID',
+ SPLzSharePartic.ZPARTICIPANTID AS 'SPLzSharePartic-Participant ID',
+ zSharePartic.ZUSERIDENTIFIER AS 'zSharePartic-User ID',
+ SPLzSharePartic.ZUSERIDENTIFIER AS 'SPLzSharePartic-User ID',
+ zAssetContrib.ZPARTICIPANT AS 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart',
+ SPLzSharePartic.Z_PK AS 'SPLzSharePartic-zPK-4TableStart',
+ zSharePartic.Z_PK AS 'zSharePartic-zPK-4TableStart',
+ zSharePartic.ZEMAILADDRESS AS 'zSharePartic-Email Address',
+ SPLzSharePartic.ZEMAILADDRESS AS 'SPLzSharePartic-Email Address',
+ zSharePartic.ZPHONENUMBER AS 'zSharePartic-Phone Number',
+ SPLzSharePartic.ZPHONENUMBER AS 'SPLzSharePartic-Phone Number',
+ CASE zSharePartic.ZEXITSTATE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZEXITSTATE || ''
+ END AS 'zSharePartic-Exit State',
+ CASE SPLzSharePartic.ZEXITSTATE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZEXITSTATE || ''
+ END AS 'SPLzSharePartic-Exit State',
+ ParentzGenAlbum.ZUUID AS 'ParentzGenAlbum-UUID-4TableStart',
+ zGenAlbum.ZUUID AS 'zGenAlbum-UUID-4TableStart',
+ SWYConverszGenAlbum.ZUUID AS 'SWYConverszGenAlbum-UUID-4TableStart',
+ ParentzGenAlbum.ZCLOUDGUID AS 'ParentzGenAlbum-Cloud GUID-4TableStart',
+ zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4TableStart',
+ SWYConverszGenAlbum.ZCLOUDGUID AS 'SWYConverszGenAlbum-Cloud GUID-4TableStart',
+ zCldShareAlbumInvRec.ZALBUMGUID AS 'zCldShareAlbumInvRec-Album GUID-4TableStart',
+ zCldShareAlbumInvRec.ZCLOUDGUID AS 'zCldShareAlbumInvRec-Cloud GUID-4TableStart',
+ zGenAlbum.ZPROJECTRENDERUUID AS 'zGenAlbum-Project Render UUID-4TableStart',
+ SWYConverszGenAlbum.ZPROJECTRENDERUUID AS 'SWYConverszGenAlbum-Project Render UUID-4TableStart',
+ CASE zAlbumList.ZNEEDSREORDERINGNUMBER
+ WHEN 1 THEN '1-Yes-1'
+ ELSE 'Unknown-New-Value!: ' || zAlbumList.ZNEEDSREORDERINGNUMBER || ''
+ END AS 'zAlbumList-Needs Reordering Number',
+ CASE zGenAlbum.Z_ENT
+ WHEN 27 THEN '27-LPL-SPL-CPL_Album-DecodingVariableBasedOniOS-27'
+ WHEN 28 THEN '28-LPL-SPL-CPL-Shared_Album-DecodingVariableBasedOniOS-28'
+ WHEN 29 THEN '29-Shared_Album-DecodingVariableBasedOniOS-29'
+ WHEN 30 THEN '30-Duplicate_Album-Pending_Merge-30'
+ WHEN 35 THEN '35-SearchIndexRebuild-1600KIND-35'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.Z_ENT || ''
+ END AS 'zGenAlbum-zENT- Entity',
+ CASE ParentzGenAlbum.ZKIND
+ WHEN 2 THEN '2-Non-Shared-Album-2'
+ WHEN 1505 THEN '1505-Shared-Album-1505'
+ WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT'
+ WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT'
+ WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509'
+ WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510'
+ WHEN 3571 THEN '3571-Progress-Sync-3571'
+ WHEN 3572 THEN '3572-Progress-OTA-Restore-3572'
+ WHEN 3573 THEN '3573-Progress-FS-Import-3573'
+ WHEN 3998 THEN '3998-Project Root Folder-3998'
+ WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999'
+ WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZKIND || ''
+ END AS 'ParentzGenAlbum-Kind',
+ CASE zGenAlbum.ZKIND
+ WHEN 2 THEN '2-Non-Shared-Album-2'
+ WHEN 1505 THEN '1505-Shared-Album-1505'
+ WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT'
+ WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT'
+ WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509'
+ WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510'
+ WHEN 3571 THEN '3571-Progress-Sync-3571'
+ WHEN 3572 THEN '3572-Progress-OTA-Restore-3572'
+ WHEN 3573 THEN '3573-Progress-FS-Import-3573'
+ WHEN 3998 THEN '3998-Project Root Folder-3998'
+ WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999'
+ WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || ''
+ END AS 'zGenAlbum-Album Kind',
+ CASE SWYConverszGenAlbum.ZKIND
+ WHEN 2 THEN '2-Non-Shared-Album-2'
+ WHEN 1505 THEN '1505-Shared-Album-1505'
+ WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT'
+ WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT'
+ WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509'
+ WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510'
+ WHEN 3571 THEN '3571-Progress-Sync-3571'
+ WHEN 3572 THEN '3572-Progress-OTA-Restore-3572'
+ WHEN 3573 THEN '3573-Progress-FS-Import-3573'
+ WHEN 3998 THEN '3998-Project Root Folder-3998'
+ WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999'
+ WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZKIND || ''
+ END AS 'SWYConverszGenAlbum-Album Kind',
+ CASE ParentzGenAlbum.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0'
+ WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDLOCALSTATE || ''
+ END AS 'ParentzGenAlbum-Cloud-Local-State',
+ CASE zGenAlbum.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0'
+ WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDLOCALSTATE || ''
+ END AS 'zGenAlbum-Cloud_Local_State',
+ CASE SWYConverszGenAlbum.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0'
+ WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDLOCALSTATE || ''
+ END AS 'SWYConverszGenAlbum-Cloud_Local_State',
+ ParentzGenAlbum.ZTITLE AS 'ParentzGenAlbum- Title',
+ zGenAlbum.ZTITLE AS 'zGenAlbum- Title-User&System Applied',
+ SWYConverszGenAlbum.ZTITLE AS 'SWYConverszGenAlbum- Title -User&System Applied',
+ zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum-Import Session ID-SWY',
+ zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK',
+ SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID-SWY',
+ zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier',
+ SWYConverszGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'SWYzGenAlbum-Imported by Bundle Identifier',
+ CASE SWYConverszGenAlbum.ZSYNDICATE
+ WHEN 1 THEN '1-SWYConverszGenAlbum-Syndicate - SWY-SyncedFile-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSYNDICATE || ''
+ END AS 'SWYConverszGenAlbum- Syndicate',
+ DateTime(ParentzGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum-Creation Date',
+ DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date',
+ DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date',
+ DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Creation Date',
+ DateTime(SWYConverszGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Creation Date',
+ DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
+ DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date',
+ DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date',
+ DateTime(SWYConverszGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-End Date',
+ DateTime(zGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Subscription Date',
+ DateTime(SWYConverszGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Subscription Date',
+ ParentzGenAlbum.ZPENDINGITEMSCOUNT AS 'ParentzGenAlbum-Pending Items Count',
+ zGenAlbum.ZPENDINGITEMSCOUNT AS 'zGenAlbum-Pending Items Count',
+ SWYConverszGenAlbum.ZPENDINGITEMSCOUNT AS 'SWYConverszGenAlbum-Pending Items Count',
+ CASE ParentzGenAlbum.ZPENDINGITEMSTYPE
+ WHEN 1 THEN 'No-1'
+ WHEN 24 THEN '24-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZPENDINGITEMSTYPE || ''
+ END AS 'ParentzGenAlbum-Pending Items Type',
+ CASE zGenAlbum.ZPENDINGITEMSTYPE
+ WHEN 1 THEN 'No-1'
+ WHEN 24 THEN '24-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPENDINGITEMSTYPE || ''
+ END AS 'zGenAlbum-Pending Items Type',
+ CASE SWYConverszGenAlbum.ZPENDINGITEMSTYPE
+ WHEN 1 THEN 'No-1'
+ WHEN 24 THEN '24-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPENDINGITEMSTYPE || ''
+ END AS 'SWYConverszGenAlbum-Pending Items Type',
+ zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum- Cached Photos Count',
+ SWYConverszGenAlbum.ZCACHEDPHOTOSCOUNT AS 'SWYConverszGenAlbum- Cached Photos Count',
+ zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum- Cached Videos Count',
+ SWYConverszGenAlbum.ZCACHEDVIDEOSCOUNT AS 'SWYConverszGenAlbum- Cached Videos Count',
+ zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum- Cached Count',
+ SWYConverszGenAlbum.ZCACHEDCOUNT AS 'SWYConverszGenAlbum- Cached Count',
+ ParentzGenAlbum.ZSYNCEVENTORDERKEY AS 'ParentzGenAlbum-Sync Event Order Key',
+ zGenAlbum.ZSYNCEVENTORDERKEY AS 'zGenAlbum-Sync Event Order Key',
+ SWYConverszGenAlbum.ZSYNCEVENTORDERKEY AS 'SWYConverszGenAlbum-Sync Event Order Key',
+ CASE zGenAlbum.ZHASUNSEENCONTENT
+ WHEN 0 THEN 'No Unseen Content-StillTesting-0'
+ WHEN 1 THEN 'Unseen Content-StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZHASUNSEENCONTENT || ''
+ END AS 'zGenAlbum-Has Unseen Content',
+ CASE SWYConverszGenAlbum.ZHASUNSEENCONTENT
+ WHEN 0 THEN 'No Unseen Content-StillTesting-0'
+ WHEN 1 THEN 'Unseen Content-StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZHASUNSEENCONTENT || ''
+ END AS 'SWYConverszGenAlbum-Has Unseen Content',
+ zGenAlbum.ZUNSEENASSETSCOUNT AS 'zGenAlbum-Unseen Asset Count',
+ SWYConverszGenAlbum.ZUNSEENASSETSCOUNT AS 'SWYConverszGenAlbum-Unseen Asset Count',
+ CASE zGenAlbum.ZISOWNED
+ WHEN 0 THEN 'zGenAlbum-Not Owned by Device Apple Acnt-0'
+ WHEN 1 THEN 'zGenAlbum-Owned by Device Apple Acnt-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISOWNED || ''
+ END AS 'zGenAlbum-is Owned',
+ CASE SWYConverszGenAlbum.ZISOWNED
+ WHEN 0 THEN 'SWYConverszGenAlbum-Not Owned by Device Apple Acnt-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum-Owned by Device Apple Acnt-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISOWNED || ''
+ END AS 'SWYConverszGenAlbum-is Owned',
+ CASE zGenAlbum.ZCLOUDRELATIONSHIPSTATE
+ WHEN 0 THEN 'zGenAlbum-Cloud Album Owned by Device Apple Acnt-0'
+ WHEN 2 THEN 'zGenAlbum-Cloud Album Not Owned by Device Apple Acnt-2'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDRELATIONSHIPSTATE || ''
+ END AS 'zGenAlbum-Cloud Relationship State',
+ CASE SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATE
+ WHEN 0 THEN 'SWYConverszGenAlbum-Cloud Album Owned by Device Apple Acnt-0'
+ WHEN 2 THEN 'SWYConverszGenAlbum-Cloud Album Not Owned by Device Apple Acnt-2'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATE || ''
+ END AS 'SWYConverszGenAlbum-Cloud Relationship State',
+ CASE zGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL
+ WHEN 0 THEN 'zGenAlbum-Shared Album Accessible Local Device-0'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL || ''
+ END AS 'zGenAlbum-Cloud Relationship State Local',
+ CASE SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL
+ WHEN 0 THEN 'SWYConverszGenAlbum-Shared Album Accessible Local Device-0'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL || ''
+ END AS 'SWYConverszGenAlbum-Cloud Relationship State Local',
+ zGenAlbum.ZCLOUDOWNEREMAILKEY AS 'zGenAlbum-Cloud Owner Mail Key',
+ SWYConverszGenAlbum.ZCLOUDOWNEREMAILKEY AS 'SWYConverszGenAlbum-Cloud Owner Mail Key',
+ zGenAlbum.ZCLOUDOWNERFIRSTNAME AS 'zGenAlbum-Cloud Owner Frist Name',
+ SWYConverszGenAlbum.ZCLOUDOWNERFIRSTNAME AS 'SWYConverszGenAlbum-Cloud Owner Frist Name',
+ zGenAlbum.ZCLOUDOWNERLASTNAME AS 'zGenAlbum-Cloud Owner Last Name',
+ SWYConverszGenAlbum.ZCLOUDOWNERLASTNAME AS 'SWYConverszGenAlbum-Cloud Owner Last Name',
+ zGenAlbum.ZCLOUDOWNERFULLNAME AS 'zGenAlbum-Cloud Owner Full Name',
+ SWYConverszGenAlbum.ZCLOUDOWNERFULLNAME AS 'SWYConverszGenAlbum-Cloud Owner Full Name',
+ zGenAlbum.ZCLOUDPERSONID AS 'zGenAlbum-Cloud Person ID',
+ SWYConverszGenAlbum.ZCLOUDPERSONID AS 'SWYConverszGenAlbum-Cloud Person ID',
+ zAsset.ZCLOUDOWNERHASHEDPERSONID AS 'zAsset-Cloud Owner Hashed Person ID',
+ zGenAlbum.ZCLOUDOWNERHASHEDPERSONID AS 'zGenAlbum-Cloud Owner Hashed Person ID',
+ SWYConverszGenAlbum.ZCLOUDOWNERHASHEDPERSONID AS 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID',
+ CASE zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL
+ WHEN 0 THEN 'zGenAlbum-Local Cloud Single Contributor Enabled-0'
+ WHEN 1 THEN 'zGenAlbum-Local Cloud Multi-Contributors Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL || ''
+ END AS 'zGenAlbum-Local Cloud Multi-Contributors Enabled',
+ CASE SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL
+ WHEN 0 THEN 'SWYConverszGenAlbum-Local Cloud Single Contributor Enabled-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL || ''
+ END AS 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled',
+ CASE zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED
+ WHEN 0 THEN 'zGenAlbum-Cloud Single Contributor Enabled-0'
+ WHEN 1 THEN 'zGenAlbum-Cloud Multi-Contributors Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED || ''
+ END AS 'zGenAlbum-Cloud Multi-Contributors Enabled',
+ CASE SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED
+ WHEN 0 THEN 'SWYConverszGenAlbum-Cloud Single Contributor Enabled-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED || ''
+ END AS 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled',
+ CASE zGenAlbum.ZCLOUDALBUMSUBTYPE
+ WHEN 0 THEN 'zGenAlbum Multi-Contributor-0'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDALBUMSUBTYPE || ''
+ END AS 'zGenAlbum-Cloud Album Sub Type',
+ CASE SWYConverszGenAlbum.ZCLOUDALBUMSUBTYPE
+ WHEN 0 THEN 'SWYConverszGenAlbum Multi-Contributor-0'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDALBUMSUBTYPE || ''
+ END AS 'SWYConverszGenAlbum-Cloud Album Sub Type',
+ DateTime(zGenAlbum.ZCLOUDLASTCONTRIBUTIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Contribution Date',
+ DateTime(SWYConverszGenAlbum.ZCLOUDLASTCONTRIBUTIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Contribution Date',
+ DateTime(zGenAlbum.ZCLOUDLASTINTERESTINGCHANGEDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Last Interesting Change Date',
+ DateTime(SWYConverszGenAlbum.ZCLOUDLASTINTERESTINGCHANGEDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Last Interesting Change Date',
+ CASE zGenAlbum.ZCLOUDNOTIFICATIONSENABLED
+ WHEN 0 THEN 'zGenAlbum-Cloud Notifications Disabled-0'
+ WHEN 1 THEN 'zGenAlbum-Cloud Notifications Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDNOTIFICATIONSENABLED || ''
+ END AS 'zGenAlbum-Cloud Notification Enabled',
+ CASE SWYConverszGenAlbum.ZCLOUDNOTIFICATIONSENABLED
+ WHEN 0 THEN 'SWYConverszGenAlbum-Cloud Notifications Disabled-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum-Cloud Notifications Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDNOTIFICATIONSENABLED || ''
+ END AS 'SWYConverszGenAlbum-Cloud Notification Enabled',
+ CASE ParentzGenAlbum.ZISPINNED
+ WHEN 0 THEN '0-ParentzGenAlbum Not Pinned-0'
+ WHEN 1 THEN '1-ParentzGenAlbum Pinned-1'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZISPINNED || ''
+ END AS 'ParentzGenAlbum-Pinned',
+ CASE zGenAlbum.ZISPINNED
+ WHEN 0 THEN 'zGenAlbum-Local Not Pinned-0'
+ WHEN 1 THEN 'zGenAlbum-Local Pinned-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPINNED || ''
+ END AS 'zGenAlbum-Pinned',
+ CASE SWYConverszGenAlbum.ZISPINNED
+ WHEN 0 THEN 'SWYConverszGenAlbum-Local Not Pinned-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum-Local Pinned-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPINNED || ''
+ END AS 'SWYConverszGenAlbum-Pinned',
+ CASE ParentzGenAlbum.ZCUSTOMSORTKEY
+ WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT'
+ WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT'
+ WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMSORTKEY || ''
+ END AS 'ParentzGenAlbum-Custom Sort Key',
+ CASE zGenAlbum.ZCUSTOMSORTKEY
+ WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT'
+ WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT'
+ WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTKEY || ''
+ END AS 'zGenAlbum-Custom Sort Key',
+ CASE SWYConverszGenAlbum.ZCUSTOMSORTKEY
+ WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Manually-0_RT'
+ WHEN 1 THEN '1-SWYConverszGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT'
+ WHEN 5 THEN '5-SWYConverszGenAlbum-Sorted_by_Title-5_RT'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTKEY || ''
+ END AS 'SWYConverszGenAlbum-Custom Sort Key',
+ CASE ParentzGenAlbum.ZCUSTOMSORTASCENDING
+ WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0'
+ WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMSORTASCENDING || ''
+ END AS 'ParentzGenAlbum-Custom Sort Ascending',
+ CASE zGenAlbum.ZCUSTOMSORTASCENDING
+ WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0'
+ WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTASCENDING || ''
+ END AS 'zGenAlbum-Custom Sort Ascending',
+ CASE SWYConverszGenAlbum.ZCUSTOMSORTASCENDING
+ WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Newest_First-0'
+ WHEN 1 THEN '1-SWYConverszGenAlbum-Sorted_Oldest_First-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTASCENDING || ''
+ END AS 'SWYConverszGenAlbum-Custom Sort Ascending',
+ CASE ParentzGenAlbum.ZISPROTOTYPE
+ WHEN 0 THEN '0-ParentzGenAlbum Not Prototype-0'
+ WHEN 1 THEN '1-ParentzGenAlbum Prototype-1'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZISPROTOTYPE || ''
+ END AS 'ParentzGenAlbum-Is Prototype',
+ CASE zGenAlbum.ZISPROTOTYPE
+ WHEN 0 THEN 'zGenAlbum-Not Prototype-0'
+ WHEN 1 THEN 'zGenAlbum-Prototype-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPROTOTYPE || ''
+ END AS 'zGenAlbum-Is Prototype',
+ CASE SWYConverszGenAlbum.ZISPROTOTYPE
+ WHEN 0 THEN 'SWYConverszGenAlbum-Not Prototype-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum-Prototype-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPROTOTYPE || ''
+ END AS 'SWYConverszGenAlbum-Is Prototype',
+ CASE ParentzGenAlbum.ZPROJECTDOCUMENTTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZPROJECTDOCUMENTTYPE || ''
+ END AS 'ParentzGenAlbum-Project Document Type',
+ CASE zGenAlbum.ZPROJECTDOCUMENTTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPROJECTDOCUMENTTYPE || ''
+ END AS 'zGenAlbum-Project Document Type',
+ CASE SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE || ''
+ END AS 'SWYConverszGenAlbum-Project Document Type',
+ CASE ParentzGenAlbum.ZCUSTOMQUERYTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMQUERYTYPE || ''
+ END AS 'ParentzGenAlbum-Custom Query Type',
+ CASE zGenAlbum.ZCUSTOMQUERYTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMQUERYTYPE || ''
+ END AS 'zGenAlbum-Custom Query Type',
+ CASE SWYConverszGenAlbum.ZCUSTOMQUERYTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMQUERYTYPE || ''
+ END AS 'SWYConverszGenAlbum-Custom Query Type',
+ CASE ParentzGenAlbum.ZTRASHEDSTATE
+ WHEN 0 THEN '0-ParentzGenAlbum Not In Trash-0'
+ WHEN 1 THEN '1-ParentzGenAlbum Album In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZTRASHEDSTATE || ''
+ END AS 'ParentzGenAlbum-Trashed State',
+ DateTime(ParentzGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum-Trash Date',
+ CASE zGenAlbum.ZTRASHEDSTATE
+ WHEN 0 THEN 'zGenAlbum Not In Trash-0'
+ WHEN 1 THEN 'zGenAlbum Album In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZTRASHEDSTATE || ''
+ END AS 'zGenAlbum-Trashed State',
+ DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date',
+ CASE SWYConverszGenAlbum.ZTRASHEDSTATE
+ WHEN 0 THEN 'SWYConverszGenAlbum Not In Trash-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum Album In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZTRASHEDSTATE || ''
+ END AS 'SWYConverszGenAlbum-Trashed State',
+ DateTime(SWYConverszGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Trash Date',
+ CASE ParentzGenAlbum.ZCLOUDDELETESTATE
+ WHEN 0 THEN '0-ParentzGenAlbum Cloud Not Deleted-0'
+ WHEN 1 THEN '1-ParentzGenAlbum Cloud Album Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDDELETESTATE || ''
+ END AS 'ParentzGenAlbum-Cloud Delete State',
+ CASE zGenAlbum.ZCLOUDDELETESTATE
+ WHEN 0 THEN 'zGenAlbum Cloud Not Deleted-0'
+ WHEN 1 THEN 'zGenAlbum Cloud Album Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDDELETESTATE || ''
+ END AS 'zGenAlbum-Cloud Delete State',
+ CASE SWYConverszGenAlbum.ZCLOUDDELETESTATE
+ WHEN 0 THEN 'SWYConverszGenAlbum Cloud Not Deleted-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum Cloud Album Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDDELETESTATE || ''
+ END AS 'SWYConverszGenAlbum-Cloud Delete State',
+ CASE zGenAlbum.ZCLOUDOWNERISWHITELISTED
+ WHEN 0 THEN 'zGenAlbum Cloud Owner Not Whitelisted-0'
+ WHEN 1 THEN 'zGenAlbum Cloud Owner Whitelisted-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDOWNERISWHITELISTED || ''
+ END AS 'zGenAlbum-Cloud Owner Whitelisted',
+ CASE SWYConverszGenAlbum.ZCLOUDOWNERISWHITELISTED
+ WHEN 0 THEN 'SWYConverszGenAlbum Cloud Owner Not Whitelisted-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum Cloud Owner Whitelisted-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDOWNERISWHITELISTED || ''
+ END AS 'SWYConverszGenAlbum-Cloud Owner Whitelisted',
+ CASE zGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL
+ WHEN 0 THEN 'zGenAlbum Cloud Local Public URL Disabled-0'
+ WHEN 1 THEN 'zGenAlbum Cloud Local has Public URL Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL || ''
+ END AS 'zGenAlbum-Cloud Local Public URL Enabled',
+ CASE SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL
+ WHEN 0 THEN 'SWYConverszGenAlbum Cloud Local Public URL Disabled-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum Cloud Local has Public URL Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL || ''
+ END AS 'SWYConverszGenAlbum-Cloud Local Public URL Enabled',
+ CASE zGenAlbum.ZCLOUDPUBLICURLENABLED
+ WHEN 0 THEN 'zGenAlbum Cloud Public URL Disabled-0'
+ WHEN 1 THEN 'zGenAlbum Cloud Public URL Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDPUBLICURLENABLED || ''
+ END AS 'zGenAlbum-Cloud Public URL Enabled',
+ zGenAlbum.ZPUBLICURL AS 'zGenAlbum-Public URL',
+ CASE SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLED
+ WHEN 0 THEN 'SWYConverszGenAlbum Cloud Public URL Disabled-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum Cloud Public URL Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLED || ''
+ END AS 'SWYConverszGenAlbum-Cloud Public URL Enabled',
+ SWYConverszGenAlbum.ZPUBLICURL AS 'SWYConverszGenAlbum-Public URL',
+ zGenAlbum.ZKEYASSETFACETHUMBNAILINDEX AS 'zGenAlbum-Key Asset Face Thumb Index',
+ SWYConverszGenAlbum.ZKEYASSETFACETHUMBNAILINDEX AS 'SWYConverszGenAlbum-Key Asset Face Thumb Index',
+ zGenAlbum.ZPROJECTEXTENSIONIDENTIFIER AS 'zGenAlbum-Project Text Extension ID',
+ SWYConverszGenAlbum.ZPROJECTEXTENSIONIDENTIFIER AS 'SWYConverszGenAlbum-Project Text Extension ID',
+ zGenAlbum.ZUSERQUERYDATA AS 'zGenAlbum-User Query Data',
+ SWYConverszGenAlbum.ZUSERQUERYDATA AS 'SWYConverszGenAlbum-User Query Data',
+ zGenAlbum.ZCUSTOMQUERYPARAMETERS AS 'zGenAlbum-Custom Query Parameters',
+ SWYConverszGenAlbum.ZCUSTOMQUERYPARAMETERS AS 'SWYConverszGenAlbum-Custom Query Parameters',
+ zGenAlbum.ZPROJECTDATA AS 'zGenAlbum-Project Data',
+ SWYConverszGenAlbum.ZPROJECTDATA AS 'SWYConverszGenAlbum-Project Data',
+ CASE zGenAlbum.ZSEARCHINDEXREBUILDSTATE
+ WHEN 0 THEN '0-StillTesting GenAlbm-Search Index State-0'
+ WHEN 1 THEN '1-StillTesting GenAlbm-Search Index State-1'
+ WHEN 2 THEN '2-StillTesting GenAlbm-Search Index State-2'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZSEARCHINDEXREBUILDSTATE || ''
+ END AS 'zGenAlbum-Search Index Rebuild State',
+ CASE SWYConverszGenAlbum.ZSEARCHINDEXREBUILDSTATE
+ WHEN 0 THEN '0-StillTesting GenAlbm-Search Index State-0'
+ WHEN 1 THEN '1-StillTesting GenAlbm-Search Index State-1'
+ WHEN 2 THEN '2-StillTesting GenAlbm-Search Index State-2'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSEARCHINDEXREBUILDSTATE || ''
+ END AS 'SWYConverszGenAlbum-Search Index Rebuild State',
+ CASE zGenAlbum.ZDUPLICATETYPE
+ WHEN 0 THEN '0-StillTesting GenAlbumDuplicateType-0'
+ WHEN 1 THEN 'Duplicate Asset_Pending-Merge-1'
+ WHEN 2 THEN '2-StillTesting GenAlbumDuplicateType-2'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZDUPLICATETYPE || ''
+ END AS 'zGenAlbum-Duplicate Type',
+ CASE SWYConverszGenAlbum.ZDUPLICATETYPE
+ WHEN 0 THEN '0-StillTesting GenAlbumDuplicateType-0'
+ WHEN 1 THEN '1-Duplicate Asset_Pending-Merge-1'
+ WHEN 2 THEN '2-StillTesting GenAlbumDuplicateType-2'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZDUPLICATETYPE || ''
+ END AS 'SWYConverszGenAlbum-Duplicate Type',
+ CASE zGenAlbum.ZPRIVACYSTATE
+ WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0'
+ WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1'
+ WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPRIVACYSTATE || ''
+ END AS 'zGenAlbum-Privacy State',
+ CASE SWYConverszGenAlbum.ZPRIVACYSTATE
+ WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0'
+ WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1'
+ WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPRIVACYSTATE || ''
+ END AS 'SWYConverszGenAlbum-Privacy State',
+ zCldShareAlbumInvRec.ZUUID AS 'zCldShareAlbumInvRec-zUUID-4TableStart',
+ CASE zCldShareAlbumInvRec.ZISMINE
+ WHEN 0 THEN 'Not My Invitation-0'
+ WHEN 1 THEN 'My Invitation-1'
+ ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZISMINE || ''
+ END AS 'zCldShareAlbumInvRec-Is My Invitation to Shared Album',
+ CASE zCldShareAlbumInvRec.ZINVITATIONSTATELOCAL
+ WHEN 0 THEN '0-StillTesting-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZINVITATIONSTATELOCAL || ''
+ END AS 'zCldShareAlbumInvRec-Invitation State Local',
+ CASE zCldShareAlbumInvRec.ZINVITATIONSTATE
+ WHEN 1 THEN 'Shared Album Invitation Pending-1'
+ WHEN 2 THEN 'Shared Album Invitation Accepted-2'
+ WHEN 3 THEN 'Shared Album Invitation Declined-3'
+ WHEN 4 THEN '4-StillTesting'
+ WHEN 5 THEN '5-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZINVITATIONSTATE || ''
+ END AS 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status',
+ DateTime(zCldShareAlbumInvRec.ZINVITEESUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldShareAlbumInvRec-Subscription Date',
+ zCldShareAlbumInvRec.ZINVITEEFIRSTNAME AS 'zCldShareAlbumInvRec-Invitee First Name',
+ zCldShareAlbumInvRec.ZINVITEELASTNAME AS 'zCldShareAlbumInvRec-Invitee Last Name',
+ zCldShareAlbumInvRec.ZINVITEEFULLNAME AS 'zCldShareAlbumInvRec-Invitee Full Name',
+ zCldShareAlbumInvRec.ZINVITEEHASHEDPERSONID AS 'zCldShareAlbumInvRec-Invitee Hashed Person ID',
+ zCldShareAlbumInvRec.ZINVITEEEMAILKEY AS 'zCldShareAlbumInvRec-Invitee Email Key',
+ zGenAlbum.ZKEYASSETFACEIDENTIFIER AS 'zGenAlbum-Key Asset Face ID',
+ CASE
+ WHEN zAsset.ZFACEAREAPOINTS > 0 THEN 'Face Area Points Detected in zAsset'
+ ELSE 'Face Area Points Not Detected in zAsset'
+ END AS 'zFaceCrop-Face Area Points',
+ zAsset.ZFACEADJUSTMENTVERSION AS 'zAsset-Face Adjustment Version',
+ zAddAssetAttr.ZFACEANALYSISVERSION AS 'zAddAssetAttr-Face Analysis Version',
+ CASE zDetFace.ZASSETVISIBLE
+ WHEN 0 THEN 'Asset Not Visible Photo Library-0'
+ WHEN 1 THEN 'Asset Visible Photo Library-1'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZASSETVISIBLE || ''
+ END AS 'zDetFace-Asset Visible',
+ zPerson.ZFACECOUNT AS 'zPerson-Face Count',
+ zDetFace.ZFACECROP AS 'zDetFace-Face Crop',
+ zDetFace.ZFACEALGORITHMVERSION AS 'zDetFace-Face Algorithm Version',
+ zDetFace.ZADJUSTMENTVERSION AS 'zDetFace-Adjustment Version',
+ zDetFace.ZUUID AS 'zDetFace-UUID-4TableStart',
+ zPerson.ZPERSONUUID AS 'zPerson-Person UUID-4TableStart',
+ zPerson.ZMDID AS 'zPerson - MD ID',
+ CASE zPerson.ZASSETSORTORDER
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zPerson.ZASSETSORTORDER || ''
+ END AS 'zPerson - Asset Sort Order',
+ CASE zDetFace.ZCONFIRMEDFACECROPGENERATIONSTATE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZCONFIRMEDFACECROPGENERATIONSTATE || ''
+ END AS 'zDetFace-Confirmed Face Crop Generation State',
+ CASE zDetFace.ZMANUAL
+ WHEN 0 THEN 'zDetFace-Auto Detected-0'
+ WHEN 1 THEN 'zDetFace-Manually Detected-1'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZMANUAL || ''
+ END AS 'zDetFace-Manual',
+ CASE zDetFace.ZDETECTIONTYPE
+ WHEN 1 THEN '1-StillTesting'
+ WHEN 3 THEN '3-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZDETECTIONTYPE || ''
+ END AS 'zDetFace-Detection Type',
+ CASE zPerson.ZDETECTIONTYPE
+ WHEN 1 THEN '1-StillTesting'
+ WHEN 3 THEN '3-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zPerson.ZDETECTIONTYPE || ''
+ END AS 'zPerson-Detection Type',
+ CASE zDetFace.ZVIPMODELTYPE
+ WHEN 0 THEN 'Not VIP-0'
+ WHEN 1 THEN 'VIP-1'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZVIPMODELTYPE || ''
+ END AS 'zDetFace-VIP Model Type',
+ CASE zDetFace.ZNAMESOURCE
+ WHEN 0 THEN 'No Name Listed-0'
+ WHEN 1 THEN '1-Face Crop-1'
+ WHEN 2 THEN '2-Verified-Has-Person-URI'
+ WHEN 3 THEN '3-StillTesting'
+ WHEN 4 THEN '4-StillTesting'
+ WHEN 5 THEN '5-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZNAMESOURCE || ''
+ END AS 'zDetFace-Name Source',
+ CASE zDetFace.ZCLOUDNAMESOURCE
+ WHEN 0 THEN 'NA-0'
+ WHEN 1 THEN '1-User Added Via Face Crop-1'
+ WHEN 5 THEN '5-Asset Shared has Name'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZCLOUDNAMESOURCE || ''
+ END AS 'zDetFace-Cloud Name Source',
+ zPerson.ZMERGECANDIDATECONFIDENCE AS 'zPerson-Merge Candidate Confidence',
+ zPerson.ZPERSONURI AS 'zPerson-Person URI',
+ zPerson.ZDISPLAYNAME AS 'zPerson-Display Name',
+ zPerson.ZFULLNAME AS 'zPerson-Full Name',
+ CASE zPerson.ZCLOUDVERIFIEDTYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ WHEN 2 THEN '2-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zPerson.ZCLOUDVERIFIEDTYPE || ''
+ END AS 'zPerson-Cloud Verified Type',
+ CASE zFaceCrop.ZSTATE
+ WHEN 5 THEN 'Validated-5'
+ ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZSTATE || ''
+ END AS 'zFaceCrop-State',
+ CASE zFaceCrop.ZTYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-Active'
+ ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZTYPE || ''
+ END AS 'zFaceCrop-Type',
+ zFaceCrop.ZUUID AS 'zFaceCrop-UUID-4TableStart',
+ CASE zPerson.ZTYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zPerson.ZTYPE || ''
+ END AS 'zPerson-Type',
+ CASE zPerson.ZVERIFIEDTYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zPerson.ZVERIFIEDTYPE || ''
+ END AS 'zPerson-Verified Type',
+ CASE zPerson.ZGENDERTYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN 'Male-1'
+ WHEN 2 THEN 'Female-2'
+ ELSE 'Unknown-New-Value!: ' || zPerson.ZGENDERTYPE || ''
+ END AS 'zPerson-Gender Type',
+ CASE zDetFace.ZGENDERTYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN 'Male-1'
+ WHEN 2 THEN 'Female-2'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZGENDERTYPE || ''
+ END AS 'zDetFace-Gender Type',
+ zDetFace.ZCENTERX AS 'zDetFace-Center X',
+ zDetFace.ZCENTERY AS 'zDetFace-Center Y',
+ CASE zPerson.ZAGETYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN 'Infant-Toddler Age Type-1'
+ WHEN 2 THEN 'Toddler-Child Age Type-2'
+ WHEN 3 THEN 'Child-Young Adult Age Type-3'
+ WHEN 4 THEN 'Young Adult-Adult Age Type-4'
+ WHEN 5 THEN 'Adult-5'
+ ELSE 'Unknown-New-Value!: ' || zPerson.ZAGETYPE || ''
+ END AS 'zPerson-Age Type Estimate',
+ CASE zDetFace.ZAGETYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN 'Infant-Toddler Age Type-1'
+ WHEN 2 THEN 'Toddler-Child Age Type-2'
+ WHEN 3 THEN 'Child-Young Adult Age Type-3'
+ WHEN 4 THEN 'Young Adult-Adult Age Type-4'
+ WHEN 5 THEN 'Adult-5'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZAGETYPE || ''
+ END AS 'zDetFace-Age Type Estimate',
+ CASE zDetFace.ZETHNICITYTYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN 'Black-African American-1'
+ WHEN 2 THEN 'White-2'
+ WHEN 3 THEN 'Hispanic-Latino-3'
+ WHEN 4 THEN 'Asian-4'
+ WHEN 5 THEN 'Native Hawaiian-Other Pacific Islander-5'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZETHNICITYTYPE || ''
+ END AS 'zDetFace-Ethnicity Type',
+ CASE zDetFace.ZSKINTONETYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN 'Light-Pale White Skin Tone-1'
+ WHEN 2 THEN 'White-Fair Skin Tone-2'
+ WHEN 3 THEN 'Medium-White to Olive Skin Tone-3'
+ WHEN 4 THEN 'Olive-Moderate Brown Skin Tone-4'
+ WHEN 5 THEN 'Brown-Dark Brown Skin Tone-5'
+ WHEN 6 THEN 'Black-Very Dark Brown to Black Skin Tone-6'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZSKINTONETYPE || ''
+ END AS 'zDetFace-Skin Tone Type',
+ CASE zDetFace.ZHAIRTYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ WHEN 2 THEN '2-StillTesting'
+ WHEN 3 THEN '3-StillTesting'
+ WHEN 4 THEN '4-StillTesting'
+ WHEN 5 THEN '5-StillTesting'
+ WHEN 6 THEN '6-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZHAIRTYPE || ''
+ END AS 'zDetFace-Hair Type',
+ CASE zDetFace.ZHAIRCOLORTYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN 'Black-Brown Hair Color-1'
+ WHEN 2 THEN 'Brown-Blonde Hair Color-2'
+ WHEN 3 THEN 'Brown-Red Hair Color-3'
+ WHEN 4 THEN 'Red-White Hair Color-4'
+ WHEN 5 THEN 'StillTesting-Artifical-5'
+ WHEN 6 THEN 'White-Bald Hair Color-6'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZHAIRCOLORTYPE || ''
+ END AS 'zDetFace-Hair Color Type',
+ CASE zDetFace.ZHEADGEARTYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ WHEN 2 THEN '2-StillTesting'
+ WHEN 3 THEN '3-StillTesting'
+ WHEN 4 THEN '4-StillTesting'
+ WHEN 5 THEN '5-No Headgear'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZHEADGEARTYPE || ''
+ END AS 'zDetFace-Head Gear Type',
+ CASE zDetFace.ZFACIALHAIRTYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN 'Clean Shaven Facial Hair Type-1'
+ WHEN 2 THEN 'Beard Facial Hair Type-2'
+ WHEN 3 THEN 'Goatee Facial Hair Type-3'
+ WHEN 4 THEN 'Mustache Facial Hair Type-4'
+ WHEN 5 THEN 'Stubble Facial Hair Type-5'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZFACIALHAIRTYPE || ''
+ END AS 'zDetFace-Facial Hair Type',
+ CASE zDetFace.ZHASFACEMASK
+ WHEN 0 THEN 'No Mask-0'
+ WHEN 1 THEN 'Has Mask-1'
+ WHEN 2 THEN '2-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZHASFACEMASK || ''
+ END AS 'zDetFace-Has Face Mask',
+ CASE zDetFace.ZPOSETYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN 'Face Frontal Pose-1'
+ WHEN 2 THEN '2-StillTesting'
+ WHEN 3 THEN 'Face Profile Pose-3'
+ WHEN 4 THEN '4-StillTesting'
+ WHEN 5 THEN '5-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZPOSETYPE || ''
+ END AS 'zDetFace-Pose Type',
+ CASE zDetFace.ZFACEEXPRESSIONTYPE
+ WHEN 0 THEN 'NA-0'
+ WHEN 1 THEN 'Disgusted-Angry-1'
+ WHEN 2 THEN 'Suprised-Fearful-2'
+ WHEN 3 THEN 'Neutral-3'
+ WHEN 4 THEN 'Confident-Smirk-4'
+ WHEN 5 THEN 'Happiness-5'
+ WHEN 6 THEN 'Sadness-6'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZFACEEXPRESSIONTYPE || ''
+ END AS 'zDetFace-Face Expression Type',
+ CASE zDetFace.ZHASSMILE
+ WHEN 0 THEN 'zDetFace No Smile-0'
+ WHEN 1 THEN 'zDetFace Smile-1'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZHASSMILE || ''
+ END AS 'zDetFace-Has Smile',
+ CASE zDetFace.ZSMILETYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN 'zDetFace Smile No Teeth-1'
+ WHEN 2 THEN 'zDetFace Smile has Teeth-2'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZSMILETYPE || ''
+ END AS 'zDetFace-Smile Type',
+ CASE zDetFace.ZLIPMAKEUPTYPE
+ WHEN 0 THEN 'zDetFace No Lip Makeup-0'
+ WHEN 1 THEN 'zDetFace Lip Makeup Detected-1'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZLIPMAKEUPTYPE || ''
+ END AS 'zDetFace-Lip Makeup Type',
+ CASE zDetFace.ZEYESSTATE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN 'Eyes Closed-1'
+ WHEN 2 THEN 'Eyes Open-2'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZEYESSTATE || ''
+ END AS 'zDetFace-Eyes State',
+ CASE zDetFace.ZISLEFTEYECLOSED
+ WHEN 0 THEN 'Left Eye Open-0'
+ WHEN 1 THEN 'Left Eye Closed-1'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZISLEFTEYECLOSED || ''
+ END AS 'zDetFace-Is Left Eye Closed',
+ CASE zDetFace.ZISRIGHTEYECLOSED
+ WHEN 0 THEN 'Right Eye Open-0'
+ WHEN 1 THEN 'Right Eye Closed-1'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZISRIGHTEYECLOSED || ''
+ END AS 'zDetFace-Is Right Eye Closed',
+ zDetFace.ZGAZECENTERX AS 'zDetFace-Gaze Center X',
+ zDetFace.ZGAZECENTERY AS 'zDetFace-Gaze Center Y',
+ CASE zDetFace.ZGAZETYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ WHEN 2 THEN '2-StillTesting'
+ WHEN 3 THEN '3-StillTesting'
+ WHEN 4 THEN '4-StillTesting'
+ WHEN 5 THEN '5-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZGAZETYPE || ''
+ END AS 'zDetFace-Face Gaze Type',
+ CASE zDetFace.ZGLASSESTYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN 'Eye Glasses-1'
+ WHEN 2 THEN 'Sun Glasses-2'
+ WHEN 3 THEN 'No Glasses-3'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZGLASSESTYPE || ''
+ END AS 'zDetFace-Eye Glasses Type',
+ CASE zDetFace.ZEYEMAKEUPTYPE
+ WHEN 0 THEN 'No Eye Makeup-0'
+ WHEN 1 THEN 'Eye Makeup Detected-1'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZEYEMAKEUPTYPE || ''
+ END AS 'zDetFace-Eye Makeup Type',
+ zDetFace.ZCLUSTERSEQUENCENUMBER AS 'zDetFace-Cluster Squence Number Key',
+ zDetFace.ZGROUPINGIDENTIFIER AS 'zDetFace-Grouping ID',
+ zDetFace.ZMASTERIDENTIFIER AS 'zDetFace-Master ID',
+ zDetFace.ZQUALITY AS 'zDetFace-Quality',
+ zDetFace.ZQUALITYMEASURE AS 'zDetFace-Quality Measure',
+ zDetFace.ZSOURCEHEIGHT AS 'zDetFace-Source Height',
+ zDetFace.ZSOURCEWIDTH AS 'zDetFace-Source Width',
+ CASE zDetFace.ZHIDDEN
+ WHEN 0 THEN 'Not Hidden-0'
+ WHEN 1 THEN 'Hidden-1'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZHIDDEN || ''
+ END AS 'zDetFace-Hidden-Asset Hidden',
+ CASE zDetFace.ZISINTRASH
+ WHEN 0 THEN 'Not In Trash-0'
+ WHEN 1 THEN 'In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZISINTRASH || ''
+ END AS 'zDetFace-In Trash-Recently Deleted',
+ CASE zDetFace.ZCLOUDLOCALSTATE
+ WHEN 0 THEN 'Not Synced with Cloud-0'
+ WHEN 1 THEN 'Synced with Cloud-1'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZCLOUDLOCALSTATE || ''
+ END AS 'zDetFace-Cloud Local State',
+ CASE zDetFace.ZTRAININGTYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 5 THEN '5-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZTRAININGTYPE
+ END AS 'zDetFace-Training Type',
+ zDetFace.ZPOSEYAW AS 'zDetFace.Pose Yaw',
+ zDetFace.ZBODYCENTERX AS 'zDetFace-Body Center X',
+ zDetFace.ZBODYCENTERY AS 'zDetFace-Body Center Y',
+ zDetFace.ZBODYHEIGHT AS 'zDetFace-Body Height',
+ zDetFace.ZBODYWIDTH AS 'zDetFace-Body Width',
+ zDetFace.ZROLL AS 'zDetFace-Roll',
+ zDetFace.ZSIZE AS 'zDetFace-Size',
+ zDetFace.ZCLUSTERSEQUENCENUMBER AS 'zDetFace-Cluster Squence Number',
+ zDetFace.ZBLURSCORE AS 'zDetFace-Blur Score',
+ zDetFacePrint.ZFACEPRINTVERSION AS 'zDetFacePrint-Face Print Version',
+ zMedAnlyAstAttr.ZFACECOUNT AS 'zMedAnlyAstAttr-Face Count',
+ zDetFaceGroup.ZUUID AS 'zDetFaceGroup-UUID-4TableStart',
+ zDetFaceGroup.ZPERSONBUILDERSTATE AS 'zDetFaceGroup-Person Builder State',
+ zDetFaceGroup.ZUNNAMEDFACECOUNT AS 'zDetFaceGroup-UnNamed Face Count',
+ zPerson.ZINPERSONNAMINGMODEL AS 'zPerson-In Person Naming Model',
+ zPerson.ZKEYFACEPICKSOURCE AS 'zPerson-Key Face Pick Source Key',
+ zPerson.ZMANUALORDER AS 'zPerson-Manual Order Key',
+ zPerson.ZQUESTIONTYPE AS 'zPerson-Question Type',
+ zPerson.ZSUGGESTEDFORCLIENTTYPE AS 'zPerson-Suggested For Client Type',
+ zPerson.ZMERGETARGETPERSON AS 'zPerson-Merge Target Person',
+ CASE zPerson.ZCLOUDLOCALSTATE
+ WHEN 0 THEN 'Person Not Synced with Cloud-0'
+ WHEN 1 THEN 'Person Synced with Cloud-1'
+ ELSE 'Unknown-New-Value!: ' || zPerson.ZCLOUDLOCALSTATE
+ END AS 'zPerson-Cloud Local State',
+ CASE zFaceCrop.ZCLOUDLOCALSTATE
+ WHEN 0 THEN 'Not Synced with Cloud-0'
+ WHEN 1 THEN 'Synced with Cloud-1'
+ ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZCLOUDLOCALSTATE || ''
+ END AS 'zFaceCrop-Cloud Local State',
+ CASE zFaceCrop.ZCLOUDTYPE
+ WHEN 0 THEN 'Has Name-0'
+ WHEN 5 THEN 'Has Face Key-5'
+ WHEN 12 THEN '12-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZCLOUDTYPE || ''
+ END AS 'zFaceCrop-Cloud Type',
+ CASE zPerson.ZCLOUDDELETESTATE
+ WHEN 0 THEN 'Cloud Not Deleted-0'
+ WHEN 1 THEN 'Cloud Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zPerson.ZCLOUDDELETESTATE || ''
+ END AS 'zPerson-Cloud Delete State',
+ CASE zFaceCrop.ZCLOUDDELETESTATE
+ WHEN 0 THEN 'Cloud Not Deleted-0'
+ WHEN 1 THEN 'Cloud Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZCLOUDDELETESTATE || ''
+ END AS 'zFaceCrop-Cloud Delete State',
+ zFaceCrop.ZINVALIDMERGECANDIDATEPERSONUUID AS 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart',
+ zAsset.ZHIGHLIGHTVISIBILITYSCORE AS 'zAsset-Highlight Visibility Score',
+ zMemory.ZUUID AS 'zMemory-UUID-4TableStart',
+ zMemory.ZASSETLISTPREDICATE AS 'zMemory-AssetListPredicte',
+ zMemory.ZSCORE AS 'zMemory-Score',
+ zMemory.ZSUBTITLE AS 'zMemory-SubTitle',
+ zMemory.ZTITLE AS 'zMemory-Title',
+ CASE zMemory.ZCATEGORY
+ WHEN 1 THEN '1-StillTesting'
+ WHEN 3 THEN '3-StillTesting'
+ WHEN 8 THEN '8-StillTesting'
+ WHEN 16 THEN '16-StillTesting'
+ WHEN 17 THEN '17-StillTesting'
+ WHEN 19 THEN '19-StillTesting'
+ WHEN 21 THEN '21-StillTesting'
+ WHEN 201 THEN '201-StillTesting'
+ WHEN 203 THEN '203-StillTesting'
+ WHEN 204 THEN '204-StillTesting'
+ WHEN 211 THEN '211-StillTesting'
+ WHEN 217 THEN '217-StillTesting'
+ WHEN 220 THEN '220-StillTesting'
+ WHEN 301 THEN '301-StillTesting'
+ WHEN 302 THEN '302-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zMemory.ZCATEGORY || ''
+ END AS 'zMemory-Category',
+ CASE zMemory.ZSUBCATEGORY
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 201 THEN '201-StillTesting'
+ WHEN 204 THEN '204-StillTesting'
+ WHEN 206 THEN '206-StillTesting'
+ WHEN 207 THEN '207-StillTesting'
+ WHEN 212 THEN '212-StillTesting'
+ WHEN 213 THEN '213-StillTesting'
+ WHEN 214 THEN '214-StillTesting'
+ WHEN 402 THEN '402-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zMemory.ZSUBCATEGORY || ''
+ END AS 'zMemory-SubCategory',
+ DateTime(zMemory.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Creation Date',
+ DateTime(zMemory.ZLASTENRICHMENTDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Last Enrichment Date',
+ CASE zMemory.ZUSERACTIONOPTIONS
+ WHEN 0 THEN 'User Actions Options Memory Not User Created-0'
+ WHEN 1 THEN 'User Actions Options Memory User Created-1'
+ ELSE 'Unknown-New-Value!: ' || zMemory.ZUSERACTIONOPTIONS || ''
+ END AS 'zMemory-User Action Options',
+ CASE zMemory.ZFAVORITE
+ WHEN 0 THEN 'Memory Not Favorite-0'
+ WHEN 1 THEN 'Memory Favorite-1'
+ END AS 'zMemory-Favorite Memory',
+ zMemory.ZVIEWCOUNT AS 'zMemory-View Count',
+ zMemory.ZPLAYCOUNT AS 'zMemory-Play Count',
+ zMemory.ZREJECTED AS 'zMemory-Rejected',
+ zMemory.ZSHARECOUNT AS 'zMemory-Share Count',
+ zMemory.ZSHARINGCOMPOSITION AS 'zMemory-Sharing Composition',
+ DateTime(zMemory.ZLASTMOVIEPLAYEDDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Last Movie Play Date',
+ DateTime(zMemory.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Last Viewed Date',
+ zMemory.ZPENDINGPLAYCOUNT AS 'zMemory-Pending Play Count Memory',
+ zMemory.ZPENDINGSHARECOUNT AS 'zMemory-Pending Share Count Memory',
+ zMemory.ZPENDINGVIEWCOUNT AS 'zMemory-Pending View Count Memory',
+ zMemory.ZPENDINGSTATE AS 'zMemory-Pending State',
+ CASE zMemory.ZFEATUREDSTATE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zMemory.ZFEATUREDSTATE || ''
+ END AS 'zMemory-Featured State',
+ zMemory.ZPHOTOSGRAPHVERSION AS 'zMemory-Photos Graph Version',
+ zMemory.ZGRAPHMEMORYIDENTIFIER AS 'zMemory-Graph Memory Identifier',
+ CASE zMemory.ZNOTIFICATIONSTATE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ WHEN 2 THEN '2-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zMemory.ZNOTIFICATIONSTATE || ''
+ END AS 'zMemory-Notification State',
+ CASE zMemory.ZCLOUDLOCALSTATE
+ WHEN 0 THEN 'Memory Not Synced with Cloud-0'
+ WHEN 1 THEN 'Memory Synced with Cloud-1'
+ ELSE 'Unknown-New-Value!: ' || zMemory.ZCLOUDLOCALSTATE || ''
+ END AS 'zMemory-Cloud Local State',
+ CASE zMemory.ZCLOUDDELETESTATE
+ WHEN 0 THEN 'Memory Not Deleted-0'
+ WHEN 1 THEN 'Memory Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zMemory.ZCLOUDDELETESTATE || ''
+ END AS 'zMemory-Cloud Delete State',
+ CASE zMemory.ZSTORYCOLORGRADEKIND
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zMemory.ZSTORYCOLORGRADEKIND || ''
+ END AS 'zMemory-Story Color Grade Kind',
+ CASE zMemory.ZSTORYSERIALIZEDTITLECATEGORY
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zMemory.ZSTORYSERIALIZEDTITLECATEGORY || ''
+ END AS 'zMemory-Story Serialized Title Category',
+ CASE zMemory.ZSYNDICATEDCONTENTSTATE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zMemory.ZSYNDICATEDCONTENTSTATE || ''
+ END AS 'zMemory-Syndicated Content State',
+ CASE zMemory.ZSEARCHINDEXREBUILDSTATE
+ WHEN 0 THEN '0-StillTesting Memory-Search Index State-0'
+ WHEN 1 THEN '1-StillTesting Memory-Search Index State-1'
+ WHEN 2 THEN '2-StillTesting Memory-Search Index State-2'
+ ELSE 'Unknown-New-Value!: ' || zMemory.ZSEARCHINDEXREBUILDSTATE || ''
+ END AS 'zMemory-Search Index Rebuild State',
+ zMemory.ZBLACKLISTEDFEATURE AS 'zMemory-Black Listed Feature',
+ zMoment.ZUUID AS 'zMoment-UUID-4TableStart',
+ zMoment.ZAGGREGATIONSCORE AS 'zMoment-Aggregation Score',
+ DateTime(zMoment.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-Start Date',
+ DateTime(zMoment.ZREPRESENTATIVEDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-Representative Date',
+ zMoment.ZTIMEZONEOFFSET AS 'zMoment-Timezone Offset',
+ DateTime(zMoment.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-Modification Date',
+ DateTime(zMoment.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-End Date',
+ zMoment.ZSUBTITLE AS 'zMoment-SubTitle',
+ zMoment.ZTITLE AS 'zMoment-Title',
+ CASE zMoment.ZORIGINATORSTATE
+ WHEN 0 THEN '0-StillTesting Moment-Originator_State-0'
+ WHEN 1 THEN '1-StillTesing Moment-Originator_State-1'
+ WHEN 2 THEN '2-StillTesting Moment-Originator_State-2'
+ ELSE 'Unknown-New-Value!: ' || zMoment.ZORIGINATORSTATE || ''
+ END AS 'zMoment-Originator State',
+ CASE zMoment.ZSHARINGCOMPOSITION
+ WHEN 0 THEN '0-StillTesting Moment-Sharing_Compo-0'
+ WHEN 1 THEN '1-StillTesting Moment-Sharing_Compo-1'
+ WHEN 2 THEN '2-StillTesting Moment-Sharing_Compo-2'
+ ELSE 'Unknown-New-Value!: ' || zMoment.ZSHARINGCOMPOSITION || ''
+ END AS 'zMoment-Sharing Composition',
+ zMoment.ZCACHEDCOUNTSHARED AS 'zMoment-Cached Count Shared',
+ CASE zMoment.ZPROCESSEDLOCATION
+ WHEN 2 THEN 'No-2'
+ WHEN 3 THEN 'Yes-3'
+ WHEN 6 THEN 'Yes-6'
+ ELSE 'Unknown-New-Value!: ' || zMoment.ZPROCESSEDLOCATION || ''
+ END AS 'zMoment-Processed Location',
+ zMoment.ZAPPROXIMATELATITUDE AS 'zMoment-Approx Latitude',
+ zMoment.ZAPPROXIMATELONGITUDE AS 'zMoment-Approx Longitude',
+ CASE zMoment.ZGPSHORIZONTALACCURACY
+ WHEN -1.0 THEN '-1.0'
+ ELSE zMoment.ZGPSHORIZONTALACCURACY
+ END AS 'zMoment-GPS Horizontal Accuracy',
+ zMoment.ZCACHEDCOUNT AS 'zMoment-Cache Count',
+ zMoment.ZCACHEDPHOTOSCOUNT AS 'zMoment-Cached Photos Count',
+ zMoment.ZCACHEDVIDEOSCOUNT AS 'zMoment-Cached Videos Count',
+ CASE zMoment.ZTRASHEDSTATE
+ WHEN 0 THEN 'zMoment Not In Trash-0'
+ WHEN 1 THEN 'zMoment In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || zMoment.ZTRASHEDSTATE || ''
+ END AS 'zMoment-Trashed State',
+ SBKAzSugg.ZUUID AS 'SBKAzSugg-UUID-4TableStart',
+ SBKAzSugg.ZSUGGESTIONCONTEXT AS 'SBKAzSugg-Suggestion Context',
+ SBKAzSugg.ZSHARINGCOMPOSITION AS 'SBKAzSugg-Sharing Composition',
+ DateTime(SBKAzSugg.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Start Date',
+ CASE SBKAzSugg.ZSTATE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZSTATE || ''
+ END AS 'SBKAzSugg-State',
+ CASE SBKAzSugg.ZFEATUREDSTATE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZFEATUREDSTATE || ''
+ END AS 'SBKAzSugg-Featured State',
+ CASE SBKAzSugg.ZAVAILABLEFEATURES
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZAVAILABLEFEATURES || ''
+ END AS 'SBKAzSugg- Available Features',
+ CASE SBKAzSugg.ZNOTIFICATIONSTATE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZNOTIFICATIONSTATE || ''
+ END AS 'SBKAzSugg-Notification State',
+ DateTime(SBKAzSugg.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Creation Date',
+ DateTime(SBKAzSugg.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-End Date',
+ DateTime(SBKAzSugg.ZACTIVATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Activation Date',
+ DateTime(SBKAzSugg.ZEXPUNGEDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Expunge Date',
+ DateTime(SBKAzSugg.ZRELEVANTUNTILDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Relevant Until Date',
+ SBKAzSugg.ZTITLE AS 'SBKAzSugg-Title',
+ SBKAzSugg.ZSUBTITLE AS 'SBKAzSugg-Sub Title',
+ SBKAzSugg.ZCACHEDCOUNT AS 'SBKAzSugg-Cached Count',
+ SBKAzSugg.ZCACHEDPHOTOSCOUNT AS 'SBKAzSugg-Cahed Photos Count',
+ SBKAzSugg.ZCACHEDVIDEOSCOUNT AS 'SBKAzSugg-Cached Videos Count',
+ CASE SBKAzSugg.ZTYPE
+ WHEN 5 THEN '5-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZTYPE || ''
+ END AS 'SBKAzSugg-Type',
+ CASE SBKAzSugg.ZSUBTYPE
+ WHEN 501 THEN '501-StillTesting'
+ WHEN 502 THEN '502-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZSUBTYPE || ''
+ END AS 'SBKAzSugg-Sub Type',
+ SBKAzSugg.ZACTIONDATA AS 'SBKAzSugg-Action Data',
+ SBKAzSugg.ZVERSION AS 'SBKAzSugg-Version',
+ CASE SBKAzSugg.ZCLOUDLOCALSTATE
+ WHEN 0 THEN 'Suggestion Not Synced with Cloud-0'
+ WHEN 1 THEN 'Suggestion Synced with Cloud-1'
+ ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZCLOUDLOCALSTATE || ''
+ END AS 'SBKAzSugg-Cloud Local State',
+ CASE SBKAzSugg.ZCLOUDDELETESTATE
+ WHEN 0 THEN 'Suggestion Not Deleted-0'
+ WHEN 1 THEN 'Suggestion Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZCLOUDDELETESTATE || ''
+ END AS 'SBKAzSugg-Cloud Delete State',
+ SBRAzSugg.ZUUID AS 'SBRAzSugg-UUID-4TableStart',
+ SBRAzSugg.ZSUGGESTIONCONTEXT AS 'SBRAzSugg-Suggestion Context',
+ SBRAzSugg.ZSHARINGCOMPOSITION AS 'SBRAzSugg-Sharing Composition',
+ DateTime(SBRAzSugg.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Start Date',
+ CASE SBRAzSugg.ZSTATE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZSTATE || ''
+ END AS 'SBRAzSugg-State',
+ CASE SBRAzSugg.ZFEATUREDSTATE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZFEATUREDSTATE || ''
+ END AS 'SBRAzSugg-Featured State',
+ CASE SBRAzSugg.ZAVAILABLEFEATURES
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZAVAILABLEFEATURES || ''
+ END AS 'SBRAzSugg- Available Features',
+ CASE SBRAzSugg.ZNOTIFICATIONSTATE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZNOTIFICATIONSTATE || ''
+ END AS 'SBRAzSugg-Notification State',
+ DateTime(SBRAzSugg.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Creation Date',
+ DateTime(SBRAzSugg.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-End Date',
+ DateTime(SBRAzSugg.ZACTIVATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Activation Date',
+ DateTime(SBRAzSugg.ZEXPUNGEDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Expunge Date',
+ DateTime(SBRAzSugg.ZRELEVANTUNTILDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Relevant Until Date',
+ SBRAzSugg.ZTITLE AS 'SBRAzSugg-Title',
+ SBRAzSugg.ZSUBTITLE AS 'SBRAzSugg-Sub Title',
+ SBRAzSugg.ZCACHEDCOUNT AS 'SBRAzSugg-Cached Count',
+ SBRAzSugg.ZCACHEDPHOTOSCOUNT AS 'SBRAzSugg-Cahed Photos Count',
+ SBRAzSugg.ZCACHEDVIDEOSCOUNT AS 'SBRAzSugg-Cached Videos Count',
+ CASE SBRAzSugg.ZTYPE
+ WHEN 5 THEN '5-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZTYPE || ''
+ END AS 'SBRAzSugg-Type',
+ CASE SBRAzSugg.ZSUBTYPE
+ WHEN 501 THEN '501-StillTesting'
+ WHEN 502 THEN '502-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZSUBTYPE || ''
+ END AS 'SBRAzSugg-Sub Type',
+ SBRAzSugg.ZACTIONDATA AS 'SBRAzSugg-Action Data',
+ SBRAzSugg.ZVERSION AS 'SBRAzSugg-Version',
+ CASE SBRAzSugg.ZCLOUDLOCALSTATE
+ WHEN 0 THEN 'Suggestion Not Synced with Cloud-0'
+ WHEN 1 THEN 'Suggestion Synced with Cloud-1'
+ ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZCLOUDLOCALSTATE || ''
+ END AS 'SBRAzSugg-Cloud Local State',
+ CASE SBRAzSugg.ZCLOUDDELETESTATE
+ WHEN 0 THEN 'Suggestion Not Deleted-0'
+ WHEN 1 THEN 'Suggestion Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZCLOUDDELETESTATE || ''
+ END AS 'SBRAzSugg-Cloud Delete State',
+ zMedAnlyAstAttr.ZMEDIAANALYSISVERSION AS 'zMedAnlyAstAttr-Media Analysis Version',
+ zMedAnlyAstAttr.ZAUDIOCLASSIFICATION AS 'zMedAnlyAstAttr-Audio Classification',
+ zMedAnlyAstAttr.ZBESTVIDEORANGEDURATIONTIMESCALE AS 'zMedAnlyAstAttr-Best Video Range Duration Time Scale',
+ zMedAnlyAstAttr.ZBESTVIDEORANGESTARTTIMESCALE AS 'zMedAnlyAstAttr-Best Video Range Start Time Scale',
+ zMedAnlyAstAttr.ZBESTVIDEORANGEDURATIONVALUE AS 'zMedAnlyAstAttr-Best Video Range Duration Value',
+ zMedAnlyAstAttr.ZBESTVIDEORANGESTARTVALUE AS 'zMedAnlyAstAttr-Best Video Range Start Value',
+ zMedAnlyAstAttr.ZPACKEDBESTPLAYBACKRECT AS 'zMedAnlyAstAttr-Packed Best Playback Rect',
+ zMedAnlyAstAttr.ZACTIVITYSCORE AS 'zMedAnlyAstAttr-Activity Score',
+ zMedAnlyAstAttr.ZVIDEOSCORE AS 'zMedAnlyAstAttr-Video Score',
+ zMedAnlyAstAttr.ZAUDIOSCORE AS 'zMedAnlyAstAttr-Audio Score',
+ zMedAnlyAstAttr.ZWALLPAPERSCORE AS 'zMedAnlyAstAttr-Wallpaper Score',
+ zMedAnlyAstAttr.ZAUTOPLAYSUGGESTIONSCORE AS 'zMedAnlyAstAttr-AutoPlay Suggestion Score',
+ zMedAnlyAstAttr.ZBLURRINESSSCORE AS 'zMedAnlyAstAttr-Blurriness Score',
+ zMedAnlyAstAttr.ZEXPOSURESCORE AS 'zMedAnlyAstAttr-Exposure Score',
+ zMedAnlyAstAttr.ZPROBABLEROTATIONDIRECTIONCONFIDENCE AS 'zMedAnlyAstAttr-Probable Rotation Direction Confidence',
+ zMedAnlyAstAttr.ZPROBABLEROTATIONDIRECTION AS 'zMedAnlyAstAttr-Probable Rotation Direction',
+ zMedAnlyAstAttr.ZSCREENTIMEDEVICEIMAGESENSITIVITY AS 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity',
+ zAssetAnalyState.ZASSETUUID AS 'zAssetAnalyState-Asset UUID-4TableStart',
+ zAssetAnalyState.ZANALYSISSTATE AS 'zAssetAnalyState-Analyisis State',
+ zAssetAnalyState.ZWORKERFLAGS AS 'zAssetAnalyState-Worker Flags',
+ zAssetAnalyState.ZWORKERTYPE AS 'zAssetAnalyState-Worker Type',
+ DateTime(zAssetAnalyState.ZIGNOREUNTILDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Ignore Until Date',
+ DateTime(zAssetAnalyState.ZLASTIGNOREDDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Last Ignored Date',
+ DateTime(zAssetAnalyState.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Sort Token',
+ zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES AS 'zMedAnlyAstAttr-Character Recognition Attr',
+ zCharRecogAttr.ZALGORITHMVERSION AS 'zCharRecogAttr-Algorithm Version',
+ zCharRecogAttr.ZADJUSTMENTVERSION AS 'zCharRecogAttr-Adjustment Version',
+ zMedAnlyAstAttr.ZVISUALSEARCHATTRIBUTES AS 'zMedAnlyAstAttr-Visual Search Attributes',
+ zVisualSearchAttr.ZALGORITHMVERSION AS 'zVisualSearchAttr-Algorithm Version',
+ zVisualSearchAttr.ZADJUSTMENTVERSION AS 'zVisualSearchAttr-Adjustment Version',
+ zVisualSearchAttr.ZSTICKERCONFIDENCEALGORITHMVERSION AS 'zVisualSearchAttr - Sticker Confidence Algorithm Version',
+ zVisualSearchAttr.ZSTICKERCONFIDENCESCORE AS 'zVisualSearchAttr - Sticker Confidence Score',
+ zAsset.ZSTICKERCONFIDENCESCORE AS 'zAsset-Sticker Confidence Score',
+ zAsset.ZOVERALLAESTHETICSCORE AS 'zAsset-Overall Aesthetic Score',
+ zCompAssetAttr.ZBEHAVIORALSCORE AS 'zCompAssetAttr-Behavioral Score',
+ zCompAssetAttr.ZFAILURESCORE AS 'zCompAssetAttr-Failure Score zCompAssetAttr',
+ zCompAssetAttr.ZHARMONIOUSCOLORSCORE AS 'zCompAssetAttr-Harmonious Color Score',
+ zCompAssetAttr.ZIMMERSIVENESSSCORE AS 'zCompAssetAttr-Immersiveness Score',
+ zCompAssetAttr.ZINTERACTIONSCORE AS 'zCompAssetAttr-Interaction Score',
+ zCompAssetAttr.ZINTERESTINGSUBJECTSCORE AS 'zCompAssetAttr-Intersting Subject Score',
+ zCompAssetAttr.ZINTRUSIVEOBJECTPRESENCESCORE AS 'zCompAssetAttr-Intrusive Object Presence Score',
+ zCompAssetAttr.ZLIVELYCOLORSCORE AS 'zCompAssetAttr-Lively Color Score',
+ zCompAssetAttr.ZLOWLIGHT AS 'zCompAssetAttr-Low Light',
+ zCompAssetAttr.ZNOISESCORE AS 'zCompAssetAttr-Noise Score',
+ zCompAssetAttr.ZPLEASANTCAMERATILTSCORE AS 'zCompAssetAttr-Pleasant Camera Tilt Score',
+ zCompAssetAttr.ZPLEASANTCOMPOSITIONSCORE AS 'zCompAssetAttr-Pleasant Composition Score',
+ zCompAssetAttr.ZPLEASANTLIGHTINGSCORE AS 'zCompAssetAttr-Pleasant Lighting Score',
+ zCompAssetAttr.ZPLEASANTPATTERNSCORE AS 'zCompAssetAttr-Pleasant Pattern Score',
+ zCompAssetAttr.ZPLEASANTPERSPECTIVESCORE AS 'zCompAssetAttr-Pleasant Perspective Score',
+ zCompAssetAttr.ZPLEASANTPOSTPROCESSINGSCORE AS 'zCompAssetAttr-Pleasant Post Processing Score',
+ zCompAssetAttr.ZPLEASANTREFLECTIONSSCORE AS 'zCompAssetAttr-Pleasant Reflection Score',
+ zCompAssetAttr.ZPLEASANTSYMMETRYSCORE AS 'zCompAssetAttrPleasant Symmetry Score',
+ zCompAssetAttr.ZSHARPLYFOCUSEDSUBJECTSCORE AS 'zCompAssetAttr-Sharply Focused Subject Score',
+ zCompAssetAttr.ZTASTEFULLYBLURREDSCORE AS 'zCompAssetAttr-Tastfully Blurred Score',
+ zCompAssetAttr.ZWELLCHOSENSUBJECTSCORE AS 'zCompAssetAttr-Well Chosen Subject Score',
+ zCompAssetAttr.ZWELLFRAMEDSUBJECTSCORE AS 'zCompAssetAttr-Well Framed Subject Score',
+ zCompAssetAttr.ZWELLTIMEDSHOTSCORE AS 'zCompAssetAttr-Well Timeed Shot Score',
+ zCldRes.ZASSETUUID AS 'zCldRes-Asset UUID-4TableStart',
+ zCldRes.ZCLOUDLOCALSTATE AS 'zCldRes-Cloud Local State',
+ zCldRes.ZFILESIZE AS 'zCldRes-File Size',
+ zCldRes.ZHEIGHT AS 'zCldRes-Height',
+ zCldRes.ZISAVAILABLE AS 'zCldRes-Is Available',
+ zCldRes.ZISLOCALLYAVAILABLE AS 'zCldRes-Is Locally Available',
+ zCldRes.ZPREFETCHCOUNT AS 'zCldRes-Prefetch Count',
+ zCldRes.ZSOURCETYPE AS 'zCldRes-Source Type',
+ zCldRes.ZTYPE AS 'zCldRes-Type',
+ zCldRes.ZWIDTH AS 'zCldRes-Width',
+ zCldRes.ZDATECREATED AS 'zCldRes-Date Created',
+ zCldRes.ZLASTONDEMANDDOWNLOADDATE AS 'zCldRes-Last OnDemand Download Date',
+ zCldRes.ZLASTPREFETCHDATE AS 'zCldRes-Last Prefetch Date',
+ zCldRes.ZPRUNEDAT AS 'zCldRes-Prunedat',
+ zCldRes.ZFILEPATH AS 'zCldRes-File Path',
+ zCldRes.ZFINGERPRINT AS 'zCldRes-Fingerprint',
+ zCldRes.ZITEMIDENTIFIER AS 'zCldRes-Item ID',
+ zCldRes.ZUNIFORMTYPEIDENTIFIER AS 'zCldRes-UniID',
+ zUserFeedback.ZUUID AS 'zUserFeedback-UUID-4TableStart',
+ zUserFeedback.ZFEATURE AS 'zUserFeedback-Feature',
+ zUserFeedback.ZTYPE AS 'zUserFeedback-Type',
+ zUserFeedback.ZLASTMODIFIEDDATE AS 'zUserFeedback-Last Modified Date',
+ zUserFeedback.ZCONTEXT AS 'zUserFeedback-Context',
+ zUserFeedback.ZCLOUDLOCALSTATE AS 'zUserFeedback-Cloud Local State',
+ zUserFeedback.ZCLOUDDELETESTATE AS 'zUserFeedback-Cloud Delete State',
+ zUserFeedback.ZCREATIONTYPE AS 'zUserFeedback - Creation Type',
+ zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
+ zAddAssetAttr.Z_ENT AS 'zAddAssetAttr-zENT',
+ zAddAssetAttr.Z_OPT AS 'ZAddAssetAttr-zOPT',
+ zAddAssetAttr.ZASSET AS 'zAddAssetAttr-zAsset= zAsset_zPK',
+ zAddAssetAttr.ZUNMANAGEDADJUSTMENT AS 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK',
+ zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint',
+ zAddAssetAttr.ZPUBLICGLOBALUUID AS 'zAddAssetAttr-Public Global UUID',
+ zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier',
+ zAddAssetAttr.ZORIGINALASSETSUUID AS 'zAddAssetAttr-Original Assets UUID',
+ zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID',
+ zAddAssetAttr.ZORIGINATINGASSETIDENTIFIER AS 'zAddAssetAttr-Originating Asset Identifier',
+ zAddAssetAttr.ZADJUSTEDFINGERPRINT AS 'zAddAssetAttr.Adjusted Fingerprint',
+ zAlbumList.Z_PK AS 'zAlbumList-zPK= Album List Key',
+ zAlbumList.Z_ENT AS 'zAlbumList-zENT',
+ zAlbumList.Z_OPT AS 'zAlbumList-zOPT',
+ zAlbumList.ZIDENTIFIER AS 'zAlbumList-ID Key',
+ zAlbumList.ZUUID AS 'zAlbumList-UUID',
+ zAsset.Z_PK AS 'zAsset-zPK',
+ zAsset.Z_ENT AS 'zAsset-zENT',
+ zAsset.Z_OPT AS 'zAsset-zOPT',
+ zAsset.ZMASTER AS 'zAsset-Master= zCldMast-zPK',
+ zAsset.ZEXTENDEDATTRIBUTES AS 'zAsset-Extended Attributes= zExtAttr-zPK',
+ zAsset.ZIMPORTSESSION AS 'zAsset-Import Session Key',
+ zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK',
+ zAsset.ZPHOTOANALYSISATTRIBUTES AS 'zAsset-Photo Analysis Attributes Key',
+ zAsset.ZCLOUDFEEDASSETSENTRY AS 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK',
+ zAsset.Z_FOK_CLOUDFEEDASSETSENTRY AS 'zAsset-FOK-Cloud Feed Asset Entry Key',
+ zAsset.ZMOMENTSHARE AS 'zAsset-Moment Share Key= zShare-zPK',
+ zAsset.ZMOMENT AS 'zAsset-zMoment Key= zMoment-zPK',
+ zAsset.ZCOMPUTEDATTRIBUTES AS 'zAsset-Computed Attributes Asset Key',
+ zAsset.ZHIGHLIGHTBEINGASSETS AS 'zAsset-Highlight Being Assets-HBA Key',
+ zAsset.ZHIGHLIGHTBEINGEXTENDEDASSETS AS 'zAsset-Highlight Being Extended Assets-HBEA Key',
+ zAsset.ZHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Highlight Being Key Asset Private-HBKAP Key',
+ zAsset.ZHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Highlight Being Key Asset Shared-HBKAS Key',
+ zAsset.ZHIGHLIGHTBEINGSUMMARYASSETS AS 'zAsset-Highligh Being Summary Assets-HBSA Key',
+ zAsset.ZDAYGROUPHIGHLIGHTBEINGASSETS AS 'zAsset-Day Group Highlight Being Assets-DGHBA Key',
+ zAsset.ZDAYGROUPHIGHLIGHTBEINGEXTENDEDASSETS AS 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key',
+ zAsset.ZDAYGROUPHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key',
+ zAsset.ZDAYGROUPHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key',
+ zAsset.ZDAYGROUPHIGHLIGHTBEINGSUMMARYASSETS AS 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key',
+ zAsset.ZMONTHHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key',
+ zAsset.ZMONTHHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key',
+ zAsset.ZYEARHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key',
+ zAsset.ZYEARHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key',
+ zAsset.ZPROMOTIONSCORE AS 'zAsset-Promotion Score',
+ zAsset.ZICONICSCORE AS 'zAsset-Iconic Score',
+ zAsset.ZMEDIAANALYSISATTRIBUTES AS 'zAsset-Media Analysis Attributes Key',
+ zAsset.ZMEDIAGROUPUUID AS 'zAsset-Media Group UUID',
+ zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
+ zAsset.ZCLOUDASSETGUID AS 'zAsset-Cloud_Asset_GUID = store.cloudphotodb',
+ zAsset.ZCLOUDCOLLECTIONGUID AS 'zAsset.Cloud Collection GUID',
+ zAsset.ZAVALANCHEUUID AS 'zAsset-Avalanche UUID',
+ zAssetAnalyState.Z_PK AS 'zAssetAnalyState-zPK',
+ zAssetAnalyState.Z_ENT AS 'zAssetAnalyState-zEnt',
+ zAssetAnalyState.Z_OPT AS 'zAssetAnalyState-zOpt',
+ zAssetAnalyState.ZASSET AS 'zAssetAnalyState-Asset= zAsset-zPK',
+ zAssetAnalyState.ZASSETUUID AS 'zAssetAnalyState-Asset UUID',
+ zAssetContrib.Z_PK AS 'zAsstContrib-zPK',
+ zAssetContrib.Z_ENT AS 'zAsstContrib-zEnt',
+ zAssetContrib.Z_OPT AS 'zAsstContrib-zOpt',
+ zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS AS 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK',
+ zAssetContrib.ZPARTICIPANT AS 'zAsstContrib-Participant= zSharePartic-zPK',
+ zAssetDes.Z_PK AS 'zAssetDes-zPK',
+ zAssetDes.Z_ENT AS 'zAssetDes-zENT',
+ zAssetDes.Z_OPT AS 'zAssetDes-zOPT',
+ zAssetDes.ZASSETATTRIBUTES AS 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK',
+ zCharRecogAttr.Z_PK AS 'zCharRecogAttr-zPK',
+ zCharRecogAttr.Z_ENT AS 'zCharRecogAttr-zENT',
+ zCharRecogAttr.Z_OPT AS 'zCharRecogAttr-zOPT',
+ zCharRecogAttr.ZMEDIAANALYSISASSETATTRIBUTES AS 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK',
+ zCldFeedEnt.Z_PK AS 'zCldFeedEnt-zPK= zCldShared keys',
+ zCldFeedEnt.Z_ENT AS 'zCldFeedEnt-zENT',
+ zCldFeedEnt.Z_OPT AS 'zCldFeedEnt-zOPT',
+ zCldFeedEnt.ZENTRYALBUMGUID AS 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID',
+ zCldFeedEnt.ZENTRYINVITATIONRECORDGUID AS 'zCldFeedEnt-Entry Invitation Record GUID',
+ zCldFeedEnt.ZENTRYCLOUDASSETGUID AS 'zCldFeedEnt-Entry Cloud Asset GUID',
+ zCldMast.Z_PK AS 'zCldMast-zPK= zAsset-Master',
+ zCldMast.Z_ENT AS 'zCldMast-zENT',
+ zCldMast.Z_OPT AS 'zCldMast-zOPT',
+ zCldMast.ZMOMENTSHARE AS 'zCldMast-Moment Share Key= zShare-zPK',
+ zCldMast.ZCLOUDMASTERGUID AS 'zCldMast-Cloud_Master_GUID = store.cloudphotodb',
+ zCldMast.ZORIGINATINGASSETIDENTIFIER AS 'zCldMast-Originating Asset ID',
+ zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting',
+ CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key',
+ CMzCldMastMedData.Z_ENT AS 'CMzCldMastMedData-zENT',
+ CMzCldMastMedData.Z_OPT AS 'CMzCldMastMedData-zOPT',
+ CMzCldMastMedData.ZCLOUDMASTER AS 'CMzCldMastMedData-CldMast= zCldMast-zPK',
+ AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData',
+ AAAzCldMastMedData.Z_ENT AS 'AAAzCldMastMedData-zENT',
+ AAAzCldMastMedData.Z_OPT AS 'AAAzCldMastMedData-zOPT',
+ AAAzCldMastMedData.ZCLOUDMASTER AS 'AAAzCldMastMedData-CldMast key',
+ AAAzCldMastMedData.ZADDITIONALASSETATTRIBUTES AS 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK',
+ zCldRes.Z_PK AS 'zCldRes-zPK',
+ zCldRes.Z_ENT AS 'zCldRes-zENT',
+ zCldRes.Z_OPT AS 'zCldRes-zOPT',
+ zCldRes.ZASSET AS 'zCldRes-Asset= zAsset-zPK',
+ zCldRes.ZCLOUDMASTER AS 'zCldRes-Cloud Master= zCldMast-zPK',
+ zCldRes.ZASSETUUID AS 'zCldRes-Asset UUID',
+ zCldShareAlbumInvRec.Z_PK AS 'zCldShareAlbumInvRec-zPK',
+ zCldShareAlbumInvRec.Z_ENT AS 'zCldShareAlbumInvRec-zEnt',
+ zCldShareAlbumInvRec.Z_OPT AS 'zCldShareAlbumInvRec-zOpt',
+ zCldShareAlbumInvRec.ZALBUM AS 'zCldShareAlbumInvRec-Album Key',
+ zCldShareAlbumInvRec.Z_FOK_ALBUM AS 'zCldShareAlbumInvRec-FOK Album Key',
+ zCldShareAlbumInvRec.ZALBUMGUID AS 'zCldShareAlbumInvRec-Album GUID',
+ zCldShareAlbumInvRec.ZUUID AS 'zCldShareAlbumInvRec-zUUID',
+ zCldShareAlbumInvRec.ZCLOUDGUID AS 'zCldShareAlbumInvRec-Cloud GUID',
+ zCldSharedComment.Z_PK AS 'zCldSharedComment-zPK',
+ zCldSharedComment.Z_ENT AS 'zCldSharedComment-zENT',
+ zCldSharedComment.Z_OPT AS 'zCldSharedComment-zOPT',
+ zCldSharedComment.ZCOMMENTEDASSET AS 'zCldSharedComment-Commented Asset Key= zAsset-zPK',
+ zCldSharedComment.ZCLOUDFEEDCOMMENTENTRY AS 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK',
+ zCldSharedComment.Z_FOK_CLOUDFEEDCOMMENTENTRY AS 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key',
+ zCldSharedCommentLiked.ZLIKEDASSET AS 'zCldSharedComment-Liked Asset Key= zAsset-zPK',
+ zCldSharedCommentLiked.ZCLOUDFEEDLIKECOMMENTENTRY AS 'zCldSharedComment-CldFeedLikeCommentEntry Key',
+ zCldSharedCommentLiked.Z_FOK_CLOUDFEEDLIKECOMMENTENTRY AS 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key',
+ zCldSharedComment.ZCLOUDGUID AS 'zCldSharedComment-Cloud GUID',
+ zCompAssetAttr.Z_PK AS 'zCompAssetAttr-zPK',
+ zCompAssetAttr.Z_ENT AS 'zCompAssetAttr-zEnt',
+ zCompAssetAttr.Z_OPT AS 'zCompAssetAttr-zOpt',
+ zCompAssetAttr.ZASSET AS 'zCompAssetAttr-Asset Key',
+ zDetFace.Z_PK AS 'zDetFace-zPK',
+ zDetFace.Z_ENT AS 'zDetFace-zEnt',
+ zDetFace.Z_OPT AS 'zDetFace.zOpt',
+ zDetFace.ZASSETFORFACE AS 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face',
+ zDetFace.ZPERSONFORFACE AS 'zDetFace-PersonForFace= zPerson-zPK',
+ zDetFace.ZPERSONBEINGKEYFACE AS 'zDetFace-Person Being Key Face',
+ zDetFace.ZFACEPRINT AS 'zDetFace-Face Print',
+ zDetFace.ZFACEGROUPBEINGKEYFACE AS 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK',
+ zDetFace.ZFACEGROUP AS 'zDetFace-FaceGroup= zDetFaceGroup-zPK',
+ zDetFace.ZUUID AS 'zDetFace-UUID',
+ zDetFaceGroup.Z_PK AS 'zDetFaceGroup-zPK',
+ zDetFaceGroup.Z_ENT AS 'zDetFaceGroup-zENT',
+ zDetFaceGroup.Z_OPT AS 'zDetFaceGroup-zOPT',
+ zDetFaceGroup.ZASSOCIATEDPERSON AS 'zDetFaceGroup-AssocPerson= zPerson-zPK',
+ zDetFaceGroup.ZKEYFACE AS 'zDetFaceGroup-KeyFace= zDetFace-zPK',
+ zDetFaceGroup.ZUUID AS 'zDetFaceGroup-UUID',
+ zDetFacePrint.Z_PK AS 'zDetFacePrint-zPK',
+ zDetFacePrint.Z_ENT AS 'zDetFacePrint-zEnt',
+ zDetFacePrint.Z_OPT AS 'zDetFacePrint-zOpt',
+ zDetFacePrint.ZFACE AS 'zDetFacePrint-Face Key',
+ zExtAttr.Z_PK AS 'zExtAttr-zPK= zAsset-zExtendedAttributes',
+ zExtAttr.Z_ENT AS 'zExtAttr-zENT',
+ zExtAttr.Z_OPT AS 'zExtAttr-zOPT',
+ zExtAttr.ZASSET AS 'zExtAttr-Asset Key',
+ zFaceCrop.Z_PK AS 'zFaceCrop-zPK',
+ zFaceCrop.Z_ENT AS 'zFaceCrop-zEnt',
+ zFaceCrop.Z_OPT AS 'zFaceCrop-zOpt',
+ zFaceCrop.ZASSET AS 'zFaceCrop-Asset Key',
+ zFaceCrop.ZINVALIDMERGECANDIDATEPERSONUUID AS 'zFaceCrop-Invalid Merge Canidate Person UUID',
+ zFaceCrop.ZPERSON AS 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key',
+ zFaceCrop.ZFACE AS 'zFaceCrop-Face Key',
+ zFaceCrop.ZUUID AS 'zFaceCrop-UUID',
+ zGenAlbum.Z_PK AS 'zGenAlbum-zPK=26AlbumLists= 26Albums',
+ zGenAlbum.Z_ENT AS 'zGenAlbum-zENT',
+ zGenAlbum.Z_OPT AS 'zGenAlbum-zOpt',
+ zGenAlbum.ZKEYASSET AS 'zGenAlbum-Key Asset-Key zAsset-zPK',
+ zGenAlbum.ZSECONDARYKEYASSET AS 'zGenAlbum-Secondary Key Asset',
+ zGenAlbum.ZTERTIARYKEYASSET AS 'zGenAlbum-Tertiary Key Asset',
+ zGenAlbum.ZCUSTOMKEYASSET AS 'zGenAlbum-Custom Key Asset',
+ zGenAlbum.ZPARENTFOLDER AS 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK',
+ zGenAlbum.Z_FOK_PARENTFOLDER AS 'zGenAlbum-FOK Parent Folder',
+ zGenAlbum.ZSYNDICATE AS 'zGenAlbum-zSyndicate',
+ zGenAlbum.ZUUID AS 'zGenAlbum-UUID',
+ SWYConverszGenAlbum.ZUUID AS 'SWYConverszGenAlbum-UUID',
+ zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud_GUID = store.cloudphotodb',
+ SWYConverszGenAlbum.ZCLOUDGUID AS 'SWYConverszGenAlbum-Cloud GUID',
+ zGenAlbum.ZPROJECTRENDERUUID AS 'zGenAlbum-Project Render UUID',
+ SWYConverszGenAlbum.ZPROJECTRENDERUUID AS 'SWYConverszGenAlbum-Project Render UUID',
+ zIntResou.Z_PK AS 'zIntResou-zPK',
+ zIntResou.Z_ENT AS 'zIntResou-zENT',
+ zIntResou.Z_OPT AS 'zIntResou-zOPT',
+ zIntResou.ZASSET AS 'zIntResou-Asset= zAsset_zPK',
+ zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint',
+ zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type',
+ zMedAnlyAstAttr.Z_PK AS 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata',
+ zMedAnlyAstAttr.Z_ENT AS 'zMedAnlyAstAttr-zEnt',
+ zMedAnlyAstAttr.Z_OPT AS 'zMedAnlyAstAttr-zOpt',
+ zMedAnlyAstAttr.ZASSET AS 'zMedAnlyAstAttr-Asset= zAsset-zPK',
+ zMemory.Z_PK AS 'zMemory-zPK',
+ zMemory.Z_ENT AS 'zMemory-zENT',
+ zMemory.Z_OPT AS 'zMemory-zOPT',
+ zMemory.ZKEYASSET AS 'zMemory-Key Asset= zAsset-zPK',
+ zMemory.ZUUID AS 'zMemory-UUID',
+ zMoment.Z_PK AS 'zMoment-zPK',
+ zMoment.Z_ENT AS 'zMoment-zENT',
+ zMoment.Z_OPT AS 'zMoment-zOPT',
+ zMoment.ZHIGHLIGHT AS 'zMoment-Highlight Key',
+ zMoment.ZUUID AS 'zMoment-UUID',
+ zPerson.Z_PK AS 'zPerson-zPK=zDetFace-Person',
+ zPerson.Z_ENT AS 'zPerson-zEnt',
+ zPerson.Z_OPT AS 'zPerson-zOpt',
+ zPerson.ZSHAREPARTICIPANT AS 'zPerson-Share Participant= zSharePartic-zPK',
+ zPerson.ZKEYFACE AS 'zPerson-KeyFace=zDetFace-zPK',
+ zPerson.ZASSOCIATEDFACEGROUP AS 'zPerson-Assoc Face Group Key',
+ zPerson.ZPERSONUUID AS 'zPerson-Person UUID',
+ zPhotoAnalysisAssetAttr.Z_PK AS 'zPhotoAnalysisAssetAttr-zPK',
+ zPhotoAnalysisAssetAttr.Z_ENT AS 'zPhotoAnalysisAssetAttr-zEnt',
+ zPhotoAnalysisAssetAttr.Z_OPT AS 'zPhotoAnalysisAssetAttr-zOpt',
+ zPhotoAnalysisAssetAttr.ZASSET AS 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK',
+ zSceneP.Z_PK AS 'zSceneP-zPK',
+ zSceneP.Z_ENT AS 'zSceneP-zENT',
+ zSceneP.Z_OPT AS 'zSceneP-zOPT',
+ zShare.Z_PK AS 'zShare-zPK',
+ zShare.Z_ENT AS 'zShare-zENT',
+ zShare.Z_OPT AS 'zShare-zOPT',
+ zShare.ZUUID AS 'zShare-UUID',
+ SPLzShare.ZUUID AS 'SPLzShare-UUID',
+ zShare.ZSCOPEIDENTIFIER AS 'zShare-Scope ID = store.cloudphotodb',
+ zSharePartic.Z_PK AS 'zSharePartic-zPK',
+ zSharePartic.Z_ENT AS 'zSharePartic-zENT',
+ zSharePartic.Z_OPT AS 'zSharePartic-zOPT',
+ zSharePartic.ZSHARE AS 'zSharePartic-Share Key= zShare-zPK',
+ zSharePartic.ZPERSON AS 'zSharePartic-Person= zPerson-zPK',
+ zSharePartic.ZUUID AS 'zSharePartic-UUID',
+ SBKAzSugg.Z_PK AS 'SBKAzSugg-zPK',
+ SBKAzSugg.Z_ENT AS 'SBKAzSugg-zENT',
+ SBKAzSugg.Z_OPT AS 'SBKAzSugg-zOPT',
+ SBKAzSugg.ZUUID AS 'SBKAzSugg-UUID',
+ SBRAzSugg.Z_PK AS 'SBRAzSugg-zPK',
+ SBRAzSugg.Z_ENT AS 'SBRAzSugg-zENT',
+ SBRAzSugg.Z_OPT AS 'SBRAzSugg-zOPT',
+ SBRAzSugg.ZUUID AS 'SBRAzSugg-UUID',
+ z3SuggBRA.Z_3REPRESENTATIVEASSETS1 AS 'z3SuggBRA-3RepAssets1',
+ z3SuggBRA.Z_58SUGGESTIONSBEINGREPRESENTATIVEASSETS AS 'z3SuggBRA-58SuggBeingRepAssets',
+ z3SuggBKA.Z_58SUGGESTIONSBEINGKEYASSETS AS 'z3SuggBKA-58SuggBeingKeyAssets= zSugg-zPK',
+ z3SuggBKA.Z_3KEYASSETS AS 'z3SuggBKA-3KeyAssets= zAsset-zPK',
+ zUnmAdj.Z_PK AS 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key',
+ zUnmAdj.Z_OPT AS 'zUnmAdj-zOPT',
+ zUnmAdj.Z_ENT AS 'zUnmAdj-zENT',
+ zUnmAdj.ZASSETATTRIBUTES AS 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK',
+ zUnmAdj.ZUUID AS 'zUnmAdj-UUID',
+ zUnmAdj.ZOTHERADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Other Adjustments Fingerprint',
+ zUnmAdj.ZSIMILARTOORIGINALADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Similar to Orig Adjustments Fingerprint',
+ zUserFeedback.Z_PK AS 'zUserFeedback-zPK',
+ zUserFeedback.Z_ENT AS 'zUserFeedback-zENT',
+ zUserFeedback.Z_OPT AS 'zUserFeedback-zOPT',
+ zUserFeedback.ZPERSON AS 'zUserFeedback-Person= zPerson-zPK',
+ zUserFeedback.ZMEMORY AS 'zUserFeedback-Memory= zMemory-zPK',
+ zUserFeedback.ZUUID AS 'zUserFeedback-UUID',
+ zVisualSearchAttr.Z_PK AS 'zVisualSearchAttr-zPK',
+ zVisualSearchAttr.Z_ENT AS 'zVisualSearchAttr-zENT',
+ zVisualSearchAttr.Z_OPT AS 'zVisualSearchAttr-zOPT',
+ zVisualSearchAttr.ZMEDIAANALYSISASSETATTRIBUTES AS 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK',
+ z27AlbumLists.Z_27ALBUMS AS 'z27AlbumList-27Albums= zGenAlbum-zPK',
+ z27AlbumLists.Z_2ALBUMLISTS AS 'z27AlbumList-Album List Key',
+ z27AlbumLists.Z_FOK_27ALBUMS AS 'z27AlbumList-FOK27Albums Key',
+ z28Assets.Z_28ALBUMS AS 'z28Assets-28Albums= zGenAlbum-zPK',
+ z28Assets.Z_3ASSETS AS 'z28Assets-3Asset Key= zAsset-zPK in the Album',
+ z28Assets.Z_FOK_3ASSETS AS 'z28Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY',
+ z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AS 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK',
+ z3MemoryBCAs.Z_3CURATEDASSETS AS 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK',
+ z3MemoryBCAs.Z_44MEMORIESBEINGCURATEDASSETS AS 'z3MemoryBCAs-44MemoriesBeingCuratedAssets= zMemory-zPK',
+ z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK',
+ z3MemoryBECAs.Z_44MEMORIESBEINGEXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-44MemoriesBeingExtCuratedAssets= zMemory-zPK',
+ z3MemoryBRAs.Z_3REPRESENTATIVEASSETS AS 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK',
+ z3MemoryBRAs.Z_44MEMORIESBEINGREPRESENTATIVEASSETS AS 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK',
+ z3MemoryBUCAs.Z_3USERCURATEDASSETS AS 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK',
+ z3MemoryBUCAs.Z_44MEMORIESBEINGUSERCURATEDASSETS AS 'z3MemoryBUCAs-44MemoriesBeingUserCuratedAssets= zMemory-zPK',
+ z3MemoryBCUAs.Z_44MEMORIESBEINGCUSTOMUSERASSETS AS 'z3MemoryBCAs-44Memories Being Custom User Assets',
+ z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AS 'z3MemoryBCAs-3Custom User Assets',
+ z3MemoryBCUAs.Z_FOK_3CUSTOMUSERASSETS AS 'z3MemoryBCAs-FOK-3Custom User Assets'
+ FROM ZASSET zAsset
+ LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
+ LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES
+ LEFT JOIN ZINTERNALRESOURCE zIntResou ON zIntResou.ZASSET = zAsset.Z_PK
+ LEFT JOIN ZSCENEPRINT zSceneP ON zSceneP.Z_PK = zAddAssetAttr.ZSCENEPRINT
+ LEFT JOIN Z_28ASSETS z28Assets ON z28Assets.Z_3ASSETS = zAsset.Z_PK
+ LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z28Assets.Z_28ALBUMS
+ LEFT JOIN ZUNMANAGEDADJUSTMENT zUnmAdj ON zAddAssetAttr.ZUNMANAGEDADJUSTMENT = zUnmAdj.Z_PK
+ LEFT JOIN Z_27ALBUMLISTS z27AlbumLists ON z27AlbumLists.Z_27ALBUMS = zGenAlbum.Z_PK
+ LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z27AlbumLists.Z_2ALBUMLISTS
+ LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER
+ LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION
+ LEFT JOIN ZASSETDESCRIPTION zAssetDes ON zAssetDes.Z_PK = zAddAssetAttr.ZASSETDESCRIPTION
+ LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
+ LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA
+ LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
+ LEFT JOIN ZCLOUDRESOURCE zCldRes ON zCldRes.ZCLOUDMASTER = zCldMast.Z_PK
+ LEFT JOIN ZASSETANALYSISSTATE zAssetAnalyState ON zAssetAnalyState.ZASSET = zAsset.Z_PK
+ LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK
+ LEFT JOIN ZPHOTOANALYSISASSETATTRIBUTES zPhotoAnalysisAssetAttr ON zPhotoAnalysisAssetAttr.ZASSET = zAsset.Z_PK
+ LEFT JOIN ZCOMPUTEDASSETATTRIBUTES zCompAssetAttr ON zCompAssetAttr.Z_PK = zAsset.ZCOMPUTEDATTRIBUTES
+ LEFT JOIN ZCHARACTERRECOGNITIONATTRIBUTES zCharRecogAttr ON zCharRecogAttr.Z_PK = zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES
+ LEFT JOIN ZVISUALSEARCHATTRIBUTES zVisualSearchAttr ON zVisualSearchAttr.Z_PK = zMedAnlyAstAttr.ZVISUALSEARCHATTRIBUTES
+ LEFT JOIN ZCLOUDFEEDENTRY zCldFeedEnt ON zAsset.ZCLOUDFEEDASSETSENTRY = zCldFeedEnt.Z_PK
+ LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedComment ON zAsset.Z_PK = zCldSharedComment.ZCOMMENTEDASSET
+ LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedCommentLiked ON zAsset.Z_PK = zCldSharedCommentLiked.ZLIKEDASSET
+ LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON zGenAlbum.Z_PK = zCldShareAlbumInvRec.ZALBUM
+ LEFT JOIN ZSHARE SPLzShare ON SPLzShare.Z_PK = zAsset.ZLIBRARYSCOPE
+ LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.ZSHARE = SPLzShare.Z_PK
+ LEFT JOIN ZSHARE zShare ON zShare.Z_PK = zAsset.ZMOMENTSHARE
+ LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK
+ LEFT JOIN ZASSETCONTRIBUTOR zAssetContrib ON zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS = zAsset.Z_PK
+ LEFT JOIN ZDETECTEDFACE zDetFace ON zAsset.Z_PK = zDetFace.ZASSETFORFACE
+ LEFT JOIN ZPERSON zPerson ON zPerson.Z_PK = zDetFace.ZPERSONFORFACE
+ LEFT JOIN ZDETECTEDFACEPRINT zDetFacePrint ON zDetFacePrint.ZFACE = zDetFace.Z_PK
+ LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON
+ LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP
+ LEFT JOIN Z_3MEMORIESBEINGCURATEDASSETS z3MemoryBCAs ON zAsset.Z_PK = z3MemoryBCAs.Z_3CURATEDASSETS
+ LEFT JOIN ZMEMORY zMemory ON z3MemoryBCAs.Z_44MEMORIESBEINGCURATEDASSETS = zMemory.Z_PK
+ LEFT JOIN Z_3MEMORIESBEINGCUSTOMUSERASSETS z3MemoryBCUAs ON zAsset.Z_PK = z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AND z3MemoryBCUAs.Z_44MEMORIESBEINGCUSTOMUSERASSETS = zMemory.Z_PK
+ LEFT JOIN Z_3MEMORIESBEINGEXTENDEDCURATEDASSETS z3MemoryBECAs ON zAsset.Z_PK = z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AND z3MemoryBECAs.Z_44MEMORIESBEINGEXTENDEDCURATEDASSETS = zMemory.Z_PK
+ LEFT JOIN Z_3MEMORIESBEINGMOVIECURATEDASSETS z3MemoryBMCAs ON zAsset.Z_PK = z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AND z3MemoryBMCAs.Z_44MEMORIESBEINGMOVIECURATEDASSETS = zMemory.Z_PK
+ LEFT JOIN Z_3MEMORIESBEINGREPRESENTATIVEASSETS z3MemoryBRAs ON zAsset.Z_PK = z3MemoryBRAs.Z_3REPRESENTATIVEASSETS AND z3MemoryBRAs.Z_44MEMORIESBEINGREPRESENTATIVEASSETS = zMemory.Z_PK
+ LEFT JOIN Z_3MEMORIESBEINGUSERCURATEDASSETS z3MemoryBUCAs ON zAsset.Z_PK = z3MemoryBUCAs.Z_3USERCURATEDASSETS AND z3MemoryBUCAs.Z_44MEMORIESBEINGUSERCURATEDASSETS = zMemory.Z_PK
+ LEFT JOIN ZUSERFEEDBACK zUserFeedback ON zUserFeedback.ZMEMORY = zMemory.Z_PK
+ LEFT JOIN ZMOMENT zMoment ON zMoment.Z_PK = zAsset.ZMOMENT
+ LEFT JOIN Z_3SUGGESTIONSBEINGKEYASSETS z3SuggBKA ON z3SuggBKA.Z_3KEYASSETS = zAsset.Z_PK
+ LEFT JOIN ZSUGGESTION SBKAzSugg ON SBKAzSugg.Z_PK = z3SuggBKA.Z_58SUGGESTIONSBEINGKEYASSETS
+ LEFT JOIN Z_3SUGGESTIONSBEINGREPRESENTATIVEASSETS z3SuggBRA ON z3SuggBRA.Z_3REPRESENTATIVEASSETS1 = zAsset.Z_PK
+ LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_58SUGGESTIONSBEINGREPRESENTATIVEASSETS
+ ORDER BY zAsset.ZADDEDDATE
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
+ row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
+ row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
+ row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
+ row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
+ row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
+ row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
+ row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
+ row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
+ row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
+ row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
+ row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
+ row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
+ row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
+ row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
+ row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
+ row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
+ row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
+ row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
+ row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
+ row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307],
+ row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315],
+ row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323],
+ row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331],
+ row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339],
+ row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347],
+ row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355],
+ row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363],
+ row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371],
+ row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379],
+ row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387],
+ row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395],
+ row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403],
+ row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411],
+ row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419],
+ row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427],
+ row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435],
+ row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443],
+ row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451],
+ row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459],
+ row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467],
+ row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475],
+ row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483],
+ row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491],
+ row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499],
+ row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507],
+ row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515],
+ row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523],
+ row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531],
+ row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539],
+ row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547],
+ row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555],
+ row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563],
+ row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571],
+ row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579],
+ row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587],
+ row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595],
+ row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603],
+ row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611],
+ row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619],
+ row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627],
+ row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635],
+ row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643],
+ row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651],
+ row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659],
+ row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667],
+ row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675],
+ row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683],
+ row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691],
+ row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699],
+ row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707],
+ row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715],
+ row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723],
+ row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731],
+ row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739],
+ row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747],
+ row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755],
+ row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763],
+ row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771],
+ row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779],
+ row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787],
+ row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795],
+ row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803],
+ row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811],
+ row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819],
+ row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827],
+ row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835],
+ row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843],
+ row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851],
+ row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859],
+ row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867],
+ row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875],
+ row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883],
+ row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891],
+ row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899],
+ row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907],
+ row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915],
+ row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923],
+ row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931],
+ row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939],
+ row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947],
+ row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955],
+ row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963],
+ row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971],
+ row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979],
+ row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987],
+ row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995],
+ row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002],
+ row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009],
+ row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016],
+ row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023],
+ row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030],
+ row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037],
+ row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044],
+ row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051],
+ row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058],
+ row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065],
+ row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072],
+ row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079],
+ row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086],
+ row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093]))
+
+ data_headers = (('zAsset-Added Date-0', 'datetime'),
+ 'zAsset- SortToken -CameraRoll-1',
+ 'zAsset Complete-2',
+ 'zAsset-zPK-4QueryStart-3',
+ 'zAddAssetAttr-zPK-4QueryStart-4',
+ 'zAsset-UUID = store.cloudphotodb-4QueryStart-5',
+ 'zAddAssetAttr-Master Fingerprint-4TableStart-6',
+ 'zIntResou-Fingerprint-4TableStart-7',
+ 'zAsset-Bundle Scope-8',
+ 'zAsset-Syndication State-9',
+ 'zAsset-Cloud is My Asset-10',
+ 'zAsset-Cloud is deletable-Asset-11',
+ 'zAsset-Cloud_Local_State-12',
+ 'zAsset-Visibility State-13',
+ 'zExtAttr-Camera Make-14',
+ 'zExtAttr-Camera Model-15',
+ 'zExtAttr-Lens Model-16',
+ 'zExtAttr-Flash Fired-17',
+ 'zExtAttr-Focal Lenght-18',
+ 'zExtAttr-Focal Lenth in 35MM-19',
+ 'zExtAttr-Digital Zoom Ratio-20',
+ 'zAsset-Derived Camera Capture Device-21',
+ 'zAddAssetAttr-Camera Captured Device-22',
+ 'zAddAssetAttr-Imported by-23',
+ 'zCldMast-Imported By-24',
+ 'zAddAssetAttr.Imported by Bundle Identifier-25',
+ 'zAddAssetAttr-Imported By Display Name-26',
+ 'zCldMast-Imported by Bundle ID-27',
+ 'zCldMast-Imported by Display Name-28',
+ 'zAsset-Saved Asset Type-29',
+ 'zAsset-Directory-Path-30',
+ 'zAsset-Filename-31',
+ 'zAddAssetAttr- Original Filename-32',
+ 'zCldMast- Original Filename-33',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-34',
+ 'zAsset-Active Library Scope Participation State -4QueryStart-35',
+ 'zAsset-Library Scope Share State- StillTesting -4QueryStart-36',
+ 'SPLzShare-Cloud Photo Count-SPL -4QueryStart-37',
+ 'SPLzShare-Cloud Video Count-SPL -4QueryStart-38',
+ ('zAddAssetAttr-Date Created Source-39', 'datetime'),
+ ('zAsset-Date Created-40', 'datetime'),
+ ('zCldMast-Creation Date-41', 'datetime'),
+ ('zIntResou-CldMst Date Created-42', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-43',
+ 'zAddAssetAttr-Time Zone Offset-44',
+ 'zAddAssetAttr-Inferred Time Zone Offset-45',
+ 'zAddAssetAttr-EXIF-String-46',
+ ('zAsset-Modification Date-47', 'datetime'),
+ ('zAddAssetAttr-Last Viewed Date-48', 'datetime'),
+ ('zAsset-Last Shared Date-49', 'datetime'),
+ 'zCldMast-Cloud Local State-50',
+ ('zCldMast-Import Date-51', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-52', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-4QueryStart-53',
+ ('zAddAssetAttr-Alt Import Image Date-54', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-55',
+ ('zAsset-Cloud Batch Publish Date-56', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-57', 'datetime'),
+ 'zAsset-Cloud Download Requests-58',
+ 'zAsset-Cloud Batch ID-59',
+ 'zAddAssetAttr-Upload Attempts-60',
+ 'zAsset-Latitude-61',
+ 'zExtAttr-Latitude-62',
+ 'zAsset-Longitude-63',
+ 'zExtAttr-Longitude-64',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-65',
+ 'zAddAssetAttr-Location Hash-66',
+ 'zAddAssetAttr-Shifted Location Valid-67',
+ 'zAddAssetAttr-Shifted Location Data-68',
+ 'zAddAssetAttr-Reverse Location Is Valid-69',
+ 'zAddAssetAttr-Reverse Location Data-70',
+ 'ParentzGenAlbum-UUID-4QueryStart-71',
+ 'zGenAlbum-UUID-4QueryStart-72',
+ 'SWYConverszGenAlbum-UUID-4QueryStart-73',
+ 'ParentzGenAlbum-Cloud GUID-4QueryStart-74',
+ 'zGenAlbum-Cloud GUID-4QueryStart-75',
+ 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-76',
+ 'zCldShareAlbumInvRec-Album GUID-4QueryStart-77',
+ 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-78',
+ 'zGenAlbum-Project Render UUID-4QueryStart-79',
+ 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-80',
+ 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-81',
+ 'zGenAlbum-Cloud_Local_State-4QueryStart-82',
+ 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-83',
+ ('ParentzGenAlbum- Creation Date- 4QueryStart-84', 'datetime'),
+ ('zGenAlbum- Creation Date- 4QueryStart-85', 'datetime'),
+ ('SWYConverszGenAlbum- Creation Date- 4QueryStart-86', 'datetime'),
+ ('zGenAlbum- Cloud Creation Date- 4QueryStart-87', 'datetime'),
+ ('SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-88', 'datetime'),
+ ('zGenAlbum- Start Date- 4QueryStart-89', 'datetime'),
+ ('SWYConverszGenAlbum- Start Date- 4QueryStart-90', 'datetime'),
+ ('zGenAlbum- End Date- 4QueryStart-91', 'datetime'),
+ ('SWYConverszGenAlbum- End Date- 4QueryStart-92', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date- 4QueryStart-93', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-94', 'datetime'),
+ 'ParentzGenAlbum- Title- 4QueryStart-95',
+ 'zGenAlbum- Title-User&System Applied- 4QueryStart-96',
+ 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-97',
+ 'zGenAlbum-Import Session ID-SWY- 4QueryStart-98',
+ 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-99',
+ 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-100',
+ 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-101',
+ 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-102',
+ 'SWYConverszGenAlbum- Syndicate-4QueryStart-103',
+ 'zGenAlbum-zENT- Entity- 4QueryStart-104',
+ 'ParentzGenAlbum- Kind- 4QueryStart-105',
+ 'zGenAlbum-Album Kind- 4QueryStart-106',
+ 'SWYConverszGenAlbum-Album Kind- 4QueryStart-107',
+ 'AAAzCldMastMedData-zOPT-108',
+ 'zAddAssetAttr-Media Metadata Type-109',
+ 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-110',
+ 'AAAzCldMastMedData-Data-111',
+ 'CldMasterzCldMastMedData-zOPT-112',
+ 'zCldMast-Media Metadata Type-113',
+ 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-114',
+ 'CMzCldMastMedData-Data-115',
+ 'zAsset-Search Index Rebuild State-116',
+ 'zAddAssetAttr-Syndication History-117',
+ 'zMedAnlyAstAttr-Syndication Processing Version-118',
+ 'zMedAnlyAstAttr-Syndication Processing Value-119',
+ 'zAsset-Orientation-120',
+ 'zAddAssetAttr-Original Orientation-121',
+ 'zAsset-Kind-122',
+ 'zAsset-Kind-Sub-Type-123',
+ 'zAddAssetAttr-Cloud Kind Sub Type-124',
+ 'zAsset-Playback Style-125',
+ 'zAsset-Playback Variation-126',
+ 'zAsset-Video Duration-127',
+ 'zExtAttr-Duration-128',
+ 'zAsset-Video CP Duration-129',
+ 'zAddAssetAttr-Video CP Duration Time Scale-130',
+ 'zAsset-Video CP Visibility State-131',
+ 'zAddAssetAttr-Video CP Display Value-132',
+ 'zAddAssetAttr-Video CP Display Time Scale-133',
+ 'zIntResou-Datastore Class ID-134',
+ 'zAsset-Cloud Placeholder Kind-135',
+ 'zIntResou-Local Availability-136',
+ 'zIntResou-Local Availability Target-137',
+ 'zIntResou-Cloud Local State-138',
+ 'zIntResou-Remote Availability-139',
+ 'zIntResou-Remote Availability Target-140',
+ 'zIntResou-Transient Cloud Master-141',
+ 'zIntResou-Side Car Index-142',
+ 'zIntResou- File ID-143',
+ 'zIntResou-Version-144',
+ 'zAddAssetAttr- Original-File-Size-145',
+ 'zIntResou-Resource Type-146',
+ 'zIntResou-Datastore Sub-Type-147',
+ 'zIntResou-Cloud Source Type-148',
+ 'zIntResou-Data Length-149',
+ 'zIntResou-Recipe ID-150',
+ ('zIntResou-Cloud Last Prefetch Date-151', 'datetime'),
+ 'zIntResou-Cloud Prefetch Count-152',
+ ('zIntResou- Cloud-Last-OnDemand Download-Date-153', 'datetime'),
+ 'zIntResou-UniformTypeID_UTI_Conformance_Hint-154',
+ 'zIntResou-Compact-UTI-155',
+ 'zAsset-Uniform Type ID-156',
+ 'zAsset-Original Color Space-157',
+ 'zCldMast-Uniform_Type_ID-158',
+ 'zCldMast-Full Size JPEG Source-159',
+ 'zAsset-HDR Gain-160',
+ 'zAsset-zHDR_Type-161',
+ 'zExtAttr-Codec-162',
+ 'zIntResou-Codec Four Char Code Name-163',
+ 'zCldMast-Codec Name-164',
+ 'zCldMast-Video Frame Rate-165',
+ 'zCldMast-Placeholder State-166',
+ 'zAsset-Depth_Type-167',
+ 'zAsset-Avalanche UUID-4TableStart-168',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-169',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-170',
+ 'zAddAssetAttr-Cloud Recovery State-171',
+ 'zAddAssetAttr-Cloud State Recovery Attempts Count-172',
+ 'zAsset-Deferred Processing Needed-173',
+ 'zAsset-Video Deferred Processing Needed-174',
+ 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-175',
+ 'zAddAssetAttr-Deferred Processing Candidate Options-176',
+ 'zAsset-Has Adjustments-Camera-Effects-Filters-177',
+ 'zUnmAdj-UUID-4TableStart-178',
+ ('zAsset-Adjustment Timestamp-179', 'datetime'),
+ ('zUnmAdj-Adjustment Timestamp-180', 'datetime'),
+ 'zAddAssetAttr-Editor Bundle ID-181',
+ 'zUnmAdj-Editor Localized Name-182',
+ 'zUnmAdj-Adjustment Format ID-183',
+ 'zAddAssetAttr-Montage-184',
+ 'zUnmAdj-Adjustment Render Types-185',
+ 'zUnmAdj-Adjustment Format Version-186',
+ 'zUnmAdj-Adjustment Base Image Format-187',
+ 'zAsset-Favorite-188',
+ 'zAsset-Hidden-189',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-190',
+ ('zAsset-Trashed Date-191', 'datetime'),
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-192',
+ 'zAsset-Delete-Reason-193',
+ 'zIntResou-Trash State-194',
+ ('zIntResou-Trashed Date-195', 'datetime'),
+ 'zAsset-Cloud Delete State-196',
+ 'zIntResou-Cloud Delete State-197',
+ 'zAddAssetAttr-PTP Trashed State-198',
+ 'zIntResou-PTP Trashed State-199',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-200',
+ ('zMedAnlyAstAttr-Media Analysis Timestamp-201', 'datetime'),
+ ('zAsset-Analysis State Modification Date-202', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-203',
+ 'zAddAssetAttr- View Count-204',
+ 'zAddAssetAttr- Pending Play Count-205',
+ 'zAddAssetAttr- Play Count-206',
+ 'zAddAssetAttr- Pending Share Count-207',
+ 'zAddAssetAttr- Share Count-208',
+ 'zAddAssetAttr-Allowed for Analysis-209',
+ 'zAddAssetAttr-Scene Analysis Version-210',
+ 'zAddAssetAttr-Scene Analysis is From Preview-211',
+ ('zAddAssetAttr-Scene Analysis Timestamp-212', 'datetime'),
+ 'zAsset-Duplication Asset Visibility State-213',
+ 'zAddAssetAttr-Destination Asset Copy State-214',
+ 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-215',
+ 'zAddAssetAttr-Source Asset for Duplication Scope ID-216',
+ 'zCldMast-Source Master For Duplication Scope ID-217',
+ 'zAddAssetAttr-Source Asset For Duplication ID-218',
+ 'zCldMast-Source Master for Duplication ID-219',
+ 'zAddAssetAttr-Variation Suggestions States-220',
+ 'zAsset-High Frame Rate State-221',
+ 'zAsset-Video Key Frame Time Scale-222',
+ 'zAsset-Video Key Frame Value-223',
+ 'zExtAttr-ISO-224',
+ 'zExtAttr-Metering Mode-225',
+ 'zExtAttr-Sample Rate-226',
+ 'zExtAttr-Track Format-227',
+ 'zExtAttr-White Balance-228',
+ 'zExtAttr-Aperture-229',
+ 'zExtAttr-BitRate-230',
+ 'zExtAttr-Exposure Bias-231',
+ 'zExtAttr-Frames Per Second-232',
+ 'zExtAttr-Shutter Speed-233',
+ 'zExtAttr-Slush Scene Bias-234',
+ 'zExtAttr-Slush Version-235',
+ 'zExtAttr-Slush Preset-236',
+ 'zExtAttr-Slush Warm Bias-237',
+ 'zAsset-Height-238',
+ 'zAddAssetAttr-Original Height-239',
+ 'zIntResou-Unoriented Height-240',
+ 'zAsset-Width-241',
+ 'zAddAssetAttr-Original Width-242',
+ 'zIntResou-Unoriented Width-243',
+ 'zShare-Thumbnail Image Data-244',
+ 'SPLzShare-Thumbnail Image Data-245',
+ 'zAsset-Thumbnail Index-246',
+ 'zAddAssetAttr-Embedded Thumbnail Height-247',
+ 'zAddAssetAttr-Embedded Thumbnail Length-248',
+ 'zAddAssetAttr-Embedded Thumbnail Offset-249',
+ 'zAddAssetAttr-Embedded Thumbnail Width-250',
+ 'zAsset-Packed Acceptable Crop Rect-251',
+ 'zAsset-Packed Badge Attributes-252',
+ 'zAsset-Packed Preferred Crop Rect-253',
+ 'zAsset-Curation Score-254',
+ 'zAsset-Camera Processing Adjustment State-255',
+ 'zAsset-Depth Type-256',
+ 'zAsset-Is Magic Carpet-QuicktimeMOVfile-257',
+ 'zAddAssetAttr-Orig Resource Choice-258',
+ 'zAsset-Spatial Type-259',
+ 'zAddAssetAttr-Spatial Over Capture Group ID-260',
+ 'zAddAssetAttr-Place Annotation Data-261',
+ 'zAddAssetAttr-Distance Identity-262',
+ 'zAddAssetAttr-Edited IPTC Attributes-263',
+ 'zAssetDes-Long Description-264',
+ 'zAddAssetAttr-Asset Description-265',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-266',
+ 'zAddAssetAttr-Accessibility Description-267',
+ 'zAddAssetAttr-Photo Stream Tag ID-268',
+ 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-269',
+ ('zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-270', 'datetime'),
+ ('zCldFeedEnt-Entry Date-271', 'datetime'),
+ 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-272',
+ 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-273',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-274',
+ 'zCldFeedEnt-Entry Priority Number-275',
+ 'zCldFeedEnt-Entry Type Number-276',
+ 'zCldSharedComment-Cloud GUID-4TableStart-277',
+ ('zCldSharedComment-Date-278', 'datetime'),
+ ('zCldSharedComment-Comment Client Date-279', 'datetime'),
+ ('zAsset-Cloud Last Viewed Comment Date-280', 'datetime'),
+ 'zCldSharedComment-Type-281',
+ 'zCldSharedComment-Comment Text-282',
+ 'zCldSharedComment-Commenter Hashed Person ID-283',
+ 'zCldSharedComment-Batch Comment-284',
+ 'zCldSharedComment-Is a Caption-285',
+ 'zAsset-Cloud Has Comments by Me-286',
+ 'zCldSharedComment-Is My Comment-287',
+ 'zCldSharedComment-Is Deletable-288',
+ 'zAsset-Cloud Has Comments Conversation-289',
+ 'zAsset-Cloud Has Unseen Comments-290',
+ 'zCldSharedComment-Liked-291',
+ 'zAddAssetAttr-Share Type-292',
+ 'zAsset-Library Scope Share State- StillTesting-293',
+ 'zAsset-Active Library Scope Participation State-294',
+ 'zAddAssetAttr-Library Scope Asset Contributors To Update-295',
+ 'zShare-UUID-CMM-4TableStart-296',
+ 'SPLzShare-UUID-SPL-4TableStart-297',
+ 'zShare-zENT-CMM-298',
+ 'SPLzShare-zENT-SPL-299',
+ 'zSharePartic-z54SHARE-300',
+ 'SPLzSharePartic-z54SHARE-301',
+ 'zShare-Status-CMM-302',
+ 'SPLzShare-Status-SPL-303',
+ 'zShare-Scope Type-CMM-304',
+ 'SPLzShare-Scope Type-SPL-305',
+ 'zShare-Local Publish State-CMM-306',
+ 'SPLzShare-Local Publish State-SPL-307',
+ 'zShare-Public Permission-CMM-308',
+ 'SPLzShare-Public Permission-SPL-309',
+ 'zShare-Originating Scope ID-CMM-310',
+ 'SPLzShare-Originating Scope ID-SPL-311',
+ 'zShare-Scope ID-CMM-312',
+ 'SPLzShare-Scope ID-SPL-313',
+ 'zShare-Title-CMM-314',
+ 'SPLzShare-Title-SPL-315',
+ 'zShare-Share URL-CMM-316',
+ 'SPLzShare-Share URL-SPL-317',
+ ('zShare-Creation Date-CMM-318', 'datetime'),
+ ('SPLzShare-Creation Date-SPL-319', 'datetime'),
+ ('zShare-Start Date-CMM-320', 'datetime'),
+ ('SPLzShare-Start Date-SPL-321', 'datetime'),
+ ('zShare-End Date-CMM-322', 'datetime'),
+ ('SPLzShare-End Date-SPL-323', 'datetime'),
+ ('zShare-Expiry Date-CMM-324', 'datetime'),
+ ('SPLzShare-Expiry Date-SPL-325', 'datetime'),
+ 'zShare-Cloud Item Count-CMM-326',
+ 'SPLzShare-Cloud Item Count-SPL-327',
+ 'zShare-Asset Count-CMM-328',
+ 'SPLzShare-Asset Count-SPL-329',
+ 'zShare-Cloud Photo Count-CMM-330',
+ 'SPLzShare-Cloud Photo Count-SPL-331',
+ 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-332',
+ 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-333',
+ 'zShare-Photos Count-CMM-334',
+ 'SPLzShare-Photos Count-CMM-SPL-335',
+ 'zShare-Uploaded Photos Count-CMM-336',
+ 'SPLzShare-Uploaded Photos Count-SPL-337',
+ 'zShare-Cloud Video Count-CMM-338',
+ 'SPLzShare-Cloud Video Count-SPL-339',
+ 'zShare-Videos Count-CMM-340',
+ 'SPLzShare-Videos Count-SPL-341',
+ 'zShare-Uploaded Videos Count-CMM-342',
+ 'SPLzShare-Uploaded Videos Count-SPL-343',
+ 'zShare-Force Sync Attempted-CMM-344',
+ 'SPLzShare-Force Sync Attempted-SPL-345',
+ 'zShare-Cloud Local State-CMM-346',
+ 'SPLzShare-Cloud Local State-SPL-347',
+ 'zShare-Scope Syncing State-CMM-348',
+ 'SPLzShare-Scope Syncing State-SPL-349',
+ 'zShare-Auto Share Policy-CMM-350',
+ 'SPLzShare-Auto Share Policy-SPL-351',
+ 'zShare-Should Notify On Upload Completion-CMM-352',
+ 'SPLzShare-Should Notify On Upload Completion-SPL-353',
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-354',
+ 'zShare-Trashed State-CMM-355',
+ 'SPLzShare-Trashed State-SPL-356',
+ 'zShare-Cloud Delete State-CMM-357',
+ 'SPLzShare-Cloud Delete State-SPL-358',
+ ('zShare-Trashed Date-CMM-359', 'datetime'),
+ ('SPLzShare-Trashed Date-SPL-360', 'datetime'),
+ ('zShare-LastParticipant Asset Trash Notification Date-CMM-361', 'datetime'),
+ ('SPLzShare-LastParticipant Asset Trash Notification Date-SPL-362', 'datetime'),
+ ('zShare-Last Participant Asset Trash Notification View Date-CMM-363', 'datetime'),
+ ('SPLzShare-Last Participant Asset Trash Notification View Date-SPL-364', 'datetime'),
+ 'zShare-Exit Source-CMM-365',
+ 'SPLzShare-Exit Source-SPL-366',
+ 'zShare-SPL_Exit State-CMM-367',
+ 'SPLzShare-SPL_Exit State-SPL-368',
+ 'zShare-Exit Type-CMM-369',
+ 'SPLzShare-Exit Type-SPL-370',
+ 'zShare-Should Ignor Budgets-CMM-371',
+ 'SPLzShare-Should Ignor Budgets-SPL-372',
+ 'zShare-Preview State-CMM-373',
+ 'SPLzShare-Preview State-SPL-374',
+ 'zShare-Preview Data-CMM-375',
+ 'SPLzShare-Preview Data-SPL-376',
+ 'zShare-Rules-CMM-377',
+ 'SPLzShare-Rules-SPL-378',
+ 'zShare-Thumbnail Image Data-CMM-379',
+ 'SPLzShare-Thumbnail Image Data-SPL-380',
+ 'zShare-Participant Cloud Update State-CMM-381',
+ 'SPLzShare-Participant Cloud Update State-SPL-382',
+ 'zSharePartic-UUID-4TableStart-383',
+ 'SPLzSharePartic-UUID-4TableStart-384',
+ 'zSharePartic-Acceptance Status-385',
+ 'SPLzSharePartic-Acceptance Status-386',
+ 'zSharePartic-Is Current User-387',
+ 'SPLzSharePartic-Is Current User-388',
+ 'zSharePartic-Role-389',
+ 'SPLzSharePartic-Role-390',
+ 'zSharePartic-Premission-391',
+ 'SPLzSharePartic-Premission-392',
+ 'zSharePartic-Participant ID-393',
+ 'SPLzSharePartic-Participant ID-394',
+ 'zSharePartic-User ID-395',
+ 'SPLzSharePartic-User ID-396',
+ 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-397',
+ 'SPLzSharePartic-zPK-4TableStart-398',
+ 'zSharePartic-zPK-4TableStart-399',
+ 'zSharePartic-Email Address-400',
+ 'SPLzSharePartic-Email Address-401',
+ 'zSharePartic-Phone Number-402',
+ 'SPLzSharePartic-Phone Number-403',
+ 'zSharePartic-Exit State-404',
+ 'SPLzSharePartic-Exit State-405',
+ 'ParentzGenAlbum-UUID-4TableStart-406',
+ 'zGenAlbum-UUID-4TableStart-407',
+ 'SWYConverszGenAlbum-UUID-4TableStart-408',
+ 'ParentzGenAlbum-Cloud GUID-4TableStart-409',
+ 'zGenAlbum-Cloud GUID-4TableStart-410',
+ 'SWYConverszGenAlbum-Cloud GUID-4TableStart-411',
+ 'zCldShareAlbumInvRec-Album GUID-4TableStart-412',
+ 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-413',
+ 'zGenAlbum-Project Render UUID-4TableStart-414',
+ 'SWYConverszGenAlbum-Project Render UUID-4TableStart-415',
+ 'zAlbumList-Needs Reordering Number-416',
+ 'zGenAlbum-zENT- Entity-417',
+ 'ParentzGenAlbum-Kind-418',
+ 'zGenAlbum-Album Kind-419',
+ 'SWYConverszGenAlbum-Album Kind-420',
+ 'ParentzGenAlbum-Cloud-Local-State-421',
+ 'zGenAlbum-Cloud_Local_State-422',
+ 'SWYConverszGenAlbum-Cloud_Local_State-423',
+ 'ParentzGenAlbum- Title-424',
+ 'zGenAlbum- Title-User&System Applied-425',
+ 'SWYConverszGenAlbum- Title -User&System Applied-426',
+ 'zGenAlbum-Import Session ID-SWY-427',
+ 'zAsset- Conversation= zGenAlbum_zPK-428',
+ 'SWYConverszGenAlbum- Import Session ID-SWY-429',
+ 'zGenAlbum-Imported by Bundle Identifier-430',
+ 'SWYzGenAlbum-Imported by Bundle Identifier-431',
+ 'SWYConverszGenAlbum- Syndicate-432',
+ ('ParentzGenAlbum-Creation Date-433', 'datetime'),
+ ('zGenAlbum-Creation Date-434', 'datetime'),
+ ('SWYConverszGenAlbum-Creation Date-435', 'datetime'),
+ ('zGenAlbum-Cloud Creation Date-436', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Creation Date-437', 'datetime'),
+ ('zGenAlbum-Start Date-438', 'datetime'),
+ ('SWYConverszGenAlbum-Start Date-439', 'datetime'),
+ ('zGenAlbum-End Date-440', 'datetime'),
+ ('SWYConverszGenAlbum-End Date-441', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-442', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Subscription Date-443', 'datetime'),
+ 'ParentzGenAlbum-Pending Items Count-444',
+ 'zGenAlbum-Pending Items Count-445',
+ 'SWYConverszGenAlbum-Pending Items Count-446',
+ 'ParentzGenAlbum-Pending Items Type-447',
+ 'zGenAlbum-Pending Items Type-448',
+ 'SWYConverszGenAlbum-Pending Items Type-449',
+ 'zGenAlbum- Cached Photos Count-450',
+ 'SWYConverszGenAlbum- Cached Photos Count-451',
+ 'zGenAlbum- Cached Videos Count-452',
+ 'SWYConverszGenAlbum- Cached Videos Count-453',
+ 'zGenAlbum- Cached Count-454',
+ 'SWYConverszGenAlbum- Cached Count-455',
+ 'ParentzGenAlbum-Sync Event Order Key-456',
+ 'zGenAlbum-Sync Event Order Key-457',
+ 'SWYConverszGenAlbum-Sync Event Order Key-458',
+ 'zGenAlbum-Has Unseen Content-459',
+ 'SWYConverszGenAlbum-Has Unseen Content-460',
+ 'zGenAlbum-Unseen Asset Count-461',
+ 'SWYConverszGenAlbum-Unseen Asset Count-462',
+ 'zGenAlbum-is Owned-463',
+ 'SWYConverszGenAlbum-is Owned-464',
+ 'zGenAlbum-Cloud Relationship State-465',
+ 'SWYConverszGenAlbum-Cloud Relationship State-466',
+ 'zGenAlbum-Cloud Relationship State Local-467',
+ 'SWYConverszGenAlbum-Cloud Relationship State Local-468',
+ 'zGenAlbum-Cloud Owner Mail Key-469',
+ 'SWYConverszGenAlbum-Cloud Owner Mail Key-470',
+ 'zGenAlbum-Cloud Owner Frist Name-471',
+ 'SWYConverszGenAlbum-Cloud Owner Frist Name-472',
+ 'zGenAlbum-Cloud Owner Last Name-473',
+ 'SWYConverszGenAlbum-Cloud Owner Last Name-474',
+ 'zGenAlbum-Cloud Owner Full Name-475',
+ 'SWYConverszGenAlbum-Cloud Owner Full Name-476',
+ 'zGenAlbum-Cloud Person ID-477',
+ 'SWYConverszGenAlbum-Cloud Person ID-478',
+ 'zAsset-Cloud Owner Hashed Person ID-479',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-480',
+ 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-481',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-482',
+ 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-483',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-484',
+ 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-485',
+ 'zGenAlbum-Cloud Album Sub Type-486',
+ 'SWYConverszGenAlbum-Cloud Album Sub Type-487',
+ ('zGenAlbum-Cloud Contribution Date-488', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Contribution Date-489', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-490', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Last Interesting Change Date-491', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-492',
+ 'SWYConverszGenAlbum-Cloud Notification Enabled-493',
+ 'ParentzGenAlbum-Pinned-494',
+ 'zGenAlbum-Pinned-495',
+ 'SWYConverszGenAlbum-Pinned-496',
+ 'ParentzGenAlbum-Custom Sort Key-497',
+ 'zGenAlbum-Custom Sort Key-498',
+ 'SWYConverszGenAlbum-Custom Sort Key-499',
+ 'ParentzGenAlbum-Custom Sort Ascending-500',
+ 'zGenAlbum-Custom Sort Ascending-501',
+ 'SWYConverszGenAlbum-Custom Sort Ascending-502',
+ 'ParentzGenAlbum-Is Prototype-503',
+ 'zGenAlbum-Is Prototype-504',
+ 'SWYConverszGenAlbum-Is Prototype-505',
+ 'ParentzGenAlbum-Project Document Type-506',
+ 'zGenAlbum-Project Document Type-507',
+ 'SWYConverszGenAlbum-Project Document Type-508',
+ 'ParentzGenAlbum-Custom Query Type-509',
+ 'zGenAlbum-Custom Query Type-510',
+ 'SWYConverszGenAlbum-Custom Query Type-511',
+ 'ParentzGenAlbum-Trashed State-512',
+ ('ParentzGenAlbum-Trash Date-513', 'datetime'),
+ 'zGenAlbum-Trashed State-514',
+ ('zGenAlbum-Trash Date-515', 'datetime'),
+ 'SWYConverszGenAlbum-Trashed State-516',
+ ('SWYConverszGenAlbum-Trash Date-517', 'datetime'),
+ 'ParentzGenAlbum-Cloud Delete State-518',
+ 'zGenAlbum-Cloud Delete State-519',
+ 'SWYConverszGenAlbum-Cloud Delete State-520',
+ 'zGenAlbum-Cloud Owner Whitelisted-521',
+ 'SWYConverszGenAlbum-Cloud Owner Whitelisted-522',
+ 'zGenAlbum-Cloud Local Public URL Enabled-523',
+ 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-524',
+ 'zGenAlbum-Cloud Public URL Enabled-525',
+ 'zGenAlbum-Public URL-526',
+ 'SWYConverszGenAlbum-Cloud Public URL Enabled-527',
+ 'SWYConverszGenAlbum-Public URL-528',
+ 'zGenAlbum-Key Asset Face Thumb Index-529',
+ 'SWYConverszGenAlbum-Key Asset Face Thumb Index-530',
+ 'zGenAlbum-Project Text Extension ID-531',
+ 'SWYConverszGenAlbum-Project Text Extension ID-532',
+ 'zGenAlbum-User Query Data-533',
+ 'SWYConverszGenAlbum-User Query Data-534',
+ 'zGenAlbum-Custom Query Parameters-535',
+ 'SWYConverszGenAlbum-Custom Query Parameters-536',
+ 'zGenAlbum-Project Data-537',
+ 'SWYConverszGenAlbum-Project Data-538',
+ 'zGenAlbum-Search Index Rebuild State-539',
+ 'SWYConverszGenAlbum-Search Index Rebuild State-540',
+ 'zGenAlbum-Duplicate Type-541',
+ 'SWYConverszGenAlbum-Duplicate Type-542',
+ 'zGenAlbum-Privacy State-543',
+ 'SWYConverszGenAlbum-Privacy State-544',
+ 'zCldShareAlbumInvRec-zUUID-4TableStart-545',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-546',
+ 'zCldShareAlbumInvRec-Invitation State Local-547',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-548',
+ ('zCldShareAlbumInvRec-Subscription Date-549', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-550',
+ 'zCldShareAlbumInvRec-Invitee Last Name-551',
+ 'zCldShareAlbumInvRec-Invitee Full Name-552',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-553',
+ 'zCldShareAlbumInvRec-Invitee Email Key-554',
+ 'zGenAlbum-Key Asset Face ID-555',
+ 'zFaceCrop-Face Area Points-556',
+ 'zAsset-Face Adjustment Version-557',
+ 'zAddAssetAttr-Face Analysis Version-558',
+ 'zDetFace-Asset Visible-559',
+ 'zPerson-Face Count-560',
+ 'zDetFace-Face Crop-561',
+ 'zDetFace-Face Algorithm Version-562',
+ 'zDetFace-Adjustment Version-563',
+ 'zDetFace-UUID-4TableStart-564',
+ 'zPerson-Person UUID-4TableStart-565',
+ 'zPerson - MD ID-566',
+ 'zPerson - Asset Sort Order-567',
+ 'zDetFace-Confirmed Face Crop Generation State-568',
+ 'zDetFace-Manual-569',
+ 'zDetFace-Detection Type-570',
+ 'zPerson-Detection Type-571',
+ 'zDetFace-VIP Model Type-572',
+ 'zDetFace-Name Source-573',
+ 'zDetFace-Cloud Name Source-574',
+ 'zPerson-Merge Candidate Confidence-575',
+ 'zPerson-Person URI-576',
+ 'zPerson-Display Name-577',
+ 'zPerson-Full Name-578',
+ 'zPerson-Cloud Verified Type-579',
+ 'zFaceCrop-State-580',
+ 'zFaceCrop-Type-581',
+ 'zFaceCrop-UUID-4TableStart-582',
+ 'zPerson-Type-583',
+ 'zPerson-Verified Type-584',
+ 'zPerson-Gender Type-585',
+ 'zDetFace-Gender Type-586',
+ 'zDetFace-Center X-587',
+ 'zDetFace-Center Y-588',
+ 'zPerson-Age Type Estimate-589',
+ 'zDetFace-Age Type Estimate-590',
+ 'zDetFace-Ethnicity Type-591',
+ 'zDetFace-Skin Tone Type-592',
+ 'zDetFace-Hair Type-593',
+ 'zDetFace-Hair Color Type-594',
+ 'zDetFace-Head Gear Type-595',
+ 'zDetFace-Facial Hair Type-596',
+ 'zDetFace-Has Face Mask-597',
+ 'zDetFace-Pose Type-598',
+ 'zDetFace-Face Expression Type-599',
+ 'zDetFace-Has Smile-600',
+ 'zDetFace-Smile Type-601',
+ 'zDetFace-Lip Makeup Type-602',
+ 'zDetFace-Eyes State-603',
+ 'zDetFace-Is Left Eye Closed-604',
+ 'zDetFace-Is Right Eye Closed-605',
+ 'zDetFace-Gaze Center X-606',
+ 'zDetFace-Gaze Center Y-607',
+ 'zDetFace-Face Gaze Type-608',
+ 'zDetFace-Eye Glasses Type-609',
+ 'zDetFace-Eye Makeup Type-610',
+ 'zDetFace-Cluster Squence Number Key-611',
+ 'zDetFace-Grouping ID-612',
+ 'zDetFace-Master ID-613',
+ 'zDetFace-Quality-614',
+ 'zDetFace-Quality Measure-615',
+ 'zDetFace-Source Height-616',
+ 'zDetFace-Source Width-617',
+ 'zDetFace-Hidden-Asset Hidden-618',
+ 'zDetFace-In Trash-Recently Deleted-619',
+ 'zDetFace-Cloud Local State-620',
+ 'zDetFace-Training Type-621',
+ 'zDetFace.Pose Yaw-622',
+ 'zDetFace-Body Center X-623',
+ 'zDetFace-Body Center Y-624',
+ 'zDetFace-Body Height-625',
+ 'zDetFace-Body Width-626',
+ 'zDetFace-Roll-627',
+ 'zDetFace-Size-628',
+ 'zDetFace-Cluster Squence Number-629',
+ 'zDetFace-Blur Score-630',
+ 'zDetFacePrint-Face Print Version-631',
+ 'zMedAnlyAstAttr-Face Count-632',
+ 'zDetFaceGroup-UUID-4TableStart-633',
+ 'zDetFaceGroup-Person Builder State-634',
+ 'zDetFaceGroup-UnNamed Face Count-635',
+ 'zPerson-In Person Naming Model-636',
+ 'zPerson-Key Face Pick Source Key-637',
+ 'zPerson-Manual Order Key-638',
+ 'zPerson-Question Type-639',
+ 'zPerson-Suggested For Client Type-640',
+ 'zPerson-Merge Target Person-641',
+ 'zPerson-Cloud Local State-642',
+ 'zFaceCrop-Cloud Local State-643',
+ 'zFaceCrop-Cloud Type-644',
+ 'zPerson-Cloud Delete State-645',
+ 'zFaceCrop-Cloud Delete State-646',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-647',
+ 'zAsset-Highlight Visibility Score-648',
+ 'zMemory-UUID-4TableStart-649',
+ 'zMemory-AssetListPredicte-650',
+ 'zMemory-Score-651',
+ 'zMemory-SubTitle-652',
+ 'zMemory-Title-653',
+ 'zMemory-Category-654',
+ 'zMemory-SubCategory-655',
+ ('zMemory-Creation Date-656', 'datetime'),
+ ('zMemory-Last Enrichment Date-657', 'datetime'),
+ 'zMemory-User Action Options-658',
+ 'zMemory-Favorite Memory-659',
+ 'zMemory-View Count-660',
+ 'zMemory-Play Count-661',
+ 'zMemory-Rejected-662',
+ 'zMemory-Share Count-663',
+ 'zMemory-Sharing Composition-664',
+ ('zMemory-Last Movie Play Date-665', 'datetime'),
+ ('zMemory-Last Viewed Date-666', 'datetime'),
+ 'zMemory-Pending Play Count Memory-667',
+ 'zMemory-Pending Share Count Memory-668',
+ 'zMemory-Pending View Count Memory-669',
+ 'zMemory-Pending State-670',
+ 'zMemory-Featured State-671',
+ 'zMemory-Photos Graph Version-672',
+ 'zMemory-Graph Memory Identifier-673',
+ 'zMemory-Notification State-674',
+ 'zMemory-Cloud Local State-675',
+ 'zMemory-Cloud Delete State-676',
+ 'zMemory-Story Color Grade Kind-677',
+ 'zMemory-Story Serialized Title Category-678',
+ 'zMemory-Syndicated Content State-679',
+ 'zMemory-Search Index Rebuild State-680',
+ 'zMemory-Black Listed Feature-681',
+ 'zMoment-UUID-4TableStart-682',
+ 'zMoment-Aggregation Score-683',
+ ('zMoment-Start Date-684', 'datetime'),
+ ('zMoment-Representative Date-685', 'datetime'),
+ 'zMoment-Timezone Offset-686',
+ ('zMoment-Modification Date-687', 'datetime'),
+ ('zMoment-End Date-688', 'datetime'),
+ 'zMoment-SubTitle-689',
+ 'zMoment-Title-690',
+ 'zMoment-Originator State-691',
+ 'zMoment-Sharing Composition-692',
+ 'zMoment-Cached Count Shared-693',
+ 'zMoment-Processed Location-694',
+ 'zMoment-Approx Latitude-695',
+ 'zMoment-Approx Longitude-696',
+ 'zMoment-GPS Horizontal Accuracy-697',
+ 'zMoment-Cache Count-698',
+ 'zMoment-Cached Photos Count-699',
+ 'zMoment-Cached Videos Count-700',
+ 'zMoment-Trashed State-701',
+ 'SBKAzSugg-UUID-4TableStart-702',
+ 'SBKAzSugg-Suggestion Context-703',
+ 'SBKAzSugg-Sharing Composition-704',
+ ('SBKAzSugg-Start Date-705', 'datetime'),
+ 'SBKAzSugg-State-706',
+ 'SBKAzSugg-Featured State-707',
+ 'SBKAzSugg- Available Features-708',
+ 'SBKAzSugg-Notification State-709',
+ ('SBKAzSugg-Creation Date-710', 'datetime'),
+ ('SBKAzSugg-End Date-711', 'datetime'),
+ ('SBKAzSugg-Activation Date-712', 'datetime'),
+ ('SBKAzSugg-Expunge Date-713', 'datetime'),
+ ('SBKAzSugg-Relevant Until Date-714', 'datetime'),
+ 'SBKAzSugg-Title-715',
+ 'SBKAzSugg-Sub Title-716',
+ 'SBKAzSugg-Cached Count-717',
+ 'SBKAzSugg-Cahed Photos Count-718',
+ 'SBKAzSugg-Cached Videos Count-719',
+ 'SBKAzSugg-Type-720',
+ 'SBKAzSugg-Sub Type-721',
+ 'SBKAzSugg-Action Data-722',
+ 'SBKAzSugg-Version-723',
+ 'SBKAzSugg-Cloud Local State-724',
+ 'SBKAzSugg-Cloud Delete State-725',
+ 'SBRAzSugg-UUID-4TableStart-726',
+ 'SBRAzSugg-Suggestion Context-727',
+ 'SBRAzSugg-Sharing Composition-728',
+ ('SBRAzSugg-Start Date-729', 'datetime'),
+ 'SBRAzSugg-State-730',
+ 'SBRAzSugg-Featured State-731',
+ 'SBRAzSugg- Available Features-732',
+ 'SBRAzSugg-Notification State-733',
+ ('SBRAzSugg-Creation Date-734', 'datetime'),
+ ('SBRAzSugg-End Date-735', 'datetime'),
+ ('SBRAzSugg-Activation Date-736', 'datetime'),
+ ('SBRAzSugg-Expunge Date-737', 'datetime'),
+ ('SBRAzSugg-Relevant Until Date-738', 'datetime'),
+ 'SBRAzSugg-Title-739',
+ 'SBRAzSugg-Sub Title-740',
+ 'SBRAzSugg-Cached Count-741',
+ 'SBRAzSugg-Cahed Photos Count-742',
+ 'SBRAzSugg-Cached Videos Count-743',
+ 'SBRAzSugg-Type-744',
+ 'SBRAzSugg-Sub Type-745',
+ 'SBRAzSugg-Action Data-746',
+ 'SBRAzSugg-Version-747',
+ 'SBRAzSugg-Cloud Local State-748',
+ 'SBRAzSugg-Cloud Delete State-749',
+ 'zMedAnlyAstAttr-Media Analysis Version-750',
+ 'zMedAnlyAstAttr-Audio Classification-751',
+ 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-752',
+ 'zMedAnlyAstAttr-Best Video Range Start Time Scale-753',
+ 'zMedAnlyAstAttr-Best Video Range Duration Value-754',
+ 'zMedAnlyAstAttr-Best Video Range Start Value-755',
+ 'zMedAnlyAstAttr-Packed Best Playback Rect-756',
+ 'zMedAnlyAstAttr-Activity Score-757',
+ 'zMedAnlyAstAttr-Video Score-758',
+ 'zMedAnlyAstAttr-Audio Score-759',
+ 'zMedAnlyAstAttr-Wallpaper Score-760',
+ 'zMedAnlyAstAttr-AutoPlay Suggestion Score-761',
+ 'zMedAnlyAstAttr-Blurriness Score-762',
+ 'zMedAnlyAstAttr-Exposure Score-763',
+ 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-764',
+ 'zMedAnlyAstAttr-Probable Rotation Direction-765',
+ 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-766',
+ 'zAssetAnalyState-Asset UUID-4TableStart-767',
+ 'zAssetAnalyState-Analyisis State-768',
+ 'zAssetAnalyState-Worker Flags-769',
+ 'zAssetAnalyState-Worker Type-770',
+ ('zAssetAnalyState-Ignore Until Date-771', 'datetime'),
+ ('zAssetAnalyState-Last Ignored Date-772', 'datetime'),
+ ('zAssetAnalyState-Sort Token-773', 'datetime'),
+ 'zMedAnlyAstAttr-Character Recognition Attr-774',
+ 'zCharRecogAttr-Algorithm Version-775',
+ 'zCharRecogAttr-Adjustment Version-776',
+ 'zMedAnlyAstAttr-Visual Search Attributes-777',
+ 'zVisualSearchAttr-Algorithm Version-778',
+ 'zVisualSearchAttr-Adjustment Version-779',
+ 'zVisualSearchAttr - Sticker Confidence Algorithm Version-780',
+ 'zVisualSearchAttr - Sticker Confidence Score-781',
+ 'zAsset-Sticker Confidence Score-782',
+ 'zAsset-Overall Aesthetic Score-783',
+ 'zCompAssetAttr-Behavioral Score-784',
+ 'zCompAssetAttr-Failure Score zCompAssetAttr-785',
+ 'zCompAssetAttr-Harmonious Color Score-786',
+ 'zCompAssetAttr-Immersiveness Score-787',
+ 'zCompAssetAttr-Interaction Score-788',
+ 'zCompAssetAttr-Intersting Subject Score-789',
+ 'zCompAssetAttr-Intrusive Object Presence Score-790',
+ 'zCompAssetAttr-Lively Color Score-791',
+ 'zCompAssetAttr-Low Light-792',
+ 'zCompAssetAttr-Noise Score-793',
+ 'zCompAssetAttr-Pleasant Camera Tilt Score-794',
+ 'zCompAssetAttr-Pleasant Composition Score-795',
+ 'zCompAssetAttr-Pleasant Lighting Score-796',
+ 'zCompAssetAttr-Pleasant Pattern Score-797',
+ 'zCompAssetAttr-Pleasant Perspective Score-798',
+ 'zCompAssetAttr-Pleasant Post Processing Score-799',
+ 'zCompAssetAttr-Pleasant Reflection Score-800',
+ 'zCompAssetAttrPleasant Symmetry Score-801',
+ 'zCompAssetAttr-Sharply Focused Subject Score-802',
+ 'zCompAssetAttr-Tastfully Blurred Score-803',
+ 'zCompAssetAttr-Well Chosen Subject Score-804',
+ 'zCompAssetAttr-Well Framed Subject Score-805',
+ 'zCompAssetAttr-Well Timeed Shot Score-806',
+ 'zCldRes-Asset UUID-4TableStart-807',
+ 'zCldRes-Cloud Local State-808',
+ 'zCldRes-File Size-809',
+ 'zCldRes-Height-810',
+ 'zCldRes-Is Available-811',
+ 'zCldRes-Is Locally Available-812',
+ 'zCldRes-Prefetch Count-813',
+ 'zCldRes-Source Type-814',
+ 'zCldRes-Type-815',
+ 'zCldRes-Width-816',
+ ('zCldRes-Date Created-817', 'datetime'),
+ ('zCldRes-Last OnDemand Download Date-818', 'datetime'),
+ ('zCldRes-Last Prefetch Date-819', 'datetime'),
+ 'zCldRes-Prunedat-820',
+ 'zCldRes-File Path-821',
+ 'zCldRes-Fingerprint-822',
+ 'zCldRes-Item ID-823',
+ 'zCldRes-UniID-824',
+ 'zUserFeedback-UUID-4TableStart-825',
+ 'zUserFeedback-Feature-826',
+ 'zUserFeedback-Type-827',
+ ('zUserFeedback-Last Modified Date-828', 'datetime'),
+ 'zUserFeedback-Context-829',
+ 'zUserFeedback-Cloud Local State-830',
+ 'zUserFeedback-Cloud Delete State-831',
+ 'zUserFeedback - Creation Type-832',
+ 'zAddAssetAttr-zPK-833',
+ 'zAddAssetAttr-zENT-834',
+ 'ZAddAssetAttr-zOPT-835',
+ 'zAddAssetAttr-zAsset= zAsset_zPK-836',
+ 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-837',
+ 'zAddAssetAttr-Master Fingerprint-838',
+ 'zAddAssetAttr-Public Global UUID-839',
+ 'zAddAssetAttr-Deferred Photo Identifier-840',
+ 'zAddAssetAttr-Original Assets UUID-841',
+ 'zAddAssetAttr-Import Session ID-842',
+ 'zAddAssetAttr-Originating Asset Identifier-843',
+ 'zAddAssetAttr.Adjusted Fingerprint-844',
+ 'zAlbumList-zPK= Album List Key-845',
+ 'zAlbumList-zENT-846',
+ 'zAlbumList-zOPT-847',
+ 'zAlbumList-ID Key-848',
+ 'zAlbumList-UUID-849',
+ 'zAsset-zPK-850',
+ 'zAsset-zENT-851',
+ 'zAsset-zOPT-852',
+ 'zAsset-Master= zCldMast-zPK-853',
+ 'zAsset-Extended Attributes= zExtAttr-zPK-854',
+ 'zAsset-Import Session Key-855',
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-856',
+ 'zAsset-Photo Analysis Attributes Key-857',
+ 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-858',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-859',
+ 'zAsset-Moment Share Key= zShare-zPK-860',
+ 'zAsset-zMoment Key= zMoment-zPK-861',
+ 'zAsset-Computed Attributes Asset Key-862',
+ 'zAsset-Highlight Being Assets-HBA Key-863',
+ 'zAsset-Highlight Being Extended Assets-HBEA Key-864',
+ 'zAsset-Highlight Being Key Asset Private-HBKAP Key-865',
+ 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-866',
+ 'zAsset-Highligh Being Summary Assets-HBSA Key-867',
+ 'zAsset-Day Group Highlight Being Assets-DGHBA Key-868',
+ 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-869',
+ 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-870',
+ 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-871',
+ 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-872',
+ 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-873',
+ 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-874',
+ 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-875',
+ 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-876',
+ 'zAsset-Promotion Score-877',
+ 'zAsset-Iconic Score-878',
+ 'zAsset-Media Analysis Attributes Key-879',
+ 'zAsset-Media Group UUID-880',
+ 'zAsset-UUID = store.cloudphotodb-881',
+ 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-882',
+ 'zAsset.Cloud Collection GUID-883',
+ 'zAsset-Avalanche UUID-884',
+ 'zAssetAnalyState-zPK-885',
+ 'zAssetAnalyState-zEnt-886',
+ 'zAssetAnalyState-zOpt-887',
+ 'zAssetAnalyState-Asset= zAsset-zPK-888',
+ 'zAssetAnalyState-Asset UUID-889',
+ 'zAsstContrib-zPK-890',
+ 'zAsstContrib-zEnt-891',
+ 'zAsstContrib-zOpt-892',
+ 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-893',
+ 'zAsstContrib-Participant= zSharePartic-zPK-894',
+ 'zAssetDes-zPK-895',
+ 'zAssetDes-zENT-896',
+ 'zAssetDes-zOPT-897',
+ 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-898',
+ 'zCharRecogAttr-zPK-899',
+ 'zCharRecogAttr-zENT-900',
+ 'zCharRecogAttr-zOPT-901',
+ 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-902',
+ 'zCldFeedEnt-zPK= zCldShared keys-903',
+ 'zCldFeedEnt-zENT-904',
+ 'zCldFeedEnt-zOPT-905',
+ 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-906',
+ 'zCldFeedEnt-Entry Invitation Record GUID-907',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-908',
+ 'zCldMast-zPK= zAsset-Master-909',
+ 'zCldMast-zENT-910',
+ 'zCldMast-zOPT-911',
+ 'zCldMast-Moment Share Key= zShare-zPK-912',
+ 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-913',
+ 'zCldMast-Originating Asset ID-914',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-915',
+ 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-916',
+ 'CMzCldMastMedData-zENT-917',
+ 'CMzCldMastMedData-zOPT-918',
+ 'CMzCldMastMedData-CldMast= zCldMast-zPK-919',
+ 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-920',
+ 'AAAzCldMastMedData-zENT-921',
+ 'AAAzCldMastMedData-zOPT-922',
+ 'AAAzCldMastMedData-CldMast key-923',
+ 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-924',
+ 'zCldRes-zPK-925',
+ 'zCldRes-zENT-926',
+ 'zCldRes-zOPT-927',
+ 'zCldRes-Asset= zAsset-zPK-928',
+ 'zCldRes-Cloud Master= zCldMast-zPK-929',
+ 'zCldRes-Asset UUID-930',
+ 'zCldShareAlbumInvRec-zPK-931',
+ 'zCldShareAlbumInvRec-zEnt-932',
+ 'zCldShareAlbumInvRec-zOpt-933',
+ 'zCldShareAlbumInvRec-Album Key-934',
+ 'zCldShareAlbumInvRec-FOK Album Key-935',
+ 'zCldShareAlbumInvRec-Album GUID-936',
+ 'zCldShareAlbumInvRec-zUUID-937',
+ 'zCldShareAlbumInvRec-Cloud GUID-938',
+ 'zCldSharedComment-zPK-939',
+ 'zCldSharedComment-zENT-940',
+ 'zCldSharedComment-zOPT-941',
+ 'zCldSharedComment-Commented Asset Key= zAsset-zPK-942',
+ 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-943',
+ 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-944',
+ 'zCldSharedComment-Liked Asset Key= zAsset-zPK-945',
+ 'zCldSharedComment-CldFeedLikeCommentEntry Key-946',
+ 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-947',
+ 'zCldSharedComment-Cloud GUID-948',
+ 'zCompAssetAttr-zPK-949',
+ 'zCompAssetAttr-zEnt-950',
+ 'zCompAssetAttr-zOpt-951',
+ 'zCompAssetAttr-Asset Key-952',
+ 'zDetFace-zPK-953',
+ 'zDetFace-zEnt-954',
+ 'zDetFace.zOpt-955',
+ 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face-956',
+ 'zDetFace-PersonForFace= zPerson-zPK-957',
+ 'zDetFace-Person Being Key Face-958',
+ 'zDetFace-Face Print-959',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-960',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-961',
+ 'zDetFace-UUID-962',
+ 'zDetFaceGroup-zPK-963',
+ 'zDetFaceGroup-zENT-964',
+ 'zDetFaceGroup-zOPT-965',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-966',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-967',
+ 'zDetFaceGroup-UUID-968',
+ 'zDetFacePrint-zPK-969',
+ 'zDetFacePrint-zEnt-970',
+ 'zDetFacePrint-zOpt-971',
+ 'zDetFacePrint-Face Key-972',
+ 'zExtAttr-zPK= zAsset-zExtendedAttributes-973',
+ 'zExtAttr-zENT-974',
+ 'zExtAttr-zOPT-975',
+ 'zExtAttr-Asset Key-976',
+ 'zFaceCrop-zPK-977',
+ 'zFaceCrop-zEnt-978',
+ 'zFaceCrop-zOpt-979',
+ 'zFaceCrop-Asset Key-980',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-981',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-982',
+ 'zFaceCrop-Face Key-983',
+ 'zFaceCrop-UUID-984',
+ 'zGenAlbum-zPK=26AlbumLists= 26Albums-985',
+ 'zGenAlbum-zENT-986',
+ 'zGenAlbum-zOpt-987',
+ 'zGenAlbum-Key Asset-Key zAsset-zPK-988',
+ 'zGenAlbum-Secondary Key Asset-989',
+ 'zGenAlbum-Tertiary Key Asset-990',
+ 'zGenAlbum-Custom Key Asset-991',
+ 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-992',
+ 'zGenAlbum-FOK Parent Folder-993',
+ 'zGenAlbum-zSyndicate-994',
+ 'zGenAlbum-UUID-995',
+ 'SWYConverszGenAlbum-UUID-996',
+ 'zGenAlbum-Cloud_GUID = store.cloudphotodb-997',
+ 'SWYConverszGenAlbum-Cloud GUID-998',
+ 'zGenAlbum-Project Render UUID-999',
+ 'SWYConverszGenAlbum-Project Render UUID-1000',
+ 'zIntResou-zPK-1001',
+ 'zIntResou-zENT-1002',
+ 'zIntResou-zOPT-1003',
+ 'zIntResou-Asset= zAsset_zPK-1004',
+ 'zIntResou-Fingerprint-1005',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-1006',
+ 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1007',
+ 'zMedAnlyAstAttr-zEnt-1008',
+ 'zMedAnlyAstAttr-zOpt-1009',
+ 'zMedAnlyAstAttr-Asset= zAsset-zPK-1010',
+ 'zMemory-zPK-1011',
+ 'zMemory-zENT-1012',
+ 'zMemory-zOPT-1013',
+ 'zMemory-Key Asset= zAsset-zPK-1014',
+ 'zMemory-UUID-1015',
+ 'zMoment-zPK-1016',
+ 'zMoment-zENT-1017',
+ 'zMoment-zOPT-1018',
+ 'zMoment-Highlight Key-1019',
+ 'zMoment-UUID-1020',
+ 'zPerson-zPK=zDetFace-Person-1021',
+ 'zPerson-zEnt-1022',
+ 'zPerson-zOpt-1023',
+ 'zPerson-Share Participant= zSharePartic-zPK-1024',
+ 'zPerson-KeyFace=zDetFace-zPK-1025',
+ 'zPerson-Assoc Face Group Key-1026',
+ 'zPerson-Person UUID-1027',
+ 'zPhotoAnalysisAssetAttr-zPK-1028',
+ 'zPhotoAnalysisAssetAttr-zEnt-1029',
+ 'zPhotoAnalysisAssetAttr-zOpt-1030',
+ 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1031',
+ 'zSceneP-zPK-1032',
+ 'zSceneP-zENT-1033',
+ 'zSceneP-zOPT-1034',
+ 'zShare-zPK-1035',
+ 'zShare-zENT-1036',
+ 'zShare-zOPT-1037',
+ 'zShare-UUID-1038',
+ 'SPLzShare-UUID-1039',
+ 'zShare-Scope ID = store.cloudphotodb-1040',
+ 'zSharePartic-zPK-1041',
+ 'zSharePartic-zENT-1042',
+ 'zSharePartic-zOPT-1043',
+ 'zSharePartic-Share Key= zShare-zPK-1044',
+ 'zSharePartic-Person= zPerson-zPK-1045',
+ 'zSharePartic-UUID-1046',
+ 'SBKAzSugg-zPK-1047',
+ 'SBKAzSugg-zENT-1048',
+ 'SBKAzSugg-zOPT-1049',
+ 'SBKAzSugg-UUID-1050',
+ 'SBRAzSugg-zPK-1051',
+ 'SBRAzSugg-zENT-1052',
+ 'SBRAzSugg-zOPT-1053',
+ 'SBRAzSugg-UUID-1054',
+ 'z3SuggBRA-3RepAssets1-1055',
+ 'z3SuggBRA-58SuggBeingRepAssets-1056',
+ 'z3SuggBKA-58SuggBeingKeyAssets= zSugg-zPK-1057',
+ 'z3SuggBKA-3KeyAssets= zAsset-zPK-1058',
+ 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1059',
+ 'zUnmAdj-zOPT-1060',
+ 'zUnmAdj-zENT-1061',
+ 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1062',
+ 'zUnmAdj-UUID-1063',
+ 'zUnmAdj-Other Adjustments Fingerprint-1064',
+ 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1065',
+ 'zUserFeedback-zPK-1066',
+ 'zUserFeedback-zENT-1067',
+ 'zUserFeedback-zOPT-1068',
+ 'zUserFeedback-Person= zPerson-zPK-1069',
+ 'zUserFeedback-Memory= zMemory-zPK-1070',
+ 'zUserFeedback-UUID-1071',
+ 'zVisualSearchAttr-zPK-1072',
+ 'zVisualSearchAttr-zENT-1073',
+ 'zVisualSearchAttr-zOPT-1074',
+ 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1075',
+ 'z27AlbumList-27Albums= zGenAlbum-zPK-1076',
+ 'z27AlbumList-Album List Key-1077',
+ 'z27AlbumList-FOK27Albums Key-1078',
+ 'z28Assets-28Albums= zGenAlbum-zPK-1079',
+ 'z28Assets-3Asset Key= zAsset-zPK in the Album-1080',
+ 'z28Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1081',
+ 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1082',
+ 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1083',
+ 'z3MemoryBCAs-44MemoriesBeingCuratedAssets= zMemory-zPK-1084',
+ 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1085',
+ 'z3MemoryBECAs-44MemoriesBeingExtCuratedAssets= zMemory-zPK-1086',
+ 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1087',
+ 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK-1088',
+ 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1089',
+ 'z3MemoryBUCAs-44MemoriesBeingUserCuratedAssets= zMemory-zPK-1090',
+ 'z3MemoryBCAs-44Memories Being Custom User Assets-1091',
+ 'z3MemoryBCAs-3Custom User Assets-1092',
+ 'z3MemoryBCAs-FOK-3Custom User Assets-1093')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
+
+ elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")):
+ source_path = get_file_path(files_found, "Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
+
+ query = '''
+ SELECT
+ DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date',
+ DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll',
+ CASE zAsset.ZCOMPLETE
+ WHEN 1 THEN '1-Yes-1'
+ END AS 'zAsset Complete',
+ zAsset.Z_PK AS 'zAsset-zPK-4QueryStart',
+ zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK-4QueryStart',
+ zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb-4QueryStart',
+ zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint-4TableStart',
+ zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-4TableStart',
+ CASE zAsset.ZBUNDLESCOPE
+ WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0'
+ WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1'
+ WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2'
+ WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || ''
+ END AS 'zAsset-Bundle Scope',
+ CASE zAsset.ZSYNDICATIONSTATE
+ WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0'
+ WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1'
+ WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2'
+ WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3'
+ WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8'
+ WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9'
+ WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || ''
+ END AS 'zAsset-Syndication State',
+ CASE zAsset.ZCLOUDISMYASSET
+ WHEN 0 THEN '0-Not_My_Asset_in_Shared_Album-0'
+ WHEN 1 THEN '1-My_Asset_in_Shared_Album-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISMYASSET || ''
+ END AS 'zAsset-Cloud is My Asset',
+ CASE zAsset.ZCLOUDISDELETABLE
+ WHEN 0 THEN '0-No-0'
+ WHEN 1 THEN '1-Yes-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISDELETABLE || ''
+ END AS 'zAsset-Cloud is deletable-Asset',
+ CASE zAsset.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Album-Conv_or_iCldPhotos_OFF=Asset_Not_Synced-0'
+ WHEN 1 THEN 'iCldPhotos ON=Asset_Can-Be-or-Has-Been_Synced_with_iCloud-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDLOCALSTATE || ''
+ END AS 'zAsset-Cloud_Local_State',
+ CASE zAsset.ZVISIBILITYSTATE
+ WHEN 0 THEN '0-Visible-PL-CameraRoll-0'
+ WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || ''
+ END AS 'zAsset-Visibility State',
+ zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make',
+ zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model',
+ zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model',
+ CASE zExtAttr.ZFLASHFIRED
+ WHEN 0 THEN '0-No Flash-0'
+ WHEN 1 THEN '1-Flash Fired-1'
+ ELSE 'Unknown-New-Value!: ' || zExtAttr.ZFLASHFIRED || ''
+ END AS 'zExtAttr-Flash Fired',
+ zExtAttr.ZFOCALLENGTH AS 'zExtAttr-Focal Lenght',
+ zExtAttr.ZFOCALLENGTHIN35MM AS 'zExtAttr-Focal Lenth in 35MM',
+ zExtAttr.ZDIGITALZOOMRATIO AS 'zExtAttr-Digital Zoom Ratio',
+ CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE
+ WHEN 0 THEN '0-Back-Camera-Other-0'
+ WHEN 1 THEN '1-Front-Camera-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZDERIVEDCAMERACAPTUREDEVICE || ''
+ END AS 'zAsset-Derived Camera Capture Device',
+ CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE
+ WHEN 0 THEN '0-Back-Camera-Other-0'
+ WHEN 1 THEN '1-Front-Camera-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || ''
+ END AS 'zAddAssetAttr-Camera Captured Device',
+ CASE zAddAssetAttr.ZIMPORTEDBY
+ WHEN 0 THEN '0-Cloud-Other-0'
+ WHEN 1 THEN '1-Native-Back-Camera-1'
+ WHEN 2 THEN '2-Native-Front-Camera-2'
+ WHEN 3 THEN '3-Third-Party-App-3'
+ WHEN 4 THEN '4-StillTesting-4'
+ WHEN 5 THEN '5-PhotoBooth_PL-Asset-5'
+ WHEN 6 THEN '6-Third-Party-App-6'
+ WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7'
+ WHEN 8 THEN '8-System-Package-App-8'
+ WHEN 9 THEN '9-Native-App-9'
+ WHEN 10 THEN '10-StillTesting-10'
+ WHEN 11 THEN '11-StillTesting-11'
+ WHEN 12 THEN '12-SWY_Syndication_PL-12'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || ''
+ END AS 'zAddAssetAttr-Imported by',
+ CASE zCldMast.ZIMPORTEDBY
+ WHEN 0 THEN '0-Cloud-Other-0'
+ WHEN 1 THEN '1-Native-Back-Camera-1'
+ WHEN 2 THEN '2-Native-Front-Camera-2'
+ WHEN 3 THEN '3-Third-Party-App-3'
+ WHEN 4 THEN '4-StillTesting-4'
+ WHEN 5 THEN '5-PhotoBooth_PL-Asset-5'
+ WHEN 6 THEN '6-Third-Party-App-6'
+ WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7'
+ WHEN 8 THEN '8-System-Package-App-8'
+ WHEN 9 THEN '9-Native-App-9'
+ WHEN 10 THEN '10-StillTesting-10'
+ WHEN 11 THEN '11-StillTesting-11'
+ WHEN 12 THEN '12-SWY_Syndication_PL-12'
+ ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || ''
+ END AS 'zCldMast-Imported By',
+ zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier',
+ zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name',
+ zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID',
+ zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name',
+ CASE zAsset.ZSAVEDASSETTYPE
+ WHEN 0 THEN '0-Saved-via-other-source-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ WHEN 2 THEN '2-StillTesting-2'
+ WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3'
+ WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4'
+ WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5'
+ WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6'
+ WHEN 7 THEN '7-StillTesting-7'
+ WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8'
+ WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || ''
+ END AS 'zAsset-Saved Asset Type',
+ zAsset.ZDIRECTORY AS 'zAsset-Directory-Path',
+ zAsset.ZFILENAME AS 'zAsset-Filename',
+ zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename',
+ zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename',
+ zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files',
+ CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE
+ WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0'
+ WHEN 1 THEN '1-Asset-In-Active-SPL-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || ''
+ END AS 'zAsset-Active Library Scope Participation State -4QueryStart',
+ CASE zAsset.ZLIBRARYSCOPESHARESTATE
+ WHEN 0 THEN '0-Asset-Not-In-SPL-0'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || ''
+ END AS 'zAsset-Library Scope Share State- StillTesting -4QueryStart',
+ SPLzShare.ZCLOUDPHOTOCOUNT AS 'SPLzShare-Cloud Photo Count-SPL -4QueryStart',
+ SPLzShare.ZCLOUDVIDEOCOUNT AS 'SPLzShare-Cloud Video Count-SPL -4QueryStart',
+ CASE zAddAssetAttr.ZDATECREATEDSOURCE
+ WHEN 0 THEN '0-Cloud-Asset-0'
+ WHEN 1 THEN '1-Local_Asset_EXIF-1'
+ WHEN 3 THEN '3-Local_Asset_No_EXIF-3'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || ''
+ END AS 'zAddAssetAttr-Date Created Source',
+ DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
+ DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date',
+ DateTime(zIntResou.ZCLOUDMASTERDATECREATED + 978307200, 'UNIXEPOCH') AS 'zIntResou-CldMst Date Created',
+ zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name',
+ zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset',
+ zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset',
+ zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String',
+ DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date',
+ DateTime(zAddAssetAttr.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Viewed Date',
+ DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date',
+ CASE zCldMast.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-Not Synced with Cloud-0'
+ WHEN 1 THEN '1-Pending Upload-1'
+ WHEN 2 THEN '2-StillTesting'
+ WHEN 3 THEN '3-Synced with Cloud-3'
+ ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || ''
+ END AS 'zCldMast-Cloud Local State',
+ DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date',
+ DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files',
+ zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID-4QueryStart',
+ DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date',
+ zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart',
+ DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date',
+ DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date',
+ zAsset.ZCLOUDDOWNLOADREQUESTS AS 'zAsset-Cloud Download Requests',
+ zAsset.ZCLOUDBATCHID AS 'zAsset-Cloud Batch ID',
+ zAddAssetAttr.ZUPLOADATTEMPTS AS 'zAddAssetAttr-Upload Attempts',
+ CASE zAsset.ZLATITUDE
+ WHEN -180.0 THEN '-180.0'
+ ELSE zAsset.ZLATITUDE
+ END AS 'zAsset-Latitude',
+ zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude',
+ CASE zAsset.ZLONGITUDE
+ WHEN -180.0 THEN '-180.0'
+ ELSE zAsset.ZLONGITUDE
+ END AS 'zAsset-Longitude',
+ zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude',
+ CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY
+ WHEN -1.0 THEN '-1.0'
+ ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY
+ END AS 'zAddAssetAttr-GPS Horizontal Accuracy',
+ zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash',
+ CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID
+ WHEN 0 THEN '0-Shifted Location Not Valid-0'
+ WHEN 1 THEN '1-Shifted Location Valid-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || ''
+ END AS 'zAddAssetAttr-Shifted Location Valid',
+ CASE
+ WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist'
+ ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL'
+ END AS 'zAddAssetAttr-Shifted Location Data',
+ CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID
+ WHEN 0 THEN '0-Reverse Location Not Valid-0'
+ WHEN 1 THEN '1-Reverse Location Valid-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || ''
+ END AS 'zAddAssetAttr-Reverse Location Is Valid',
+ CASE
+ WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist'
+ ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL'
+ END AS 'zAddAssetAttr-Reverse Location Data',
+ ParentzGenAlbum.ZUUID AS 'ParentzGenAlbum-UUID-4QueryStart',
+ zGenAlbum.ZUUID AS 'zGenAlbum-UUID-4QueryStart',
+ SWYConverszGenAlbum.ZUUID AS 'SWYConverszGenAlbum-UUID-4QueryStart',
+ ParentzGenAlbum.ZCLOUDGUID AS 'ParentzGenAlbum-Cloud GUID-4QueryStart',
+ zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4QueryStart',
+ SWYConverszGenAlbum.ZCLOUDGUID AS 'SWYConverszGenAlbum-Cloud GUID-4QueryStart',
+ zCldShareAlbumInvRec.ZALBUMGUID AS 'zCldShareAlbumInvRec-Album GUID-4QueryStart',
+ zCldShareAlbumInvRec.ZCLOUDGUID AS 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart',
+ zGenAlbum.ZPROJECTRENDERUUID AS 'zGenAlbum-Project Render UUID-4QueryStart',
+ SWYConverszGenAlbum.ZPROJECTRENDERUUID AS 'SWYConverszGenAlbum-Project Render UUID-4QueryStart',
+ CASE ParentzGenAlbum.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0'
+ WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDLOCALSTATE || ''
+ END AS 'ParentzGenAlbum-Cloud-Local-State-4QueryStart',
+ CASE zGenAlbum.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0'
+ WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDLOCALSTATE || ''
+ END AS 'zGenAlbum-Cloud_Local_State-4QueryStart',
+ CASE SWYConverszGenAlbum.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0'
+ WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDLOCALSTATE || ''
+ END AS 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart',
+ DateTime(ParentzGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum- Creation Date- 4QueryStart',
+ DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- Creation Date- 4QueryStart',
+ DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- Creation Date- 4QueryStart',
+ DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- Cloud Creation Date- 4QueryStart',
+ DateTime(SWYConverszGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart',
+ DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- Start Date- 4QueryStart',
+ DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- Start Date- 4QueryStart',
+ DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- End Date- 4QueryStart',
+ DateTime(SWYConverszGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- End Date- 4QueryStart',
+ DateTime(zGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Subscription Date- 4QueryStart',
+ DateTime(SWYConverszGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart',
+ ParentzGenAlbum.ZTITLE AS 'ParentzGenAlbum- Title- 4QueryStart',
+ zGenAlbum.ZTITLE AS 'zGenAlbum- Title-User&System Applied- 4QueryStart',
+ SWYConverszGenAlbum.ZTITLE AS 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart',
+ zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum-Import Session ID-SWY- 4QueryStart',
+ zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart',
+ SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart',
+ zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart',
+ SWYConverszGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart',
+ CASE SWYConverszGenAlbum.ZSYNDICATE
+ WHEN 1 THEN '1-SWYConverszGenAlbum-Syndicate - SWY-SyncedFile-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSYNDICATE || ''
+ END AS 'SWYConverszGenAlbum- Syndicate-4QueryStart',
+ CASE zGenAlbum.Z_ENT
+ WHEN 27 THEN '27-LPL-SPL-CPL_Album-DecodingVariableBasedOniOS-27'
+ WHEN 28 THEN '28-LPL-SPL-CPL-Shared_Album-DecodingVariableBasedOniOS-28'
+ WHEN 29 THEN '29-Shared_Album-DecodingVariableBasedOniOS-29'
+ WHEN 30 THEN '30-Duplicate_Album-Pending_Merge-30'
+ WHEN 35 THEN '35-SearchIndexRebuild-1600KIND-35'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.Z_ENT || ''
+ END AS 'zGenAlbum-zENT- Entity- 4QueryStart',
+ CASE ParentzGenAlbum.ZKIND
+ WHEN 2 THEN '2-Non-Shared-Album-2'
+ WHEN 1505 THEN '1505-Shared-Album-1505'
+ WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT'
+ WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT'
+ WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509'
+ WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510'
+ WHEN 3571 THEN '3571-Progress-Sync-3571'
+ WHEN 3572 THEN '3572-Progress-OTA-Restore-3572'
+ WHEN 3573 THEN '3573-Progress-FS-Import-3573'
+ WHEN 3998 THEN '3998-Project Root Folder-3998'
+ WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999'
+ WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZKIND || ''
+ END AS 'ParentzGenAlbum- Kind- 4QueryStart',
+ CASE zGenAlbum.ZKIND
+ WHEN 2 THEN '2-Non-Shared-Album-2'
+ WHEN 1505 THEN '1505-Shared-Album-1505'
+ WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT'
+ WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT'
+ WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509'
+ WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510'
+ WHEN 3571 THEN '3571-Progress-Sync-3571'
+ WHEN 3572 THEN '3572-Progress-OTA-Restore-3572'
+ WHEN 3573 THEN '3573-Progress-FS-Import-3573'
+ WHEN 3998 THEN '3998-Project Root Folder-3998'
+ WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999'
+ WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || ''
+ END AS 'zGenAlbum-Album Kind- 4QueryStart',
+ CASE SWYConverszGenAlbum.ZKIND
+ WHEN 2 THEN '2-Non-Shared-Album-2'
+ WHEN 1505 THEN '1505-Shared-Album-1505'
+ WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT'
+ WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT'
+ WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509'
+ WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510'
+ WHEN 3571 THEN '3571-Progress-Sync-3571'
+ WHEN 3572 THEN '3572-Progress-OTA-Restore-3572'
+ WHEN 3573 THEN '3573-Progress-FS-Import-3573'
+ WHEN 3998 THEN '3998-Project Root Folder-3998'
+ WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999'
+ WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZKIND || ''
+ END AS 'SWYConverszGenAlbum-Album Kind- 4QueryStart',
+ CASE AAAzCldMastMedData.Z_OPT
+ WHEN 1 THEN '1-StillTesting-Cloud-1'
+ WHEN 2 THEN '2-StillTesting-This Device-2'
+ WHEN 3 THEN '3-StillTesting-Muted-3'
+ WHEN 4 THEN '4-StillTesting-Unknown-4'
+ WHEN 5 THEN '5-StillTesting-Unknown-5'
+ ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || ''
+ END AS 'AAAzCldMastMedData-zOPT',
+ zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type',
+ zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK',
+ CASE
+ WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist'
+ ELSE 'AAAzCldMastMedData-Data_Empty-NULL'
+ END AS 'AAAzCldMastMedData-Data',
+ CASE CMzCldMastMedData.Z_OPT
+ WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1'
+ WHEN 2 THEN '2-StillTesting-Local_Asset-2'
+ WHEN 3 THEN '3-StillTesting-Muted-3'
+ WHEN 4 THEN '4-StillTesting-Unknown-4'
+ WHEN 5 THEN '5-StillTesting-Unknown-5'
+ ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || ''
+ END AS 'CldMasterzCldMastMedData-zOPT',
+ zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type',
+ zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData-zPK',
+ CASE
+ WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist'
+ ELSE 'CMzCldMastMedData-Data_Empty-NULL'
+ END AS 'CMzCldMastMedData-Data',
+ CASE zAsset.ZSEARCHINDEXREBUILDSTATE
+ WHEN 0 THEN '0-StillTesting-0'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSEARCHINDEXREBUILDSTATE || ''
+ END AS 'zAsset-Search Index Rebuild State',
+ zAddAssetAttr.ZSYNDICATIONHISTORY AS 'zAddAssetAttr-Syndication History',
+ zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVERSION AS 'zMedAnlyAstAttr-Syndication Processing Version',
+ CASE zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE
+ WHEN 0 THEN '0-NA-0'
+ WHEN 1 THEN '1-STILLTESTING_Wide-Camera_JPG-1'
+ WHEN 2 THEN '2-STILLTESTING_Telephoto_Camera_Lens-2'
+ WHEN 4 THEN '4-STILLTESTING_SWY_Asset_OrigAssetImport_SystemPackageApp-4'
+ WHEN 16 THEN '16-STILLTESTING-16'
+ WHEN 1024 THEN '1024-STILLTESTING_SWY_Asset_OrigAssetImport_NativeCamera-1024'
+ WHEN 2048 THEN '2048-STILLTESTING-2048'
+ WHEN 4096 THEN '4096-STILLTESTING_SWY_Asset_Manually_Saved-4096'
+ ELSE 'Unknown-New-Value!: ' || zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE || ''
+ END AS 'zMedAnlyAstAttr-Syndication Processing Value',
+ CASE zAsset.ZORIENTATION
+ WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1'
+ WHEN 2 THEN '2-Horizontal-Camera-(right)-2'
+ WHEN 3 THEN '3-Horizontal-Camera-(right)-3'
+ WHEN 4 THEN '4-Horizontal-Camera-(left)-4'
+ WHEN 5 THEN '5-Vertical-Camera-(top)-5'
+ WHEN 6 THEN '6-Vertical-Camera-(top)-6'
+ WHEN 7 THEN '7-Vertical-Camera-(bottom)-7'
+ WHEN 8 THEN '8-Vertical-Camera-(bottom)-8'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || ''
+ END AS 'zAsset-Orientation',
+ CASE zAddAssetAttr.ZORIGINALORIENTATION
+ WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1'
+ WHEN 2 THEN '2-Horizontal-Camera-(right)-2'
+ WHEN 3 THEN '3-Horizontal-Camera-(right)-3'
+ WHEN 4 THEN '4-Horizontal-Camera-(left)-4'
+ WHEN 5 THEN '5-Vertical-Camera-(top)-5'
+ WHEN 6 THEN '6-Vertical-Camera-(top)-6'
+ WHEN 7 THEN '7-Vertical-Camera-(bottom)-7'
+ WHEN 8 THEN '8-Vertical-Camera-(bottom)-8'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || ''
+ END AS 'zAddAssetAttr-Original Orientation',
+ CASE zAsset.ZKIND
+ WHEN 0 THEN '0-Photo-0'
+ WHEN 1 THEN '1-Video-1'
+ END AS 'zAsset-Kind',
+ CASE zAsset.ZKINDSUBTYPE
+ WHEN 0 THEN '0-Still-Photo-0'
+ WHEN 1 THEN '1-Panorama-1'
+ WHEN 2 THEN '2-Live-Photo-2'
+ WHEN 10 THEN '10-SpringBoard-Screenshot-10'
+ WHEN 100 THEN '100-Video-100'
+ WHEN 101 THEN '101-Slow-Mo-Video-101'
+ WHEN 102 THEN '102-Time-lapse-Video-102'
+ WHEN 103 THEN '103-Replay_Screen_Recording-103'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || ''
+ END AS 'zAsset-Kind-Sub-Type',
+ CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE
+ WHEN 0 THEN '0-Still-Photo-0'
+ WHEN 1 THEN '1-StillTesting'
+ WHEN 2 THEN '2-Live-Photo-2'
+ WHEN 3 THEN '3-Screenshot-3'
+ WHEN 10 THEN '10-SpringBoard-Screenshot-10'
+ WHEN 100 THEN '100-Video-100'
+ WHEN 101 THEN '101-Slow-Mo-Video-101'
+ WHEN 102 THEN '102-Time-lapse-Video-102'
+ WHEN 103 THEN '103-Replay_Screen_Recording-103'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || ''
+ END AS 'zAddAssetAttr-Cloud Kind Sub Type',
+ CASE zAsset.ZPLAYBACKSTYLE
+ WHEN 1 THEN '1-Image-1'
+ WHEN 2 THEN '2-Image-Animated-2'
+ WHEN 3 THEN '3-Live-Photo-3'
+ WHEN 4 THEN '4-Video-4'
+ WHEN 5 THEN '5-Video-Looping-5'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || ''
+ END AS 'zAsset-Playback Style',
+ CASE zAsset.ZPLAYBACKVARIATION
+ WHEN 0 THEN '0-No_Playback_Variation-0'
+ WHEN 1 THEN '1-StillTesting_Playback_Variation-1'
+ WHEN 2 THEN '2-StillTesting_Playback_Variation-2'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || ''
+ END AS 'zAsset-Playback Variation',
+ zAsset.ZDURATION AS 'zAsset-Video Duration',
+ zExtAttr.ZDURATION AS 'zExtAttr-Duration',
+ zAsset.ZVIDEOCPDURATIONVALUE AS 'zAsset-Video CP Duration',
+ zAddAssetAttr.ZVIDEOCPDURATIONTIMESCALE AS 'zAddAssetAttr-Video CP Duration Time Scale',
+ zAsset.ZVIDEOCPVISIBILITYSTATE AS 'zAsset-Video CP Visibility State',
+ zAddAssetAttr.ZVIDEOCPDISPLAYVALUE AS 'zAddAssetAttr-Video CP Display Value',
+ zAddAssetAttr.ZVIDEOCPDISPLAYTIMESCALE AS 'zAddAssetAttr-Video CP Display Time Scale',
+ CASE zIntResou.ZDATASTORECLASSID
+ WHEN 0 THEN '0-LPL-Asset_CPL-Asset-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ WHEN 2 THEN '2-Photo-Cloud-Sharing-Asset-2'
+ WHEN 3 THEN '3-SWY_Syndication_Asset-3'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORECLASSID || ''
+ END AS 'zIntResou-Datastore Class ID',
+ CASE zAsset.ZCLOUDPLACEHOLDERKIND
+ WHEN 0 THEN '0-Local&CloudMaster Asset-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ WHEN 2 THEN '2-StillTesting-2'
+ WHEN 3 THEN '3-JPG-Asset_Only_PhDa-Thumb-V2-3'
+ WHEN 4 THEN '4-LPL-JPG-Asset_CPLAsset-OtherType-4'
+ WHEN 5 THEN '5-Asset_synced_CPL_2_Device-5'
+ WHEN 6 THEN '6-StillTesting-6'
+ WHEN 7 THEN '7-LPL-poster-JPG-Asset_CPLAsset-MP4-7'
+ WHEN 8 THEN '8-LPL-JPG_Asset_CPLAsset-LivePhoto-MOV-8'
+ WHEN 9 THEN '9-CPL_MP4_Asset_Saved_2_LPL-9'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDPLACEHOLDERKIND || ''
+ END AS 'zAsset-Cloud Placeholder Kind',
+ CASE zIntResou.ZLOCALAVAILABILITY
+ WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)'
+ WHEN 1 THEN '1-IR_Asset_Avail_Locally-1'
+ WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || ''
+ END AS 'zIntResou-Local Availability',
+ CASE zIntResou.ZLOCALAVAILABILITYTARGET
+ WHEN 0 THEN '0-StillTesting-0'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITYTARGET || ''
+ END AS 'zIntResou-Local Availability Target',
+ CASE zIntResou.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-IR_Asset_Not_Synced_No_IR-CldMastDateCreated-0'
+ WHEN 1 THEN '1-IR_Asset_Pending-Upload-1'
+ WHEN 2 THEN '2-IR_Asset_Photo_Cloud_Share_Asset_On-Local-Device-2'
+ WHEN 3 THEN '3-IR_Asset_Synced_iCloud-3'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDLOCALSTATE || ''
+ END AS 'zIntResou-Cloud Local State',
+ CASE zIntResou.ZREMOTEAVAILABILITY
+ WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0'
+ WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || ''
+ END AS 'zIntResou-Remote Availability',
+ CASE zIntResou.ZREMOTEAVAILABILITYTARGET
+ WHEN 0 THEN '0-StillTesting-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITYTARGET || ''
+ END AS 'zIntResou-Remote Availability Target',
+ zIntResou.ZTRANSIENTCLOUDMASTER AS 'zIntResou-Transient Cloud Master',
+ zIntResou.ZSIDECARINDEX AS 'zIntResou-Side Car Index',
+ zIntResou.ZFILEID AS 'zIntResou- File ID',
+ CASE zIntResou.ZVERSION
+ WHEN 0 THEN '0-IR_Asset_Standard-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ WHEN 2 THEN '2-IR_Asset_Adjustments-Mutation-2'
+ WHEN 3 THEN '3-IR_Asset_No_IR-CldMastDateCreated-3'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZVERSION || ''
+ END AS 'zIntResou-Version',
+ zAddAssetAttr.ZORIGINALFILESIZE AS 'zAddAssetAttr- Original-File-Size',
+ CASE zIntResou.ZRESOURCETYPE
+ WHEN 0 THEN '0-Photo-0'
+ WHEN 1 THEN '1-Video-1'
+ WHEN 3 THEN '3-Live-Photo-3'
+ WHEN 5 THEN '5-Adjustment-Data-5'
+ WHEN 6 THEN '6-Screenshot-6'
+ WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9'
+ WHEN 13 THEN '13-Movie-13'
+ WHEN 14 THEN '14-Wallpaper-14'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || ''
+ END AS 'zIntResou-Resource Type',
+ CASE zIntResou.ZDATASTORESUBTYPE
+ WHEN 0 THEN '0-No Cloud Inter Resource-0'
+ WHEN 1 THEN '1-Main-Asset-Orig-Size-1'
+ WHEN 2 THEN '2-Photo-with-Adjustments-2'
+ WHEN 3 THEN '3-JPG-Large-Thumb-3'
+ WHEN 4 THEN '4-JPG-Med-Thumb-4'
+ WHEN 5 THEN '5-JPG-Small-Thumb-5'
+ WHEN 6 THEN '6-Video-Med-Data-6'
+ WHEN 7 THEN '7-Video-Small-Data-7'
+ WHEN 8 THEN '8-MP4-Cloud-Share-8'
+ WHEN 9 THEN '9-StillTesting'
+ WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10'
+ WHEN 11 THEN '11-StillTesting'
+ WHEN 12 THEN '12-StillTesting'
+ WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13'
+ WHEN 14 THEN '14-Wallpaper-14'
+ WHEN 15 THEN '15-Has-Markup-and-Adjustments-15'
+ WHEN 16 THEN '16-Video-with-Adjustments-16'
+ WHEN 17 THEN '17-RAW_Photo-17_RT'
+ WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18'
+ WHEN 19 THEN '19-Live-Photo-with-Adjustments-19'
+ WHEN 20 THEN '20-StillTesting'
+ WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21'
+ WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22'
+ WHEN 23 THEN '23-StillTesting'
+ WHEN 24 THEN '24-StillTesting'
+ WHEN 25 THEN '25-StillTesting'
+ WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26'
+ WHEN 27 THEN '27-StillTesting'
+ WHEN 28 THEN '28-MOV-Med-hdr-Data-28'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || ''
+ END AS 'zIntResou-Datastore Sub-Type',
+ CASE zIntResou.ZCLOUDSOURCETYPE
+ WHEN 0 THEN '0-NA-0'
+ WHEN 1 THEN '1-Main-Asset-Orig-Size-1'
+ WHEN 2 THEN '2-Photo-with-Adjustments-2'
+ WHEN 3 THEN '3-JPG-Large-Thumb-3'
+ WHEN 4 THEN '4-JPG-Med-Thumb-4'
+ WHEN 5 THEN '5-JPG-Small-Thumb-5'
+ WHEN 6 THEN '6-Video-Med-Data-6'
+ WHEN 7 THEN '7-Video-Small-Data-7'
+ WHEN 8 THEN '8-MP4-Cloud-Share-8'
+ WHEN 9 THEN '9-StillTesting'
+ WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10'
+ WHEN 11 THEN '11-StillTesting'
+ WHEN 12 THEN '12-StillTesting'
+ WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13'
+ WHEN 14 THEN '14-Wallpaper-14'
+ WHEN 15 THEN '15-Has-Markup-and-Adjustments-15'
+ WHEN 16 THEN '16-Video-with-Adjustments-16'
+ WHEN 17 THEN '17-RAW_Photo-17_RT'
+ WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18'
+ WHEN 19 THEN '19-Live-Photo-with-Adjustments-19'
+ WHEN 20 THEN '20-StillTesting'
+ WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21'
+ WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22'
+ WHEN 23 THEN '23-StillTesting'
+ WHEN 24 THEN '24-StillTesting'
+ WHEN 25 THEN '25-StillTesting'
+ WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26'
+ WHEN 27 THEN '27-StillTesting'
+ WHEN 28 THEN '28-MOV-Med-hdr-Data-28'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDSOURCETYPE || ''
+ END AS 'zIntResou-Cloud Source Type',
+ zIntResou.ZDATALENGTH AS 'zIntResou-Data Length',
+ CASE zIntResou.ZRECIPEID
+ WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0'
+ WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737'
+ WHEN 65739 THEN '65739-JPG_Large_Thumb-65739'
+ WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741'
+ WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743'
+ WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749'
+ WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938'
+ WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072'
+ WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077'
+ WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079'
+ WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081'
+ WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272'
+ WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275'
+ WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277'
+ WHEN 131475 THEN '131475-medium-hdr-MOV-131475'
+ WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683'
+ WHEN 327687 THEN '627687-WallpaperComputeResource-627687'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || ''
+ END AS 'zIntResou-Recipe ID',
+ CASE zIntResou.ZCLOUDLASTPREFETCHDATE
+ WHEN 0 THEN '0-NA-0'
+ ELSE DateTime(zIntResou.ZCLOUDLASTPREFETCHDATE + 978307200, 'UNIXEPOCH')
+ END AS 'zIntResou-Cloud Last Prefetch Date',
+ zIntResou.ZCLOUDPREFETCHCOUNT AS 'zIntResou-Cloud Prefetch Count',
+ DateTime(zIntResou.ZCLOUDLASTONDEMANDDOWNLOADDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou- Cloud-Last-OnDemand Download-Date',
+ CASE zIntResou.ZUTICONFORMANCEHINT
+ WHEN 0 THEN '0-NA-Doesnt_Conform-0'
+ WHEN 1 THEN '1-UTTypeImage-1'
+ WHEN 2 THEN '2-UTTypeProRawPhoto-2'
+ WHEN 3 THEN '3-UTTypeMovie-3'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZUTICONFORMANCEHINT || ''
+ END AS 'zIntResou-UniformTypeID_UTI_Conformance_Hint',
+ CASE zIntResou.ZCOMPACTUTI
+ WHEN 1 THEN '1-JPEG-THM-1'
+ WHEN 3 THEN '3-HEIC-3'
+ WHEN 6 THEN '6-PNG-6'
+ WHEN 7 THEN '7-StillTesting'
+ WHEN 9 THEN '9-DNG-9'
+ WHEN 23 THEN '23-JPEG-HEIC-quicktime-mov-23'
+ WHEN 24 THEN '24-MPEG4-24'
+ WHEN 36 THEN '36-Wallpaper-36'
+ WHEN 37 THEN '37-Adj-Mutation_Data-37'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZCOMPACTUTI || ''
+ END AS 'zIntResou-Compact-UTI',
+ zAsset.ZUNIFORMTYPEIDENTIFIER AS 'zAsset-Uniform Type ID',
+ zAsset.ZORIGINALCOLORSPACE AS 'zAsset-Original Color Space',
+ zCldMast.ZUNIFORMTYPEIDENTIFIER AS 'zCldMast-Uniform_Type_ID',
+ CASE zCldMast.ZFULLSIZEJPEGSOURCE
+ WHEN 0 THEN '0-CldMast-JPEG-Source-Video Still-Testing-0'
+ WHEN 1 THEN '1-CldMast-JPEG-Source-Other- Still-Testing-1'
+ ELSE 'Unknown-New-Value!: ' || zCldMast.ZFULLSIZEJPEGSOURCE || ''
+ END AS 'zCldMast-Full Size JPEG Source',
+ zAsset.ZHDRGAIN AS 'zAsset-HDR Gain',
+ CASE zAsset.ZHDRTYPE
+ WHEN 0 THEN '0-No-HDR-0'
+ WHEN 3 THEN '3-HDR_Photo-3_RT'
+ WHEN 4 THEN '4-Non-HDR_Version-4_RT'
+ WHEN 5 THEN '5-HEVC_Movie-5'
+ WHEN 6 THEN '6-Panorama-6_RT'
+ WHEN 10 THEN '10-HDR-Gain-10'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZHDRTYPE || ''
+ END AS 'zAsset-zHDR_Type',
+ zExtAttr.ZCODEC AS 'zExtAttr-Codec',
+ zIntResou.ZCODECFOURCHARCODENAME AS 'zIntResou-Codec Four Char Code Name',
+ zCldMast.ZCODECNAME AS 'zCldMast-Codec Name',
+ zCldMast.ZVIDEOFRAMERATE AS 'zCldMast-Video Frame Rate',
+ zCldMast.ZPLACEHOLDERSTATE AS 'zCldMast-Placeholder State',
+ CASE zAsset.ZDEPTHTYPE
+ WHEN 0 THEN '0-Not_Portrait-0_RT'
+ ELSE 'Portrait: ' || zAsset.ZDEPTHTYPE || ''
+ END AS 'zAsset-Depth_Type',
+ zAsset.ZAVALANCHEUUID AS 'zAsset-Avalanche UUID-4TableStart',
+ CASE zAsset.ZAVALANCHEPICKTYPE
+ WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT'
+ WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT'
+ WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT'
+ WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT'
+ WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT'
+ WHEN 32 THEN '32-StillTesting-32_RT'
+ WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEPICKTYPE || ''
+ END AS 'zAsset-Avalanche_Pick_Type-BurstAsset',
+ CASE zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE
+ WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT'
+ WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT'
+ WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT'
+ WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT'
+ WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT'
+ WHEN 32 THEN '32-StillTesting-32_RT'
+ WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE || ''
+ END AS 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset',
+ CASE zAddAssetAttr.ZCLOUDRECOVERYSTATE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDRECOVERYSTATE || ''
+ END AS 'zAddAssetAttr-Cloud Recovery State',
+ zAddAssetAttr.ZCLOUDSTATERECOVERYATTEMPTSCOUNT AS 'zAddAssetAttr-Cloud State Recovery Attempts Count',
+ zAsset.ZDEFERREDPROCESSINGNEEDED AS 'zAsset-Deferred Processing Needed',
+ zAsset.ZVIDEODEFERREDPROCESSINGNEEDED AS 'zAsset-Video Deferred Processing Needed',
+ zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart',
+ zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options',
+ CASE zAsset.ZHASADJUSTMENTS
+ WHEN 0 THEN '0-No-Adjustments-0'
+ WHEN 1 THEN '1-Yes-Adjustments-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZHASADJUSTMENTS || ''
+ END AS 'zAsset-Has Adjustments-Camera-Effects-Filters',
+ zUnmAdj.ZUUID AS 'zUnmAdj-UUID-4TableStart',
+ DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp',
+ DateTime(zUnmAdj.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zUnmAdj-Adjustment Timestamp',
+ zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID',
+ zUnmAdj.ZEDITORLOCALIZEDNAME AS 'zUnmAdj-Editor Localized Name',
+ zUnmAdj.ZADJUSTMENTFORMATIDENTIFIER AS 'zUnmAdj-Adjustment Format ID',
+ zAddAssetAttr.ZMONTAGE AS 'zAddAssetAttr-Montage',
+ CASE zUnmAdj.ZADJUSTMENTRENDERTYPES
+ WHEN 0 THEN '0-Standard or Portrait with erros-0'
+ WHEN 1 THEN '1-StillTesting'
+ WHEN 2 THEN '2-Portrait-2'
+ WHEN 3 THEN '3-StillTesting'
+ WHEN 4 THEN '4-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zUnmAdj.ZADJUSTMENTRENDERTYPES || ''
+ END AS 'zUnmAdj-Adjustment Render Types',
+ CASE zUnmAdj.ZADJUSTMENTFORMATVERSION
+ WHEN 1.0 THEN '1.0-Markup-1.0'
+ WHEN 1.1 THEN '1.1-Slow-Mo-1.1'
+ WHEN 1.2 THEN '1.2-StillTesting'
+ WHEN 1.3 THEN '1.3-StillTesting'
+ WHEN 1.4 THEN '1.4-Filter-1.4'
+ WHEN 1.5 THEN '1.5-Adjust-1.5'
+ WHEN 1.6 THEN '1.6-Video-Trim-1.6'
+ WHEN 1.7 THEN '1.7-StillTesting'
+ WHEN 1.8 THEN '1.8-StillTesting'
+ WHEN 1.9 THEN '1.9-StillTesting'
+ WHEN 2.0 THEN '2.0-ScreenshotServices-2.0'
+ ELSE 'Unknown-New-Value!: ' || zUnmAdj.ZADJUSTMENTFORMATVERSION || ''
+ END AS 'zUnmAdj-Adjustment Format Version',
+ zUnmAdj.ZADJUSTMENTBASEIMAGEFORMAT AS 'zUnmAdj-Adjustment Base Image Format',
+ CASE zAsset.ZFAVORITE
+ WHEN 0 THEN '0-Asset Not Favorite-0'
+ WHEN 1 THEN '1-Asset Favorite-1'
+ END AS 'zAsset-Favorite',
+ CASE zAsset.ZHIDDEN
+ WHEN 0 THEN '0-Asset Not Hidden-0'
+ WHEN 1 THEN '1-Asset Hidden-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZHIDDEN || ''
+ END AS 'zAsset-Hidden',
+ CASE zAsset.ZTRASHEDSTATE
+ WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0'
+ WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || ''
+ END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted',
+ DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date',
+ zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart',
+ CASE zAsset.ZDELETEREASON
+ WHEN 1 THEN '1-StillTesting Delete-Reason-1'
+ WHEN 2 THEN '2-StillTesting Delete-Reason-2'
+ WHEN 3 THEN '3-StillTesting Delete-Reason-3'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZDELETEREASON || ''
+ END AS 'zAsset-Delete-Reason',
+ CASE zIntResou.ZTRASHEDSTATE
+ WHEN 0 THEN '0-zIntResou-Not In Trash-Recently Deleted-0'
+ WHEN 1 THEN '1-zIntResou-In Trash-Recently Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZTRASHEDSTATE || ''
+ END AS 'zIntResou-Trash State',
+ DateTime(zIntResou.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou-Trashed Date',
+ CASE zAsset.ZCLOUDDELETESTATE
+ WHEN 0 THEN '0-Cloud Asset Not Deleted-0'
+ WHEN 1 THEN '1-Cloud Asset Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDDELETESTATE || ''
+ END AS 'zAsset-Cloud Delete State',
+ CASE zIntResou.ZCLOUDDELETESTATE
+ WHEN 0 THEN '0-Cloud IntResou Not Deleted-0'
+ WHEN 1 THEN '1-Cloud IntResou Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDDELETESTATE || ''
+ END AS 'zIntResou-Cloud Delete State',
+ CASE zAddAssetAttr.ZPTPTRASHEDSTATE
+ WHEN 0 THEN '0-PTP Not in Trash-0'
+ WHEN 1 THEN '1-PTP In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZPTPTRASHEDSTATE || ''
+ END AS 'zAddAssetAttr-PTP Trashed State',
+ CASE zIntResou.ZPTPTRASHEDSTATE
+ WHEN 0 THEN '0-PTP IntResou Not in Trash-0'
+ WHEN 1 THEN '1-PTP IntResou In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || zIntResou.ZPTPTRASHEDSTATE || ''
+ END AS 'zIntResou-PTP Trashed State',
+ zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart',
+ DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp',
+ DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modificaion Date',
+ zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count',
+ zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count',
+ zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count',
+ zAddAssetAttr.ZPLAYCOUNT AS 'zAddAssetAttr- Play Count',
+ zAddAssetAttr.ZPENDINGSHARECOUNT AS 'zAddAssetAttr- Pending Share Count',
+ zAddAssetAttr.ZSHARECOUNT AS 'zAddAssetAttr- Share Count',
+ CASE zAddAssetAttr.ZALLOWEDFORANALYSIS
+ WHEN 0 THEN '0-Asset Not Allowed For Analysis-0'
+ WHEN 1 THEN '1-Asset Allowed for Analysis-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZALLOWEDFORANALYSIS || ''
+ END AS 'zAddAssetAttr-Allowed for Analysis',
+ zAddAssetAttr.ZSCENEANALYSISVERSION AS 'zAddAssetAttr-Scene Analysis Version',
+ CASE zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW
+ WHEN 0 THEN '0-No-0'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW || ''
+ END AS 'zAddAssetAttr-Scene Analysis is From Preview',
+ DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp',
+ CASE zAsset.ZDUPLICATEASSETVISIBILITYSTATE
+ WHEN 0 THEN '0-No-Duplicates-0'
+ WHEN 1 THEN '1-Has Duplicate-1'
+ WHEN 2 THEN '2-Is a Duplicate-2'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZDUPLICATEASSETVISIBILITYSTATE || ''
+ END AS 'zAsset-Duplication Asset Visibility State',
+ CASE zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE
+ WHEN 0 THEN '0-No Copy-0'
+ WHEN 1 THEN '1-Has A Copy-1'
+ WHEN 2 THEN '2-Has A Copy-2'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE || ''
+ END AS 'zAddAssetAttr-Destination Asset Copy State',
+ CASE zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE
+ WHEN 0 THEN '0-Unknown-StillTesting-0'
+ WHEN 1 THEN '1-Unknown-StillTesting-1'
+ WHEN 2 THEN '2-Unknown-StillTesting-2'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE || ''
+ END AS 'zAddAssetAttr-Duplicate Detector Perceptual Processing State',
+ zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONSCOPEIDENTIFIER AS 'zAddAssetAttr-Source Asset for Duplication Scope ID',
+ zCldMast.ZSOURCEMASTERFORDUPLICATIONSCOPEIDENTIFIER AS 'zCldMast-Source Master For Duplication Scope ID',
+ zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONIDENTIFIER AS 'zAddAssetAttr-Source Asset For Duplication ID',
+ zCldMast.ZSOURCEMASTERFORDUPLICATIONIDENTIFIER AS 'zCldMast-Source Master for Duplication ID',
+ zAddAssetAttr.ZVARIATIONSUGGESTIONSTATES AS 'zAddAssetAttr-Variation Suggestions States',
+ zAsset.ZHIGHFRAMERATESTATE AS 'zAsset-High Frame Rate State',
+ zAsset.ZVIDEOKEYFRAMETIMESCALE AS 'zAsset-Video Key Frame Time Scale',
+ zAsset.ZVIDEOKEYFRAMEVALUE AS 'zAsset-Video Key Frame Value',
+ zExtAttr.ZISO AS 'zExtAttr-ISO',
+ zExtAttr.ZMETERINGMODE AS 'zExtAttr-Metering Mode',
+ zExtAttr.ZSAMPLERATE AS 'zExtAttr-Sample Rate',
+ zExtAttr.ZTRACKFORMAT AS 'zExtAttr-Track Format',
+ zExtAttr.ZWHITEBALANCE AS 'zExtAttr-White Balance',
+ zExtAttr.ZAPERTURE AS 'zExtAttr-Aperture',
+ zExtAttr.ZBITRATE AS 'zExtAttr-BitRate',
+ zExtAttr.ZEXPOSUREBIAS AS 'zExtAttr-Exposure Bias',
+ zExtAttr.ZFPS AS 'zExtAttr-Frames Per Second',
+ zExtAttr.ZSHUTTERSPEED AS 'zExtAttr-Shutter Speed',
+ zExtAttr.ZSLUSHSCENEBIAS AS 'zExtAttr-Slush Scene Bias',
+ zExtAttr.ZSLUSHVERSION AS 'zExtAttr-Slush Version',
+ zExtAttr.ZSLUSHPRESET AS 'zExtAttr-Slush Preset',
+ zExtAttr.ZSLUSHWARMTHBIAS AS 'zExtAttr-Slush Warm Bias',
+ zAsset.ZHEIGHT AS 'zAsset-Height',
+ zAddAssetAttr.ZORIGINALHEIGHT AS 'zAddAssetAttr-Original Height',
+ zIntResou.ZUNORIENTEDHEIGHT AS 'zIntResou-UnOriented Height',
+ zAsset.ZWIDTH AS 'zAsset-Width',
+ zAddAssetAttr.ZORIGINALWIDTH AS 'zAddAssetAttr-Original Width',
+ zIntResou.ZUNORIENTEDWIDTH AS 'zIntResou-UnOriented Width',
+ zShare.ZTHUMBNAILIMAGEDATA AS 'zShare-Thumbnail Image Data',
+ SPLzShare.ZTHUMBNAILIMAGEDATA AS 'SPLzShare-Thumbnail Image Data',
+ zAsset.ZTHUMBNAILINDEX AS 'zAsset-Thumbnail Index',
+ zAddAssetAttr.ZEMBEDDEDTHUMBNAILHEIGHT AS 'zAddAssetAttr-Embedded Thumbnail Height',
+ zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length',
+ zAddAssetAttr.ZEMBEDDEDTHUMBNAILOFFSET AS 'zAddAssetAttr-Embedded Thumbnail Offset',
+ zAddAssetAttr.ZEMBEDDEDTHUMBNAILWIDTH AS 'zAddAssetAttr-Embedded Thumbnail Width',
+ zAsset.ZPACKEDACCEPTABLECROPRECT AS 'zAsset-Packed Acceptable Crop Rect',
+ zAsset.ZPACKEDBADGEATTRIBUTES AS 'zAsset-Packed Badge Attributes',
+ zAsset.ZPACKEDPREFERREDCROPRECT AS 'zAsset-Packed Preferred Crop Rect',
+ zAsset.ZCURATIONSCORE AS 'zAsset-Curation Score',
+ zAsset.ZCAMERAPROCESSINGADJUSTMENTSTATE AS 'zAsset-Camera Processing Adjustment State',
+ zAsset.ZDEPTHTYPE AS 'zAsset-Depth Type',
+ zAsset.ZISMAGICCARPET AS 'zAsset-Is Magic Carpet-QuicktimeMOVfile',
+ CASE zAddAssetAttr.ZORIGINALRESOURCECHOICE
+ WHEN 0 THEN '0-JPEG Original Resource-0'
+ WHEN 1 THEN '1-RAW Original Resource-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZORIGINALRESOURCECHOICE || ''
+ END AS 'zAddAssetAttr-Orig Resource Choice',
+ CASE zAsset.ZSPATIALTYPE
+ WHEN 0 THEN '0-UnknownTesting-0'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZSPATIALTYPE || ''
+ END AS 'zAsset-Spatial Type',
+ zAddAssetAttr.ZSPATIALOVERCAPTUREGROUPIDENTIFIER AS 'zAddAssetAttr-Spatial Over Capture Group ID',
+ zAddAssetAttr.ZPLACEANNOTATIONDATA AS 'zAddAssetAttr-Place Annotation Data',
+ zAddAssetAttr.ZDISTANCEIDENTITY AS 'zAddAssetAttr-Distance Identity',
+ zAddAssetAttr.ZEDITEDIPTCATTRIBUTES AS 'zAddAssetAttr-Edited IPTC Attributes',
+ zAssetDes.ZLONGDESCRIPTION AS 'zAssetDes-Long Description',
+ zAddAssetAttr.ZASSETDESCRIPTION AS 'zAddAssetAttr-Asset Description',
+ zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website',
+ zAddAssetAttr.ZACCESSIBILITYDESCRIPTION AS 'zAddAssetAttr-Accessibility Description',
+ zAddAssetAttr.ZPHOTOSTREAMTAGID AS 'zAddAssetAttr-Photo Stream Tag ID',
+ zPhotoAnalysisAssetAttr.ZWALLPAPERPROPERTIESVERSION AS 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version',
+ DateTime(zPhotoAnalysisAssetAttr.ZWALLPAPERPROPERTIESTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp',
+ DateTime(zCldFeedEnt.ZENTRYDATE + 978307200, 'UNIXEPOCH') AS 'zCldFeedEnt-Entry Date',
+ zCldFeedEnt.ZENTRYALBUMGUID AS 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart',
+ zCldFeedEnt.ZENTRYINVITATIONRECORDGUID AS 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart',
+ zCldFeedEnt.ZENTRYCLOUDASSETGUID AS 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart',
+ CASE zCldFeedEnt.ZENTRYPRIORITYNUMBER
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYPRIORITYNUMBER || ''
+ END AS 'zCldFeedEnt-Entry Priority Number',
+ CASE zCldFeedEnt.ZENTRYTYPENUMBER
+ WHEN 1 THEN 'Is My Shared Asset-1'
+ WHEN 2 THEN '2-StillTesting-2'
+ WHEN 3 THEN '3-StillTesting-3'
+ WHEN 4 THEN 'Not My Shared Asset-4'
+ WHEN 5 THEN 'Asset in Album with Invite Record-5'
+ ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYTYPENUMBER || ''
+ END AS 'zCldFeedEnt-Entry Type Number',
+ zCldSharedComment.ZCLOUDGUID AS 'zCldSharedComment-Cloud GUID-4TableStart',
+ DateTime(zCldSharedComment.ZCOMMENTDATE + 978307200, 'UNIXEPOCH') AS 'zCldSharedComment-Date',
+ DateTime(zCldSharedComment.ZCOMMENTCLIENTDATE + 978307200, 'UNIXEPOCH') AS 'zCldSharedComment-Comment Client Date',
+ DateTime(zAsset.ZCLOUDLASTVIEWEDCOMMENTDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Last Viewed Comment Date',
+ zCldSharedComment.ZCOMMENTTYPE AS 'zCldSharedComment-Type',
+ zCldSharedComment.ZCOMMENTTEXT AS 'zCldSharedComment-Comment Text',
+ zCldSharedComment.ZCOMMENTERHASHEDPERSONID AS 'zCldSharedComment-Commenter Hashed Person ID',
+ CASE zCldSharedComment.ZISBATCHCOMMENT
+ WHEN 0 THEN 'Not Batch Comment-0'
+ WHEN 1 THEN 'Batch Comment-1'
+ ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISBATCHCOMMENT || ''
+ END AS 'zCldSharedComment-Batch Comment',
+ CASE zCldSharedComment.ZISCAPTION
+ WHEN 0 THEN 'Not a Caption-0'
+ WHEN 1 THEN 'Caption-1'
+ ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISCAPTION || ''
+ END AS 'zCldSharedComment-Is a Caption',
+ CASE zAsset.ZCLOUDHASCOMMENTSBYME
+ WHEN 1 THEN 'Device Apple Acnt Commented-Liked Asset-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASCOMMENTSBYME || ''
+ END AS 'zAsset-Cloud Has Comments by Me',
+ CASE zCldSharedComment.ZISMYCOMMENT
+ WHEN 0 THEN 'Not My Comment-0'
+ WHEN 1 THEN 'My Comment-1'
+ ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISMYCOMMENT || ''
+ END AS 'zCldSharedComment-Is My Comment',
+ CASE zCldSharedComment.ZISDELETABLE
+ WHEN 0 THEN 'Not Deletable-0'
+ WHEN 1 THEN 'Deletable-1'
+ ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISDELETABLE || ''
+ END AS 'zCldSharedComment-Is Deletable',
+ CASE zAsset.ZCLOUDHASCOMMENTSCONVERSATION
+ WHEN 1 THEN 'Device Apple Acnt Commented-Liked Conversation-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASCOMMENTSCONVERSATION || ''
+ END AS 'zAsset-Cloud Has Comments Conversation',
+ CASE zAsset.ZCLOUDHASUNSEENCOMMENTS
+ WHEN 0 THEN 'zAsset No Unseen Comments-0'
+ WHEN 1 THEN 'zAsset Unseen Comments-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASUNSEENCOMMENTS || ''
+ END AS 'zAsset-Cloud Has Unseen Comments',
+ CASE zCldSharedCommentLiked.ZISLIKE
+ WHEN 0 THEN 'Asset Not Liked-0'
+ WHEN 1 THEN 'Asset Liked-1'
+ ELSE 'Unknown-New-Value!: ' || zCldSharedCommentLiked.ZISLIKE || ''
+ END AS 'zCldSharedComment-Liked',
+ CASE zAddAssetAttr.ZSHARETYPE
+ WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0'
+ WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || ''
+ END AS 'zAddAssetAttr-Share Type',
+ CASE zAsset.ZLIBRARYSCOPESHARESTATE
+ WHEN 0 THEN '0-Asset-Not-In-SPL-0'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || ''
+ END AS 'zAsset-Library Scope Share State- StillTesting',
+ CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE
+ WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0'
+ WHEN 1 THEN '1-Asset-In-Active-SPL-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || ''
+ END AS 'zAsset-Active Library Scope Participation State',
+ zAddAssetAttr.ZLIBRARYSCOPEASSETCONTRIBUTORSTOUPDATE AS 'zAddAssetAttr-Library Scope Asset Contributors To Update',
+ zShare.ZUUID AS 'zShare-UUID-CMM-4TableStart',
+ SPLzShare.ZUUID AS 'SPLzShare-UUID-SPL-4TableStart',
+ CASE zShare.Z_ENT
+ WHEN 55 THEN '55-SPL-Entity-55'
+ WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
+ WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || ''
+ END AS 'zShare-zENT-CMM',
+ CASE SPLzShare.Z_ENT
+ WHEN 55 THEN '55-SPL-Entity-55'
+ WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
+ WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.Z_ENT || ''
+ END AS 'SPLzShare-zENT-SPL',
+ CASE zSharePartic.Z55_SHARE
+ WHEN 55 THEN '55-SPL-Entity-55'
+ WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
+ WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.Z55_SHARE || ''
+ END AS 'zSharePartic-z55SHARE',
+ CASE SPLzSharePartic.Z55_SHARE
+ WHEN 55 THEN '55-SPL-Entity-55'
+ WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
+ WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.Z55_SHARE || ''
+ END AS 'SPLzSharePartic-z55SHARE',
+ CASE zShare.ZSTATUS
+ WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSTATUS || ''
+ END AS 'zShare-Status-CMM',
+ CASE SPLzShare.ZSTATUS
+ WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSTATUS || ''
+ END AS 'SPLzShare-Status-SPL',
+ CASE zShare.ZSCOPETYPE
+ WHEN 2 THEN '2-iCloudLink-CMMoment-2'
+ WHEN 4 THEN '4-iCld-Shared-Photo-Library-SPL-4'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPETYPE || ''
+ END AS 'zShare-Scope Type-CMM',
+ CASE SPLzShare.ZSCOPETYPE
+ WHEN 2 THEN '2-iCloudLink-CMMoment-2'
+ WHEN 4 THEN '4-iCld-Shared-Photo-Library-SPL-4'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSCOPETYPE || ''
+ END AS 'SPLzShare-Scope Type-SPL',
+ CASE zShare.ZLOCALPUBLISHSTATE
+ WHEN 2 THEN '2-Published-2'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZLOCALPUBLISHSTATE || ''
+ END AS 'zShare-Local Publish State-CMM',
+ CASE SPLzShare.ZLOCALPUBLISHSTATE
+ WHEN 2 THEN '2-Published-2'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZLOCALPUBLISHSTATE || ''
+ END AS 'SPLzShare-Local Publish State-SPL',
+ CASE zShare.ZPUBLICPERMISSION
+ WHEN 1 THEN '1-Public_Premission_Denied-Private-1'
+ WHEN 2 THEN '2-Public_Premission_Granted-Public-2'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZPUBLICPERMISSION || ''
+ END AS 'zShare-Public Permission-CMM',
+ CASE SPLzShare.ZPUBLICPERMISSION
+ WHEN 1 THEN '1-Public_Premission_Denied-Private-1'
+ WHEN 2 THEN '2-Public_Premission_Granted-Public-2'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZPUBLICPERMISSION || ''
+ END AS 'SPLzShare-Public Permission-SPL',
+ zShare.ZORIGINATINGSCOPEIDENTIFIER AS 'zShare-Originating Scope ID-CMM',
+ SPLzShare.ZORIGINATINGSCOPEIDENTIFIER AS 'SPLzShare-Originating Scope ID-SPL',
+ zShare.ZSCOPEIDENTIFIER AS 'zShare-Scope ID-CMM',
+ SPLzShare.ZSCOPEIDENTIFIER AS 'SPLzShare-Scope ID-SPL',
+ zShare.ZTITLE AS 'zShare-Title-CMM',
+ SPLzShare.ZTITLE AS 'SPLzShare-Title-SPL',
+ zShare.ZSHAREURL AS 'zShare-Share URL-CMM',
+ SPLzShare.ZSHAREURL AS 'SPLzShare-Share URL-SPL',
+ DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date-CMM',
+ DateTime(SPLzShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Creation Date-SPL',
+ DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date-CMM',
+ DateTime(SPLzShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Start Date-SPL',
+ DateTime(zShare.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-End Date-CMM',
+ DateTime(SPLzShare.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-End Date-SPL',
+ DateTime(zShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Expiry Date-CMM',
+ DateTime(SPLzShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Expiry Date-SPL',
+ zShare.ZCLOUDITEMCOUNT AS 'zShare-Cloud Item Count-CMM',
+ SPLzShare.ZCLOUDITEMCOUNT AS 'SPLzShare-Cloud Item Count-SPL',
+ zShare.ZASSETCOUNT AS 'zShare-Asset Count-CMM',
+ SPLzShare.ZASSETCOUNT AS 'SPLzShare-Asset Count-SPL',
+ zShare.ZCLOUDPHOTOCOUNT AS 'zShare-Cloud Photo Count-CMM',
+ SPLzShare.ZCLOUDPHOTOCOUNT AS 'SPLzShare-Cloud Photo Count-SPL',
+ zShare.ZCOUNTOFASSETSADDEDBYCAMERASMARTSHARING AS 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM',
+ SPLzShare.ZCOUNTOFASSETSADDEDBYCAMERASMARTSHARING AS 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL',
+ zShare.ZPHOTOSCOUNT AS 'zShare-Photos Count-CMM',
+ SPLzShare.ZPHOTOSCOUNT AS 'SPLzShare-Photos Count-CMM-SPL',
+ zShare.ZUPLOADEDPHOTOSCOUNT AS 'zShare-Uploaded Photos Count-CMM',
+ SPLzShare.ZUPLOADEDPHOTOSCOUNT AS 'SPLzShare-Uploaded Photos Count-SPL',
+ zShare.ZCLOUDVIDEOCOUNT AS 'zShare-Cloud Video Count-CMM',
+ SPLzShare.ZCLOUDVIDEOCOUNT AS 'SPLzShare-Cloud Video Count-SPL',
+ zShare.ZVIDEOSCOUNT AS 'zShare-Videos Count-CMM',
+ SPLzShare.ZVIDEOSCOUNT AS 'SPLzShare-Videos Count-SPL',
+ zShare.ZUPLOADEDVIDEOSCOUNT AS 'zShare-Uploaded Videos Count-CMM',
+ SPLzShare.ZUPLOADEDVIDEOSCOUNT AS 'SPLzShare-Uploaded Videos Count-SPL',
+ zShare.ZFORCESYNCATTEMPTED AS 'zShare-Force Sync Attempted-CMM',
+ SPLzShare.ZFORCESYNCATTEMPTED AS 'SPLzShare-Force Sync Attempted-SPL',
+ CASE zShare.ZCLOUDLOCALSTATE
+ WHEN 1 THEN '1-LocalandCloud-SPL-1'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDLOCALSTATE || ''
+ END AS 'zShare-Cloud Local State-CMM',
+ CASE SPLzShare.ZCLOUDLOCALSTATE
+ WHEN 1 THEN '1-LocalandCloud-SPL-1'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZCLOUDLOCALSTATE || ''
+ END AS 'SPLzShare-Cloud Local State-SPL',
+ CASE zShare.ZSCOPESYNCINGSTATE
+ WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPESYNCINGSTATE || ''
+ END AS 'zShare-Scope Syncing State-CMM',
+ CASE SPLzShare.ZSCOPESYNCINGSTATE
+ WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSCOPESYNCINGSTATE || ''
+ END AS 'SPLzShare-Scope Syncing State-SPL',
+ CASE zShare.ZAUTOSHAREPOLICY
+ WHEN 0 THEN '0-AutoShare-OFF_SPL_Test_NotAllAtSetup-0'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZAUTOSHAREPOLICY || ''
+ END AS 'zShare-Auto Share Policy-CMM',
+ CASE SPLzShare.ZAUTOSHAREPOLICY
+ WHEN 0 THEN '0-AutoShare-OFF_SPL_Test_NotAllAtSetup-0'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZAUTOSHAREPOLICY || ''
+ END AS 'SPLzShare-Auto Share Policy-SPL',
+ CASE zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION
+ WHEN 0 THEN '0-DoNotNotify-CMM-0'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION || ''
+ END AS 'zShare-Should Notify On Upload Completion-CMM',
+ CASE SPLzShare.ZSHOULDNOTIFYONUPLOADCOMPLETION
+ WHEN 0 THEN '0-DoNotNotify-SPL-0'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSHOULDNOTIFYONUPLOADCOMPLETION || ''
+ END AS 'SPLzShare-Should Notify On Upload Completion-SPL',
+ zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM',
+ CASE zShare.ZTRASHEDSTATE
+ WHEN 0 THEN '0-Not_in_Trash-0'
+ WHEN 1 THEN '1-In_Trash-1'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZTRASHEDSTATE || ''
+ END AS 'zShare-Trashed State-CMM',
+ CASE SPLzShare.ZTRASHEDSTATE
+ WHEN 0 THEN '0-Not_in_Trash-0'
+ WHEN 1 THEN '1-In_Trash-1'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZTRASHEDSTATE || ''
+ END AS 'SPLzShare-Trashed State-SPL',
+ CASE zShare.ZCLOUDDELETESTATE
+ WHEN 0 THEN '0-Not Deleted-0'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDDELETESTATE || ''
+ END AS 'zShare-Cloud Delete State-CMM',
+ CASE SPLzShare.ZCLOUDDELETESTATE
+ WHEN 0 THEN '0-Not Deleted-0'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZCLOUDDELETESTATE || ''
+ END AS 'SPLzShare-Cloud Delete State-SPL',
+ DateTime(zShare.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Trashed Date-CMM',
+ DateTime(SPLzShare.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Trashed Date-SPL',
+ DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-LastParticipant Asset Trash Notification Date-CMM',
+ DateTime(SPLzShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-LastParticipant Asset Trash Notification Date-SPL',
+ DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Last Participant Asset Trash Notification View Date-CMM',
+ DateTime(SPLzShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Last Participant Asset Trash Notification View Date-SPL',
+ CASE zShare.ZEXITSOURCE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSOURCE || ''
+ END AS 'zShare-Exit Source-CMM',
+ CASE SPLzShare.ZEXITSOURCE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZEXITSOURCE || ''
+ END AS 'SPLzShare-Exit Source-SPL',
+ CASE zShare.ZEXITSTATE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSTATE || ''
+ END AS 'zShare-SPL_Exit State-CMM',
+ CASE SPLzShare.ZEXITSTATE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZEXITSTATE || ''
+ END AS 'SPLzShare-SPL_Exit State-SPL',
+ CASE zShare.ZEXITTYPE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZEXITTYPE || ''
+ END AS 'zShare-Exit Type-CMM',
+ CASE SPLzShare.ZEXITTYPE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZEXITTYPE || ''
+ END AS 'SPLzShare-Exit Type-SPL',
+ CASE zShare.ZSHOULDIGNOREBUDGETS
+ WHEN 1 THEN '1-StillTesting-CMM-1'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDIGNOREBUDGETS || ''
+ END AS 'zShare-Should Ignor Budgets-CMM',
+ CASE SPLzShare.ZSHOULDIGNOREBUDGETS
+ WHEN 1 THEN '1-StillTesting-CMM-1'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSHOULDIGNOREBUDGETS || ''
+ END AS 'SPLzShare-Should Ignor Budgets-SPL',
+ CASE zShare.ZPREVIEWSTATE
+ WHEN 0 THEN '0-NotInPreviewState-StillTesting-SPL-0'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZPREVIEWSTATE || ''
+ END AS 'zShare-Preview State-CMM',
+ CASE SPLzShare.ZPREVIEWSTATE
+ WHEN 0 THEN '0-NotInPreviewState-StillTesting-SPL-0'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZPREVIEWSTATE || ''
+ END AS 'SPLzShare-Preview State-SPL',
+ zShare.ZPREVIEWDATA AS 'zShare-Preview Data-CMM',
+ SPLzShare.ZPREVIEWDATA AS 'SPLzShare-Preview Data-SPL',
+ zShare.ZRULESDATA AS 'zShare-Rules-CMM',
+ SPLzShare.ZRULESDATA AS 'SPLzShare-Rules-SPL',
+ zShare.ZTHUMBNAILIMAGEDATA AS 'zShare-Thumbnail Image Data-CMM',
+ SPLzShare.ZTHUMBNAILIMAGEDATA AS 'SPLzShare-Thumbnail Image Data-SPL',
+ CASE zShare.ZPARTICIPANTCLOUDUPDATESTATE
+ WHEN 2 THEN '2-ParticipantAllowedToUpdate_SPL_StillTesting-2'
+ ELSE 'Unknown-New-Value!: ' || zShare.ZPARTICIPANTCLOUDUPDATESTATE || ''
+ END AS 'zShare-Participant Cloud Update State-CMM',
+ CASE SPLzShare.ZPARTICIPANTCLOUDUPDATESTATE
+ WHEN 2 THEN '2-ParticipantAllowedToUpdate_SPL_StillTesting-2'
+ ELSE 'Unknown-New-Value!: ' || SPLzShare.ZPARTICIPANTCLOUDUPDATESTATE || ''
+ END AS 'SPLzShare-Participant Cloud Update State-SPL',
+ zSharePartic.ZUUID AS 'zSharePartic-UUID-4TableStart',
+ SPLzSharePartic.ZUUID AS 'SPLzSharePartic-UUID-4TableStart',
+ CASE zSharePartic.ZACCEPTANCESTATUS
+ WHEN 1 THEN '1-Invite-Pending_or_Declined-1'
+ WHEN 2 THEN '2-Invite-Accepted-2'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZACCEPTANCESTATUS || ''
+ END AS 'zSharePartic-Acceptance Status',
+ CASE SPLzSharePartic.ZACCEPTANCESTATUS
+ WHEN 1 THEN '1-Invite-Pending_or_Declined-1'
+ WHEN 2 THEN '2-Invite-Accepted-2'
+ ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZACCEPTANCESTATUS || ''
+ END AS 'SPLzSharePartic-Acceptance Status',
+ CASE zSharePartic.ZISCURRENTUSER
+ WHEN 0 THEN '0-Participant-Not_CloudStorageOwner-0'
+ WHEN 1 THEN '1-Participant-Is_CloudStorageOwner-1'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || ''
+ END AS 'zSharePartic-Is Current User',
+ CASE SPLzSharePartic.ZISCURRENTUSER
+ WHEN 0 THEN '0-Participant-Not_CurrentUser-0'
+ WHEN 1 THEN '1-Participant-Is_CurrentUser-1'
+ ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZISCURRENTUSER || ''
+ END AS 'SPLzSharePartic-Is Current User',
+ CASE zSharePartic.ZROLE
+ WHEN 1 THEN '1-Participant-is-Owner-Role-1'
+ WHEN 2 THEN '2-Participant-is-Invitee-Role-2'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZROLE || ''
+ END AS 'zSharePartic-Role',
+ CASE SPLzSharePartic.ZROLE
+ WHEN 1 THEN '1-Participant-is-Owner-Role-1'
+ WHEN 2 THEN '2-Participant-is-Invitee-Role-2'
+ ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZROLE || ''
+ END AS 'SPLzSharePartic-Role',
+ CASE zSharePartic.ZPERMISSION
+ WHEN 3 THEN '3-Participant-has-Full-Premissions-3'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZPERMISSION || ''
+ END AS 'zSharePartic-Premission',
+ CASE SPLzSharePartic.ZPERMISSION
+ WHEN 3 THEN '3-Participant-has-Full-Premissions-3'
+ ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZPERMISSION || ''
+ END AS 'SPLzSharePartic-Premission',
+ zSharePartic.ZPARTICIPANTID AS 'zSharePartic-Participant ID',
+ SPLzSharePartic.ZPARTICIPANTID AS 'SPLzSharePartic-Participant ID',
+ zSharePartic.ZUSERIDENTIFIER AS 'zSharePartic-User ID',
+ SPLzSharePartic.ZUSERIDENTIFIER AS 'SPLzSharePartic-User ID',
+ zAssetContrib.ZPARTICIPANT AS 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart',
+ SPLzSharePartic.Z_PK AS 'SPLzSharePartic-zPK-4TableStart',
+ zSharePartic.Z_PK AS 'zSharePartic-zPK-4TableStart',
+ zSharePartic.ZEMAILADDRESS AS 'zSharePartic-Email Address',
+ SPLzSharePartic.ZEMAILADDRESS AS 'SPLzSharePartic-Email Address',
+ zSharePartic.ZPHONENUMBER AS 'zSharePartic-Phone Number',
+ SPLzSharePartic.ZPHONENUMBER AS 'SPLzSharePartic-Phone Number',
+ CASE zSharePartic.ZEXITSTATE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.ZEXITSTATE || ''
+ END AS 'zSharePartic-Exit State',
+ CASE SPLzSharePartic.ZEXITSTATE
+ WHEN 0 THEN '0-NA_SPL_StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZEXITSTATE || ''
+ END AS 'SPLzSharePartic-Exit State',
+ ParentzGenAlbum.ZUUID AS 'ParentzGenAlbum-UUID-4TableStart',
+ zGenAlbum.ZUUID AS 'zGenAlbum-UUID-4TableStart',
+ SWYConverszGenAlbum.ZUUID AS 'SWYConverszGenAlbum-UUID-4TableStart',
+ ParentzGenAlbum.ZCLOUDGUID AS 'ParentzGenAlbum-Cloud GUID-4TableStart',
+ zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4TableStart',
+ SWYConverszGenAlbum.ZCLOUDGUID AS 'SWYConverszGenAlbum-Cloud GUID-4TableStart',
+ zCldShareAlbumInvRec.ZALBUMGUID AS 'zCldShareAlbumInvRec-Album GUID-4TableStart',
+ zCldShareAlbumInvRec.ZCLOUDGUID AS 'zCldShareAlbumInvRec-Cloud GUID-4TableStart',
+ zGenAlbum.ZPROJECTRENDERUUID AS 'zGenAlbum-Project Render UUID-4TableStart',
+ SWYConverszGenAlbum.ZPROJECTRENDERUUID AS 'SWYConverszGenAlbum-Project Render UUID-4TableStart',
+ CASE zAlbumList.ZNEEDSREORDERINGNUMBER
+ WHEN 1 THEN '1-Yes-1'
+ ELSE 'Unknown-New-Value!: ' || zAlbumList.ZNEEDSREORDERINGNUMBER || ''
+ END AS 'zAlbumList-Needs Reordering Number',
+ CASE zGenAlbum.Z_ENT
+ WHEN 27 THEN '27-LPL-SPL-CPL_Album-DecodingVariableBasedOniOS-27'
+ WHEN 28 THEN '28-LPL-SPL-CPL-Shared_Album-DecodingVariableBasedOniOS-28'
+ WHEN 29 THEN '29-Shared_Album-DecodingVariableBasedOniOS-29'
+ WHEN 30 THEN '30-Duplicate_Album-Pending_Merge-30'
+ WHEN 35 THEN '35-SearchIndexRebuild-1600KIND-35'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.Z_ENT || ''
+ END AS 'zGenAlbum-zENT- Entity',
+ CASE ParentzGenAlbum.ZKIND
+ WHEN 2 THEN '2-Non-Shared-Album-2'
+ WHEN 1505 THEN '1505-Shared-Album-1505'
+ WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT'
+ WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT'
+ WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509'
+ WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510'
+ WHEN 3571 THEN '3571-Progress-Sync-3571'
+ WHEN 3572 THEN '3572-Progress-OTA-Restore-3572'
+ WHEN 3573 THEN '3573-Progress-FS-Import-3573'
+ WHEN 3998 THEN '3998-Project Root Folder-3998'
+ WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999'
+ WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZKIND || ''
+ END AS 'ParentzGenAlbum-Kind',
+ CASE zGenAlbum.ZKIND
+ WHEN 2 THEN '2-Non-Shared-Album-2'
+ WHEN 1505 THEN '1505-Shared-Album-1505'
+ WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT'
+ WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT'
+ WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509'
+ WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510'
+ WHEN 3571 THEN '3571-Progress-Sync-3571'
+ WHEN 3572 THEN '3572-Progress-OTA-Restore-3572'
+ WHEN 3573 THEN '3573-Progress-FS-Import-3573'
+ WHEN 3998 THEN '3998-Project Root Folder-3998'
+ WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999'
+ WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || ''
+ END AS 'zGenAlbum-Album Kind',
+ CASE SWYConverszGenAlbum.ZKIND
+ WHEN 2 THEN '2-Non-Shared-Album-2'
+ WHEN 1505 THEN '1505-Shared-Album-1505'
+ WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT'
+ WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT'
+ WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509'
+ WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510'
+ WHEN 3571 THEN '3571-Progress-Sync-3571'
+ WHEN 3572 THEN '3572-Progress-OTA-Restore-3572'
+ WHEN 3573 THEN '3573-Progress-FS-Import-3573'
+ WHEN 3998 THEN '3998-Project Root Folder-3998'
+ WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999'
+ WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZKIND || ''
+ END AS 'SWYConverszGenAlbum-Album Kind',
+ CASE ParentzGenAlbum.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0'
+ WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDLOCALSTATE || ''
+ END AS 'ParentzGenAlbum-Cloud-Local-State',
+ CASE zGenAlbum.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0'
+ WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDLOCALSTATE || ''
+ END AS 'zGenAlbum-Cloud_Local_State',
+ CASE SWYConverszGenAlbum.ZCLOUDLOCALSTATE
+ WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0'
+ WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDLOCALSTATE || ''
+ END AS 'SWYConverszGenAlbum-Cloud_Local_State',
+ ParentzGenAlbum.ZTITLE AS 'ParentzGenAlbum- Title',
+ zGenAlbum.ZTITLE AS 'zGenAlbum- Title-User&System Applied',
+ SWYConverszGenAlbum.ZTITLE AS 'SWYConverszGenAlbum- Title -User&System Applied',
+ zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum-Import Session ID-SWY',
+ zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK',
+ SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID-SWY',
+ zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier',
+ SWYConverszGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'SWYzGenAlbum-Imported by Bundle Identifier',
+ CASE SWYConverszGenAlbum.ZSYNDICATE
+ WHEN 1 THEN '1-SWYConverszGenAlbum-Syndicate - SWY-SyncedFile-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSYNDICATE || ''
+ END AS 'SWYConverszGenAlbum- Syndicate',
+ DateTime(ParentzGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum-Creation Date',
+ DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date',
+ DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date',
+ DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Creation Date',
+ DateTime(SWYConverszGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Creation Date',
+ DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date',
+ DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date',
+ DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date',
+ DateTime(SWYConverszGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-End Date',
+ DateTime(zGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Subscription Date',
+ DateTime(SWYConverszGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Subscription Date',
+ ParentzGenAlbum.ZPENDINGITEMSCOUNT AS 'ParentzGenAlbum-Pending Items Count',
+ zGenAlbum.ZPENDINGITEMSCOUNT AS 'zGenAlbum-Pending Items Count',
+ SWYConverszGenAlbum.ZPENDINGITEMSCOUNT AS 'SWYConverszGenAlbum-Pending Items Count',
+ CASE ParentzGenAlbum.ZPENDINGITEMSTYPE
+ WHEN 1 THEN 'No-1'
+ WHEN 24 THEN '24-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZPENDINGITEMSTYPE || ''
+ END AS 'ParentzGenAlbum-Pending Items Type',
+ CASE zGenAlbum.ZPENDINGITEMSTYPE
+ WHEN 1 THEN 'No-1'
+ WHEN 24 THEN '24-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPENDINGITEMSTYPE || ''
+ END AS 'zGenAlbum-Pending Items Type',
+ CASE SWYConverszGenAlbum.ZPENDINGITEMSTYPE
+ WHEN 1 THEN 'No-1'
+ WHEN 24 THEN '24-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPENDINGITEMSTYPE || ''
+ END AS 'SWYConverszGenAlbum-Pending Items Type',
+ zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum- Cached Photos Count',
+ SWYConverszGenAlbum.ZCACHEDPHOTOSCOUNT AS 'SWYConverszGenAlbum- Cached Photos Count',
+ zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum- Cached Videos Count',
+ SWYConverszGenAlbum.ZCACHEDVIDEOSCOUNT AS 'SWYConverszGenAlbum- Cached Videos Count',
+ zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum- Cached Count',
+ SWYConverszGenAlbum.ZCACHEDCOUNT AS 'SWYConverszGenAlbum- Cached Count',
+ ParentzGenAlbum.ZSYNCEVENTORDERKEY AS 'ParentzGenAlbum-Sync Event Order Key',
+ zGenAlbum.ZSYNCEVENTORDERKEY AS 'zGenAlbum-Sync Event Order Key',
+ SWYConverszGenAlbum.ZSYNCEVENTORDERKEY AS 'SWYConverszGenAlbum-Sync Event Order Key',
+ CASE zGenAlbum.ZHASUNSEENCONTENT
+ WHEN 0 THEN 'No Unseen Content-StillTesting-0'
+ WHEN 1 THEN 'Unseen Content-StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZHASUNSEENCONTENT || ''
+ END AS 'zGenAlbum-Has Unseen Content',
+ CASE SWYConverszGenAlbum.ZHASUNSEENCONTENT
+ WHEN 0 THEN 'No Unseen Content-StillTesting-0'
+ WHEN 1 THEN 'Unseen Content-StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZHASUNSEENCONTENT || ''
+ END AS 'SWYConverszGenAlbum-Has Unseen Content',
+ zGenAlbum.ZUNSEENASSETSCOUNT AS 'zGenAlbum-Unseen Asset Count',
+ SWYConverszGenAlbum.ZUNSEENASSETSCOUNT AS 'SWYConverszGenAlbum-Unseen Asset Count',
+ CASE zGenAlbum.ZISOWNED
+ WHEN 0 THEN 'zGenAlbum-Not Owned by Device Apple Acnt-0'
+ WHEN 1 THEN 'zGenAlbum-Owned by Device Apple Acnt-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISOWNED || ''
+ END AS 'zGenAlbum-is Owned',
+ CASE SWYConverszGenAlbum.ZISOWNED
+ WHEN 0 THEN 'SWYConverszGenAlbum-Not Owned by Device Apple Acnt-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum-Owned by Device Apple Acnt-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISOWNED || ''
+ END AS 'SWYConverszGenAlbum-is Owned',
+ CASE zGenAlbum.ZCLOUDRELATIONSHIPSTATE
+ WHEN 0 THEN 'zGenAlbum-Cloud Album Owned by Device Apple Acnt-0'
+ WHEN 2 THEN 'zGenAlbum-Cloud Album Not Owned by Device Apple Acnt-2'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDRELATIONSHIPSTATE || ''
+ END AS 'zGenAlbum-Cloud Relationship State',
+ CASE SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATE
+ WHEN 0 THEN 'SWYConverszGenAlbum-Cloud Album Owned by Device Apple Acnt-0'
+ WHEN 2 THEN 'SWYConverszGenAlbum-Cloud Album Not Owned by Device Apple Acnt-2'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATE || ''
+ END AS 'SWYConverszGenAlbum-Cloud Relationship State',
+ CASE zGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL
+ WHEN 0 THEN 'zGenAlbum-Shared Album Accessible Local Device-0'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL || ''
+ END AS 'zGenAlbum-Cloud Relationship State Local',
+ CASE SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL
+ WHEN 0 THEN 'SWYConverszGenAlbum-Shared Album Accessible Local Device-0'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL || ''
+ END AS 'SWYConverszGenAlbum-Cloud Relationship State Local',
+ zGenAlbum.ZCLOUDOWNEREMAILKEY AS 'zGenAlbum-Cloud Owner Mail Key',
+ SWYConverszGenAlbum.ZCLOUDOWNEREMAILKEY AS 'SWYConverszGenAlbum-Cloud Owner Mail Key',
+ zGenAlbum.ZCLOUDOWNERFIRSTNAME AS 'zGenAlbum-Cloud Owner Frist Name',
+ SWYConverszGenAlbum.ZCLOUDOWNERFIRSTNAME AS 'SWYConverszGenAlbum-Cloud Owner Frist Name',
+ zGenAlbum.ZCLOUDOWNERLASTNAME AS 'zGenAlbum-Cloud Owner Last Name',
+ SWYConverszGenAlbum.ZCLOUDOWNERLASTNAME AS 'SWYConverszGenAlbum-Cloud Owner Last Name',
+ zGenAlbum.ZCLOUDOWNERFULLNAME AS 'zGenAlbum-Cloud Owner Full Name',
+ SWYConverszGenAlbum.ZCLOUDOWNERFULLNAME AS 'SWYConverszGenAlbum-Cloud Owner Full Name',
+ zGenAlbum.ZCLOUDPERSONID AS 'zGenAlbum-Cloud Person ID',
+ SWYConverszGenAlbum.ZCLOUDPERSONID AS 'SWYConverszGenAlbum-Cloud Person ID',
+ zAsset.ZCLOUDOWNERHASHEDPERSONID AS 'zAsset-Cloud Owner Hashed Person ID',
+ zGenAlbum.ZCLOUDOWNERHASHEDPERSONID AS 'zGenAlbum-Cloud Owner Hashed Person ID',
+ SWYConverszGenAlbum.ZCLOUDOWNERHASHEDPERSONID AS 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID',
+ CASE zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL
+ WHEN 0 THEN 'zGenAlbum-Local Cloud Single Contributor Enabled-0'
+ WHEN 1 THEN 'zGenAlbum-Local Cloud Multi-Contributors Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL || ''
+ END AS 'zGenAlbum-Local Cloud Multi-Contributors Enabled',
+ CASE SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL
+ WHEN 0 THEN 'SWYConverszGenAlbum-Local Cloud Single Contributor Enabled-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL || ''
+ END AS 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled',
+ CASE zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED
+ WHEN 0 THEN 'zGenAlbum-Cloud Single Contributor Enabled-0'
+ WHEN 1 THEN 'zGenAlbum-Cloud Multi-Contributors Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED || ''
+ END AS 'zGenAlbum-Cloud Multi-Contributors Enabled',
+ CASE SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED
+ WHEN 0 THEN 'SWYConverszGenAlbum-Cloud Single Contributor Enabled-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED || ''
+ END AS 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled',
+ CASE zGenAlbum.ZCLOUDALBUMSUBTYPE
+ WHEN 0 THEN 'zGenAlbum Multi-Contributor-0'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDALBUMSUBTYPE || ''
+ END AS 'zGenAlbum-Cloud Album Sub Type',
+ CASE SWYConverszGenAlbum.ZCLOUDALBUMSUBTYPE
+ WHEN 0 THEN 'SWYConverszGenAlbum Multi-Contributor-0'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDALBUMSUBTYPE || ''
+ END AS 'SWYConverszGenAlbum-Cloud Album Sub Type',
+ DateTime(zGenAlbum.ZCLOUDLASTCONTRIBUTIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Contribution Date',
+ DateTime(SWYConverszGenAlbum.ZCLOUDLASTCONTRIBUTIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Contribution Date',
+ DateTime(zGenAlbum.ZCLOUDLASTINTERESTINGCHANGEDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Last Interesting Change Date',
+ DateTime(SWYConverszGenAlbum.ZCLOUDLASTINTERESTINGCHANGEDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Last Interesting Change Date',
+ CASE zGenAlbum.ZCLOUDNOTIFICATIONSENABLED
+ WHEN 0 THEN 'zGenAlbum-Cloud Notifications Disabled-0'
+ WHEN 1 THEN 'zGenAlbum-Cloud Notifications Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDNOTIFICATIONSENABLED || ''
+ END AS 'zGenAlbum-Cloud Notification Enabled',
+ CASE SWYConverszGenAlbum.ZCLOUDNOTIFICATIONSENABLED
+ WHEN 0 THEN 'SWYConverszGenAlbum-Cloud Notifications Disabled-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum-Cloud Notifications Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDNOTIFICATIONSENABLED || ''
+ END AS 'SWYConverszGenAlbum-Cloud Notification Enabled',
+ CASE ParentzGenAlbum.ZISPINNED
+ WHEN 0 THEN '0-ParentzGenAlbum Not Pinned-0'
+ WHEN 1 THEN '1-ParentzGenAlbum Pinned-1'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZISPINNED || ''
+ END AS 'ParentzGenAlbum-Pinned',
+ CASE zGenAlbum.ZISPINNED
+ WHEN 0 THEN 'zGenAlbum-Local Not Pinned-0'
+ WHEN 1 THEN 'zGenAlbum-Local Pinned-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPINNED || ''
+ END AS 'zGenAlbum-Pinned',
+ CASE SWYConverszGenAlbum.ZISPINNED
+ WHEN 0 THEN 'SWYConverszGenAlbum-Local Not Pinned-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum-Local Pinned-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPINNED || ''
+ END AS 'SWYConverszGenAlbum-Pinned',
+ CASE ParentzGenAlbum.ZCUSTOMSORTKEY
+ WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT'
+ WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT'
+ WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMSORTKEY || ''
+ END AS 'ParentzGenAlbum-Custom Sort Key',
+ CASE zGenAlbum.ZCUSTOMSORTKEY
+ WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT'
+ WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT'
+ WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTKEY || ''
+ END AS 'zGenAlbum-Custom Sort Key',
+ CASE SWYConverszGenAlbum.ZCUSTOMSORTKEY
+ WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Manually-0_RT'
+ WHEN 1 THEN '1-SWYConverszGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT'
+ WHEN 5 THEN '5-SWYConverszGenAlbum-Sorted_by_Title-5_RT'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTKEY || ''
+ END AS 'SWYConverszGenAlbum-Custom Sort Key',
+ CASE ParentzGenAlbum.ZCUSTOMSORTASCENDING
+ WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0'
+ WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMSORTASCENDING || ''
+ END AS 'ParentzGenAlbum-Custom Sort Ascending',
+ CASE zGenAlbum.ZCUSTOMSORTASCENDING
+ WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0'
+ WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTASCENDING || ''
+ END AS 'zGenAlbum-Custom Sort Ascending',
+ CASE SWYConverszGenAlbum.ZCUSTOMSORTASCENDING
+ WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Newest_First-0'
+ WHEN 1 THEN '1-SWYConverszGenAlbum-Sorted_Oldest_First-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTASCENDING || ''
+ END AS 'SWYConverszGenAlbum-Custom Sort Ascending',
+ CASE ParentzGenAlbum.ZISPROTOTYPE
+ WHEN 0 THEN '0-ParentzGenAlbum Not Prototype-0'
+ WHEN 1 THEN '1-ParentzGenAlbum Prototype-1'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZISPROTOTYPE || ''
+ END AS 'ParentzGenAlbum-Is Prototype',
+ CASE zGenAlbum.ZISPROTOTYPE
+ WHEN 0 THEN 'zGenAlbum-Not Prototype-0'
+ WHEN 1 THEN 'zGenAlbum-Prototype-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPROTOTYPE || ''
+ END AS 'zGenAlbum-Is Prototype',
+ CASE SWYConverszGenAlbum.ZISPROTOTYPE
+ WHEN 0 THEN 'SWYConverszGenAlbum-Not Prototype-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum-Prototype-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPROTOTYPE || ''
+ END AS 'SWYConverszGenAlbum-Is Prototype',
+ CASE ParentzGenAlbum.ZPROJECTDOCUMENTTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZPROJECTDOCUMENTTYPE || ''
+ END AS 'ParentzGenAlbum-Project Document Type',
+ CASE zGenAlbum.ZPROJECTDOCUMENTTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPROJECTDOCUMENTTYPE || ''
+ END AS 'zGenAlbum-Project Document Type',
+ CASE SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE || ''
+ END AS 'SWYConverszGenAlbum-Project Document Type',
+ CASE ParentzGenAlbum.ZCUSTOMQUERYTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMQUERYTYPE || ''
+ END AS 'ParentzGenAlbum-Custom Query Type',
+ CASE zGenAlbum.ZCUSTOMQUERYTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMQUERYTYPE || ''
+ END AS 'zGenAlbum-Custom Query Type',
+ CASE SWYConverszGenAlbum.ZCUSTOMQUERYTYPE
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMQUERYTYPE || ''
+ END AS 'SWYConverszGenAlbum-Custom Query Type',
+ CASE ParentzGenAlbum.ZTRASHEDSTATE
+ WHEN 0 THEN '0-ParentzGenAlbum Not In Trash-0'
+ WHEN 1 THEN '1-ParentzGenAlbum Album In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZTRASHEDSTATE || ''
+ END AS 'ParentzGenAlbum-Trashed State',
+ DateTime(ParentzGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum-Trash Date',
+ CASE zGenAlbum.ZTRASHEDSTATE
+ WHEN 0 THEN 'zGenAlbum Not In Trash-0'
+ WHEN 1 THEN 'zGenAlbum Album In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZTRASHEDSTATE || ''
+ END AS 'zGenAlbum-Trashed State',
+ DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date',
+ CASE SWYConverszGenAlbum.ZTRASHEDSTATE
+ WHEN 0 THEN 'SWYConverszGenAlbum Not In Trash-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum Album In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZTRASHEDSTATE || ''
+ END AS 'SWYConverszGenAlbum-Trashed State',
+ DateTime(SWYConverszGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Trash Date',
+ CASE ParentzGenAlbum.ZCLOUDDELETESTATE
+ WHEN 0 THEN '0-ParentzGenAlbum Cloud Not Deleted-0'
+ WHEN 1 THEN '1-ParentzGenAlbum Cloud Album Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDDELETESTATE || ''
+ END AS 'ParentzGenAlbum-Cloud Delete State',
+ CASE zGenAlbum.ZCLOUDDELETESTATE
+ WHEN 0 THEN 'zGenAlbum Cloud Not Deleted-0'
+ WHEN 1 THEN 'zGenAlbum Cloud Album Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDDELETESTATE || ''
+ END AS 'zGenAlbum-Cloud Delete State',
+ CASE SWYConverszGenAlbum.ZCLOUDDELETESTATE
+ WHEN 0 THEN 'SWYConverszGenAlbum Cloud Not Deleted-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum Cloud Album Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDDELETESTATE || ''
+ END AS 'SWYConverszGenAlbum-Cloud Delete State',
+ CASE zGenAlbum.ZCLOUDOWNERISWHITELISTED
+ WHEN 0 THEN 'zGenAlbum Cloud Owner Not Whitelisted-0'
+ WHEN 1 THEN 'zGenAlbum Cloud Owner Whitelisted-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDOWNERISWHITELISTED || ''
+ END AS 'zGenAlbum-Cloud Owner Whitelisted',
+ CASE SWYConverszGenAlbum.ZCLOUDOWNERISWHITELISTED
+ WHEN 0 THEN 'SWYConverszGenAlbum Cloud Owner Not Whitelisted-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum Cloud Owner Whitelisted-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDOWNERISWHITELISTED || ''
+ END AS 'SWYConverszGenAlbum-Cloud Owner Whitelisted',
+ CASE zGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL
+ WHEN 0 THEN 'zGenAlbum Cloud Local Public URL Disabled-0'
+ WHEN 1 THEN 'zGenAlbum Cloud Local has Public URL Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL || ''
+ END AS 'zGenAlbum-Cloud Local Public URL Enabled',
+ CASE SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL
+ WHEN 0 THEN 'SWYConverszGenAlbum Cloud Local Public URL Disabled-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum Cloud Local has Public URL Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL || ''
+ END AS 'SWYConverszGenAlbum-Cloud Local Public URL Enabled',
+ CASE zGenAlbum.ZCLOUDPUBLICURLENABLED
+ WHEN 0 THEN 'zGenAlbum Cloud Public URL Disabled-0'
+ WHEN 1 THEN 'zGenAlbum Cloud Public URL Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDPUBLICURLENABLED || ''
+ END AS 'zGenAlbum-Cloud Public URL Enabled',
+ zGenAlbum.ZPUBLICURL AS 'zGenAlbum-Public URL',
+ CASE SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLED
+ WHEN 0 THEN 'SWYConverszGenAlbum Cloud Public URL Disabled-0'
+ WHEN 1 THEN 'SWYConverszGenAlbum Cloud Public URL Enabled-1'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLED || ''
+ END AS 'SWYConverszGenAlbum-Cloud Public URL Enabled',
+ SWYConverszGenAlbum.ZPUBLICURL AS 'SWYConverszGenAlbum-Public URL',
+ zGenAlbum.ZKEYASSETFACETHUMBNAILINDEX AS 'zGenAlbum-Key Asset Face Thumb Index',
+ SWYConverszGenAlbum.ZKEYASSETFACETHUMBNAILINDEX AS 'SWYConverszGenAlbum-Key Asset Face Thumb Index',
+ zGenAlbum.ZPROJECTEXTENSIONIDENTIFIER AS 'zGenAlbum-Project Text Extension ID',
+ SWYConverszGenAlbum.ZPROJECTEXTENSIONIDENTIFIER AS 'SWYConverszGenAlbum-Project Text Extension ID',
+ zGenAlbum.ZUSERQUERYDATA AS 'zGenAlbum-User Query Data',
+ SWYConverszGenAlbum.ZUSERQUERYDATA AS 'SWYConverszGenAlbum-User Query Data',
+ zGenAlbum.ZCUSTOMQUERYPARAMETERS AS 'zGenAlbum-Custom Query Parameters',
+ SWYConverszGenAlbum.ZCUSTOMQUERYPARAMETERS AS 'SWYConverszGenAlbum-Custom Query Parameters',
+ zGenAlbum.ZPROJECTDATA AS 'zGenAlbum-Project Data',
+ SWYConverszGenAlbum.ZPROJECTDATA AS 'SWYConverszGenAlbum-Project Data',
+ CASE zGenAlbum.ZSEARCHINDEXREBUILDSTATE
+ WHEN 0 THEN '0-StillTesting GenAlbm-Search Index State-0'
+ WHEN 1 THEN '1-StillTesting GenAlbm-Search Index State-1'
+ WHEN 2 THEN '2-StillTesting GenAlbm-Search Index State-2'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZSEARCHINDEXREBUILDSTATE || ''
+ END AS 'zGenAlbum-Search Index Rebuild State',
+ CASE SWYConverszGenAlbum.ZSEARCHINDEXREBUILDSTATE
+ WHEN 0 THEN '0-StillTesting GenAlbm-Search Index State-0'
+ WHEN 1 THEN '1-StillTesting GenAlbm-Search Index State-1'
+ WHEN 2 THEN '2-StillTesting GenAlbm-Search Index State-2'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSEARCHINDEXREBUILDSTATE || ''
+ END AS 'SWYConverszGenAlbum-Search Index Rebuild State',
+ CASE zGenAlbum.ZDUPLICATETYPE
+ WHEN 0 THEN '0-StillTesting GenAlbumDuplicateType-0'
+ WHEN 1 THEN 'Duplicate Asset_Pending-Merge-1'
+ WHEN 2 THEN '2-StillTesting GenAlbumDuplicateType-2'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZDUPLICATETYPE || ''
+ END AS 'zGenAlbum-Duplicate Type',
+ CASE SWYConverszGenAlbum.ZDUPLICATETYPE
+ WHEN 0 THEN '0-StillTesting GenAlbumDuplicateType-0'
+ WHEN 1 THEN '1-Duplicate Asset_Pending-Merge-1'
+ WHEN 2 THEN '2-StillTesting GenAlbumDuplicateType-2'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZDUPLICATETYPE || ''
+ END AS 'SWYConverszGenAlbum-Duplicate Type',
+ CASE zGenAlbum.ZPRIVACYSTATE
+ WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0'
+ WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1'
+ WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2'
+ ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPRIVACYSTATE || ''
+ END AS 'zGenAlbum-Privacy State',
+ CASE SWYConverszGenAlbum.ZPRIVACYSTATE
+ WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0'
+ WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1'
+ WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2'
+ ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPRIVACYSTATE || ''
+ END AS 'SWYConverszGenAlbum-Privacy State',
+ zCldShareAlbumInvRec.ZUUID AS 'zCldShareAlbumInvRec-zUUID-4TableStart',
+ CASE zCldShareAlbumInvRec.ZISMINE
+ WHEN 0 THEN 'Not My Invitation-0'
+ WHEN 1 THEN 'My Invitation-1'
+ ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZISMINE || ''
+ END AS 'zCldShareAlbumInvRec-Is My Invitation to Shared Album',
+ CASE zCldShareAlbumInvRec.ZINVITATIONSTATELOCAL
+ WHEN 0 THEN '0-StillTesting-0'
+ WHEN 1 THEN '1-StillTesting-1'
+ ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZINVITATIONSTATELOCAL || ''
+ END AS 'zCldShareAlbumInvRec-Invitation State Local',
+ CASE zCldShareAlbumInvRec.ZINVITATIONSTATE
+ WHEN 1 THEN 'Shared Album Invitation Pending-1'
+ WHEN 2 THEN 'Shared Album Invitation Accepted-2'
+ WHEN 3 THEN 'Shared Album Invitation Declined-3'
+ WHEN 4 THEN '4-StillTesting'
+ WHEN 5 THEN '5-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZINVITATIONSTATE || ''
+ END AS 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status',
+ DateTime(zCldShareAlbumInvRec.ZINVITEESUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldShareAlbumInvRec-Subscription Date',
+ zCldShareAlbumInvRec.ZINVITEEFIRSTNAME AS 'zCldShareAlbumInvRec-Invitee First Name',
+ zCldShareAlbumInvRec.ZINVITEELASTNAME AS 'zCldShareAlbumInvRec-Invitee Last Name',
+ zCldShareAlbumInvRec.ZINVITEEFULLNAME AS 'zCldShareAlbumInvRec-Invitee Full Name',
+ zCldShareAlbumInvRec.ZINVITEEHASHEDPERSONID AS 'zCldShareAlbumInvRec-Invitee Hashed Person ID',
+ zCldShareAlbumInvRec.ZINVITEEEMAILKEY AS 'zCldShareAlbumInvRec-Invitee Email Key',
+ zGenAlbum.ZKEYASSETFACEIDENTIFIER AS 'zGenAlbum-Key Asset Face ID',
+ CASE
+ WHEN zAsset.ZFACEAREAPOINTS > 0 THEN 'Face Area Points Detected in zAsset'
+ ELSE 'Face Area Points Not Detected in zAsset'
+ END AS 'zFaceCrop-Face Area Points',
+ zAsset.ZFACEADJUSTMENTVERSION AS 'zAsset-Face Adjustment Version',
+ zAddAssetAttr.ZFACEANALYSISVERSION AS 'zAddAssetAttr-Face Analysis Version',
+ CASE zDetFace.ZASSETVISIBLE
+ WHEN 0 THEN 'Asset Not Visible Photo Library-0'
+ WHEN 1 THEN 'Asset Visible Photo Library-1'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZASSETVISIBLE || ''
+ END AS 'zDetFace-Asset Visible',
+ zPerson.ZFACECOUNT AS 'zPerson-Face Count',
+ zDetFace.ZFACECROP AS 'zDetFace-Face Crop',
+ zDetFace.ZFACEALGORITHMVERSION AS 'zDetFace-Face Algorithm Version',
+ zDetFace.ZADJUSTMENTVERSION AS 'zDetFace-Adjustment Version',
+ zDetFace.ZUUID AS 'zDetFace-UUID-4TableStart',
+ zPerson.ZPERSONUUID AS 'zPerson-Person UUID-4TableStart',
+ zPerson.ZMDID AS 'zPerson - MD ID',
+ CASE zPerson.ZASSETSORTORDER
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zPerson.ZASSETSORTORDER || ''
+ END AS 'zPerson - Asset Sort Order',
+ CASE zDetFace.ZCONFIRMEDFACECROPGENERATIONSTATE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZCONFIRMEDFACECROPGENERATIONSTATE || ''
+ END AS 'zDetFace-Confirmed Face Crop Generation State',
+ CASE zDetFace.ZMANUAL
+ WHEN 0 THEN 'zDetFace-Auto Detected-0'
+ WHEN 1 THEN 'zDetFace-Manually Detected-1'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZMANUAL || ''
+ END AS 'zDetFace-Manual',
+ CASE zDetFace.ZDETECTIONTYPE
+ WHEN 1 THEN '1-StillTesting'
+ WHEN 3 THEN '3-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZDETECTIONTYPE || ''
+ END AS 'zDetFace-Detection Type',
+ CASE zPerson.ZDETECTIONTYPE
+ WHEN 1 THEN '1-StillTesting'
+ WHEN 3 THEN '3-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zPerson.ZDETECTIONTYPE || ''
+ END AS 'zPerson-Detection Type',
+ CASE zDetFace.ZVIPMODELTYPE
+ WHEN 0 THEN 'Not VIP-0'
+ WHEN 1 THEN 'VIP-1'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZVIPMODELTYPE || ''
+ END AS 'zDetFace-VIP Model Type',
+ CASE zDetFace.ZNAMESOURCE
+ WHEN 0 THEN 'No Name Listed-0'
+ WHEN 1 THEN '1-Face Crop-1'
+ WHEN 2 THEN '2-Verified-Has-Person-URI'
+ WHEN 3 THEN '3-StillTesting'
+ WHEN 4 THEN '4-StillTesting'
+ WHEN 5 THEN '5-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZNAMESOURCE || ''
+ END AS 'zDetFace-Name Source',
+ CASE zDetFace.ZCLOUDNAMESOURCE
+ WHEN 0 THEN 'NA-0'
+ WHEN 1 THEN '1-User Added Via Face Crop-1'
+ WHEN 5 THEN '5-Asset Shared has Name'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZCLOUDNAMESOURCE || ''
+ END AS 'zDetFace-Cloud Name Source',
+ zPerson.ZMERGECANDIDATECONFIDENCE AS 'zPerson-Merge Candidate Confidence',
+ zPerson.ZPERSONURI AS 'zPerson-Person URI',
+ zPerson.ZDISPLAYNAME AS 'zPerson-Display Name',
+ zPerson.ZFULLNAME AS 'zPerson-Full Name',
+ CASE zPerson.ZCLOUDVERIFIEDTYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ WHEN 2 THEN '2-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zPerson.ZCLOUDVERIFIEDTYPE || ''
+ END AS 'zPerson-Cloud Verified Type',
+ CASE zFaceCrop.ZSTATE
+ WHEN 5 THEN 'Validated-5'
+ ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZSTATE || ''
+ END AS 'zFaceCrop-State',
+ CASE zFaceCrop.ZTYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-Active'
+ ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZTYPE || ''
+ END AS 'zFaceCrop-Type',
+ zFaceCrop.ZUUID AS 'zFaceCrop-UUID-4TableStart',
+ CASE zPerson.ZTYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zPerson.ZTYPE || ''
+ END AS 'zPerson-Type',
+ CASE zPerson.ZVERIFIEDTYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zPerson.ZVERIFIEDTYPE || ''
+ END AS 'zPerson-Verified Type',
+ CASE zPerson.ZGENDERTYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN 'Male-1'
+ WHEN 2 THEN 'Female-2'
+ ELSE 'Unknown-New-Value!: ' || zPerson.ZGENDERTYPE || ''
+ END AS 'zPerson-Gender Type',
+ CASE zDetFace.ZGENDERTYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN 'Male-1'
+ WHEN 2 THEN 'Female-2'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZGENDERTYPE || ''
+ END AS 'zDetFace-Gender Type',
+ zDetFace.ZCENTERX AS 'zDetFace-Center X',
+ zDetFace.ZCENTERY AS 'zDetFace-Center Y',
+ CASE zPerson.ZAGETYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN 'Infant-Toddler Age Type-1'
+ WHEN 2 THEN 'Toddler-Child Age Type-2'
+ WHEN 3 THEN 'Child-Young Adult Age Type-3'
+ WHEN 4 THEN 'Young Adult-Adult Age Type-4'
+ WHEN 5 THEN 'Adult-5'
+ ELSE 'Unknown-New-Value!: ' || zPerson.ZAGETYPE || ''
+ END AS 'zPerson-Age Type Estimate',
+ CASE zDetFace.ZAGETYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN 'Infant-Toddler Age Type-1'
+ WHEN 2 THEN 'Toddler-Child Age Type-2'
+ WHEN 3 THEN 'Child-Young Adult Age Type-3'
+ WHEN 4 THEN 'Young Adult-Adult Age Type-4'
+ WHEN 5 THEN 'Adult-5'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZAGETYPE || ''
+ END AS 'zDetFace-Age Type Estimate',
+ CASE zDetFace.ZETHNICITYTYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN 'Black-African American-1'
+ WHEN 2 THEN 'White-2'
+ WHEN 3 THEN 'Hispanic-Latino-3'
+ WHEN 4 THEN 'Asian-4'
+ WHEN 5 THEN 'Native Hawaiian-Other Pacific Islander-5'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZETHNICITYTYPE || ''
+ END AS 'zDetFace-Ethnicity Type',
+ CASE zDetFace.ZSKINTONETYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN 'Light-Pale White Skin Tone-1'
+ WHEN 2 THEN 'White-Fair Skin Tone-2'
+ WHEN 3 THEN 'Medium-White to Olive Skin Tone-3'
+ WHEN 4 THEN 'Olive-Moderate Brown Skin Tone-4'
+ WHEN 5 THEN 'Brown-Dark Brown Skin Tone-5'
+ WHEN 6 THEN 'Black-Very Dark Brown to Black Skin Tone-6'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZSKINTONETYPE || ''
+ END AS 'zDetFace-Skin Tone Type',
+ CASE zDetFace.ZHAIRTYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ WHEN 2 THEN '2-StillTesting'
+ WHEN 3 THEN '3-StillTesting'
+ WHEN 4 THEN '4-StillTesting'
+ WHEN 5 THEN '5-StillTesting'
+ WHEN 6 THEN '6-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZHAIRTYPE || ''
+ END AS 'zDetFace-Hair Type',
+ CASE zDetFace.ZHAIRCOLORTYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN 'Black-Brown Hair Color-1'
+ WHEN 2 THEN 'Brown-Blonde Hair Color-2'
+ WHEN 3 THEN 'Brown-Red Hair Color-3'
+ WHEN 4 THEN 'Red-White Hair Color-4'
+ WHEN 5 THEN 'StillTesting-Artifical-5'
+ WHEN 6 THEN 'White-Bald Hair Color-6'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZHAIRCOLORTYPE || ''
+ END AS 'zDetFace-Hair Color Type',
+ CASE zDetFace.ZHEADGEARTYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ WHEN 2 THEN '2-StillTesting'
+ WHEN 3 THEN '3-StillTesting'
+ WHEN 4 THEN '4-StillTesting'
+ WHEN 5 THEN '5-No Headgear'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZHEADGEARTYPE || ''
+ END AS 'zDetFace-Head Gear Type',
+ CASE zDetFace.ZFACIALHAIRTYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN 'Clean Shaven Facial Hair Type-1'
+ WHEN 2 THEN 'Beard Facial Hair Type-2'
+ WHEN 3 THEN 'Goatee Facial Hair Type-3'
+ WHEN 4 THEN 'Mustache Facial Hair Type-4'
+ WHEN 5 THEN 'Stubble Facial Hair Type-5'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZFACIALHAIRTYPE || ''
+ END AS 'zDetFace-Facial Hair Type',
+ CASE zDetFace.ZHASFACEMASK
+ WHEN 0 THEN 'No Mask-0'
+ WHEN 1 THEN 'Has Mask-1'
+ WHEN 2 THEN '2-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZHASFACEMASK || ''
+ END AS 'zDetFace-Has Face Mask',
+ CASE zDetFace.ZPOSETYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN 'Face Frontal Pose-1'
+ WHEN 2 THEN '2-StillTesting'
+ WHEN 3 THEN 'Face Profile Pose-3'
+ WHEN 4 THEN '4-StillTesting'
+ WHEN 5 THEN '5-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZPOSETYPE || ''
+ END AS 'zDetFace-Pose Type',
+ CASE zDetFace.ZFACEEXPRESSIONTYPE
+ WHEN 0 THEN 'NA-0'
+ WHEN 1 THEN 'Disgusted-Angry-1'
+ WHEN 2 THEN 'Suprised-Fearful-2'
+ WHEN 3 THEN 'Neutral-3'
+ WHEN 4 THEN 'Confident-Smirk-4'
+ WHEN 5 THEN 'Happiness-5'
+ WHEN 6 THEN 'Sadness-6'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZFACEEXPRESSIONTYPE || ''
+ END AS 'zDetFace-Face Expression Type',
+ CASE zDetFace.ZHASSMILE
+ WHEN 0 THEN 'zDetFace No Smile-0'
+ WHEN 1 THEN 'zDetFace Smile-1'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZHASSMILE || ''
+ END AS 'zDetFace-Has Smile',
+ CASE zDetFace.ZSMILETYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN 'zDetFace Smile No Teeth-1'
+ WHEN 2 THEN 'zDetFace Smile has Teeth-2'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZSMILETYPE || ''
+ END AS 'zDetFace-Smile Type',
+ CASE zDetFace.ZLIPMAKEUPTYPE
+ WHEN 0 THEN 'zDetFace No Lip Makeup-0'
+ WHEN 1 THEN 'zDetFace Lip Makeup Detected-1'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZLIPMAKEUPTYPE || ''
+ END AS 'zDetFace-Lip Makeup Type',
+ CASE zDetFace.ZEYESSTATE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN 'Eyes Closed-1'
+ WHEN 2 THEN 'Eyes Open-2'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZEYESSTATE || ''
+ END AS 'zDetFace-Eyes State',
+ CASE zDetFace.ZISLEFTEYECLOSED
+ WHEN 0 THEN 'Left Eye Open-0'
+ WHEN 1 THEN 'Left Eye Closed-1'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZISLEFTEYECLOSED || ''
+ END AS 'zDetFace-Is Left Eye Closed',
+ CASE zDetFace.ZISRIGHTEYECLOSED
+ WHEN 0 THEN 'Right Eye Open-0'
+ WHEN 1 THEN 'Right Eye Closed-1'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZISRIGHTEYECLOSED || ''
+ END AS 'zDetFace-Is Right Eye Closed',
+ zDetFace.ZGAZECENTERX AS 'zDetFace-Gaze Center X',
+ zDetFace.ZGAZECENTERY AS 'zDetFace-Gaze Center Y',
+ CASE zDetFace.ZGAZETYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ WHEN 2 THEN '2-StillTesting'
+ WHEN 3 THEN '3-StillTesting'
+ WHEN 4 THEN '4-StillTesting'
+ WHEN 5 THEN '5-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZGAZETYPE || ''
+ END AS 'zDetFace-Face Gaze Type',
+ CASE zDetFace.ZGLASSESTYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN 'Eye Glasses-1'
+ WHEN 2 THEN 'Sun Glasses-2'
+ WHEN 3 THEN 'No Glasses-3'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZGLASSESTYPE || ''
+ END AS 'zDetFace-Eye Glasses Type',
+ CASE zDetFace.ZEYEMAKEUPTYPE
+ WHEN 0 THEN 'No Eye Makeup-0'
+ WHEN 1 THEN 'Eye Makeup Detected-1'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZEYEMAKEUPTYPE || ''
+ END AS 'zDetFace-Eye Makeup Type',
+ zDetFace.ZCLUSTERSEQUENCENUMBER AS 'zDetFace-Cluster Squence Number Key',
+ zDetFace.ZGROUPINGIDENTIFIER AS 'zDetFace-Grouping ID',
+ zDetFace.ZMASTERIDENTIFIER AS 'zDetFace-Master ID',
+ zDetFace.ZQUALITY AS 'zDetFace-Quality',
+ zDetFace.ZQUALITYMEASURE AS 'zDetFace-Quality Measure',
+ zDetFace.ZSOURCEHEIGHT AS 'zDetFace-Source Height',
+ zDetFace.ZSOURCEWIDTH AS 'zDetFace-Source Width',
+ CASE zDetFace.ZHIDDEN
+ WHEN 0 THEN 'Not Hidden-0'
+ WHEN 1 THEN 'Hidden-1'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZHIDDEN || ''
+ END AS 'zDetFace-Hidden-Asset Hidden',
+ CASE zDetFace.ZISINTRASH
+ WHEN 0 THEN 'Not In Trash-0'
+ WHEN 1 THEN 'In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZISINTRASH || ''
+ END AS 'zDetFace-In Trash-Recently Deleted',
+ CASE zDetFace.ZCLOUDLOCALSTATE
+ WHEN 0 THEN 'Not Synced with Cloud-0'
+ WHEN 1 THEN 'Synced with Cloud-1'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZCLOUDLOCALSTATE || ''
+ END AS 'zDetFace-Cloud Local State',
+ CASE zDetFace.ZTRAININGTYPE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 5 THEN '5-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zDetFace.ZTRAININGTYPE
+ END AS 'zDetFace-Training Type',
+ zDetFace.ZPOSEYAW AS 'zDetFace.Pose Yaw',
+ zDetFace.ZBODYCENTERX AS 'zDetFace-Body Center X',
+ zDetFace.ZBODYCENTERY AS 'zDetFace-Body Center Y',
+ zDetFace.ZBODYHEIGHT AS 'zDetFace-Body Height',
+ zDetFace.ZBODYWIDTH AS 'zDetFace-Body Width',
+ zDetFace.ZROLL AS 'zDetFace-Roll',
+ zDetFace.ZSIZE AS 'zDetFace-Size',
+ zDetFace.ZCLUSTERSEQUENCENUMBER AS 'zDetFace-Cluster Squence Number',
+ zDetFace.ZBLURSCORE AS 'zDetFace-Blur Score',
+ zDetFacePrint.ZFACEPRINTVERSION AS 'zDetFacePrint-Face Print Version',
+ zMedAnlyAstAttr.ZFACECOUNT AS 'zMedAnlyAstAttr-Face Count',
+ zDetFaceGroup.ZUUID AS 'zDetFaceGroup-UUID-4TableStart',
+ zDetFaceGroup.ZPERSONBUILDERSTATE AS 'zDetFaceGroup-Person Builder State',
+ zDetFaceGroup.ZUNNAMEDFACECOUNT AS 'zDetFaceGroup-UnNamed Face Count',
+ zPerson.ZINPERSONNAMINGMODEL AS 'zPerson-In Person Naming Model',
+ zPerson.ZKEYFACEPICKSOURCE AS 'zPerson-Key Face Pick Source Key',
+ zPerson.ZMANUALORDER AS 'zPerson-Manual Order Key',
+ zPerson.ZQUESTIONTYPE AS 'zPerson-Question Type',
+ zPerson.ZSUGGESTEDFORCLIENTTYPE AS 'zPerson-Suggested For Client Type',
+ zPerson.ZMERGETARGETPERSON AS 'zPerson-Merge Target Person',
+ CASE zPerson.ZCLOUDLOCALSTATE
+ WHEN 0 THEN 'Person Not Synced with Cloud-0'
+ WHEN 1 THEN 'Person Synced with Cloud-1'
+ ELSE 'Unknown-New-Value!: ' || zPerson.ZCLOUDLOCALSTATE
+ END AS 'zPerson-Cloud Local State',
+ CASE zFaceCrop.ZCLOUDLOCALSTATE
+ WHEN 0 THEN 'Not Synced with Cloud-0'
+ WHEN 1 THEN 'Synced with Cloud-1'
+ ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZCLOUDLOCALSTATE || ''
+ END AS 'zFaceCrop-Cloud Local State',
+ CASE zFaceCrop.ZCLOUDTYPE
+ WHEN 0 THEN 'Has Name-0'
+ WHEN 5 THEN 'Has Face Key-5'
+ WHEN 12 THEN '12-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZCLOUDTYPE || ''
+ END AS 'zFaceCrop-Cloud Type',
+ CASE zPerson.ZCLOUDDELETESTATE
+ WHEN 0 THEN 'Cloud Not Deleted-0'
+ WHEN 1 THEN 'Cloud Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zPerson.ZCLOUDDELETESTATE || ''
+ END AS 'zPerson-Cloud Delete State',
+ CASE zFaceCrop.ZCLOUDDELETESTATE
+ WHEN 0 THEN 'Cloud Not Deleted-0'
+ WHEN 1 THEN 'Cloud Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZCLOUDDELETESTATE || ''
+ END AS 'zFaceCrop-Cloud Delete State',
+ zFaceCrop.ZINVALIDMERGECANDIDATEPERSONUUID AS 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart',
+ zAsset.ZHIGHLIGHTVISIBILITYSCORE AS 'zAsset-Highlight Visibility Score',
+ zMemory.ZUUID AS 'zMemory-UUID-4TableStart',
+ zMemory.ZASSETLISTPREDICATE AS 'zMemory-AssetListPredicte',
+ zMemory.ZSCORE AS 'zMemory-Score',
+ zMemory.ZSUBTITLE AS 'zMemory-SubTitle',
+ zMemory.ZTITLE AS 'zMemory-Title',
+ CASE zMemory.ZCATEGORY
+ WHEN 1 THEN '1-StillTesting'
+ WHEN 3 THEN '3-StillTesting'
+ WHEN 8 THEN '8-StillTesting'
+ WHEN 16 THEN '16-StillTesting'
+ WHEN 17 THEN '17-StillTesting'
+ WHEN 19 THEN '19-StillTesting'
+ WHEN 21 THEN '21-StillTesting'
+ WHEN 201 THEN '201-StillTesting'
+ WHEN 203 THEN '203-StillTesting'
+ WHEN 204 THEN '204-StillTesting'
+ WHEN 211 THEN '211-StillTesting'
+ WHEN 217 THEN '217-StillTesting'
+ WHEN 220 THEN '220-StillTesting'
+ WHEN 301 THEN '301-StillTesting'
+ WHEN 302 THEN '302-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zMemory.ZCATEGORY || ''
+ END AS 'zMemory-Category',
+ CASE zMemory.ZSUBCATEGORY
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 201 THEN '201-StillTesting'
+ WHEN 204 THEN '204-StillTesting'
+ WHEN 206 THEN '206-StillTesting'
+ WHEN 207 THEN '207-StillTesting'
+ WHEN 212 THEN '212-StillTesting'
+ WHEN 213 THEN '213-StillTesting'
+ WHEN 214 THEN '214-StillTesting'
+ WHEN 402 THEN '402-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zMemory.ZSUBCATEGORY || ''
+ END AS 'zMemory-SubCategory',
+ DateTime(zMemory.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Creation Date',
+ DateTime(zMemory.ZLASTENRICHMENTDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Last Enrichment Date',
+ CASE zMemory.ZUSERACTIONOPTIONS
+ WHEN 0 THEN 'User Actions Options Memory Not User Created-0'
+ WHEN 1 THEN 'User Actions Options Memory User Created-1'
+ ELSE 'Unknown-New-Value!: ' || zMemory.ZUSERACTIONOPTIONS || ''
+ END AS 'zMemory-User Action Options',
+ CASE zMemory.ZFAVORITE
+ WHEN 0 THEN 'Memory Not Favorite-0'
+ WHEN 1 THEN 'Memory Favorite-1'
+ END AS 'zMemory-Favorite Memory',
+ zMemory.ZVIEWCOUNT AS 'zMemory-View Count',
+ zMemory.ZPLAYCOUNT AS 'zMemory-Play Count',
+ zMemory.ZREJECTED AS 'zMemory-Rejected',
+ zMemory.ZSHARECOUNT AS 'zMemory-Share Count',
+ zMemory.ZSHARINGCOMPOSITION AS 'zMemory-Sharing Composition',
+ DateTime(zMemory.ZLASTMOVIEPLAYEDDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Last Movie Play Date',
+ DateTime(zMemory.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Last Viewed Date',
+ zMemory.ZPENDINGPLAYCOUNT AS 'zMemory-Pending Play Count Memory',
+ zMemory.ZPENDINGSHARECOUNT AS 'zMemory-Pending Share Count Memory',
+ zMemory.ZPENDINGVIEWCOUNT AS 'zMemory-Pending View Count Memory',
+ zMemory.ZPENDINGSTATE AS 'zMemory-Pending State',
+ CASE zMemory.ZFEATUREDSTATE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zMemory.ZFEATUREDSTATE || ''
+ END AS 'zMemory-Featured State',
+ zMemory.ZPHOTOSGRAPHVERSION AS 'zMemory-Photos Graph Version',
+ zMemory.ZGRAPHMEMORYIDENTIFIER AS 'zMemory-Graph Memory Identifier',
+ CASE zMemory.ZNOTIFICATIONSTATE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ WHEN 2 THEN '2-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zMemory.ZNOTIFICATIONSTATE || ''
+ END AS 'zMemory-Notification State',
+ CASE zMemory.ZCLOUDLOCALSTATE
+ WHEN 0 THEN 'Memory Not Synced with Cloud-0'
+ WHEN 1 THEN 'Memory Synced with Cloud-1'
+ ELSE 'Unknown-New-Value!: ' || zMemory.ZCLOUDLOCALSTATE || ''
+ END AS 'zMemory-Cloud Local State',
+ CASE zMemory.ZCLOUDDELETESTATE
+ WHEN 0 THEN 'Memory Not Deleted-0'
+ WHEN 1 THEN 'Memory Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || zMemory.ZCLOUDDELETESTATE || ''
+ END AS 'zMemory-Cloud Delete State',
+ CASE zMemory.ZSTORYCOLORGRADEKIND
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zMemory.ZSTORYCOLORGRADEKIND || ''
+ END AS 'zMemory-Story Color Grade Kind',
+ CASE zMemory.ZSTORYSERIALIZEDTITLECATEGORY
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zMemory.ZSTORYSERIALIZEDTITLECATEGORY || ''
+ END AS 'zMemory-Story Serialized Title Category',
+ CASE zMemory.ZSYNDICATEDCONTENTSTATE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || zMemory.ZSYNDICATEDCONTENTSTATE || ''
+ END AS 'zMemory-Syndicated Content State',
+ CASE zMemory.ZSEARCHINDEXREBUILDSTATE
+ WHEN 0 THEN '0-StillTesting Memory-Search Index State-0'
+ WHEN 1 THEN '1-StillTesting Memory-Search Index State-1'
+ WHEN 2 THEN '2-StillTesting Memory-Search Index State-2'
+ ELSE 'Unknown-New-Value!: ' || zMemory.ZSEARCHINDEXREBUILDSTATE || ''
+ END AS 'zMemory-Search Index Rebuild State',
+ zMemory.ZBLACKLISTEDFEATURE AS 'zMemory-Black Listed Feature',
+ zMoment.ZUUID AS 'zMoment-UUID-4TableStart',
+ zMoment.ZAGGREGATIONSCORE AS 'zMoment-Aggregation Score',
+ DateTime(zMoment.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-Start Date',
+ DateTime(zMoment.ZREPRESENTATIVEDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-Representative Date',
+ zMoment.ZTIMEZONEOFFSET AS 'zMoment-Timezone Offset',
+ DateTime(zMoment.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-Modification Date',
+ DateTime(zMoment.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-End Date',
+ zMoment.ZSUBTITLE AS 'zMoment-SubTitle',
+ zMoment.ZTITLE AS 'zMoment-Title',
+ CASE zMoment.ZORIGINATORSTATE
+ WHEN 0 THEN '0-StillTesting Moment-Originator_State-0'
+ WHEN 1 THEN '1-StillTesing Moment-Originator_State-1'
+ WHEN 2 THEN '2-StillTesting Moment-Originator_State-2'
+ ELSE 'Unknown-New-Value!: ' || zMoment.ZORIGINATORSTATE || ''
+ END AS 'zMoment-Originator State',
+ CASE zMoment.ZSHARINGCOMPOSITION
+ WHEN 0 THEN '0-StillTesting Moment-Sharing_Compo-0'
+ WHEN 1 THEN '1-StillTesting Moment-Sharing_Compo-1'
+ WHEN 2 THEN '2-StillTesting Moment-Sharing_Compo-2'
+ ELSE 'Unknown-New-Value!: ' || zMoment.ZSHARINGCOMPOSITION || ''
+ END AS 'zMoment-Sharing Composition',
+ zMoment.ZCACHEDCOUNTSHARED AS 'zMoment-Cached Count Shared',
+ CASE zMoment.ZPROCESSEDLOCATION
+ WHEN 2 THEN 'No-2'
+ WHEN 3 THEN 'Yes-3'
+ WHEN 6 THEN 'Yes-6'
+ ELSE 'Unknown-New-Value!: ' || zMoment.ZPROCESSEDLOCATION || ''
+ END AS 'zMoment-Processed Location',
+ zMoment.ZAPPROXIMATELATITUDE AS 'zMoment-Approx Latitude',
+ zMoment.ZAPPROXIMATELONGITUDE AS 'zMoment-Approx Longitude',
+ CASE zMoment.ZGPSHORIZONTALACCURACY
+ WHEN -1.0 THEN '-1.0'
+ ELSE zMoment.ZGPSHORIZONTALACCURACY
+ END AS 'zMoment-GPS Horizontal Accuracy',
+ zMoment.ZCACHEDCOUNT AS 'zMoment-Cache Count',
+ zMoment.ZCACHEDPHOTOSCOUNT AS 'zMoment-Cached Photos Count',
+ zMoment.ZCACHEDVIDEOSCOUNT AS 'zMoment-Cached Videos Count',
+ CASE zMoment.ZTRASHEDSTATE
+ WHEN 0 THEN 'zMoment Not In Trash-0'
+ WHEN 1 THEN 'zMoment In Trash-1'
+ ELSE 'Unknown-New-Value!: ' || zMoment.ZTRASHEDSTATE || ''
+ END AS 'zMoment-Trashed State',
+ SBKAzSugg.ZUUID AS 'SBKAzSugg-UUID-4TableStart',
+ SBKAzSugg.ZSUGGESTIONCONTEXT AS 'SBKAzSugg-Suggestion Context',
+ SBKAzSugg.ZSHARINGCOMPOSITION AS 'SBKAzSugg-Sharing Composition',
+ DateTime(SBKAzSugg.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Start Date',
+ CASE SBKAzSugg.ZSTATE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZSTATE || ''
+ END AS 'SBKAzSugg-State',
+ CASE SBKAzSugg.ZFEATUREDSTATE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZFEATUREDSTATE || ''
+ END AS 'SBKAzSugg-Featured State',
+ CASE SBKAzSugg.ZAVAILABLEFEATURES
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZAVAILABLEFEATURES || ''
+ END AS 'SBKAzSugg- Available Features',
+ CASE SBKAzSugg.ZNOTIFICATIONSTATE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZNOTIFICATIONSTATE || ''
+ END AS 'SBKAzSugg-Notification State',
+ DateTime(SBKAzSugg.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Creation Date',
+ DateTime(SBKAzSugg.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-End Date',
+ DateTime(SBKAzSugg.ZACTIVATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Activation Date',
+ DateTime(SBKAzSugg.ZEXPUNGEDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Expunge Date',
+ DateTime(SBKAzSugg.ZRELEVANTUNTILDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Relevant Until Date',
+ SBKAzSugg.ZTITLE AS 'SBKAzSugg-Title',
+ SBKAzSugg.ZSUBTITLE AS 'SBKAzSugg-Sub Title',
+ SBKAzSugg.ZCACHEDCOUNT AS 'SBKAzSugg-Cached Count',
+ SBKAzSugg.ZCACHEDPHOTOSCOUNT AS 'SBKAzSugg-Cahed Photos Count',
+ SBKAzSugg.ZCACHEDVIDEOSCOUNT AS 'SBKAzSugg-Cached Videos Count',
+ CASE SBKAzSugg.ZTYPE
+ WHEN 5 THEN '5-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZTYPE || ''
+ END AS 'SBKAzSugg-Type',
+ CASE SBKAzSugg.ZSUBTYPE
+ WHEN 501 THEN '501-StillTesting'
+ WHEN 502 THEN '502-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZSUBTYPE || ''
+ END AS 'SBKAzSugg-Sub Type',
+ SBKAzSugg.ZACTIONDATA AS 'SBKAzSugg-Action Data',
+ SBKAzSugg.ZVERSION AS 'SBKAzSugg-Version',
+ CASE SBKAzSugg.ZCLOUDLOCALSTATE
+ WHEN 0 THEN 'Suggestion Not Synced with Cloud-0'
+ WHEN 1 THEN 'Suggestion Synced with Cloud-1'
+ ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZCLOUDLOCALSTATE || ''
+ END AS 'SBKAzSugg-Cloud Local State',
+ CASE SBKAzSugg.ZCLOUDDELETESTATE
+ WHEN 0 THEN 'Suggestion Not Deleted-0'
+ WHEN 1 THEN 'Suggestion Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZCLOUDDELETESTATE || ''
+ END AS 'SBKAzSugg-Cloud Delete State',
+ SBRAzSugg.ZUUID AS 'SBRAzSugg-UUID-4TableStart',
+ SBRAzSugg.ZSUGGESTIONCONTEXT AS 'SBRAzSugg-Suggestion Context',
+ SBRAzSugg.ZSHARINGCOMPOSITION AS 'SBRAzSugg-Sharing Composition',
+ DateTime(SBRAzSugg.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Start Date',
+ CASE SBRAzSugg.ZSTATE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZSTATE || ''
+ END AS 'SBRAzSugg-State',
+ CASE SBRAzSugg.ZFEATUREDSTATE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZFEATUREDSTATE || ''
+ END AS 'SBRAzSugg-Featured State',
+ CASE SBRAzSugg.ZAVAILABLEFEATURES
+ WHEN 0 THEN '0-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZAVAILABLEFEATURES || ''
+ END AS 'SBRAzSugg- Available Features',
+ CASE SBRAzSugg.ZNOTIFICATIONSTATE
+ WHEN 0 THEN '0-StillTesting'
+ WHEN 1 THEN '1-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZNOTIFICATIONSTATE || ''
+ END AS 'SBRAzSugg-Notification State',
+ DateTime(SBRAzSugg.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Creation Date',
+ DateTime(SBRAzSugg.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-End Date',
+ DateTime(SBRAzSugg.ZACTIVATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Activation Date',
+ DateTime(SBRAzSugg.ZEXPUNGEDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Expunge Date',
+ DateTime(SBRAzSugg.ZRELEVANTUNTILDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Relevant Until Date',
+ SBRAzSugg.ZTITLE AS 'SBRAzSugg-Title',
+ SBRAzSugg.ZSUBTITLE AS 'SBRAzSugg-Sub Title',
+ SBRAzSugg.ZCACHEDCOUNT AS 'SBRAzSugg-Cached Count',
+ SBRAzSugg.ZCACHEDPHOTOSCOUNT AS 'SBRAzSugg-Cahed Photos Count',
+ SBRAzSugg.ZCACHEDVIDEOSCOUNT AS 'SBRAzSugg-Cached Videos Count',
+ CASE SBRAzSugg.ZTYPE
+ WHEN 5 THEN '5-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZTYPE || ''
+ END AS 'SBRAzSugg-Type',
+ CASE SBRAzSugg.ZSUBTYPE
+ WHEN 501 THEN '501-StillTesting'
+ WHEN 502 THEN '502-StillTesting'
+ ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZSUBTYPE || ''
+ END AS 'SBRAzSugg-Sub Type',
+ SBRAzSugg.ZACTIONDATA AS 'SBRAzSugg-Action Data',
+ SBRAzSugg.ZVERSION AS 'SBRAzSugg-Version',
+ CASE SBRAzSugg.ZCLOUDLOCALSTATE
+ WHEN 0 THEN 'Suggestion Not Synced with Cloud-0'
+ WHEN 1 THEN 'Suggestion Synced with Cloud-1'
+ ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZCLOUDLOCALSTATE || ''
+ END AS 'SBRAzSugg-Cloud Local State',
+ CASE SBRAzSugg.ZCLOUDDELETESTATE
+ WHEN 0 THEN 'Suggestion Not Deleted-0'
+ WHEN 1 THEN 'Suggestion Deleted-1'
+ ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZCLOUDDELETESTATE || ''
+ END AS 'SBRAzSugg-Cloud Delete State',
+ zMedAnlyAstAttr.ZMEDIAANALYSISVERSION AS 'zMedAnlyAstAttr-Media Analysis Version',
+ zMedAnlyAstAttr.ZAUDIOCLASSIFICATION AS 'zMedAnlyAstAttr-Audio Classification',
+ zMedAnlyAstAttr.ZBESTVIDEORANGEDURATIONTIMESCALE AS 'zMedAnlyAstAttr-Best Video Range Duration Time Scale',
+ zMedAnlyAstAttr.ZBESTVIDEORANGESTARTTIMESCALE AS 'zMedAnlyAstAttr-Best Video Range Start Time Scale',
+ zMedAnlyAstAttr.ZBESTVIDEORANGEDURATIONVALUE AS 'zMedAnlyAstAttr-Best Video Range Duration Value',
+ zMedAnlyAstAttr.ZBESTVIDEORANGESTARTVALUE AS 'zMedAnlyAstAttr-Best Video Range Start Value',
+ zMedAnlyAstAttr.ZPACKEDBESTPLAYBACKRECT AS 'zMedAnlyAstAttr-Packed Best Playback Rect',
+ zMedAnlyAstAttr.ZACTIVITYSCORE AS 'zMedAnlyAstAttr-Activity Score',
+ zMedAnlyAstAttr.ZVIDEOSCORE AS 'zMedAnlyAstAttr-Video Score',
+ zMedAnlyAstAttr.ZAUDIOSCORE AS 'zMedAnlyAstAttr-Audio Score',
+ zMedAnlyAstAttr.ZWALLPAPERSCORE AS 'zMedAnlyAstAttr-Wallpaper Score',
+ zMedAnlyAstAttr.ZAUTOPLAYSUGGESTIONSCORE AS 'zMedAnlyAstAttr-AutoPlay Suggestion Score',
+ zMedAnlyAstAttr.ZBLURRINESSSCORE AS 'zMedAnlyAstAttr-Blurriness Score',
+ zMedAnlyAstAttr.ZEXPOSURESCORE AS 'zMedAnlyAstAttr-Exposure Score',
+ zMedAnlyAstAttr.ZPROBABLEROTATIONDIRECTIONCONFIDENCE AS 'zMedAnlyAstAttr-Probable Rotation Direction Confidence',
+ zMedAnlyAstAttr.ZPROBABLEROTATIONDIRECTION AS 'zMedAnlyAstAttr-Probable Rotation Direction',
+ zMedAnlyAstAttr.ZSCREENTIMEDEVICEIMAGESENSITIVITY AS 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity',
+ zAssetAnalyState.ZASSETUUID AS 'zAssetAnalyState-Asset UUID-4TableStart',
+ zAssetAnalyState.ZANALYSISSTATE AS 'zAssetAnalyState-Analyisis State',
+ zAssetAnalyState.ZWORKERFLAGS AS 'zAssetAnalyState-Worker Flags',
+ zAssetAnalyState.ZWORKERTYPE AS 'zAssetAnalyState-Worker Type',
+ DateTime(zAssetAnalyState.ZIGNOREUNTILDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Ignore Until Date',
+ DateTime(zAssetAnalyState.ZLASTIGNOREDDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Last Ignored Date',
+ DateTime(zAssetAnalyState.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Sort Token',
+ zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES AS 'zMedAnlyAstAttr-Character Recognition Attr',
+ zCharRecogAttr.ZALGORITHMVERSION AS 'zCharRecogAttr-Algorithm Version',
+ zCharRecogAttr.ZADJUSTMENTVERSION AS 'zCharRecogAttr-Adjustment Version',
+ zMedAnlyAstAttr.ZVISUALSEARCHATTRIBUTES AS 'zMedAnlyAstAttr-Visual Search Attributes',
+ zVisualSearchAttr.ZALGORITHMVERSION AS 'zVisualSearchAttr-Algorithm Version',
+ zVisualSearchAttr.ZADJUSTMENTVERSION AS 'zVisualSearchAttr-Adjustment Version',
+ zVisualSearchAttr.ZSTICKERCONFIDENCEALGORITHMVERSION AS 'zVisualSearchAttr - Sticker Confidence Algorithm Version',
+ zVisualSearchAttr.ZSTICKERCONFIDENCESCORE AS 'zVisualSearchAttr - Sticker Confidence Score',
+ zAsset.ZSTICKERCONFIDENCESCORE AS 'zAsset-Sticker Confidence Score',
+ zAsset.ZOVERALLAESTHETICSCORE AS 'zAsset-Overall Aesthetic Score',
+ zCompAssetAttr.ZBEHAVIORALSCORE AS 'zCompAssetAttr-Behavioral Score',
+ zCompAssetAttr.ZFAILURESCORE AS 'zCompAssetAttr-Failure Score zCompAssetAttr',
+ zCompAssetAttr.ZHARMONIOUSCOLORSCORE AS 'zCompAssetAttr-Harmonious Color Score',
+ zCompAssetAttr.ZIMMERSIVENESSSCORE AS 'zCompAssetAttr-Immersiveness Score',
+ zCompAssetAttr.ZINTERACTIONSCORE AS 'zCompAssetAttr-Interaction Score',
+ zCompAssetAttr.ZINTERESTINGSUBJECTSCORE AS 'zCompAssetAttr-Intersting Subject Score',
+ zCompAssetAttr.ZINTRUSIVEOBJECTPRESENCESCORE AS 'zCompAssetAttr-Intrusive Object Presence Score',
+ zCompAssetAttr.ZLIVELYCOLORSCORE AS 'zCompAssetAttr-Lively Color Score',
+ zCompAssetAttr.ZLOWLIGHT AS 'zCompAssetAttr-Low Light',
+ zCompAssetAttr.ZNOISESCORE AS 'zCompAssetAttr-Noise Score',
+ zCompAssetAttr.ZPLEASANTCAMERATILTSCORE AS 'zCompAssetAttr-Pleasant Camera Tilt Score',
+ zCompAssetAttr.ZPLEASANTCOMPOSITIONSCORE AS 'zCompAssetAttr-Pleasant Composition Score',
+ zCompAssetAttr.ZPLEASANTLIGHTINGSCORE AS 'zCompAssetAttr-Pleasant Lighting Score',
+ zCompAssetAttr.ZPLEASANTPATTERNSCORE AS 'zCompAssetAttr-Pleasant Pattern Score',
+ zCompAssetAttr.ZPLEASANTPERSPECTIVESCORE AS 'zCompAssetAttr-Pleasant Perspective Score',
+ zCompAssetAttr.ZPLEASANTPOSTPROCESSINGSCORE AS 'zCompAssetAttr-Pleasant Post Processing Score',
+ zCompAssetAttr.ZPLEASANTREFLECTIONSSCORE AS 'zCompAssetAttr-Pleasant Reflection Score',
+ zCompAssetAttr.ZPLEASANTSYMMETRYSCORE AS 'zCompAssetAttrPleasant Symmetry Score',
+ zCompAssetAttr.ZSHARPLYFOCUSEDSUBJECTSCORE AS 'zCompAssetAttr-Sharply Focused Subject Score',
+ zCompAssetAttr.ZTASTEFULLYBLURREDSCORE AS 'zCompAssetAttr-Tastfully Blurred Score',
+ zCompAssetAttr.ZWELLCHOSENSUBJECTSCORE AS 'zCompAssetAttr-Well Chosen Subject Score',
+ zCompAssetAttr.ZWELLFRAMEDSUBJECTSCORE AS 'zCompAssetAttr-Well Framed Subject Score',
+ zCompAssetAttr.ZWELLTIMEDSHOTSCORE AS 'zCompAssetAttr-Well Timeed Shot Score',
+ zCldRes.ZASSETUUID AS 'zCldRes-Asset UUID-4TableStart',
+ zCldRes.ZCLOUDLOCALSTATE AS 'zCldRes-Cloud Local State',
+ zCldRes.ZFILESIZE AS 'zCldRes-File Size',
+ zCldRes.ZHEIGHT AS 'zCldRes-Height',
+ zCldRes.ZISAVAILABLE AS 'zCldRes-Is Available',
+ zCldRes.ZISLOCALLYAVAILABLE AS 'zCldRes-Is Locally Available',
+ zCldRes.ZPREFETCHCOUNT AS 'zCldRes-Prefetch Count',
+ zCldRes.ZSOURCETYPE AS 'zCldRes-Source Type',
+ zCldRes.ZTYPE AS 'zCldRes-Type',
+ zCldRes.ZWIDTH AS 'zCldRes-Width',
+ zCldRes.ZDATECREATED AS 'zCldRes-Date Created',
+ zCldRes.ZLASTONDEMANDDOWNLOADDATE AS 'zCldRes-Last OnDemand Download Date',
+ zCldRes.ZLASTPREFETCHDATE AS 'zCldRes-Last Prefetch Date',
+ zCldRes.ZPRUNEDAT AS 'zCldRes-Prunedat',
+ zCldRes.ZFILEPATH AS 'zCldRes-File Path',
+ zCldRes.ZFINGERPRINT AS 'zCldRes-Fingerprint',
+ zCldRes.ZITEMIDENTIFIER AS 'zCldRes-Item ID',
+ zCldRes.ZUNIFORMTYPEIDENTIFIER AS 'zCldRes-UniID',
+ zUserFeedback.ZUUID AS 'zUserFeedback-UUID-4TableStart',
+ zUserFeedback.ZFEATURE AS 'zUserFeedback-Feature',
+ zUserFeedback.ZTYPE AS 'zUserFeedback-Type',
+ zUserFeedback.ZLASTMODIFIEDDATE AS 'zUserFeedback-Last Modified Date',
+ zUserFeedback.ZCONTEXT AS 'zUserFeedback-Context',
+ zUserFeedback.ZCLOUDLOCALSTATE AS 'zUserFeedback-Cloud Local State',
+ zUserFeedback.ZCLOUDDELETESTATE AS 'zUserFeedback-Cloud Delete State',
+ zUserFeedback.ZCREATIONTYPE AS 'zUserFeedback - Creation Type',
+ zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
+ zAddAssetAttr.Z_ENT AS 'zAddAssetAttr-zENT',
+ zAddAssetAttr.Z_OPT AS 'ZAddAssetAttr-zOPT',
+ zAddAssetAttr.ZASSET AS 'zAddAssetAttr-zAsset= zAsset_zPK',
+ zAddAssetAttr.ZUNMANAGEDADJUSTMENT AS 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK',
+ zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint',
+ zAddAssetAttr.ZPUBLICGLOBALUUID AS 'zAddAssetAttr-Public Global UUID',
+ zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier',
+ zAddAssetAttr.ZORIGINALASSETSUUID AS 'zAddAssetAttr-Original Assets UUID',
+ zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID',
+ zAddAssetAttr.ZORIGINATINGASSETIDENTIFIER AS 'zAddAssetAttr-Originating Asset Identifier',
+ zAddAssetAttr.ZADJUSTEDFINGERPRINT AS 'zAddAssetAttr.Adjusted Fingerprint',
+ zAlbumList.Z_PK AS 'zAlbumList-zPK= Album List Key',
+ zAlbumList.Z_ENT AS 'zAlbumList-zENT',
+ zAlbumList.Z_OPT AS 'zAlbumList-zOPT',
+ zAlbumList.ZIDENTIFIER AS 'zAlbumList-ID Key',
+ zAlbumList.ZUUID AS 'zAlbumList-UUID',
+ zAsset.Z_PK AS 'zAsset-zPK',
+ zAsset.Z_ENT AS 'zAsset-zENT',
+ zAsset.Z_OPT AS 'zAsset-zOPT',
+ zAsset.ZMASTER AS 'zAsset-Master= zCldMast-zPK',
+ zAsset.ZEXTENDEDATTRIBUTES AS 'zAsset-Extended Attributes= zExtAttr-zPK',
+ zAsset.ZIMPORTSESSION AS 'zAsset-Import Session Key',
+ zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK',
+ zAsset.ZPHOTOANALYSISATTRIBUTES AS 'zAsset-Photo Analysis Attributes Key',
+ zAsset.ZCLOUDFEEDASSETSENTRY AS 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK',
+ zAsset.Z_FOK_CLOUDFEEDASSETSENTRY AS 'zAsset-FOK-Cloud Feed Asset Entry Key',
+ zAsset.ZMOMENTSHARE AS 'zAsset-Moment Share Key= zShare-zPK',
+ zAsset.ZMOMENT AS 'zAsset-zMoment Key= zMoment-zPK',
+ zAsset.ZCOMPUTEDATTRIBUTES AS 'zAsset-Computed Attributes Asset Key',
+ zAsset.ZHIGHLIGHTBEINGASSETS AS 'zAsset-Highlight Being Assets-HBA Key',
+ zAsset.ZHIGHLIGHTBEINGEXTENDEDASSETS AS 'zAsset-Highlight Being Extended Assets-HBEA Key',
+ zAsset.ZHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Highlight Being Key Asset Private-HBKAP Key',
+ zAsset.ZHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Highlight Being Key Asset Shared-HBKAS Key',
+ zAsset.ZHIGHLIGHTBEINGSUMMARYASSETS AS 'zAsset-Highligh Being Summary Assets-HBSA Key',
+ zAsset.ZDAYGROUPHIGHLIGHTBEINGASSETS AS 'zAsset-Day Group Highlight Being Assets-DGHBA Key',
+ zAsset.ZDAYGROUPHIGHLIGHTBEINGEXTENDEDASSETS AS 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key',
+ zAsset.ZDAYGROUPHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key',
+ zAsset.ZDAYGROUPHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key',
+ zAsset.ZDAYGROUPHIGHLIGHTBEINGSUMMARYASSETS AS 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key',
+ zAsset.ZMONTHHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key',
+ zAsset.ZMONTHHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key',
+ zAsset.ZYEARHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key',
+ zAsset.ZYEARHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key',
+ zAsset.ZPROMOTIONSCORE AS 'zAsset-Promotion Score',
+ zAsset.ZICONICSCORE AS 'zAsset-Iconic Score',
+ zAsset.ZMEDIAANALYSISATTRIBUTES AS 'zAsset-Media Analysis Attributes Key',
+ zAsset.ZMEDIAGROUPUUID AS 'zAsset-Media Group UUID',
+ zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
+ zAsset.ZCLOUDASSETGUID AS 'zAsset-Cloud_Asset_GUID = store.cloudphotodb',
+ zAsset.ZCLOUDCOLLECTIONGUID AS 'zAsset.Cloud Collection GUID',
+ zAsset.ZAVALANCHEUUID AS 'zAsset-Avalanche UUID',
+ zAssetAnalyState.Z_PK AS 'zAssetAnalyState-zPK',
+ zAssetAnalyState.Z_ENT AS 'zAssetAnalyState-zEnt',
+ zAssetAnalyState.Z_OPT AS 'zAssetAnalyState-zOpt',
+ zAssetAnalyState.ZASSET AS 'zAssetAnalyState-Asset= zAsset-zPK',
+ zAssetAnalyState.ZASSETUUID AS 'zAssetAnalyState-Asset UUID',
+ zAssetContrib.Z_PK AS 'zAsstContrib-zPK',
+ zAssetContrib.Z_ENT AS 'zAsstContrib-zEnt',
+ zAssetContrib.Z_OPT AS 'zAsstContrib-zOpt',
+ zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS AS 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK',
+ zAssetContrib.ZPARTICIPANT AS 'zAsstContrib-Participant= zSharePartic-zPK',
+ zAssetDes.Z_PK AS 'zAssetDes-zPK',
+ zAssetDes.Z_ENT AS 'zAssetDes-zENT',
+ zAssetDes.Z_OPT AS 'zAssetDes-zOPT',
+ zAssetDes.ZASSETATTRIBUTES AS 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK',
+ zCharRecogAttr.Z_PK AS 'zCharRecogAttr-zPK',
+ zCharRecogAttr.Z_ENT AS 'zCharRecogAttr-zENT',
+ zCharRecogAttr.Z_OPT AS 'zCharRecogAttr-zOPT',
+ zCharRecogAttr.ZMEDIAANALYSISASSETATTRIBUTES AS 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK',
+ zCldFeedEnt.Z_PK AS 'zCldFeedEnt-zPK= zCldShared keys',
+ zCldFeedEnt.Z_ENT AS 'zCldFeedEnt-zENT',
+ zCldFeedEnt.Z_OPT AS 'zCldFeedEnt-zOPT',
+ zCldFeedEnt.ZENTRYALBUMGUID AS 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID',
+ zCldFeedEnt.ZENTRYINVITATIONRECORDGUID AS 'zCldFeedEnt-Entry Invitation Record GUID',
+ zCldFeedEnt.ZENTRYCLOUDASSETGUID AS 'zCldFeedEnt-Entry Cloud Asset GUID',
+ zCldMast.Z_PK AS 'zCldMast-zPK= zAsset-Master',
+ zCldMast.Z_ENT AS 'zCldMast-zENT',
+ zCldMast.Z_OPT AS 'zCldMast-zOPT',
+ zCldMast.ZMOMENTSHARE AS 'zCldMast-Moment Share Key= zShare-zPK',
+ zCldMast.ZCLOUDMASTERGUID AS 'zCldMast-Cloud_Master_GUID = store.cloudphotodb',
+ zCldMast.ZORIGINATINGASSETIDENTIFIER AS 'zCldMast-Originating Asset ID',
+ zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting',
+ CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key',
+ CMzCldMastMedData.Z_ENT AS 'CMzCldMastMedData-zENT',
+ CMzCldMastMedData.Z_OPT AS 'CMzCldMastMedData-zOPT',
+ CMzCldMastMedData.ZCLOUDMASTER AS 'CMzCldMastMedData-CldMast= zCldMast-zPK',
+ AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData',
+ AAAzCldMastMedData.Z_ENT AS 'AAAzCldMastMedData-zENT',
+ AAAzCldMastMedData.Z_OPT AS 'AAAzCldMastMedData-zOPT',
+ AAAzCldMastMedData.ZCLOUDMASTER AS 'AAAzCldMastMedData-CldMast key',
+ AAAzCldMastMedData.ZADDITIONALASSETATTRIBUTES AS 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK',
+ zCldRes.Z_PK AS 'zCldRes-zPK',
+ zCldRes.Z_ENT AS 'zCldRes-zENT',
+ zCldRes.Z_OPT AS 'zCldRes-zOPT',
+ zCldRes.ZASSET AS 'zCldRes-Asset= zAsset-zPK',
+ zCldRes.ZCLOUDMASTER AS 'zCldRes-Cloud Master= zCldMast-zPK',
+ zCldRes.ZASSETUUID AS 'zCldRes-Asset UUID',
+ zCldShareAlbumInvRec.Z_PK AS 'zCldShareAlbumInvRec-zPK',
+ zCldShareAlbumInvRec.Z_ENT AS 'zCldShareAlbumInvRec-zEnt',
+ zCldShareAlbumInvRec.Z_OPT AS 'zCldShareAlbumInvRec-zOpt',
+ zCldShareAlbumInvRec.ZALBUM AS 'zCldShareAlbumInvRec-Album Key',
+ zCldShareAlbumInvRec.Z_FOK_ALBUM AS 'zCldShareAlbumInvRec-FOK Album Key',
+ zCldShareAlbumInvRec.ZALBUMGUID AS 'zCldShareAlbumInvRec-Album GUID',
+ zCldShareAlbumInvRec.ZUUID AS 'zCldShareAlbumInvRec-zUUID',
+ zCldShareAlbumInvRec.ZCLOUDGUID AS 'zCldShareAlbumInvRec-Cloud GUID',
+ zCldSharedComment.Z_PK AS 'zCldSharedComment-zPK',
+ zCldSharedComment.Z_ENT AS 'zCldSharedComment-zENT',
+ zCldSharedComment.Z_OPT AS 'zCldSharedComment-zOPT',
+ zCldSharedComment.ZCOMMENTEDASSET AS 'zCldSharedComment-Commented Asset Key= zAsset-zPK',
+ zCldSharedComment.ZCLOUDFEEDCOMMENTENTRY AS 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK',
+ zCldSharedComment.Z_FOK_CLOUDFEEDCOMMENTENTRY AS 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key',
+ zCldSharedCommentLiked.ZLIKEDASSET AS 'zCldSharedComment-Liked Asset Key= zAsset-zPK',
+ zCldSharedCommentLiked.ZCLOUDFEEDLIKECOMMENTENTRY AS 'zCldSharedComment-CldFeedLikeCommentEntry Key',
+ zCldSharedCommentLiked.Z_FOK_CLOUDFEEDLIKECOMMENTENTRY AS 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key',
+ zCldSharedComment.ZCLOUDGUID AS 'zCldSharedComment-Cloud GUID',
+ zCompAssetAttr.Z_PK AS 'zCompAssetAttr-zPK',
+ zCompAssetAttr.Z_ENT AS 'zCompAssetAttr-zEnt',
+ zCompAssetAttr.Z_OPT AS 'zCompAssetAttr-zOpt',
+ zCompAssetAttr.ZASSET AS 'zCompAssetAttr-Asset Key',
+ zDetFace.Z_PK AS 'zDetFace-zPK',
+ zDetFace.Z_ENT AS 'zDetFace-zEnt',
+ zDetFace.Z_OPT AS 'zDetFace.zOpt',
+ zDetFace.ZASSETFORFACE AS 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face',
+ zDetFace.ZPERSONFORFACE AS 'zDetFace-PersonForFace= zPerson-zPK',
+ zDetFace.ZPERSONBEINGKEYFACE AS 'zDetFace-Person Being Key Face',
+ zDetFace.ZFACEPRINT AS 'zDetFace-Face Print',
+ zDetFace.ZFACEGROUPBEINGKEYFACE AS 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK',
+ zDetFace.ZFACEGROUP AS 'zDetFace-FaceGroup= zDetFaceGroup-zPK',
+ zDetFace.ZUUID AS 'zDetFace-UUID',
+ zDetFaceGroup.Z_PK AS 'zDetFaceGroup-zPK',
+ zDetFaceGroup.Z_ENT AS 'zDetFaceGroup-zENT',
+ zDetFaceGroup.Z_OPT AS 'zDetFaceGroup-zOPT',
+ zDetFaceGroup.ZASSOCIATEDPERSON AS 'zDetFaceGroup-AssocPerson= zPerson-zPK',
+ zDetFaceGroup.ZKEYFACE AS 'zDetFaceGroup-KeyFace= zDetFace-zPK',
+ zDetFaceGroup.ZUUID AS 'zDetFaceGroup-UUID',
+ zDetFacePrint.Z_PK AS 'zDetFacePrint-zPK',
+ zDetFacePrint.Z_ENT AS 'zDetFacePrint-zEnt',
+ zDetFacePrint.Z_OPT AS 'zDetFacePrint-zOpt',
+ zDetFacePrint.ZFACE AS 'zDetFacePrint-Face Key',
+ zExtAttr.Z_PK AS 'zExtAttr-zPK= zAsset-zExtendedAttributes',
+ zExtAttr.Z_ENT AS 'zExtAttr-zENT',
+ zExtAttr.Z_OPT AS 'zExtAttr-zOPT',
+ zExtAttr.ZASSET AS 'zExtAttr-Asset Key',
+ zFaceCrop.Z_PK AS 'zFaceCrop-zPK',
+ zFaceCrop.Z_ENT AS 'zFaceCrop-zEnt',
+ zFaceCrop.Z_OPT AS 'zFaceCrop-zOpt',
+ zFaceCrop.ZASSET AS 'zFaceCrop-Asset Key',
+ zFaceCrop.ZINVALIDMERGECANDIDATEPERSONUUID AS 'zFaceCrop-Invalid Merge Canidate Person UUID',
+ zFaceCrop.ZPERSON AS 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key',
+ zFaceCrop.ZFACE AS 'zFaceCrop-Face Key',
+ zFaceCrop.ZUUID AS 'zFaceCrop-UUID',
+ zGenAlbum.Z_PK AS 'zGenAlbum-zPK=26AlbumLists= 26Albums',
+ zGenAlbum.Z_ENT AS 'zGenAlbum-zENT',
+ zGenAlbum.Z_OPT AS 'zGenAlbum-zOpt',
+ zGenAlbum.ZKEYASSET AS 'zGenAlbum-Key Asset-Key zAsset-zPK',
+ zGenAlbum.ZSECONDARYKEYASSET AS 'zGenAlbum-Secondary Key Asset',
+ zGenAlbum.ZTERTIARYKEYASSET AS 'zGenAlbum-Tertiary Key Asset',
+ zGenAlbum.ZCUSTOMKEYASSET AS 'zGenAlbum-Custom Key Asset',
+ zGenAlbum.ZPARENTFOLDER AS 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK',
+ zGenAlbum.Z_FOK_PARENTFOLDER AS 'zGenAlbum-FOK Parent Folder',
+ zGenAlbum.ZSYNDICATE AS 'zGenAlbum-zSyndicate',
+ zGenAlbum.ZUUID AS 'zGenAlbum-UUID',
+ SWYConverszGenAlbum.ZUUID AS 'SWYConverszGenAlbum-UUID',
+ zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud_GUID = store.cloudphotodb',
+ SWYConverszGenAlbum.ZCLOUDGUID AS 'SWYConverszGenAlbum-Cloud GUID',
+ zGenAlbum.ZPROJECTRENDERUUID AS 'zGenAlbum-Project Render UUID',
+ SWYConverszGenAlbum.ZPROJECTRENDERUUID AS 'SWYConverszGenAlbum-Project Render UUID',
+ zIntResou.Z_PK AS 'zIntResou-zPK',
+ zIntResou.Z_ENT AS 'zIntResou-zENT',
+ zIntResou.Z_OPT AS 'zIntResou-zOPT',
+ zIntResou.ZASSET AS 'zIntResou-Asset= zAsset_zPK',
+ zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint',
+ zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type',
+ zMedAnlyAstAttr.Z_PK AS 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata',
+ zMedAnlyAstAttr.Z_ENT AS 'zMedAnlyAstAttr-zEnt',
+ zMedAnlyAstAttr.Z_OPT AS 'zMedAnlyAstAttr-zOpt',
+ zMedAnlyAstAttr.ZASSET AS 'zMedAnlyAstAttr-Asset= zAsset-zPK',
+ zMemory.Z_PK AS 'zMemory-zPK',
+ zMemory.Z_ENT AS 'zMemory-zENT',
+ zMemory.Z_OPT AS 'zMemory-zOPT',
+ zMemory.ZKEYASSET AS 'zMemory-Key Asset= zAsset-zPK',
+ zMemory.ZUUID AS 'zMemory-UUID',
+ zMoment.Z_PK AS 'zMoment-zPK',
+ zMoment.Z_ENT AS 'zMoment-zENT',
+ zMoment.Z_OPT AS 'zMoment-zOPT',
+ zMoment.ZHIGHLIGHT AS 'zMoment-Highlight Key',
+ zMoment.ZUUID AS 'zMoment-UUID',
+ zPerson.Z_PK AS 'zPerson-zPK=zDetFace-Person',
+ zPerson.Z_ENT AS 'zPerson-zEnt',
+ zPerson.Z_OPT AS 'zPerson-zOpt',
+ zPerson.ZSHAREPARTICIPANT AS 'zPerson-Share Participant= zSharePartic-zPK',
+ zPerson.ZKEYFACE AS 'zPerson-KeyFace=zDetFace-zPK',
+ zPerson.ZASSOCIATEDFACEGROUP AS 'zPerson-Assoc Face Group Key',
+ zPerson.ZPERSONUUID AS 'zPerson-Person UUID',
+ zPhotoAnalysisAssetAttr.Z_PK AS 'zPhotoAnalysisAssetAttr-zPK',
+ zPhotoAnalysisAssetAttr.Z_ENT AS 'zPhotoAnalysisAssetAttr-zEnt',
+ zPhotoAnalysisAssetAttr.Z_OPT AS 'zPhotoAnalysisAssetAttr-zOpt',
+ zPhotoAnalysisAssetAttr.ZASSET AS 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK',
+ zSceneP.Z_PK AS 'zSceneP-zPK',
+ zSceneP.Z_ENT AS 'zSceneP-zENT',
+ zSceneP.Z_OPT AS 'zSceneP-zOPT',
+ zShare.Z_PK AS 'zShare-zPK',
+ zShare.Z_ENT AS 'zShare-zENT',
+ zShare.Z_OPT AS 'zShare-zOPT',
+ zShare.ZUUID AS 'zShare-UUID',
+ SPLzShare.ZUUID AS 'SPLzShare-UUID',
+ zShare.ZSCOPEIDENTIFIER AS 'zShare-Scope ID = store.cloudphotodb',
+ zSharePartic.Z_PK AS 'zSharePartic-zPK',
+ zSharePartic.Z_ENT AS 'zSharePartic-zENT',
+ zSharePartic.Z_OPT AS 'zSharePartic-zOPT',
+ zSharePartic.ZSHARE AS 'zSharePartic-Share Key= zShare-zPK',
+ zSharePartic.ZPERSON AS 'zSharePartic-Person= zPerson-zPK',
+ zSharePartic.ZUUID AS 'zSharePartic-UUID',
+ SBKAzSugg.Z_PK AS 'SBKAzSugg-zPK',
+ SBKAzSugg.Z_ENT AS 'SBKAzSugg-zENT',
+ SBKAzSugg.Z_OPT AS 'SBKAzSugg-zOPT',
+ SBKAzSugg.ZUUID AS 'SBKAzSugg-UUID',
+ SBRAzSugg.Z_PK AS 'SBRAzSugg-zPK',
+ SBRAzSugg.Z_ENT AS 'SBRAzSugg-zENT',
+ SBRAzSugg.Z_OPT AS 'SBRAzSugg-zOPT',
+ SBRAzSugg.ZUUID AS 'SBRAzSugg-UUID',
+ z3SuggBRA.Z_3REPRESENTATIVEASSETS1 AS 'z3SuggBRA-3RepAssets1',
+ z3SuggBRA.Z_59SUGGESTIONSBEINGREPRESENTATIVEASSETS AS 'z3SuggBRA-59SuggBeingRepAssets',
+ z3SuggBKA.Z_59SUGGESTIONSBEINGKEYASSETS AS 'z3SuggBKA-59SuggBeingKeyAssets= zSugg-zPK',
+ z3SuggBKA.Z_3KEYASSETS AS 'z3SuggBKA-3KeyAssets= zAsset-zPK',
+ zUnmAdj.Z_PK AS 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key',
+ zUnmAdj.Z_OPT AS 'zUnmAdj-zOPT',
+ zUnmAdj.Z_ENT AS 'zUnmAdj-zENT',
+ zUnmAdj.ZASSETATTRIBUTES AS 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK',
+ zUnmAdj.ZUUID AS 'zUnmAdj-UUID',
+ zUnmAdj.ZOTHERADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Other Adjustments Fingerprint',
+ zUnmAdj.ZSIMILARTOORIGINALADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Similar to Orig Adjustments Fingerprint',
+ zUserFeedback.Z_PK AS 'zUserFeedback-zPK',
+ zUserFeedback.Z_ENT AS 'zUserFeedback-zENT',
+ zUserFeedback.Z_OPT AS 'zUserFeedback-zOPT',
+ zUserFeedback.ZPERSON AS 'zUserFeedback-Person= zPerson-zPK',
+ zUserFeedback.ZMEMORY AS 'zUserFeedback-Memory= zMemory-zPK',
+ zUserFeedback.ZUUID AS 'zUserFeedback-UUID',
+ zVisualSearchAttr.Z_PK AS 'zVisualSearchAttr-zPK',
+ zVisualSearchAttr.Z_ENT AS 'zVisualSearchAttr-zENT',
+ zVisualSearchAttr.Z_OPT AS 'zVisualSearchAttr-zOPT',
+ zVisualSearchAttr.ZMEDIAANALYSISASSETATTRIBUTES AS 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK',
+ z28AlbumLists.Z_28ALBUMS AS 'z28AlbumList-28Albums= zGenAlbum-zPK',
+ z28AlbumLists.Z_2ALBUMLISTS AS 'z28AlbumList-Album List Key',
+ z28AlbumLists.Z_FOK_28ALBUMS AS 'z28AlbumList-FOK28Albums Key',
+ z29Assets.Z_29ALBUMS AS 'z29Assets-29Albums= zGenAlbum-zPK',
+ z29Assets.Z_3ASSETS AS 'z29Assets-3Asset Key= zAsset-zPK in the Album',
+ z29Assets.Z_FOK_3ASSETS AS 'z29Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY',
+ z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AS 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK',
+ z3MemoryBCAs.Z_3CURATEDASSETS AS 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK',
+ z3MemoryBCAs.Z_45MEMORIESBEINGCURATEDASSETS AS 'z3MemoryBCAs-45MemoriesBeingCuratedAssets= zMemory-zPK',
+ z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK',
+ z3MemoryBECAs.Z_45MEMORIESBEINGEXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-45MemoriesBeingExtCuratedAssets= zMemory-zPK',
+ z3MemoryBRAs.Z_3REPRESENTATIVEASSETS AS 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK',
+ z3MemoryBRAs.Z_45MEMORIESBEINGREPRESENTATIVEASSETS AS 'z3MemoryBRAs-45RepresentativeAssets= zMemory-zPK',
+ z3MemoryBUCAs.Z_3USERCURATEDASSETS AS 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK',
+ z3MemoryBUCAs.Z_45MEMORIESBEINGUSERCURATEDASSETS AS 'z3MemoryBUCAs-45MemoriesBeingUserCuratedAssets= zMemory-zPK',
+ z3MemoryBCUAs.Z_45MEMORIESBEINGCUSTOMUSERASSETS AS 'z3MemoryBCAs-45Memories Being Custom User Assets',
+ z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AS 'z3MemoryBCAs-3Custom User Assets',
+ z3MemoryBCUAs.Z_FOK_3CUSTOMUSERASSETS AS 'z3MemoryBCAs-FOK-3Custom User Assets'
+ FROM ZASSET zAsset
+ LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
+ LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES
+ LEFT JOIN ZINTERNALRESOURCE zIntResou ON zIntResou.ZASSET = zAsset.Z_PK
+ LEFT JOIN ZSCENEPRINT zSceneP ON zSceneP.Z_PK = zAddAssetAttr.ZSCENEPRINT
+ LEFT JOIN Z_29ASSETS z29Assets ON z29Assets.Z_3ASSETS = zAsset.Z_PK
+ LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z29Assets.Z_29ALBUMS
+ LEFT JOIN ZUNMANAGEDADJUSTMENT zUnmAdj ON zAddAssetAttr.ZUNMANAGEDADJUSTMENT = zUnmAdj.Z_PK
+ LEFT JOIN Z_28ALBUMLISTS z28AlbumLists ON z28AlbumLists.Z_28ALBUMS = zGenAlbum.Z_PK
+ LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z28AlbumLists.Z_2ALBUMLISTS
+ LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER
+ LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION
+ LEFT JOIN ZASSETDESCRIPTION zAssetDes ON zAssetDes.Z_PK = zAddAssetAttr.ZASSETDESCRIPTION
+ LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
+ LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA
+ LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
+ LEFT JOIN ZCLOUDRESOURCE zCldRes ON zCldRes.ZCLOUDMASTER = zCldMast.Z_PK
+ LEFT JOIN ZASSETANALYSISSTATE zAssetAnalyState ON zAssetAnalyState.ZASSET = zAsset.Z_PK
+ LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK
+ LEFT JOIN ZPHOTOANALYSISASSETATTRIBUTES zPhotoAnalysisAssetAttr ON zPhotoAnalysisAssetAttr.ZASSET = zAsset.Z_PK
+ LEFT JOIN ZCOMPUTEDASSETATTRIBUTES zCompAssetAttr ON zCompAssetAttr.Z_PK = zAsset.ZCOMPUTEDATTRIBUTES
+ LEFT JOIN ZCHARACTERRECOGNITIONATTRIBUTES zCharRecogAttr ON zCharRecogAttr.Z_PK = zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES
+ LEFT JOIN ZVISUALSEARCHATTRIBUTES zVisualSearchAttr ON zVisualSearchAttr.Z_PK = zMedAnlyAstAttr.ZVISUALSEARCHATTRIBUTES
+ LEFT JOIN ZCLOUDFEEDENTRY zCldFeedEnt ON zAsset.ZCLOUDFEEDASSETSENTRY = zCldFeedEnt.Z_PK
+ LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedComment ON zAsset.Z_PK = zCldSharedComment.ZCOMMENTEDASSET
+ LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedCommentLiked ON zAsset.Z_PK = zCldSharedCommentLiked.ZLIKEDASSET
+ LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON zGenAlbum.Z_PK = zCldShareAlbumInvRec.ZALBUM
+ LEFT JOIN ZSHARE SPLzShare ON SPLzShare.Z_PK = zAsset.ZLIBRARYSCOPE
+ LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.ZSHARE = SPLzShare.Z_PK
+ LEFT JOIN ZSHARE zShare ON zShare.Z_PK = zAsset.ZMOMENTSHARE
+ LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK
+ LEFT JOIN ZASSETCONTRIBUTOR zAssetContrib ON zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS = zAsset.Z_PK
+ LEFT JOIN ZDETECTEDFACE zDetFace ON zAsset.Z_PK = zDetFace.ZASSETFORFACE
+ LEFT JOIN ZPERSON zPerson ON zPerson.Z_PK = zDetFace.ZPERSONFORFACE
+ LEFT JOIN ZDETECTEDFACEPRINT zDetFacePrint ON zDetFacePrint.ZFACE = zDetFace.Z_PK
+ LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON
+ LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP
+ LEFT JOIN Z_3MEMORIESBEINGCURATEDASSETS z3MemoryBCAs ON zAsset.Z_PK = z3MemoryBCAs.Z_3CURATEDASSETS
+ LEFT JOIN ZMEMORY zMemory ON z3MemoryBCAs.Z_45MEMORIESBEINGCURATEDASSETS = zMemory.Z_PK
+ LEFT JOIN Z_3MEMORIESBEINGCUSTOMUSERASSETS z3MemoryBCUAs ON zAsset.Z_PK = z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AND z3MemoryBCUAs.Z_45MEMORIESBEINGCUSTOMUSERASSETS = zMemory.Z_PK
+ LEFT JOIN Z_3MEMORIESBEINGEXTENDEDCURATEDASSETS z3MemoryBECAs ON zAsset.Z_PK = z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AND z3MemoryBECAs.Z_45MEMORIESBEINGEXTENDEDCURATEDASSETS = zMemory.Z_PK
+ LEFT JOIN Z_3MEMORIESBEINGMOVIECURATEDASSETS z3MemoryBMCAs ON zAsset.Z_PK = z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AND z3MemoryBMCAs.Z_45MEMORIESBEINGMOVIECURATEDASSETS = zMemory.Z_PK
+ LEFT JOIN Z_3MEMORIESBEINGREPRESENTATIVEASSETS z3MemoryBRAs ON zAsset.Z_PK = z3MemoryBRAs.Z_3REPRESENTATIVEASSETS AND z3MemoryBRAs.Z_45MEMORIESBEINGREPRESENTATIVEASSETS = zMemory.Z_PK
+ LEFT JOIN Z_3MEMORIESBEINGUSERCURATEDASSETS z3MemoryBUCAs ON zAsset.Z_PK = z3MemoryBUCAs.Z_3USERCURATEDASSETS AND z3MemoryBUCAs.Z_45MEMORIESBEINGUSERCURATEDASSETS = zMemory.Z_PK
+ LEFT JOIN ZUSERFEEDBACK zUserFeedback ON zUserFeedback.ZMEMORY = zMemory.Z_PK
+ LEFT JOIN ZMOMENT zMoment ON zMoment.Z_PK = zAsset.ZMOMENT
+ LEFT JOIN Z_3SUGGESTIONSBEINGKEYASSETS z3SuggBKA ON z3SuggBKA.Z_3KEYASSETS = zAsset.Z_PK
+ LEFT JOIN ZSUGGESTION SBKAzSugg ON SBKAzSugg.Z_PK = z3SuggBKA.Z_59SUGGESTIONSBEINGKEYASSETS
+ LEFT JOIN Z_3SUGGESTIONSBEINGREPRESENTATIVEASSETS z3SuggBRA ON z3SuggBRA.Z_3REPRESENTATIVEASSETS1 = zAsset.Z_PK
+ LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_59SUGGESTIONSBEINGREPRESENTATIVEASSETS
+ ORDER BY zAsset.ZADDEDDATE
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
+ row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
+ row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
+ row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
+ row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
+ row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
+ row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
+ row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
+ row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
+ row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
+ row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
+ row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
+ row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
+ row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
+ row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
+ row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
+ row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
+ row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
+ row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
+ row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
+ row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307],
+ row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315],
+ row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323],
+ row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331],
+ row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339],
+ row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347],
+ row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355],
+ row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363],
+ row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371],
+ row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379],
+ row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387],
+ row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395],
+ row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403],
+ row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411],
+ row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419],
+ row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427],
+ row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435],
+ row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443],
+ row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451],
+ row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459],
+ row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467],
+ row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475],
+ row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483],
+ row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491],
+ row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499],
+ row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507],
+ row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515],
+ row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523],
+ row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531],
+ row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539],
+ row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547],
+ row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555],
+ row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563],
+ row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571],
+ row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579],
+ row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587],
+ row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595],
+ row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603],
+ row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611],
+ row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619],
+ row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627],
+ row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635],
+ row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643],
+ row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651],
+ row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659],
+ row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667],
+ row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675],
+ row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683],
+ row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691],
+ row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699],
+ row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707],
+ row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715],
+ row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723],
+ row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731],
+ row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739],
+ row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747],
+ row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755],
+ row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763],
+ row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771],
+ row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779],
+ row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787],
+ row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795],
+ row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803],
+ row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811],
+ row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819],
+ row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827],
+ row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835],
+ row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843],
+ row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851],
+ row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859],
+ row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867],
+ row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875],
+ row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883],
+ row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891],
+ row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899],
+ row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907],
+ row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915],
+ row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923],
+ row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931],
+ row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939],
+ row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947],
+ row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955],
+ row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963],
+ row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971],
+ row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979],
+ row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987],
+ row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995],
+ row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002],
+ row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009],
+ row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016],
+ row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023],
+ row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030],
+ row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037],
+ row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044],
+ row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051],
+ row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058],
+ row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065],
+ row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072],
+ row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079],
+ row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086],
+ row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093]))
+
+ data_headers = (('zAsset-Added Date-0', 'datetime'),
+ 'zAsset- SortToken -CameraRoll-1',
+ 'zAsset Complete-2',
+ 'zAsset-zPK-4QueryStart-3',
+ 'zAddAssetAttr-zPK-4QueryStart-4',
+ 'zAsset-UUID = store.cloudphotodb-4QueryStart-5',
+ 'zAddAssetAttr-Master Fingerprint-4TableStart-6',
+ 'zIntResou-Fingerprint-4TableStart-7',
+ 'zAsset-Bundle Scope-8',
+ 'zAsset-Syndication State-9',
+ 'zAsset-Cloud is My Asset-10',
+ 'zAsset-Cloud is deletable-Asset-11',
+ 'zAsset-Cloud_Local_State-12',
+ 'zAsset-Visibility State-13',
+ 'zExtAttr-Camera Make-14',
+ 'zExtAttr-Camera Model-15',
+ 'zExtAttr-Lens Model-16',
+ 'zExtAttr-Flash Fired-17',
+ 'zExtAttr-Focal Lenght-18',
+ 'zExtAttr-Focal Lenth in 35MM-19',
+ 'zExtAttr-Digital Zoom Ratio-20',
+ 'zAsset-Derived Camera Capture Device-21',
+ 'zAddAssetAttr-Camera Captured Device-22',
+ 'zAddAssetAttr-Imported by-23',
+ 'zCldMast-Imported By-24',
+ 'zAddAssetAttr.Imported by Bundle Identifier-25',
+ 'zAddAssetAttr-Imported By Display Name-26',
+ 'zCldMast-Imported by Bundle ID-27',
+ 'zCldMast-Imported by Display Name-28',
+ 'zAsset-Saved Asset Type-29',
+ 'zAsset-Directory-Path-30',
+ 'zAsset-Filename-31',
+ 'zAddAssetAttr- Original Filename-32',
+ 'zCldMast- Original Filename-33',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-34',
+ 'zAsset-Active Library Scope Participation State -4QueryStart-35',
+ 'zAsset-Library Scope Share State- StillTesting -4QueryStart-36',
+ 'SPLzShare-Cloud Photo Count-SPL -4QueryStart-37',
+ 'SPLzShare-Cloud Video Count-SPL -4QueryStart-38',
+ ('zAddAssetAttr-Date Created Source-39', 'datetime'),
+ ('zAsset-Date Created-40', 'datetime'),
+ ('zCldMast-Creation Date-41', 'datetime'),
+ ('zIntResou-CldMst Date Created-42', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-43',
+ 'zAddAssetAttr-Time Zone Offset-44',
+ 'zAddAssetAttr-Inferred Time Zone Offset-45',
+ 'zAddAssetAttr-EXIF-String-46',
+ ('zAsset-Modification Date-47', 'datetime'),
+ ('zAddAssetAttr-Last Viewed Date-48', 'datetime'),
+ ('zAsset-Last Shared Date-49', 'datetime'),
+ 'zCldMast-Cloud Local State-50',
+ ('zCldMast-Import Date-51', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-52', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-4QueryStart-53',
+ ('zAddAssetAttr-Alt Import Image Date-54', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-55',
+ ('zAsset-Cloud Batch Publish Date-56', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-57', 'datetime'),
+ 'zAsset-Cloud Download Requests-58',
+ 'zAsset-Cloud Batch ID-59',
+ 'zAddAssetAttr-Upload Attempts-60',
+ 'zAsset-Latitude-61',
+ 'zExtAttr-Latitude-62',
+ 'zAsset-Longitude-63',
+ 'zExtAttr-Longitude-64',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-65',
+ 'zAddAssetAttr-Location Hash-66',
+ 'zAddAssetAttr-Shifted Location Valid-67',
+ 'zAddAssetAttr-Shifted Location Data-68',
+ 'zAddAssetAttr-Reverse Location Is Valid-69',
+ 'zAddAssetAttr-Reverse Location Data-70',
+ 'ParentzGenAlbum-UUID-4QueryStart-71',
+ 'zGenAlbum-UUID-4QueryStart-72',
+ 'SWYConverszGenAlbum-UUID-4QueryStart-73',
+ 'ParentzGenAlbum-Cloud GUID-4QueryStart-74',
+ 'zGenAlbum-Cloud GUID-4QueryStart-75',
+ 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-76',
+ 'zCldShareAlbumInvRec-Album GUID-4QueryStart-77',
+ 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-78',
+ 'zGenAlbum-Project Render UUID-4QueryStart-79',
+ 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-80',
+ 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-81',
+ 'zGenAlbum-Cloud_Local_State-4QueryStart-82',
+ 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-83',
+ ('ParentzGenAlbum- Creation Date- 4QueryStart-84', 'datetime'),
+ ('zGenAlbum- Creation Date- 4QueryStart-85', 'datetime'),
+ ('SWYConverszGenAlbum- Creation Date- 4QueryStart-86', 'datetime'),
+ ('zGenAlbum- Cloud Creation Date- 4QueryStart-87', 'datetime'),
+ ('SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-88', 'datetime'),
+ ('zGenAlbum- Start Date- 4QueryStart-89', 'datetime'),
+ ('SWYConverszGenAlbum- Start Date- 4QueryStart-90', 'datetime'),
+ ('zGenAlbum- End Date- 4QueryStart-91', 'datetime'),
+ ('SWYConverszGenAlbum- End Date- 4QueryStart-92', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date- 4QueryStart-93', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-94', 'datetime'),
+ 'ParentzGenAlbum- Title- 4QueryStart-95',
+ 'zGenAlbum- Title-User&System Applied- 4QueryStart-96',
+ 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-97',
+ 'zGenAlbum-Import Session ID-SWY- 4QueryStart-98',
+ 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-99',
+ 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-100',
+ 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-101',
+ 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-102',
+ 'SWYConverszGenAlbum- Syndicate-4QueryStart-103',
+ 'zGenAlbum-zENT- Entity- 4QueryStart-104',
+ 'ParentzGenAlbum- Kind- 4QueryStart-105',
+ 'zGenAlbum-Album Kind- 4QueryStart-106',
+ 'SWYConverszGenAlbum-Album Kind- 4QueryStart-107',
+ 'AAAzCldMastMedData-zOPT-108',
+ 'zAddAssetAttr-Media Metadata Type-109',
+ 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-110',
+ 'AAAzCldMastMedData-Data-111',
+ 'CldMasterzCldMastMedData-zOPT-112',
+ 'zCldMast-Media Metadata Type-113',
+ 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-114',
+ 'CMzCldMastMedData-Data-115',
+ 'zAsset-Search Index Rebuild State-116',
+ 'zAddAssetAttr-Syndication History-117',
+ 'zMedAnlyAstAttr-Syndication Processing Version-118',
+ 'zMedAnlyAstAttr-Syndication Processing Value-119',
+ 'zAsset-Orientation-120',
+ 'zAddAssetAttr-Original Orientation-121',
+ 'zAsset-Kind-122',
+ 'zAsset-Kind-Sub-Type-123',
+ 'zAddAssetAttr-Cloud Kind Sub Type-124',
+ 'zAsset-Playback Style-125',
+ 'zAsset-Playback Variation-126',
+ 'zAsset-Video Duration-127',
+ 'zExtAttr-Duration-128',
+ 'zAsset-Video CP Duration-129',
+ 'zAddAssetAttr-Video CP Duration Time Scale-130',
+ 'zAsset-Video CP Visibility State-131',
+ 'zAddAssetAttr-Video CP Display Value-132',
+ 'zAddAssetAttr-Video CP Display Time Scale-133',
+ 'zIntResou-Datastore Class ID-134',
+ 'zAsset-Cloud Placeholder Kind-135',
+ 'zIntResou-Local Availability-136',
+ 'zIntResou-Local Availability Target-137',
+ 'zIntResou-Cloud Local State-138',
+ 'zIntResou-Remote Availability-139',
+ 'zIntResou-Remote Availability Target-140',
+ 'zIntResou-Transient Cloud Master-141',
+ 'zIntResou-Side Car Index-142',
+ 'zIntResou- File ID-143',
+ 'zIntResou-Version-144',
+ 'zAddAssetAttr- Original-File-Size-145',
+ 'zIntResou-Resource Type-146',
+ 'zIntResou-Datastore Sub-Type-147',
+ 'zIntResou-Cloud Source Type-148',
+ 'zIntResou-Data Length-149',
+ 'zIntResou-Recipe ID-150',
+ ('zIntResou-Cloud Last Prefetch Date-151', 'datetime'),
+ 'zIntResou-Cloud Prefetch Count-152',
+ ('zIntResou- Cloud-Last-OnDemand Download-Date-153', 'datetime'),
+ 'zIntResou-UniformTypeID_UTI_Conformance_Hint-154',
+ 'zIntResou-Compact-UTI-155',
+ 'zAsset-Uniform Type ID-156',
+ 'zAsset-Original Color Space-157',
+ 'zCldMast-Uniform_Type_ID-158',
+ 'zCldMast-Full Size JPEG Source-159',
+ 'zAsset-HDR Gain-160',
+ 'zAsset-zHDR_Type-161',
+ 'zExtAttr-Codec-162',
+ 'zIntResou-Codec Four Char Code Name-163',
+ 'zCldMast-Codec Name-164',
+ 'zCldMast-Video Frame Rate-165',
+ 'zCldMast-Placeholder State-166',
+ 'zAsset-Depth_Type-167',
+ 'zAsset-Avalanche UUID-4TableStart-168',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-169',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-170',
+ 'zAddAssetAttr-Cloud Recovery State-171',
+ 'zAddAssetAttr-Cloud State Recovery Attempts Count-172',
+ 'zAsset-Deferred Processing Needed-173',
+ 'zAsset-Video Deferred Processing Needed-174',
+ 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-175',
+ 'zAddAssetAttr-Deferred Processing Candidate Options-176',
+ 'zAsset-Has Adjustments-Camera-Effects-Filters-177',
+ 'zUnmAdj-UUID-4TableStart-178',
+ ('zAsset-Adjustment Timestamp-179', 'datetime'),
+ ('zUnmAdj-Adjustment Timestamp-180', 'datetime'),
+ 'zAddAssetAttr-Editor Bundle ID-181',
+ 'zUnmAdj-Editor Localized Name-182',
+ 'zUnmAdj-Adjustment Format ID-183',
+ 'zAddAssetAttr-Montage-184',
+ 'zUnmAdj-Adjustment Render Types-185',
+ 'zUnmAdj-Adjustment Format Version-186',
+ 'zUnmAdj-Adjustment Base Image Format-187',
+ 'zAsset-Favorite-188',
+ 'zAsset-Hidden-189',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-190',
+ ('zAsset-Trashed Date-191', 'datetime'),
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-192',
+ 'zAsset-Delete-Reason-193',
+ 'zIntResou-Trash State-194',
+ ('zIntResou-Trashed Date-195', 'datetime'),
+ 'zAsset-Cloud Delete State-196',
+ 'zIntResou-Cloud Delete State-197',
+ 'zAddAssetAttr-PTP Trashed State-198',
+ 'zIntResou-PTP Trashed State-199',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-200',
+ ('zMedAnlyAstAttr-Media Analysis Timestamp-201', 'datetime'),
+ ('zAsset-Analysis State Modification Date-202', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-203',
+ 'zAddAssetAttr- View Count-204',
+ 'zAddAssetAttr- Pending Play Count-205',
+ 'zAddAssetAttr- Play Count-206',
+ 'zAddAssetAttr- Pending Share Count-207',
+ 'zAddAssetAttr- Share Count-208',
+ 'zAddAssetAttr-Allowed for Analysis-209',
+ 'zAddAssetAttr-Scene Analysis Version-210',
+ 'zAddAssetAttr-Scene Analysis is From Preview-211',
+ ('zAddAssetAttr-Scene Analysis Timestamp-212', 'datetime'),
+ 'zAsset-Duplication Asset Visibility State-213',
+ 'zAddAssetAttr-Destination Asset Copy State-214',
+ 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-215',
+ 'zAddAssetAttr-Source Asset for Duplication Scope ID-216',
+ 'zCldMast-Source Master For Duplication Scope ID-217',
+ 'zAddAssetAttr-Source Asset For Duplication ID-218',
+ 'zCldMast-Source Master for Duplication ID-219',
+ 'zAddAssetAttr-Variation Suggestions States-220',
+ 'zAsset-High Frame Rate State-221',
+ 'zAsset-Video Key Frame Time Scale-222',
+ 'zAsset-Video Key Frame Value-223',
+ 'zExtAttr-ISO-224',
+ 'zExtAttr-Metering Mode-225',
+ 'zExtAttr-Sample Rate-226',
+ 'zExtAttr-Track Format-227',
+ 'zExtAttr-White Balance-228',
+ 'zExtAttr-Aperture-229',
+ 'zExtAttr-BitRate-230',
+ 'zExtAttr-Exposure Bias-231',
+ 'zExtAttr-Frames Per Second-232',
+ 'zExtAttr-Shutter Speed-233',
+ 'zExtAttr-Slush Scene Bias-234',
+ 'zExtAttr-Slush Version-235',
+ 'zExtAttr-Slush Preset-236',
+ 'zExtAttr-Slush Warm Bias-237',
+ 'zAsset-Height-238',
+ 'zAddAssetAttr-Original Height-239',
+ 'zIntResou-Unoriented Height-240',
+ 'zAsset-Width-241',
+ 'zAddAssetAttr-Original Width-242',
+ 'zIntResou-Unoriented Width-243',
+ 'zShare-Thumbnail Image Data-244',
+ 'SPLzShare-Thumbnail Image Data-245',
+ 'zAsset-Thumbnail Index-246',
+ 'zAddAssetAttr-Embedded Thumbnail Height-247',
+ 'zAddAssetAttr-Embedded Thumbnail Length-248',
+ 'zAddAssetAttr-Embedded Thumbnail Offset-249',
+ 'zAddAssetAttr-Embedded Thumbnail Width-250',
+ 'zAsset-Packed Acceptable Crop Rect-251',
+ 'zAsset-Packed Badge Attributes-252',
+ 'zAsset-Packed Preferred Crop Rect-253',
+ 'zAsset-Curation Score-254',
+ 'zAsset-Camera Processing Adjustment State-255',
+ 'zAsset-Depth Type-256',
+ 'zAsset-Is Magic Carpet-QuicktimeMOVfile-257',
+ 'zAddAssetAttr-Orig Resource Choice-258',
+ 'zAsset-Spatial Type-259',
+ 'zAddAssetAttr-Spatial Over Capture Group ID-260',
+ 'zAddAssetAttr-Place Annotation Data-261',
+ 'zAddAssetAttr-Distance Identity-262',
+ 'zAddAssetAttr-Edited IPTC Attributes-263',
+ 'zAssetDes-Long Description-264',
+ 'zAddAssetAttr-Asset Description-265',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-266',
+ 'zAddAssetAttr-Accessibility Description-267',
+ 'zAddAssetAttr-Photo Stream Tag ID-268',
+ 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-269',
+ ('zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-270', 'datetime'),
+ ('zCldFeedEnt-Entry Date-271', 'datetime'),
+ 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-272',
+ 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-273',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-274',
+ 'zCldFeedEnt-Entry Priority Number-275',
+ 'zCldFeedEnt-Entry Type Number-276',
+ 'zCldSharedComment-Cloud GUID-4TableStart-277',
+ ('zCldSharedComment-Date-278', 'datetime'),
+ ('zCldSharedComment-Comment Client Date-279', 'datetime'),
+ ('zAsset-Cloud Last Viewed Comment Date-280', 'datetime'),
+ 'zCldSharedComment-Type-281',
+ 'zCldSharedComment-Comment Text-282',
+ 'zCldSharedComment-Commenter Hashed Person ID-283',
+ 'zCldSharedComment-Batch Comment-284',
+ 'zCldSharedComment-Is a Caption-285',
+ 'zAsset-Cloud Has Comments by Me-286',
+ 'zCldSharedComment-Is My Comment-287',
+ 'zCldSharedComment-Is Deletable-288',
+ 'zAsset-Cloud Has Comments Conversation-289',
+ 'zAsset-Cloud Has Unseen Comments-290',
+ 'zCldSharedComment-Liked-291',
+ 'zAddAssetAttr-Share Type-292',
+ 'zAsset-Library Scope Share State- StillTesting-293',
+ 'zAsset-Active Library Scope Participation State-294',
+ 'zAddAssetAttr-Library Scope Asset Contributors To Update-295',
+ 'zShare-UUID-CMM-4TableStart-296',
+ 'SPLzShare-UUID-SPL-4TableStart-297',
+ 'zShare-zENT-CMM-298',
+ 'SPLzShare-zENT-SPL-299',
+ 'zSharePartic-z54SHARE-300',
+ 'SPLzSharePartic-z54SHARE-301',
+ 'zShare-Status-CMM-302',
+ 'SPLzShare-Status-SPL-303',
+ 'zShare-Scope Type-CMM-304',
+ 'SPLzShare-Scope Type-SPL-305',
+ 'zShare-Local Publish State-CMM-306',
+ 'SPLzShare-Local Publish State-SPL-307',
+ 'zShare-Public Permission-CMM-308',
+ 'SPLzShare-Public Permission-SPL-309',
+ 'zShare-Originating Scope ID-CMM-310',
+ 'SPLzShare-Originating Scope ID-SPL-311',
+ 'zShare-Scope ID-CMM-312',
+ 'SPLzShare-Scope ID-SPL-313',
+ 'zShare-Title-CMM-314',
+ 'SPLzShare-Title-SPL-315',
+ 'zShare-Share URL-CMM-316',
+ 'SPLzShare-Share URL-SPL-317',
+ ('zShare-Creation Date-CMM-318', 'datetime'),
+ ('SPLzShare-Creation Date-SPL-319', 'datetime'),
+ ('zShare-Start Date-CMM-320', 'datetime'),
+ ('SPLzShare-Start Date-SPL-321', 'datetime'),
+ ('zShare-End Date-CMM-322', 'datetime'),
+ ('SPLzShare-End Date-SPL-323', 'datetime'),
+ ('zShare-Expiry Date-CMM-324', 'datetime'),
+ ('SPLzShare-Expiry Date-SPL-325', 'datetime'),
+ 'zShare-Cloud Item Count-CMM-326',
+ 'SPLzShare-Cloud Item Count-SPL-327',
+ 'zShare-Asset Count-CMM-328',
+ 'SPLzShare-Asset Count-SPL-329',
+ 'zShare-Cloud Photo Count-CMM-330',
+ 'SPLzShare-Cloud Photo Count-SPL-331',
+ 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-332',
+ 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-333',
+ 'zShare-Photos Count-CMM-334',
+ 'SPLzShare-Photos Count-CMM-SPL-335',
+ 'zShare-Uploaded Photos Count-CMM-336',
+ 'SPLzShare-Uploaded Photos Count-SPL-337',
+ 'zShare-Cloud Video Count-CMM-338',
+ 'SPLzShare-Cloud Video Count-SPL-339',
+ 'zShare-Videos Count-CMM-340',
+ 'SPLzShare-Videos Count-SPL-341',
+ 'zShare-Uploaded Videos Count-CMM-342',
+ 'SPLzShare-Uploaded Videos Count-SPL-343',
+ 'zShare-Force Sync Attempted-CMM-344',
+ 'SPLzShare-Force Sync Attempted-SPL-345',
+ 'zShare-Cloud Local State-CMM-346',
+ 'SPLzShare-Cloud Local State-SPL-347',
+ 'zShare-Scope Syncing State-CMM-348',
+ 'SPLzShare-Scope Syncing State-SPL-349',
+ 'zShare-Auto Share Policy-CMM-350',
+ 'SPLzShare-Auto Share Policy-SPL-351',
+ 'zShare-Should Notify On Upload Completion-CMM-352',
+ 'SPLzShare-Should Notify On Upload Completion-SPL-353',
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-354',
+ 'zShare-Trashed State-CMM-355',
+ 'SPLzShare-Trashed State-SPL-356',
+ 'zShare-Cloud Delete State-CMM-357',
+ 'SPLzShare-Cloud Delete State-SPL-358',
+ ('zShare-Trashed Date-CMM-359', 'datetime'),
+ ('SPLzShare-Trashed Date-SPL-360', 'datetime'),
+ ('zShare-LastParticipant Asset Trash Notification Date-CMM-361', 'datetime'),
+ ('SPLzShare-LastParticipant Asset Trash Notification Date-SPL-362', 'datetime'),
+ ('zShare-Last Participant Asset Trash Notification View Date-CMM-363', 'datetime'),
+ ('SPLzShare-Last Participant Asset Trash Notification View Date-SPL-364', 'datetime'),
+ 'zShare-Exit Source-CMM-365',
+ 'SPLzShare-Exit Source-SPL-366',
+ 'zShare-SPL_Exit State-CMM-367',
+ 'SPLzShare-SPL_Exit State-SPL-368',
+ 'zShare-Exit Type-CMM-369',
+ 'SPLzShare-Exit Type-SPL-370',
+ 'zShare-Should Ignor Budgets-CMM-371',
+ 'SPLzShare-Should Ignor Budgets-SPL-372',
+ 'zShare-Preview State-CMM-373',
+ 'SPLzShare-Preview State-SPL-374',
+ 'zShare-Preview Data-CMM-375',
+ 'SPLzShare-Preview Data-SPL-376',
+ 'zShare-Rules-CMM-377',
+ 'SPLzShare-Rules-SPL-378',
+ 'zShare-Thumbnail Image Data-CMM-379',
+ 'SPLzShare-Thumbnail Image Data-SPL-380',
+ 'zShare-Participant Cloud Update State-CMM-381',
+ 'SPLzShare-Participant Cloud Update State-SPL-382',
+ 'zSharePartic-UUID-4TableStart-383',
+ 'SPLzSharePartic-UUID-4TableStart-384',
+ 'zSharePartic-Acceptance Status-385',
+ 'SPLzSharePartic-Acceptance Status-386',
+ 'zSharePartic-Is Current User-387',
+ 'SPLzSharePartic-Is Current User-388',
+ 'zSharePartic-Role-389',
+ 'SPLzSharePartic-Role-390',
+ 'zSharePartic-Premission-391',
+ 'SPLzSharePartic-Premission-392',
+ 'zSharePartic-Participant ID-393',
+ 'SPLzSharePartic-Participant ID-394',
+ 'zSharePartic-User ID-395',
+ 'SPLzSharePartic-User ID-396',
+ 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-397',
+ 'SPLzSharePartic-zPK-4TableStart-398',
+ 'zSharePartic-zPK-4TableStart-399',
+ 'zSharePartic-Email Address-400',
+ 'SPLzSharePartic-Email Address-401',
+ 'zSharePartic-Phone Number-402',
+ 'SPLzSharePartic-Phone Number-403',
+ 'zSharePartic-Exit State-404',
+ 'SPLzSharePartic-Exit State-405',
+ 'ParentzGenAlbum-UUID-4TableStart-406',
+ 'zGenAlbum-UUID-4TableStart-407',
+ 'SWYConverszGenAlbum-UUID-4TableStart-408',
+ 'ParentzGenAlbum-Cloud GUID-4TableStart-409',
+ 'zGenAlbum-Cloud GUID-4TableStart-410',
+ 'SWYConverszGenAlbum-Cloud GUID-4TableStart-411',
+ 'zCldShareAlbumInvRec-Album GUID-4TableStart-412',
+ 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-413',
+ 'zGenAlbum-Project Render UUID-4TableStart-414',
+ 'SWYConverszGenAlbum-Project Render UUID-4TableStart-415',
+ 'zAlbumList-Needs Reordering Number-416',
+ 'zGenAlbum-zENT- Entity-417',
+ 'ParentzGenAlbum-Kind-418',
+ 'zGenAlbum-Album Kind-419',
+ 'SWYConverszGenAlbum-Album Kind-420',
+ 'ParentzGenAlbum-Cloud-Local-State-421',
+ 'zGenAlbum-Cloud_Local_State-422',
+ 'SWYConverszGenAlbum-Cloud_Local_State-423',
+ 'ParentzGenAlbum- Title-424',
+ 'zGenAlbum- Title-User&System Applied-425',
+ 'SWYConverszGenAlbum- Title -User&System Applied-426',
+ 'zGenAlbum-Import Session ID-SWY-427',
+ 'zAsset- Conversation= zGenAlbum_zPK-428',
+ 'SWYConverszGenAlbum- Import Session ID-SWY-429',
+ 'zGenAlbum-Imported by Bundle Identifier-430',
+ 'SWYzGenAlbum-Imported by Bundle Identifier-431',
+ 'SWYConverszGenAlbum- Syndicate-432',
+ ('ParentzGenAlbum-Creation Date-433', 'datetime'),
+ ('zGenAlbum-Creation Date-434', 'datetime'),
+ ('SWYConverszGenAlbum-Creation Date-435', 'datetime'),
+ ('zGenAlbum-Cloud Creation Date-436', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Creation Date-437', 'datetime'),
+ ('zGenAlbum-Start Date-438', 'datetime'),
+ ('SWYConverszGenAlbum-Start Date-439', 'datetime'),
+ ('zGenAlbum-End Date-440', 'datetime'),
+ ('SWYConverszGenAlbum-End Date-441', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-442', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Subscription Date-443', 'datetime'),
+ 'ParentzGenAlbum-Pending Items Count-444',
+ 'zGenAlbum-Pending Items Count-445',
+ 'SWYConverszGenAlbum-Pending Items Count-446',
+ 'ParentzGenAlbum-Pending Items Type-447',
+ 'zGenAlbum-Pending Items Type-448',
+ 'SWYConverszGenAlbum-Pending Items Type-449',
+ 'zGenAlbum- Cached Photos Count-450',
+ 'SWYConverszGenAlbum- Cached Photos Count-451',
+ 'zGenAlbum- Cached Videos Count-452',
+ 'SWYConverszGenAlbum- Cached Videos Count-453',
+ 'zGenAlbum- Cached Count-454',
+ 'SWYConverszGenAlbum- Cached Count-455',
+ 'ParentzGenAlbum-Sync Event Order Key-456',
+ 'zGenAlbum-Sync Event Order Key-457',
+ 'SWYConverszGenAlbum-Sync Event Order Key-458',
+ 'zGenAlbum-Has Unseen Content-459',
+ 'SWYConverszGenAlbum-Has Unseen Content-460',
+ 'zGenAlbum-Unseen Asset Count-461',
+ 'SWYConverszGenAlbum-Unseen Asset Count-462',
+ 'zGenAlbum-is Owned-463',
+ 'SWYConverszGenAlbum-is Owned-464',
+ 'zGenAlbum-Cloud Relationship State-465',
+ 'SWYConverszGenAlbum-Cloud Relationship State-466',
+ 'zGenAlbum-Cloud Relationship State Local-467',
+ 'SWYConverszGenAlbum-Cloud Relationship State Local-468',
+ 'zGenAlbum-Cloud Owner Mail Key-469',
+ 'SWYConverszGenAlbum-Cloud Owner Mail Key-470',
+ 'zGenAlbum-Cloud Owner Frist Name-471',
+ 'SWYConverszGenAlbum-Cloud Owner Frist Name-472',
+ 'zGenAlbum-Cloud Owner Last Name-473',
+ 'SWYConverszGenAlbum-Cloud Owner Last Name-474',
+ 'zGenAlbum-Cloud Owner Full Name-475',
+ 'SWYConverszGenAlbum-Cloud Owner Full Name-476',
+ 'zGenAlbum-Cloud Person ID-477',
+ 'SWYConverszGenAlbum-Cloud Person ID-478',
+ 'zAsset-Cloud Owner Hashed Person ID-479',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-480',
+ 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-481',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-482',
+ 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-483',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-484',
+ 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-485',
+ 'zGenAlbum-Cloud Album Sub Type-486',
+ 'SWYConverszGenAlbum-Cloud Album Sub Type-487',
+ ('zGenAlbum-Cloud Contribution Date-488', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Contribution Date-489', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-490', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Last Interesting Change Date-491', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-492',
+ 'SWYConverszGenAlbum-Cloud Notification Enabled-493',
+ 'ParentzGenAlbum-Pinned-494',
+ 'zGenAlbum-Pinned-495',
+ 'SWYConverszGenAlbum-Pinned-496',
+ 'ParentzGenAlbum-Custom Sort Key-497',
+ 'zGenAlbum-Custom Sort Key-498',
+ 'SWYConverszGenAlbum-Custom Sort Key-499',
+ 'ParentzGenAlbum-Custom Sort Ascending-500',
+ 'zGenAlbum-Custom Sort Ascending-501',
+ 'SWYConverszGenAlbum-Custom Sort Ascending-502',
+ 'ParentzGenAlbum-Is Prototype-503',
+ 'zGenAlbum-Is Prototype-504',
+ 'SWYConverszGenAlbum-Is Prototype-505',
+ 'ParentzGenAlbum-Project Document Type-506',
+ 'zGenAlbum-Project Document Type-507',
+ 'SWYConverszGenAlbum-Project Document Type-508',
+ 'ParentzGenAlbum-Custom Query Type-509',
+ 'zGenAlbum-Custom Query Type-510',
+ 'SWYConverszGenAlbum-Custom Query Type-511',
+ 'ParentzGenAlbum-Trashed State-512',
+ ('ParentzGenAlbum-Trash Date-513', 'datetime'),
+ 'zGenAlbum-Trashed State-514',
+ ('zGenAlbum-Trash Date-515', 'datetime'),
+ 'SWYConverszGenAlbum-Trashed State-516',
+ ('SWYConverszGenAlbum-Trash Date-517', 'datetime'),
+ 'ParentzGenAlbum-Cloud Delete State-518',
+ 'zGenAlbum-Cloud Delete State-519',
+ 'SWYConverszGenAlbum-Cloud Delete State-520',
+ 'zGenAlbum-Cloud Owner Whitelisted-521',
+ 'SWYConverszGenAlbum-Cloud Owner Whitelisted-522',
+ 'zGenAlbum-Cloud Local Public URL Enabled-523',
+ 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-524',
+ 'zGenAlbum-Cloud Public URL Enabled-525',
+ 'zGenAlbum-Public URL-526',
+ 'SWYConverszGenAlbum-Cloud Public URL Enabled-527',
+ 'SWYConverszGenAlbum-Public URL-528',
+ 'zGenAlbum-Key Asset Face Thumb Index-529',
+ 'SWYConverszGenAlbum-Key Asset Face Thumb Index-530',
+ 'zGenAlbum-Project Text Extension ID-531',
+ 'SWYConverszGenAlbum-Project Text Extension ID-532',
+ 'zGenAlbum-User Query Data-533',
+ 'SWYConverszGenAlbum-User Query Data-534',
+ 'zGenAlbum-Custom Query Parameters-535',
+ 'SWYConverszGenAlbum-Custom Query Parameters-536',
+ 'zGenAlbum-Project Data-537',
+ 'SWYConverszGenAlbum-Project Data-538',
+ 'zGenAlbum-Search Index Rebuild State-539',
+ 'SWYConverszGenAlbum-Search Index Rebuild State-540',
+ 'zGenAlbum-Duplicate Type-541',
+ 'SWYConverszGenAlbum-Duplicate Type-542',
+ 'zGenAlbum-Privacy State-543',
+ 'SWYConverszGenAlbum-Privacy State-544',
+ 'zCldShareAlbumInvRec-zUUID-4TableStart-545',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-546',
+ 'zCldShareAlbumInvRec-Invitation State Local-547',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-548',
+ ('zCldShareAlbumInvRec-Subscription Date-549', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-550',
+ 'zCldShareAlbumInvRec-Invitee Last Name-551',
+ 'zCldShareAlbumInvRec-Invitee Full Name-552',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-553',
+ 'zCldShareAlbumInvRec-Invitee Email Key-554',
+ 'zGenAlbum-Key Asset Face ID-555',
+ 'zFaceCrop-Face Area Points-556',
+ 'zAsset-Face Adjustment Version-557',
+ 'zAddAssetAttr-Face Analysis Version-558',
+ 'zDetFace-Asset Visible-559',
+ 'zPerson-Face Count-560',
+ 'zDetFace-Face Crop-561',
+ 'zDetFace-Face Algorithm Version-562',
+ 'zDetFace-Adjustment Version-563',
+ 'zDetFace-UUID-4TableStart-564',
+ 'zPerson-Person UUID-4TableStart-565',
+ 'zPerson - MD ID-566',
+ 'zPerson - Asset Sort Order-567',
+ 'zDetFace-Confirmed Face Crop Generation State-568',
+ 'zDetFace-Manual-569',
+ 'zDetFace-Detection Type-570',
+ 'zPerson-Detection Type-571',
+ 'zDetFace-VIP Model Type-572',
+ 'zDetFace-Name Source-573',
+ 'zDetFace-Cloud Name Source-574',
+ 'zPerson-Merge Candidate Confidence-575',
+ 'zPerson-Person URI-576',
+ 'zPerson-Display Name-577',
+ 'zPerson-Full Name-578',
+ 'zPerson-Cloud Verified Type-579',
+ 'zFaceCrop-State-580',
+ 'zFaceCrop-Type-581',
+ 'zFaceCrop-UUID-4TableStart-582',
+ 'zPerson-Type-583',
+ 'zPerson-Verified Type-584',
+ 'zPerson-Gender Type-585',
+ 'zDetFace-Gender Type-586',
+ 'zDetFace-Center X-587',
+ 'zDetFace-Center Y-588',
+ 'zPerson-Age Type Estimate-589',
+ 'zDetFace-Age Type Estimate-590',
+ 'zDetFace-Ethnicity Type-591',
+ 'zDetFace-Skin Tone Type-592',
+ 'zDetFace-Hair Type-593',
+ 'zDetFace-Hair Color Type-594',
+ 'zDetFace-Head Gear Type-595',
+ 'zDetFace-Facial Hair Type-596',
+ 'zDetFace-Has Face Mask-597',
+ 'zDetFace-Pose Type-598',
+ 'zDetFace-Face Expression Type-599',
+ 'zDetFace-Has Smile-600',
+ 'zDetFace-Smile Type-601',
+ 'zDetFace-Lip Makeup Type-602',
+ 'zDetFace-Eyes State-603',
+ 'zDetFace-Is Left Eye Closed-604',
+ 'zDetFace-Is Right Eye Closed-605',
+ 'zDetFace-Gaze Center X-606',
+ 'zDetFace-Gaze Center Y-607',
+ 'zDetFace-Face Gaze Type-608',
+ 'zDetFace-Eye Glasses Type-609',
+ 'zDetFace-Eye Makeup Type-610',
+ 'zDetFace-Cluster Squence Number Key-611',
+ 'zDetFace-Grouping ID-612',
+ 'zDetFace-Master ID-613',
+ 'zDetFace-Quality-614',
+ 'zDetFace-Quality Measure-615',
+ 'zDetFace-Source Height-616',
+ 'zDetFace-Source Width-617',
+ 'zDetFace-Hidden-Asset Hidden-618',
+ 'zDetFace-In Trash-Recently Deleted-619',
+ 'zDetFace-Cloud Local State-620',
+ 'zDetFace-Training Type-621',
+ 'zDetFace.Pose Yaw-622',
+ 'zDetFace-Body Center X-623',
+ 'zDetFace-Body Center Y-624',
+ 'zDetFace-Body Height-625',
+ 'zDetFace-Body Width-626',
+ 'zDetFace-Roll-627',
+ 'zDetFace-Size-628',
+ 'zDetFace-Cluster Squence Number-629',
+ 'zDetFace-Blur Score-630',
+ 'zDetFacePrint-Face Print Version-631',
+ 'zMedAnlyAstAttr-Face Count-632',
+ 'zDetFaceGroup-UUID-4TableStart-633',
+ 'zDetFaceGroup-Person Builder State-634',
+ 'zDetFaceGroup-UnNamed Face Count-635',
+ 'zPerson-In Person Naming Model-636',
+ 'zPerson-Key Face Pick Source Key-637',
+ 'zPerson-Manual Order Key-638',
+ 'zPerson-Question Type-639',
+ 'zPerson-Suggested For Client Type-640',
+ 'zPerson-Merge Target Person-641',
+ 'zPerson-Cloud Local State-642',
+ 'zFaceCrop-Cloud Local State-643',
+ 'zFaceCrop-Cloud Type-644',
+ 'zPerson-Cloud Delete State-645',
+ 'zFaceCrop-Cloud Delete State-646',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-647',
+ 'zAsset-Highlight Visibility Score-648',
+ 'zMemory-UUID-4TableStart-649',
+ 'zMemory-AssetListPredicte-650',
+ 'zMemory-Score-651',
+ 'zMemory-SubTitle-652',
+ 'zMemory-Title-653',
+ 'zMemory-Category-654',
+ 'zMemory-SubCategory-655',
+ ('zMemory-Creation Date-656', 'datetime'),
+ ('zMemory-Last Enrichment Date-657', 'datetime'),
+ 'zMemory-User Action Options-658',
+ 'zMemory-Favorite Memory-659',
+ 'zMemory-View Count-660',
+ 'zMemory-Play Count-661',
+ 'zMemory-Rejected-662',
+ 'zMemory-Share Count-663',
+ 'zMemory-Sharing Composition-664',
+ ('zMemory-Last Movie Play Date-665', 'datetime'),
+ ('zMemory-Last Viewed Date-666', 'datetime'),
+ 'zMemory-Pending Play Count Memory-667',
+ 'zMemory-Pending Share Count Memory-668',
+ 'zMemory-Pending View Count Memory-669',
+ 'zMemory-Pending State-670',
+ 'zMemory-Featured State-671',
+ 'zMemory-Photos Graph Version-672',
+ 'zMemory-Graph Memory Identifier-673',
+ 'zMemory-Notification State-674',
+ 'zMemory-Cloud Local State-675',
+ 'zMemory-Cloud Delete State-676',
+ 'zMemory-Story Color Grade Kind-677',
+ 'zMemory-Story Serialized Title Category-678',
+ 'zMemory-Syndicated Content State-679',
+ 'zMemory-Search Index Rebuild State-680',
+ 'zMemory-Black Listed Feature-681',
+ 'zMoment-UUID-4TableStart-682',
+ 'zMoment-Aggregation Score-683',
+ ('zMoment-Start Date-684', 'datetime'),
+ ('zMoment-Representative Date-685', 'datetime'),
+ 'zMoment-Timezone Offset-686',
+ ('zMoment-Modification Date-687', 'datetime'),
+ ('zMoment-End Date-688', 'datetime'),
+ 'zMoment-SubTitle-689',
+ 'zMoment-Title-690',
+ 'zMoment-Originator State-691',
+ 'zMoment-Sharing Composition-692',
+ 'zMoment-Cached Count Shared-693',
+ 'zMoment-Processed Location-694',
+ 'zMoment-Approx Latitude-695',
+ 'zMoment-Approx Longitude-696',
+ 'zMoment-GPS Horizontal Accuracy-697',
+ 'zMoment-Cache Count-698',
+ 'zMoment-Cached Photos Count-699',
+ 'zMoment-Cached Videos Count-700',
+ 'zMoment-Trashed State-701',
+ 'SBKAzSugg-UUID-4TableStart-702',
+ 'SBKAzSugg-Suggestion Context-703',
+ 'SBKAzSugg-Sharing Composition-704',
+ ('SBKAzSugg-Start Date-705', 'datetime'),
+ 'SBKAzSugg-State-706',
+ 'SBKAzSugg-Featured State-707',
+ 'SBKAzSugg- Available Features-708',
+ 'SBKAzSugg-Notification State-709',
+ ('SBKAzSugg-Creation Date-710', 'datetime'),
+ ('SBKAzSugg-End Date-711', 'datetime'),
+ ('SBKAzSugg-Activation Date-712', 'datetime'),
+ ('SBKAzSugg-Expunge Date-713', 'datetime'),
+ ('SBKAzSugg-Relevant Until Date-714', 'datetime'),
+ 'SBKAzSugg-Title-715',
+ 'SBKAzSugg-Sub Title-716',
+ 'SBKAzSugg-Cached Count-717',
+ 'SBKAzSugg-Cahed Photos Count-718',
+ 'SBKAzSugg-Cached Videos Count-719',
+ 'SBKAzSugg-Type-720',
+ 'SBKAzSugg-Sub Type-721',
+ 'SBKAzSugg-Action Data-722',
+ 'SBKAzSugg-Version-723',
+ 'SBKAzSugg-Cloud Local State-724',
+ 'SBKAzSugg-Cloud Delete State-725',
+ 'SBRAzSugg-UUID-4TableStart-726',
+ 'SBRAzSugg-Suggestion Context-727',
+ 'SBRAzSugg-Sharing Composition-728',
+ ('SBRAzSugg-Start Date-729', 'datetime'),
+ 'SBRAzSugg-State-730',
+ 'SBRAzSugg-Featured State-731',
+ 'SBRAzSugg- Available Features-732',
+ 'SBRAzSugg-Notification State-733',
+ ('SBRAzSugg-Creation Date-734', 'datetime'),
+ ('SBRAzSugg-End Date-735', 'datetime'),
+ ('SBRAzSugg-Activation Date-736', 'datetime'),
+ ('SBRAzSugg-Expunge Date-737', 'datetime'),
+ ('SBRAzSugg-Relevant Until Date-738', 'datetime'),
+ 'SBRAzSugg-Title-739',
+ 'SBRAzSugg-Sub Title-740',
+ 'SBRAzSugg-Cached Count-741',
+ 'SBRAzSugg-Cahed Photos Count-742',
+ 'SBRAzSugg-Cached Videos Count-743',
+ 'SBRAzSugg-Type-744',
+ 'SBRAzSugg-Sub Type-745',
+ 'SBRAzSugg-Action Data-746',
+ 'SBRAzSugg-Version-747',
+ 'SBRAzSugg-Cloud Local State-748',
+ 'SBRAzSugg-Cloud Delete State-749',
+ 'zMedAnlyAstAttr-Media Analysis Version-750',
+ 'zMedAnlyAstAttr-Audio Classification-751',
+ 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-752',
+ 'zMedAnlyAstAttr-Best Video Range Start Time Scale-753',
+ 'zMedAnlyAstAttr-Best Video Range Duration Value-754',
+ 'zMedAnlyAstAttr-Best Video Range Start Value-755',
+ 'zMedAnlyAstAttr-Packed Best Playback Rect-756',
+ 'zMedAnlyAstAttr-Activity Score-757',
+ 'zMedAnlyAstAttr-Video Score-758',
+ 'zMedAnlyAstAttr-Audio Score-759',
+ 'zMedAnlyAstAttr-Wallpaper Score-760',
+ 'zMedAnlyAstAttr-AutoPlay Suggestion Score-761',
+ 'zMedAnlyAstAttr-Blurriness Score-762',
+ 'zMedAnlyAstAttr-Exposure Score-763',
+ 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-764',
+ 'zMedAnlyAstAttr-Probable Rotation Direction-765',
+ 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-766',
+ 'zAssetAnalyState-Asset UUID-4TableStart-767',
+ 'zAssetAnalyState-Analysis State-768',
+ 'zAssetAnalyState-Worker Flags-769',
+ 'zAssetAnalyState-Worker Type-770',
+ ('zAssetAnalyState-Ignore Until Date-771', 'datetime'),
+ ('zAssetAnalyState-Last Ignored Date-772', 'datetime'),
+ ('zAssetAnalyState-Sort Token-773', 'datetime'),
+ 'zMedAnlyAstAttr-Character Recognition Attr-774',
+ 'zCharRecogAttr-Algorithm Version-775',
+ 'zCharRecogAttr-Adjustment Version-776',
+ 'zMedAnlyAstAttr-Visual Search Attributes-777',
+ 'zVisualSearchAttr-Algorithm Version-778',
+ 'zVisualSearchAttr-Adjustment Version-779',
+ 'zVisualSearchAttr - Sticker Confidence Algorithm Version-780',
+ 'zVisualSearchAttr - Sticker Confidence Score-781',
+ 'zAsset-Sticker Confidence Score-782',
+ 'zAsset-Overall Aesthetic Score-783',
+ 'zCompAssetAttr-Behavioral Score-784',
+ 'zCompAssetAttr-Failure Score zCompAssetAttr-785',
+ 'zCompAssetAttr-Harmonious Color Score-786',
+ 'zCompAssetAttr-Immersiveness Score-787',
+ 'zCompAssetAttr-Interaction Score-788',
+ 'zCompAssetAttr-Intersting Subject Score-789',
+ 'zCompAssetAttr-Intrusive Object Presence Score-790',
+ 'zCompAssetAttr-Lively Color Score-791',
+ 'zCompAssetAttr-Low Light-792',
+ 'zCompAssetAttr-Noise Score-793',
+ 'zCompAssetAttr-Pleasant Camera Tilt Score-794',
+ 'zCompAssetAttr-Pleasant Composition Score-795',
+ 'zCompAssetAttr-Pleasant Lighting Score-796',
+ 'zCompAssetAttr-Pleasant Pattern Score-797',
+ 'zCompAssetAttr-Pleasant Perspective Score-798',
+ 'zCompAssetAttr-Pleasant Post Processing Score-799',
+ 'zCompAssetAttr-Pleasant Reflection Score-800',
+ 'zCompAssetAttrPleasant Symmetry Score-801',
+ 'zCompAssetAttr-Sharply Focused Subject Score-802',
+ 'zCompAssetAttr-Tastfully Blurred Score-803',
+ 'zCompAssetAttr-Well Chosen Subject Score-804',
+ 'zCompAssetAttr-Well Framed Subject Score-805',
+ 'zCompAssetAttr-Well Timeed Shot Score-806',
+ 'zCldRes-Asset UUID-4TableStart-807',
+ 'zCldRes-Cloud Local State-808',
+ 'zCldRes-File Size-809',
+ 'zCldRes-Height-810',
+ 'zCldRes-Is Available-811',
+ 'zCldRes-Is Locally Available-812',
+ 'zCldRes-Prefetch Count-813',
+ 'zCldRes-Source Type-814',
+ 'zCldRes-Type-815',
+ 'zCldRes-Width-816',
+ ('zCldRes-Date Created-817', 'datetime'),
+ ('zCldRes-Last OnDemand Download Date-818', 'datetime'),
+ ('zCldRes-Last Prefetch Date-819', 'datetime'),
+ 'zCldRes-Prunedat-820',
+ 'zCldRes-File Path-821',
+ 'zCldRes-Fingerprint-822',
+ 'zCldRes-Item ID-823',
+ 'zCldRes-UniID-824',
+ 'zUserFeedback-UUID-4TableStart-825',
+ 'zUserFeedback-Feature-826',
+ 'zUserFeedback-Type-827',
+ ('zUserFeedback-Last Modified Date-828', 'datetime'),
+ 'zUserFeedback-Context-829',
+ 'zUserFeedback-Cloud Local State-830',
+ 'zUserFeedback-Cloud Delete State-831',
+ 'zUserFeedback - Creation Type-832',
+ 'zAddAssetAttr-zPK-833',
+ 'zAddAssetAttr-zENT-834',
+ 'ZAddAssetAttr-zOPT-835',
+ 'zAddAssetAttr-zAsset= zAsset_zPK-836',
+ 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-837',
+ 'zAddAssetAttr-Master Fingerprint-838',
+ 'zAddAssetAttr-Public Global UUID-839',
+ 'zAddAssetAttr-Deferred Photo Identifier-840',
+ 'zAddAssetAttr-Original Assets UUID-841',
+ 'zAddAssetAttr-Import Session ID-842',
+ 'zAddAssetAttr-Originating Asset Identifier-843',
+ 'zAddAssetAttr.Adjusted Fingerprint-844',
+ 'zAlbumList-zPK= Album List Key-845',
+ 'zAlbumList-zENT-846',
+ 'zAlbumList-zOPT-847',
+ 'zAlbumList-ID Key-848',
+ 'zAlbumList-UUID-849',
+ 'zAsset-zPK-850',
+ 'zAsset-zENT-851',
+ 'zAsset-zOPT-852',
+ 'zAsset-Master= zCldMast-zPK-853',
+ 'zAsset-Extended Attributes= zExtAttr-zPK-854',
+ 'zAsset-Import Session Key-855',
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-856',
+ 'zAsset-Photo Analysis Attributes Key-857',
+ 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-858',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-859',
+ 'zAsset-Moment Share Key= zShare-zPK-860',
+ 'zAsset-zMoment Key= zMoment-zPK-861',
+ 'zAsset-Computed Attributes Asset Key-862',
+ 'zAsset-Highlight Being Assets-HBA Key-863',
+ 'zAsset-Highlight Being Extended Assets-HBEA Key-864',
+ 'zAsset-Highlight Being Key Asset Private-HBKAP Key-865',
+ 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-866',
+ 'zAsset-Highligh Being Summary Assets-HBSA Key-867',
+ 'zAsset-Day Group Highlight Being Assets-DGHBA Key-868',
+ 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-869',
+ 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-870',
+ 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-871',
+ 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-872',
+ 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-873',
+ 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-874',
+ 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-875',
+ 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-876',
+ 'zAsset-Promotion Score-877',
+ 'zAsset-Iconic Score-878',
+ 'zAsset-Media Analysis Attributes Key-879',
+ 'zAsset-Media Group UUID-880',
+ 'zAsset-UUID = store.cloudphotodb-881',
+ 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-882',
+ 'zAsset.Cloud Collection GUID-883',
+ 'zAsset-Avalanche UUID-884',
+ 'zAssetAnalyState-zPK-885',
+ 'zAssetAnalyState-zEnt-886',
+ 'zAssetAnalyState-zOpt-887',
+ 'zAssetAnalyState-Asset= zAsset-zPK-888',
+ 'zAssetAnalyState-Asset UUID-889',
+ 'zAsstContrib-zPK-890',
+ 'zAsstContrib-zEnt-891',
+ 'zAsstContrib-zOpt-892',
+ 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-893',
+ 'zAsstContrib-Participant= zSharePartic-zPK-894',
+ 'zAssetDes-zPK-895',
+ 'zAssetDes-zENT-896',
+ 'zAssetDes-zOPT-897',
+ 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-898',
+ 'zCharRecogAttr-zPK-899',
+ 'zCharRecogAttr-zENT-900',
+ 'zCharRecogAttr-zOPT-901',
+ 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-902',
+ 'zCldFeedEnt-zPK= zCldShared keys-903',
+ 'zCldFeedEnt-zENT-904',
+ 'zCldFeedEnt-zOPT-905',
+ 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-906',
+ 'zCldFeedEnt-Entry Invitation Record GUID-907',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-908',
+ 'zCldMast-zPK= zAsset-Master-909',
+ 'zCldMast-zENT-910',
+ 'zCldMast-zOPT-911',
+ 'zCldMast-Moment Share Key= zShare-zPK-912',
+ 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-913',
+ 'zCldMast-Originating Asset ID-914',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-915',
+ 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-916',
+ 'CMzCldMastMedData-zENT-917',
+ 'CMzCldMastMedData-zOPT-918',
+ 'CMzCldMastMedData-CldMast= zCldMast-zPK-919',
+ 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-920',
+ 'AAAzCldMastMedData-zENT-921',
+ 'AAAzCldMastMedData-zOPT-922',
+ 'AAAzCldMastMedData-CldMast key-923',
+ 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-924',
+ 'zCldRes-zPK-925',
+ 'zCldRes-zENT-926',
+ 'zCldRes-zOPT-927',
+ 'zCldRes-Asset= zAsset-zPK-928',
+ 'zCldRes-Cloud Master= zCldMast-zPK-929',
+ 'zCldRes-Asset UUID-930',
+ 'zCldShareAlbumInvRec-zPK-931',
+ 'zCldShareAlbumInvRec-zEnt-932',
+ 'zCldShareAlbumInvRec-zOpt-933',
+ 'zCldShareAlbumInvRec-Album Key-934',
+ 'zCldShareAlbumInvRec-FOK Album Key-935',
+ 'zCldShareAlbumInvRec-Album GUID-936',
+ 'zCldShareAlbumInvRec-zUUID-937',
+ 'zCldShareAlbumInvRec-Cloud GUID-938',
+ 'zCldSharedComment-zPK-939',
+ 'zCldSharedComment-zENT-940',
+ 'zCldSharedComment-zOPT-941',
+ 'zCldSharedComment-Commented Asset Key= zAsset-zPK-942',
+ 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-943',
+ 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-944',
+ 'zCldSharedComment-Liked Asset Key= zAsset-zPK-945',
+ 'zCldSharedComment-CldFeedLikeCommentEntry Key-946',
+ 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-947',
+ 'zCldSharedComment-Cloud GUID-948',
+ 'zCompAssetAttr-zPK-949',
+ 'zCompAssetAttr-zEnt-950',
+ 'zCompAssetAttr-zOpt-951',
+ 'zCompAssetAttr-Asset Key-952',
+ 'zDetFace-zPK-953',
+ 'zDetFace-zEnt-954',
+ 'zDetFace.zOpt-955',
+ 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face-956',
+ 'zDetFace-PersonForFace= zPerson-zPK-957',
+ 'zDetFace-Person Being Key Face-958',
+ 'zDetFace-Face Print-959',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-960',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-961',
+ 'zDetFace-UUID-962',
+ 'zDetFaceGroup-zPK-963',
+ 'zDetFaceGroup-zENT-964',
+ 'zDetFaceGroup-zOPT-965',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-966',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-967',
+ 'zDetFaceGroup-UUID-968',
+ 'zDetFacePrint-zPK-969',
+ 'zDetFacePrint-zEnt-970',
+ 'zDetFacePrint-zOpt-971',
+ 'zDetFacePrint-Face Key-972',
+ 'zExtAttr-zPK= zAsset-zExtendedAttributes-973',
+ 'zExtAttr-zENT-974',
+ 'zExtAttr-zOPT-975',
+ 'zExtAttr-Asset Key-976',
+ 'zFaceCrop-zPK-977',
+ 'zFaceCrop-zEnt-978',
+ 'zFaceCrop-zOpt-979',
+ 'zFaceCrop-Asset Key-980',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-981',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-982',
+ 'zFaceCrop-Face Key-983',
+ 'zFaceCrop-UUID-984',
+ 'zGenAlbum-zPK=26AlbumLists= 26Albums-985',
+ 'zGenAlbum-zENT-986',
+ 'zGenAlbum-zOpt-987',
+ 'zGenAlbum-Key Asset-Key zAsset-zPK-988',
+ 'zGenAlbum-Secondary Key Asset-989',
+ 'zGenAlbum-Tertiary Key Asset-990',
+ 'zGenAlbum-Custom Key Asset-991',
+ 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-992',
+ 'zGenAlbum-FOK Parent Folder-993',
+ 'zGenAlbum-zSyndicate-994',
+ 'zGenAlbum-UUID-995',
+ 'SWYConverszGenAlbum-UUID-996',
+ 'zGenAlbum-Cloud_GUID = store.cloudphotodb-997',
+ 'SWYConverszGenAlbum-Cloud GUID-998',
+ 'zGenAlbum-Project Render UUID-999',
+ 'SWYConverszGenAlbum-Project Render UUID-1000',
+ 'zIntResou-zPK-1001',
+ 'zIntResou-zENT-1002',
+ 'zIntResou-zOPT-1003',
+ 'zIntResou-Asset= zAsset_zPK-1004',
+ 'zIntResou-Fingerprint-1005',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-1006',
+ 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1007',
+ 'zMedAnlyAstAttr-zEnt-1008',
+ 'zMedAnlyAstAttr-zOpt-1009',
+ 'zMedAnlyAstAttr-Asset= zAsset-zPK-1010',
+ 'zMemory-zPK-1011',
+ 'zMemory-zENT-1012',
+ 'zMemory-zOPT-1013',
+ 'zMemory-Key Asset= zAsset-zPK-1014',
+ 'zMemory-UUID-1015',
+ 'zMoment-zPK-1016',
+ 'zMoment-zENT-1017',
+ 'zMoment-zOPT-1018',
+ 'zMoment-Highlight Key-1019',
+ 'zMoment-UUID-1020',
+ 'zPerson-zPK=zDetFace-Person-1021',
+ 'zPerson-zEnt-1022',
+ 'zPerson-zOpt-1023',
+ 'zPerson-Share Participant= zSharePartic-zPK-1024',
+ 'zPerson-KeyFace=zDetFace-zPK-1025',
+ 'zPerson-Assoc Face Group Key-1026',
+ 'zPerson-Person UUID-1027',
+ 'zPhotoAnalysisAssetAttr-zPK-1028',
+ 'zPhotoAnalysisAssetAttr-zEnt-1029',
+ 'zPhotoAnalysisAssetAttr-zOpt-1030',
+ 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1031',
+ 'zSceneP-zPK-1032',
+ 'zSceneP-zENT-1033',
+ 'zSceneP-zOPT-1034',
+ 'zShare-zPK-1035',
+ 'zShare-zENT-1036',
+ 'zShare-zOPT-1037',
+ 'zShare-UUID-1038',
+ 'SPLzShare-UUID-1039',
+ 'zShare-Scope ID = store.cloudphotodb-1040',
+ 'zSharePartic-zPK-1041',
+ 'zSharePartic-zENT-1042',
+ 'zSharePartic-zOPT-1043',
+ 'zSharePartic-Share Key= zShare-zPK-1044',
+ 'zSharePartic-Person= zPerson-zPK-1045',
+ 'zSharePartic-UUID-1046',
+ 'SBKAzSugg-zPK-1047',
+ 'SBKAzSugg-zENT-1048',
+ 'SBKAzSugg-zOPT-1049',
+ 'SBKAzSugg-UUID-1050',
+ 'SBRAzSugg-zPK-1051',
+ 'SBRAzSugg-zENT-1052',
+ 'SBRAzSugg-zOPT-1053',
+ 'SBRAzSugg-UUID-1054',
+ 'z3SuggBRA-3RepAssets1-1055',
+ 'z3SuggBRA-59SuggBeingRepAssets-1056',
+ 'z3SuggBKA-59SuggBeingKeyAssets= zSugg-zPK-1057',
+ 'z3SuggBKA-3KeyAssets= zAsset-zPK-1058',
+ 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1059',
+ 'zUnmAdj-zOPT-1060',
+ 'zUnmAdj-zENT-1061',
+ 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1062',
+ 'zUnmAdj-UUID-1063',
+ 'zUnmAdj-Other Adjustments Fingerprint-1064',
+ 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1065',
+ 'zUserFeedback-zPK-1066',
+ 'zUserFeedback-zENT-1067',
+ 'zUserFeedback-zOPT-1068',
+ 'zUserFeedback-Person= zPerson-zPK-1069',
+ 'zUserFeedback-Memory= zMemory-zPK-1070',
+ 'zUserFeedback-UUID-1071',
+ 'zVisualSearchAttr-zPK-1072',
+ 'zVisualSearchAttr-zENT-1073',
+ 'zVisualSearchAttr-zOPT-1074',
+ 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1075',
+ 'z28AlbumList-28Albums= zGenAlbum-zPK-1076',
+ 'z28AlbumList-Album List Key-1077',
+ 'z28AlbumList-FOK28Albums Key-1078',
+ 'z29Assets-29Albums= zGenAlbum-zPK-1079',
+ 'z29Assets-3Asset Key= zAsset-zPK in the Album-1080',
+ 'z29Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1081',
+ 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1082',
+ 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1083',
+ 'z3MemoryBCAs-45MemoriesBeingCuratedAssets= zMemory-zPK-1084',
+ 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1085',
+ 'z3MemoryBECAs-45MemoriesBeingExtCuratedAssets= zMemory-zPK-1086',
+ 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1087',
+ 'z3MemoryBRAs-45RepresentativeAssets= zMemory-zPK-1088',
+ 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1089',
+ 'z3MemoryBUCAs-45MemoriesBeingUserCuratedAssets= zMemory-zPK-1090',
+ 'z3MemoryBCAs-45Memories Being Custom User Assets-1091',
+ 'z3MemoryBCAs-3Custom User Assets-1092',
+ 'z3MemoryBCAs-FOK-3Custom User Assets-1093')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph98iOS18REFforAssetAnalysis.py b/scripts/artifacts/Ph98iOS18REFforAssetAnalysis.py
index cfd8a809..b2903af0 100644
--- a/scripts/artifacts/Ph98iOS18REFforAssetAnalysis.py
+++ b/scripts/artifacts/Ph98iOS18REFforAssetAnalysis.py
@@ -1,41 +1,66 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 1.0
-#
-# Description:
-# Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest set of decoded data based on
-# testing and research conducted by Scott Koenig https://theforensicscooter.com/ and
-# queries found at https://github.com/ScottKjr3347.
-# I recommend opening the TSV generated reports with Zimmerman's Tools https://ericzimmerman.github.io/#!index.md
-# TimelineExplorer to view, search and filter the results.
-#
+__artifacts_v2__ = {
+ 'Ph98_1iOS18RefforAssetAnalysisPhDaPsql': {
+ 'name': 'Ph98.1-iOS18_Ref_for_Asset_Analysis-PhDaPsql',
+ 'description': 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest'
+ ' set of decoded data based on testing and research conducted by Scott Koenig'
+ ' https://theforensicscooter.com/. I recommend opening the TSV generated reports'
+ ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer'
+ ' to view, search and filter the results.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ },
+ 'Ph98_2iOS18RefforAssetAnalysisSyndPL': {
+ 'name': 'Ph98.2-iOS18_Ref_for_Asset_Analysis-SyndPL',
+ 'description': 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.'
+ ' This parser includes the largest set of decoded data based on testing and research'
+ ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the'
+ ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md'
+ ' TimelineExplorer to view, search and filter the results.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains Syndication.photoslibrary-database-Photos.sqlite',
+ 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis',
+ 'notes': '',
+ 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
-
-
-def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
- for file_found in files_found:
- file_found = str(file_found)
+@artifact_processor
+def Ph98_1iOS18RefforAssetAnalysisPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if (version.parse(iosversion) <= version.parse("17.8")) or (version.parse(iosversion) >= version.parse("19")):
- logfunc(f"Unsupported version for PhotoData-Photos.sqlite reference for asset analysis from iOS " + iosversion)
+ logfunc(f"Unsupported version for PhotoData-Photos.sqlite for iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("19")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found, "Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
CASE zAsset.ZCOMPLETE
WHEN 1 THEN '1-Yes-1'
@@ -43,10 +68,10 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker,
zAsset.Z_PK AS 'zAsset-zPK-4QueryStart',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK-4QueryStart',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb-4QueryStart',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18-4QueryStart',
- zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-iOS18-4QueryStart',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18-4QueryStart',
- zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-iOS18-4QueryStart',
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-4QueryStart',
+ zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-4QueryStart',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-4QueryStart',
+ zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-4QueryStart',
CASE zAsset.ZBUNDLESCOPE
WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0'
WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1'
@@ -96,10 +121,11 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker,
zExtAttr.ZFOCALLENGTHIN35MM AS 'zExtAttr-Focal Lenth in 35MM',
zExtAttr.ZDIGITALZOOMRATIO AS 'zExtAttr-Digital Zoom Ratio',
CASE zExtAttr.ZGENERATIVEAITYPE
- WHEN 0 THEN '0-Not_Generative_AI iOS18_Still_Testing-0'
+ WHEN 0 THEN '0-Gen_AI_Type_Not_Detected-0'
+ WHEN 2 THEN '2-CleanUp-SafetyFilter-2'
ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || ''
- END AS 'zExtAttr-Generative_AI_Type-iOS18',
- zExtAttr.ZCREDIT AS 'zExtAttr-Credit-iOS18',
+ END AS 'zExtAttr-Generative_AI_Type',
+ zExtAttr.ZCREDIT AS 'zExtAttr-Credit',
CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE
WHEN 0 THEN '0-Back-Camera-Other-0'
WHEN 1 THEN '1-Front-Camera-1'
@@ -162,10 +188,10 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker,
ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || ''
END AS 'zAsset-Saved Asset Type',
CASE zAsset.ZISRECENTLYSAVED
- WHEN 0 THEN '0-Not_Recenlty_Saved iOS18_Still_Testing-0'
- WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1'
+ WHEN 0 THEN '0-Not_Recently_Saved-0'
+ WHEN 1 THEN '1-Recently_Saved-1'
ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || ''
- END AS 'zAsset-Is_Recently_Saved-iOS18',
+ END AS 'zAsset-Is_Recently_Saved',
zAsset.ZDIRECTORY AS 'zAsset-Directory-Path',
zAsset.ZFILENAME AS 'zAsset-Filename',
zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename',
@@ -414,10 +440,10 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker,
WHEN 1 THEN '1-Video-1'
END AS 'zAsset-Kind',
CASE zAsset.ZISDETECTEDSCREENSHOT
- WHEN 0 THEN '0-Not_Detected_Screenshot iOS18_Still_Testing-0'
- WHEN 1 THEN '1-Detected_Screenshot iOS18_Still_Testing-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZISDETECTEDSCREENSHOT || ''
- END AS 'zAsset-Is_Detected_Screenshot-iOS18',
+ WHEN 0 THEN '0-Not_Screenshot-0'
+ WHEN 1 THEN '1-Screenshot-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZISDETECTEDSCREENSHOT || ''
+ END AS 'zAsset-Is_Detected_Screenshot',
CASE zAsset.ZKINDSUBTYPE
WHEN 0 THEN '0-Still-Photo-0'
WHEN 1 THEN '1-Paorama-1'
@@ -517,9 +543,9 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker,
zIntResou.ZTRANSIENTCLOUDMASTER AS 'zIntResou-Transient Cloud Master',
zIntResou.ZSIDECARINDEX AS 'zIntResou-Side Car Index',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb-4TableStart',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Orignial Stable Hash-iOS18-4TableStart',
- zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-iOS18-4TableStart',
- zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-iOS18-4TableStart',
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Orignial Stable Hash-4TableStart',
+ zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-4TableStart',
+ zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-4TableStart',
zIntResou.ZFILEID AS 'zIntResou- File ID',
CASE zIntResou.ZVERSION
WHEN 0 THEN '0-IR_Asset_Standard-0'
@@ -715,19 +741,19 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker,
zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart',
zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options',
CASE zAsset.ZADJUSTMENTSSTATE
- WHEN 0 THEN '0-No-Adjustments-0'
- WHEN 2 THEN '2-Yes-Adjustments iOS18_needs_update_Decoding-2'
- WHEN 3 THEN '3-Yes-Adjustments iOS18_needs_update_Decoding-3'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || ''
- END AS 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18',
+ WHEN 0 THEN '0-No-Adjustments-0'
+ WHEN 2 THEN '2-Adjusted-PhotosAppEdit-2'
+ WHEN 3 THEN '3-Adjusted-Camera-lens-3'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || ''
+ END AS 'zAsset-Adjustments_State',
zUnmAdj.ZUUID AS 'zUnmAdj-UUID-4TableStart',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18-4TableStart',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-4TableStart',
zUnmAdj.ZOTHERADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Other Adjustments Fingerprint-4TableStart',
zUnmAdj.ZSIMILARTOORIGINALADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Similar to Orig Adjustments Fingerprint-4TableStart',
- zCompSyncAttr.ZCLOUDCOMPUTESTATEADJUSTMENTFINGERPRINT AS 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18-4TableStart',
+ zCompSyncAttr.ZCLOUDCOMPUTESTATEADJUSTMENTFINGERPRINT AS 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-4TableStart',
DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp',
DateTime(zUnmAdj.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zUnmAdj-Adjustment Timestamp',
- DateTime(zCompSyncAttr.ZCLOUDCOMPUTESTATELASTUPDATEDDATE + 978307200, 'UNIXEPOCH') AS 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18',
+ DateTime(zCompSyncAttr.ZCLOUDCOMPUTESTATELASTUPDATEDDATE + 978307200, 'UNIXEPOCH') AS 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date',
zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID',
zUnmAdj.ZEDITORLOCALIZEDNAME AS 'zUnmAdj-Editor Localized Name',
zUnmAdj.ZADJUSTMENTFORMATIDENTIFIER AS 'zUnmAdj-Adjustment Format ID',
@@ -755,8 +781,8 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker,
ELSE 'Unknown-New-Value!: ' || zUnmAdj.ZADJUSTMENTFORMATVERSION || ''
END AS 'zUnmAdj-Adjustment Format Version',
zUnmAdj.ZADJUSTMENTBASEIMAGEFORMAT AS 'zUnmAdj-Adjustment Base Image Format',
- zCompSyncAttr.ZLOCALANALYSISSTAGE AS 'zCompSyncAttr-Local_Analysis_Stage-iOS18',
- zCompSyncAttr.ZCLOUDCOMPUTESTATEVERSION AS 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18',
+ zCompSyncAttr.ZLOCALANALYSISSTAGE AS 'zCompSyncAttr-Local_Analysis_Stage',
+ zCompSyncAttr.ZCLOUDCOMPUTESTATEVERSION AS 'zCompSyncAttr-Cloud_Compute_State_Version',
CASE zCompSyncAttr.ZLOCALANALYSISMAJORVERSION
WHEN 1 THEN '1-Is_Local_Analysis_Major_Version StillTesing-1'
ELSE 'Unknown-New-Value!: ' || zCompSyncAttr.ZLOCALANALYSISMAJORVERSION || ''
@@ -868,14 +894,14 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker,
WHEN 1 THEN '1-Obs in iOS 18 still testing-1'
ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSLEETISREVERSIBLE || ''
END AS 'zAddAssetAttr.Sleet_Is_Reversible-iOS18',
- zExtAttr.ZSLEETRENDERINGVERSION AS 'zExtAttr-Sleet_Rendering_Version-iOS18',
- zExtAttr.ZSLEETINTENSITY AS 'zExtAttr-Sleet_Intensity-iOS18',
- zExtAttr.ZSLEETTONEBIAS AS 'zExtAttr-Sleet_Tone_Bias-iOS18',
- zExtAttr.ZSLEETCOLORBIAS AS 'zExtAttr-Sleet_Color_Bias-iOS18',
+ zExtAttr.ZSLEETRENDERINGVERSION AS 'zExtAttr-Sleet_Rendering_Version',
+ zExtAttr.ZSLEETINTENSITY AS 'zExtAttr-Sleet_Intensity',
+ zExtAttr.ZSLEETTONEBIAS AS 'zExtAttr-Sleet_Tone_Bias',
+ zExtAttr.ZSLEETCOLORBIAS AS 'zExtAttr-Sleet_Color_Bias',
CASE zExtAttr.ZSLEETCAST
WHEN 0 THEN '0-ObsButUnkn iOS18_Still_Testing-0'
ELSE 'Unknown-New-Value!: ' || zExtAttr.ZSLEETCAST || ''
- END AS 'zExtAttr-Sleet_Cast-iOS18',
+ END AS 'zExtAttr-Sleet_Cast',
zExtAttr.ZISO AS 'zExtAttr-ISO',
zExtAttr.ZMETERINGMODE AS 'zExtAttr-Metering Mode',
zExtAttr.ZSAMPLERATE AS 'zExtAttr-Sample Rate',
@@ -903,11 +929,6 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker,
zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length',
zAddAssetAttr.ZEMBEDDEDTHUMBNAILOFFSET AS 'zAddAssetAttr-Embedded Thumbnail Offset',
zAddAssetAttr.ZEMBEDDEDTHUMBNAILWIDTH AS 'zAddAssetAttr-Embedded Thumbnail Width',
- CASE zAddAssetAttr.ZIMAGEEMBEDDINGVERSION
- WHEN 0 THEN '0-Obs_in_iOS18 still_testing-0'
- WHEN 1 THEN '1-Obs_in_iOS18 still_testing-1'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMAGEEMBEDDINGVERSION || ''
- END AS 'zAddAssetAttr.Image Embedding Version-iOS18',
zAsset.ZPACKEDACCEPTABLECROPRECT AS 'zAsset-Packed Acceptable Crop Rect',
zAsset.ZPACKEDBADGEATTRIBUTES AS 'zAsset-Packed Badge Attributes',
zAsset.ZPACKEDPREFERREDCROPRECT AS 'zAsset-Packed Preferred Crop Rect',
@@ -930,18 +951,6 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker,
zAddAssetAttr.ZPLACEANNOTATIONDATA AS 'zAddAssetAttr-Place Annotation Data',
zAddAssetAttr.ZDISTANCEIDENTITY AS 'zAddAssetAttr-Distance Identity',
zAddAssetAttr.ZEDITEDIPTCATTRIBUTES AS 'zAddAssetAttr-Edited IPTC Attributes',
- zGenAsstDesc.ZASSET AS 'zGenAsstDesc-zAsset= zAsset-zPK-iOS18',
- zAsset.ZGENERATEDASSETDESCRIPTION AS 'zAsset-Generated_Asset_Description= zGenAsstDesc-zPK-iOS18',
- zGenAsstDesc.Z_PK AS 'zGenAsstDesc-zPK= zAsset-GenAsstDesc-iOS18',
- zGenAsstDesc.Z_ENT AS 'zGenAsstDesc-zENT-iOS18',
- zGenAsstDesc.Z_OPT AS 'zGenAsstDesc-zOPT-iOS18',
- DateTime(zGenAsstDesc.ZANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zGenAsstDesc-Analysis_Timestamp-iOS18',
- CASE zGenAsstDesc.ZANALYSISSOURCETYPE
- WHEN 0 THEN '0-NotYetObs iOS18_Still_Testing-0'
- ELSE 'Unknown-New-Value!: ' || zGenAsstDesc.ZANALYSISSOURCETYPE || ''
- END AS 'zGenAsstDesc-Analysis_Source_Type-iOS18',
- zGenAsstDesc.ZANALYSISVERSION AS 'zGenAsstDesc-Analysis Version-iOS18',
- zGenAsstDesc.ZDESCRIPTIONTEXT AS 'zGenAsstDesc-Description_Text-iOS18',
zAssetDes.ZLONGDESCRIPTION AS 'zAssetDes-Long Description',
zAddAssetAttr.ZASSETDESCRIPTION AS 'zAddAssetAttr-Asset Description',
zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website',
@@ -1046,18 +1055,18 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker,
WHEN 63 THEN '63-SPL-Active-Participant-63'
ELSE 'Unknown-New-Value!: ' || SPLzShare.Z_ENT || ''
END AS 'SPLzShare-zENT-SPL',
- CASE zSharePartic.Z62_SHARE
+ CASE zSharePartic.Z61_SHARE
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
WHEN 63 THEN '63-SPL-Active-Participant-63'
- ELSE 'Unknown-New-Value!: ' || zSharePartic.Z62_SHARE || ''
- END AS 'zSharePartic-z62SHARE',
- CASE SPLzSharePartic.Z62_SHARE
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.Z61_SHARE || ''
+ END AS 'zSharePartic-z61SHARE',
+ CASE SPLzSharePartic.Z61_SHARE
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
WHEN 63 THEN '63-SPL-Active-Participant-63'
- ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.Z62_SHARE || ''
- END AS 'SPLzSharePartic-z62SHARE',
+ ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.Z61_SHARE || ''
+ END AS 'SPLzSharePartic-z61SHARE',
CASE zShare.ZSTATUS
WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1'
WHEN 3 THEN '3-SPL-Actively-Sharing-3'
@@ -2383,17 +2392,17 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker,
zMedAnlyAstAttr.ZPROBABLEROTATIONDIRECTION AS 'zMedAnlyAstAttr-Probable Rotation Direction',
zMedAnlyAstAttr.ZSCREENTIMEDEVICEIMAGESENSITIVITY AS 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity',
zMedAnlyAstAttr.ZCOLORNORMALIZATIONDATA AS 'zMedAnlyAstAttr-Color Normalization Data',
- zMedAnlyAstAttr.ZMEDIAANALYSISIMAGEVERSION AS 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18',
- zMedAnlyAstAttr.ZIMAGECAPTIONVERSION AS 'zMedAnlyAstAttr-Image_Caption_Version-iOS18',
- zMedAnlyAstAttr.ZVIDEOCAPTIONVERSION AS 'zMedAnlyAstAttr-Video_Caption_Version-iOS18',
- zMedAnlyAstAttr.ZVALOCATIONANALYSISVERSION AS 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18',
+ zMedAnlyAstAttr.ZMEDIAANALYSISIMAGEVERSION AS 'zMedAnlyAstAttr-Media_Analysis Image_Version',
+ zMedAnlyAstAttr.ZIMAGECAPTIONVERSION AS 'zMedAnlyAstAttr-Image_Caption_Version',
+ zMedAnlyAstAttr.ZVIDEOCAPTIONVERSION AS 'zMedAnlyAstAttr-Video_Caption_Version',
+ zMedAnlyAstAttr.ZVALOCATIONANALYSISVERSION AS 'zMedAnlyAstAttr-VA_Location_Analysis_Version',
zAssetAnalyState.ZASSETUUID AS 'zAssetAnalyState-Asset UUID-4TableStart',
zAssetAnalyState.ZANALYSISSTATE AS 'zAssetAnalyState-Analyisis State',
zAssetAnalyState.ZWORKERFLAGS AS 'zAssetAnalyState-Worker Flags',
zAssetAnalyState.ZWORKERTYPE AS 'zAssetAnalyState-Worker Type',
DateTime(zAssetAnalyState.ZIGNOREUNTILDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Ignore Until Date',
DateTime(zAssetAnalyState.ZLASTIGNOREDDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Last Ignored Date',
- zAssetAnalyState.ZSORTTOKEN AS 'zAssetAnalyState-Sort Token',
+ DateTime(zAssetAnalyState.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Sort Token',
zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES AS 'zMedAnlyAstAttr-Character Recognition Attr',
zCharRecogAttr.ZALGORITHMVERSION AS 'zCharRecogAttr-Algorithm Version',
zCharRecogAttr.ZADJUSTMENTVERSION AS 'zCharRecogAttr-Adjustment Version',
@@ -2461,13 +2470,13 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker,
zAddAssetAttr.Z_OPT AS 'ZAddAssetAttr-zOPT',
zAddAssetAttr.ZASSET AS 'zAddAssetAttr-zAsset= zAsset_zPK',
zAddAssetAttr.ZUNMANAGEDADJUSTMENT AS 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18-4Queryend',
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-4Queryend',
zAddAssetAttr.ZPUBLICGLOBALUUID AS 'zAddAssetAttr-Public Global UUID',
zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier',
zAddAssetAttr.ZORIGINALASSETSUUID AS 'zAddAssetAttr-Original Assets UUID',
zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID',
zAddAssetAttr.ZORIGINATINGASSETIDENTIFIER AS 'zAddAssetAttr-Originating Asset Identifier-4endquery',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18-4endquery',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-4endquery',
zAlbumList.Z_PK AS 'zAlbumList-zPK= Album List Key',
zAlbumList.Z_ENT AS 'zAlbumList-zENT',
zAlbumList.Z_OPT AS 'zAlbumList-zOPT',
@@ -2574,11 +2583,11 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker,
zCompAssetAttr.Z_ENT AS 'zCompAssetAttr-zEnt',
zCompAssetAttr.Z_OPT AS 'zCompAssetAttr-zOpt',
zCompAssetAttr.ZASSET AS 'zCompAssetAttr-Asset Key',
- zAsset.ZCOMPUTESYNCATTRIBUTES AS 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-iOS18',
- zCompSyncAttr.Z_PK AS 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18',
- zCompSyncAttr.ZASSET AS 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18',
- zCompSyncAttr.Z_ENT AS 'zCompSyncAttr-zENT-iOS18',
- zCompSyncAttr.Z_OPT AS 'zCompSyncAttr-zOPT-iOS18',
+ zAsset.ZCOMPUTESYNCATTRIBUTES AS 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK',
+ zCompSyncAttr.Z_PK AS 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr',
+ zCompSyncAttr.ZASSET AS 'zCompSyncAttr-zAsset= zAsset-zPK',
+ zCompSyncAttr.Z_ENT AS 'zCompSyncAttr-zENT',
+ zCompSyncAttr.Z_OPT AS 'zCompSyncAttr-zOPT',
zDetFace.Z_PK AS 'zDetFace-zPK',
zDetFace.Z_ENT AS 'zDetFace-zEnt',
zDetFace.Z_OPT AS 'zDetFace.zOpt',
@@ -2628,8 +2637,8 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker,
zIntResou.Z_ENT AS 'zIntResou-zENT',
zIntResou.Z_OPT AS 'zIntResou-zOPT',
zIntResou.ZASSET AS 'zIntResou-Asset= zAsset_zPK',
- zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-iOS18-4Queryend',
- zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-iOS18-4Queryend',
+ zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-4Queryend',
+ zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-4Queryend',
zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type',
zMedAnlyAstAttr.Z_PK AS 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata',
zMedAnlyAstAttr.Z_ENT AS 'zMedAnlyAstAttr-zEnt',
@@ -2652,7 +2661,7 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker,
zPerson.ZKEYFACE AS 'zPerson-KeyFace=zDetFace-zPK',
zPerson.ZASSOCIATEDFACEGROUP AS 'zPerson-Assoc Face Group Key',
zPerson.ZPERSONUUID AS 'zPerson-Person UUID',
- zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence-iOS18',
+ zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence',
zPhotoAnalysisAssetAttr.Z_PK AS 'zPhotoAnalysisAssetAttr-zPK',
zPhotoAnalysisAssetAttr.Z_ENT AS 'zPhotoAnalysisAssetAttr-zEnt',
zPhotoAnalysisAssetAttr.Z_OPT AS 'zPhotoAnalysisAssetAttr-zOpt',
@@ -2681,8 +2690,8 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker,
SBRAzSugg.Z_OPT AS 'SBRAzSugg-zOPT',
SBRAzSugg.ZUUID AS 'SBRAzSugg-UUID',
z3SuggBRA.Z_3REPRESENTATIVEASSETS AS 'z3SuggBRA-3RepAssets',
- z3SuggBRA.Z_66SUGGESTIONSBEINGREPRESENTATIVEASSETS AS 'z3SuggBRA-66SuggBeingRepAssets',
- z3SuggBKA.Z_66SUGGESTIONSBEINGKEYASSETS AS 'z3SuggBKA-66SuggBeingKeyAssets= zSugg-zPK',
+ z3SuggBRA.Z_65SUGGESTIONSBEINGREPRESENTATIVEASSETS AS 'z3SuggBRA-65SuggBeingRepAssets',
+ z3SuggBKA.Z_65SUGGESTIONSBEINGKEYASSETS AS 'z3SuggBKA-65SuggBeingKeyAssets= zSugg-zPK',
z3SuggBKA.Z_3KEYASSETS1 AS 'z3SuggBKA-3KeyAssets1= zAsset-zPK',
zUnmAdj.Z_PK AS 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key',
zUnmAdj.Z_OPT AS 'zUnmAdj-zOPT',
@@ -2701,22 +2710,22 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker,
zVisualSearchAttr.Z_ENT AS 'zVisualSearchAttr-zENT',
zVisualSearchAttr.Z_OPT AS 'zVisualSearchAttr-zOPT',
zVisualSearchAttr.ZMEDIAANALYSISASSETATTRIBUTES AS 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK',
- z30AlbumLists.Z_30ALBUMS AS 'z30AlbumList-30Albums= zGenAlbum-zPK',
- z30AlbumLists.Z_2ALBUMLISTS AS 'z30AlbumList-Album List Key',
- z30AlbumLists.Z_FOK_30ALBUMS AS 'z30AlbumList-FOK30Albums Key',
- z31Assets.Z_31ALBUMS AS 'z31Assets-31Albums= zGenAlbum-zPK',
- z31Assets.Z_3ASSETS AS 'z31Assets-3Asset Key= zAsset-zPK in the Album',
- z31Assets.Z_FOK_3ASSETS AS 'z31Assets-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY',
+ z29AlbumLists.Z_29ALBUMS AS 'z29AlbumList-29Albums= zGenAlbum-zPK',
+ z29AlbumLists.Z_2ALBUMLISTS AS 'z29AlbumList-Album List Key',
+ z29AlbumLists.Z_FOK_29ALBUMS AS 'z29AlbumList-FOK29Albums Key',
+ z30Assets.Z_30ALBUMS AS 'z30Assets-30Albums= zGenAlbum-zPK',
+ z30Assets.Z_3ASSETS AS 'z30Assets-3Asset Key= zAsset-zPK in the Album',
+ z30Assets.Z_FOK_3ASSETS AS 'z30Assets-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY',
z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AS 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK',
z3MemoryBCAs.Z_3CURATEDASSETS AS 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK',
- z3MemoryBCAs.Z_52MEMORIESBEINGCURATEDASSETS AS 'z3MemoryBCAs-52MemoriesBeingCuratedAssets= zMemory-zPK',
+ z3MemoryBCAs.Z_51MEMORIESBEINGCURATEDASSETS AS 'z3MemoryBCAs-51MemoriesBeingCuratedAssets= zMemory-zPK',
z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK',
- z3MemoryBECAs.Z_52MEMORIESBEINGEXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-52MemoriesBeingExtCuratedAssets= zMemory-zPK',
+ z3MemoryBECAs.Z_51MEMORIESBEINGEXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-51MemoriesBeingExtCuratedAssets= zMemory-zPK',
z3MemoryBRAs.Z_3REPRESENTATIVEASSETS1 AS 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK',
- z3MemoryBRAs.Z_52MEMORIESBEINGREPRESENTATIVEASSETS AS 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK',
+ z3MemoryBRAs.Z_51MEMORIESBEINGREPRESENTATIVEASSETS AS 'z3MemoryBRAs-51RepresentativeAssets= zMemory-zPK',
z3MemoryBUCAs.Z_3USERCURATEDASSETS AS 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK',
- z3MemoryBUCAs.Z_52MEMORIESBEINGUSERCURATEDASSETS AS 'z3MemoryBUCAs-52MemoriesBeingUserCuratedAssets= zMemory-zPK',
- z3MemoryBCUAs.Z_52MEMORIESBEINGCUSTOMUSERASSETS AS 'z3MemoryBCAs-52Memories Being Custom User Assets',
+ z3MemoryBUCAs.Z_51MEMORIESBEINGUSERCURATEDASSETS AS 'z3MemoryBUCAs-51MemoriesBeingUserCuratedAssets= zMemory-zPK',
+ z3MemoryBCUAs.Z_51MEMORIESBEINGCUSTOMUSERASSETS AS 'z3MemoryBCAs-51Memories Being Custom User Assets',
z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AS 'z3MemoryBCAs-3Custom User Assets',
z3MemoryBCUAs.Z_FOK_3CUSTOMUSERASSETS AS 'z3MemoryBCAs-FOK-3Custom User Assets'
FROM ZASSET zAsset
@@ -2724,15 +2733,14 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker,
LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES
LEFT JOIN ZINTERNALRESOURCE zIntResou ON zIntResou.ZASSET = zAsset.Z_PK
LEFT JOIN ZSCENEPRINT zSceneP ON zSceneP.Z_PK = zAddAssetAttr.ZSCENEPRINT
- LEFT JOIN Z_31ASSETS z31Assets ON z31Assets.Z_3ASSETS = zAsset.Z_PK
- LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z31Assets.Z_31ALBUMS
+ LEFT JOIN Z_30ASSETS z30Assets ON z30Assets.Z_3ASSETS = zAsset.Z_PK
+ LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z30Assets.Z_30ALBUMS
LEFT JOIN ZUNMANAGEDADJUSTMENT zUnmAdj ON zAddAssetAttr.ZUNMANAGEDADJUSTMENT = zUnmAdj.Z_PK
- LEFT JOIN Z_30ALBUMLISTS z30AlbumLists ON z30AlbumLists.Z_30ALBUMS = zGenAlbum.Z_PK
- LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z30AlbumLists.Z_2ALBUMLISTS
+ LEFT JOIN Z_29ALBUMLISTS z29AlbumLists ON z29AlbumLists.Z_29ALBUMS = zGenAlbum.Z_PK
+ LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z29AlbumLists.Z_2ALBUMLISTS
LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER
LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION
LEFT JOIN ZASSETDESCRIPTION zAssetDes ON zAssetDes.Z_PK = zAddAssetAttr.ZASSETDESCRIPTION
- LEFT JOIN ZGENERATEDASSETDESCRIPTION zGenAsstDesc ON zGenAsstDesc.Z_PK = zAsset.ZGENERATEDASSETDESCRIPTION
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA
LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
@@ -2759,1389 +2767,1356 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker,
LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON
LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP
LEFT JOIN Z_3MEMORIESBEINGCURATEDASSETS z3MemoryBCAs ON zAsset.Z_PK = z3MemoryBCAs.Z_3CURATEDASSETS
- LEFT JOIN ZMEMORY zMemory ON z3MemoryBCAs.Z_52MEMORIESBEINGCURATEDASSETS = zMemory.Z_PK
- LEFT JOIN Z_3MEMORIESBEINGCUSTOMUSERASSETS z3MemoryBCUAs ON zAsset.Z_PK = z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AND z3MemoryBCUAs.Z_52MEMORIESBEINGCUSTOMUSERASSETS = zMemory.Z_PK
- LEFT JOIN Z_3MEMORIESBEINGEXTENDEDCURATEDASSETS z3MemoryBECAs ON zAsset.Z_PK = z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AND z3MemoryBECAs.Z_52MEMORIESBEINGEXTENDEDCURATEDASSETS = zMemory.Z_PK
- LEFT JOIN Z_3MEMORIESBEINGMOVIECURATEDASSETS z3MemoryBMCAs ON zAsset.Z_PK = z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AND z3MemoryBMCAs.Z_52MEMORIESBEINGMOVIECURATEDASSETS = zMemory.Z_PK
- LEFT JOIN Z_3MEMORIESBEINGREPRESENTATIVEASSETS z3MemoryBRAs ON zAsset.Z_PK = z3MemoryBRAs.Z_3REPRESENTATIVEASSETS1 AND z3MemoryBRAs.Z_52MEMORIESBEINGREPRESENTATIVEASSETS = zMemory.Z_PK
- LEFT JOIN Z_3MEMORIESBEINGUSERCURATEDASSETS z3MemoryBUCAs ON zAsset.Z_PK = z3MemoryBUCAs.Z_3USERCURATEDASSETS AND z3MemoryBUCAs.Z_52MEMORIESBEINGUSERCURATEDASSETS = zMemory.Z_PK
+ LEFT JOIN ZMEMORY zMemory ON z3MemoryBCAs.Z_51MEMORIESBEINGCURATEDASSETS = zMemory.Z_PK
+ LEFT JOIN Z_3MEMORIESBEINGCUSTOMUSERASSETS z3MemoryBCUAs ON zAsset.Z_PK = z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AND z3MemoryBCUAs.Z_51MEMORIESBEINGCUSTOMUSERASSETS = zMemory.Z_PK
+ LEFT JOIN Z_3MEMORIESBEINGEXTENDEDCURATEDASSETS z3MemoryBECAs ON zAsset.Z_PK = z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AND z3MemoryBECAs.Z_51MEMORIESBEINGEXTENDEDCURATEDASSETS = zMemory.Z_PK
+ LEFT JOIN Z_3MEMORIESBEINGMOVIECURATEDASSETS z3MemoryBMCAs ON zAsset.Z_PK = z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AND z3MemoryBMCAs.Z_51MEMORIESBEINGMOVIECURATEDASSETS = zMemory.Z_PK
+ LEFT JOIN Z_3MEMORIESBEINGREPRESENTATIVEASSETS z3MemoryBRAs ON zAsset.Z_PK = z3MemoryBRAs.Z_3REPRESENTATIVEASSETS1 AND z3MemoryBRAs.Z_51MEMORIESBEINGREPRESENTATIVEASSETS = zMemory.Z_PK
+ LEFT JOIN Z_3MEMORIESBEINGUSERCURATEDASSETS z3MemoryBUCAs ON zAsset.Z_PK = z3MemoryBUCAs.Z_3USERCURATEDASSETS AND z3MemoryBUCAs.Z_51MEMORIESBEINGUSERCURATEDASSETS = zMemory.Z_PK
LEFT JOIN ZUSERFEEDBACK zUserFeedback ON zUserFeedback.ZMEMORY = zMemory.Z_PK
LEFT JOIN ZMOMENT zMoment ON zMoment.Z_PK = zAsset.ZMOMENT
LEFT JOIN Z_3SUGGESTIONSBEINGKEYASSETS z3SuggBKA ON z3SuggBKA.Z_3KEYASSETS1 = zAsset.Z_PK
- LEFT JOIN ZSUGGESTION SBKAzSugg ON SBKAzSugg.Z_PK = z3SuggBKA.Z_66SUGGESTIONSBEINGKEYASSETS
+ LEFT JOIN ZSUGGESTION SBKAzSugg ON SBKAzSugg.Z_PK = z3SuggBKA.Z_65SUGGESTIONSBEINGKEYASSETS
LEFT JOIN Z_3SUGGESTIONSBEINGREPRESENTATIVEASSETS z3SuggBRA ON z3SuggBRA.Z_3REPRESENTATIVEASSETS = zAsset.Z_PK
- LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_66SUGGESTIONSBEINGREPRESENTATIVEASSETS
+ LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_65SUGGESTIONSBEINGREPRESENTATIVEASSETS
ORDER BY zAsset.ZADDEDDATE
- """)
+ '''
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
- row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
- row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
- row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
- row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
- row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
- row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
- row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
- row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
- row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
- row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
- row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
- row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
- row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
- row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
- row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
- row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
- row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
- row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
- row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
- row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307],
- row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315],
- row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323],
- row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331],
- row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339],
- row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347],
- row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355],
- row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363],
- row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371],
- row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379],
- row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387],
- row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395],
- row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403],
- row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411],
- row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419],
- row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427],
- row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435],
- row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443],
- row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451],
- row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459],
- row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467],
- row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475],
- row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483],
- row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491],
- row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499],
- row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507],
- row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515],
- row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523],
- row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531],
- row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539],
- row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547],
- row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555],
- row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563],
- row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571],
- row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579],
- row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587],
- row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595],
- row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603],
- row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611],
- row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619],
- row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627],
- row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635],
- row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643],
- row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651],
- row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659],
- row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667],
- row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675],
- row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683],
- row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691],
- row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699],
- row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707],
- row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715],
- row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723],
- row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731],
- row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739],
- row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747],
- row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755],
- row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763],
- row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771],
- row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779],
- row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787],
- row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795],
- row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803],
- row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811],
- row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819],
- row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827],
- row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835],
- row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843],
- row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851],
- row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859],
- row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867],
- row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875],
- row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883],
- row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891],
- row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899],
- row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907],
- row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915],
- row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923],
- row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931],
- row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939],
- row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947],
- row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955],
- row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963],
- row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971],
- row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979],
- row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987],
- row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995],
- row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002],
- row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009],
- row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016],
- row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023],
- row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030],
- row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037],
- row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044],
- row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051],
- row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058],
- row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065],
- row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072],
- row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079],
- row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086],
- row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093],
- row[1094], row[1095], row[1096], row[1097], row[1098], row[1099], row[1100],
- row[1101], row[1102], row[1103], row[1104], row[1105], row[1106], row[1107],
- row[1108], row[1109], row[1110], row[1111], row[1112], row[1113], row[1114],
- row[1115], row[1116], row[1117], row[1118], row[1119], row[1120], row[1121],
- row[1122], row[1123], row[1124], row[1125], row[1126], row[1127], row[1128],
- row[1129], row[1130], row[1131], row[1132], row[1133], row[1134], row[1135],
- row[1136], row[1137], row[1138], row[1139], row[1140], row[1141], row[1142],
- row[1143], row[1144], row[1145], row[1146], row[1147], row[1148], row[1149],
- row[1150], row[1151], row[1152], row[1153], row[1154], row[1155], row[1156],
- row[1157], row[1158], row[1159], row[1160], row[1161], row[1162], row[1163],
- row[1164], row[1165], row[1166], row[1167], row[1168], row[1169]))
-
- counter += 1
-
- description = ('Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest'
- ' set of decoded data based on testing and research conducted by Scott Koenig'
- ' https://theforensicscooter.com/. I recommend opening the TSV generated reports'
- ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer'
- ' to view, search and filter the results.')
- report = ArtifactHtmlReport('Ph98.1-iOS18_Ref_for_Asset_Analysis-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph98.1-iOS18_Ref_for_Asset_Analysis-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset Complete-0',
- 'zAsset-zPK-4QueryStart-1',
- 'zAddAssetAttr-zPK-4QueryStart-2',
- 'zAsset-UUID = store.cloudphotodb-4QueryStart-3',
- 'zAddAssetAttr-Original Stable Hash-iOS18-4QueryStart-4',
- 'zIntResou-Fingerprint-iOS18-4QueryStart-5',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-4QueryStart-6',
- 'zIntResou-Stable Hash-iOS18-4QueryStart-7',
- 'zAsset-Bundle Scope-8',
- 'zAsset-Syndication State-9',
- 'zAsset-Cloud is My Asset-10',
- 'zAsset-Cloud is deletable-Asset-11',
- 'zAsset-Cloud_Local_State-12',
- 'zAsset-Visibility State-13',
- 'zExtAttr-Camera Make-14',
- 'zExtAttr-Camera Model-15',
- 'zExtAttr-Lens Model-16',
- 'zExtAttr-Flash Fired-17',
- 'zExtAttr-Focal Lenght-18',
- 'zExtAttr-Focal Lenth in 35MM-19',
- 'zExtAttr-Digital Zoom Ratio-20',
- 'zExtAttr-Generative_AI_Type-iOS18-21',
- 'zExtAttr-Credit-iOS18-22',
- 'zAsset-Derived Camera Capture Device-23',
- 'zAsset-Capture_Session_Identifier-iOS18-24',
- 'zAddAssetAttr-Camera Captured Device-25',
- 'zAddAssetAttr-Imported by-26',
- 'zCldMast-Imported By-27',
- 'zAddAssetAttr.Imported by Bundle Identifier-28',
- 'zAddAssetAttr-Imported By Display Name-29',
- 'zCldMast-Imported by Bundle ID-30',
- 'zCldMast-Imported by Display Name-31',
- 'zAsset-ImageRequestHints-HEX-Path-32',
- 'zAsset-Saved Asset Type-33',
- 'zAsset-Is_Recently_Saved-iOS18-34',
- 'zAsset-Directory-Path-35',
- 'zAsset-Filename-36',
- 'zAddAssetAttr- Original Filename-37',
- 'zCldMast- Original Filename-38',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-39',
- 'zAsset-Active Library Scope Participation State -4QueryStart-40',
- 'zAsset-Library Scope Share State- StillTesting -4QueryStart-41',
- 'SPLzShare-Cloud Photo Count-SPL -4QueryStart-42',
- 'SPLzShare-Cloud Video Count-SPL -4QueryStart-43',
- 'zAsset-Added Date-44',
- 'zAsset- SortToken -CameraRoll-45',
- 'zAddAssetAttr-Date Created Source-46',
- 'zAsset-Date Created-47',
- 'zCldMast-Creation Date-48',
- 'zIntResou-CldMst Date Created-49',
- 'zAddAssetAttr-Time Zone Name-50',
- 'zAddAssetAttr-Time Zone Offset-51',
- 'zAddAssetAttr-Inferred Time Zone Offset-52',
- 'zAddAssetAttr-EXIF-String-53',
- 'zAsset-Modification Date-54',
- 'zAddAssetAttr-Last Viewed Date-55',
- 'zAsset-Last Shared Date-56',
- 'zCldMast-Cloud Local State-57',
- 'zCldMast-Import Date-58',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-59',
- 'zAddAssetAttr-Import Session ID-4QueryStart-60',
- 'zAddAssetAttr-Alt Import Image Date-61',
- 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-62',
- 'zAsset-Cloud Batch Publish Date-63',
- 'zAsset-Cloud Server Publish Date-64',
- 'zAsset-Cloud Download Requests-65',
- 'zAsset-Cloud Batch ID-66',
- 'zAddAssetAttr-Upload Attempts-67',
- 'zAsset-Latitude-68',
- 'zExtAttr-Latitude-69',
- 'zAsset-Longitude-70',
- 'zExtAttr-Longitude-71',
- 'zAddAssetAttr-GPS Horizontal Accuracy-72',
- 'zAddAssetAttr-Location Hash-73',
- 'zAsset-Location Data-HEX-74',
- 'zAddAssetAttr-Reverse Location Is Valid-75',
- 'zAddAssetAttr-Reverse Location Data-76',
- 'zAddAssetAttr-Shifted Location Valid-77',
- 'zAddAssetAttr-Shifted Location Data-78',
- 'ParentzGenAlbum-UUID-4QueryStart-79',
- 'zGenAlbum-UUID-4QueryStart-80',
- 'SWYConverszGenAlbum-UUID-4QueryStart-81',
- 'ParentzGenAlbum-Cloud GUID-4QueryStart-82',
- 'zGenAlbum-Cloud GUID-4QueryStart-83',
- 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-84',
- 'zCldShareAlbumInvRec-Album GUID-4QueryStart-85',
- 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-86',
- 'zGenAlbum-Project Render UUID-4QueryStart-87',
- 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-88',
- 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-89',
- 'zGenAlbum-Cloud_Local_State-4QueryStart-90',
- 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-91',
- 'ParentzGenAlbum- Creation Date- 4QueryStart-92',
- 'zGenAlbum- Creation Date- 4QueryStart-93',
- 'SWYConverszGenAlbum- Creation Date- 4QueryStart-94',
- 'zGenAlbum- Cloud Creation Date- 4QueryStart-95',
- 'SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-96',
- 'zGenAlbum- Start Date- 4QueryStart-97',
- 'SWYConverszGenAlbum- Start Date- 4QueryStart-98',
- 'zGenAlbum- End Date- 4QueryStart-99',
- 'SWYConverszGenAlbum- End Date- 4QueryStart-100',
- 'zGenAlbum-Cloud Subscription Date- 4QueryStart-101',
- 'SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-102',
- 'ParentzGenAlbum- Title- 4QueryStart-103',
- 'zGenAlbum- Title-User&System Applied- 4QueryStart-104',
- 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-105',
- 'zGenAlbum-Import Session ID-SWY- 4QueryStart-106',
- 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-107',
- 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-108',
- 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-109',
- 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-110',
- 'SWYConverszGenAlbum- Syndicate-4QueryStart-111',
- 'zGenAlbum-zENT- Entity- 4QueryStart-112',
- 'ParentzGenAlbum- Kind- 4QueryStart-113',
- 'zGenAlbum-Album Kind- 4QueryStart-114',
- 'SWYConverszGenAlbum-Album Kind- 4QueryStart-115',
- 'AAAzCldMastMedData-zOPT-4TableStart-116',
- 'zAddAssetAttr-Media Metadata Type-117',
- 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-118',
- 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-119',
- 'AAAzCldMastMedData-Data-HEX-120',
- 'CldMasterzCldMastMedData-zOPT-4TableStart-121',
- 'zCldMast-Media Metadata Type-122',
- 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-123',
- 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-124',
- 'CMzCldMastMedData-Data-HEX-125',
- 'zAsset-Search Index Rebuild State-126',
- 'zAddAssetAttr-Syndication History-127',
- 'zMedAnlyAstAttr-Syndication Processing Version-128',
- 'zMedAnlyAstAttr-Syndication Processing Value-129',
- 'zAsset-Orientation-130',
- 'zAddAssetAttr-Original Orientation-131',
- 'zAsset-Kind-132',
- 'zAsset-Is_Detected_Screenshot-iOS18-133',
- 'zAsset-Kind-Sub-Type-134',
- 'zAddAssetAttr-Cloud Kind Sub Type-135',
- 'zAsset-Playback Style-136',
- 'zAsset-Playback Variation-137',
- 'zAddAssetAttr.View_Presentation-iOS18-138',
- 'zAsset-Video Duration-139',
- 'zExtAttr-Duration-140',
- 'zAsset-Video CP Duration-141',
- 'zAddAssetAttr-Video CP Duration Time Scale-142',
- 'zAsset-Video CP Visibility State-143',
- 'zAddAssetAttr-Video CP Display Value-144',
- 'zAddAssetAttr-Video CP Display Time Scale-145',
- 'zIntResou-Datastore Class ID-146',
- 'zAsset-Cloud Placeholder Kind-147',
- 'zIntResou-Local Availability-148',
- 'zIntResou-Local Availability Target-149',
- 'zIntResou-Cloud Local State-150',
- 'zIntResou-Remote Availability-151',
- 'zIntResou-Remote Availability Target-152',
- 'zIntResou-Transient Cloud Master-153',
- 'zIntResou-Side Car Index-154',
- 'zAsset-UUID = store.cloudphotodb-4TableStart-155',
- 'zAddAssetAttr-Orignial Stable Hash-iOS18-4TableStart-156',
- 'zIntResou-Fingerprint-iOS18-4TableStart-157',
- 'zIntResou-Stable Hash-iOS18-4TableStart-158',
- 'zIntResou- File ID-159',
- 'zIntResou-Version-160',
- 'zAddAssetAttr- Original-File-Size-161',
- 'zIntResou-Resource Type-162',
- 'zIntResou-DataStoreKeyData-HEX-163',
- 'zIntResou-Datastore Sub-Type-164',
- 'zIntResou-Cloud Source Type-165',
- 'zIntResou-Data Length-166',
- 'zIntResou-Recipe ID-167',
- 'zIntResou-Cloud Last Prefetch Date-168',
- 'zIntResou-Cloud Prefetch Count-169',
- 'zIntResou- Cloud-Last-OnDemand Download-Date-170',
- 'zIntResou-UniformTypeID_UTI_Conformance_Hint-171',
- 'zIntResou-Compact-UTI-172',
- 'zAsset-Uniform Type ID-173',
- 'zAsset-Original Color Space-174',
- 'zCldMast-Uniform_Type_ID-175',
- 'zCldMast-Full Size JPEG Source-176',
- 'zAsset-HDR Gain-177',
- 'zAsset-zHDR_Type-178',
- 'zExtAttr-Codec-179',
- 'zIntResou-Codec Four Char Code Name-180',
- 'zCldMast-Codec Name-181',
- 'zCldMast-Video Frame Rate-182',
- 'zCldMast-Placeholder State-183',
- 'zAsset-Depth_Type-184',
- 'zAsset-Avalanche UUID-4TableStart-185',
- 'zAsset-Avalanche_Kind-iOS18-186',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-187',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-188',
- 'zAddAssetAttr-Cloud Recovery State-189',
- 'zAddAssetAttr-Cloud State Recovery Attempts Count-190',
- 'zAsset-Deferred Processing Needed-191',
- 'zAsset-Video Deferred Processing Needed-192',
- 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-193',
- 'zAddAssetAttr-Deferred Processing Candidate Options-194',
- 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18-195',
- 'zUnmAdj-UUID-4TableStart-196',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-4TableStart-197',
- 'zUnmAdj-Other Adjustments Fingerprint-4TableStart-198',
- 'zUnmAdj-Similar to Orig Adjustments Fingerprint-4TableStart-199',
- 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18-4TableStart-200',
- 'zAsset-Adjustment Timestamp-201',
- 'zUnmAdj-Adjustment Timestamp-202',
- 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18-203',
- 'zAddAssetAttr-Editor Bundle ID-204',
- 'zUnmAdj-Editor Localized Name-205',
- 'zUnmAdj-Adjustment Format ID-206',
- 'zAddAssetAttr-Montage-207',
- 'zUnmAdj-Adjustment Render Types-208',
- 'zUnmAdj-Adjustment Format Version-209',
- 'zUnmAdj-Adjustment Base Image Format-210',
- 'zCompSyncAttr-Local_Analysis_Stage-iOS18-211',
- 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18-212',
- 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18-213',
- 'zAsset-Favorite-214',
- 'zAsset-Hidden-215',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-216',
- 'zAsset-Trashed Date-217',
- 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-218',
- 'zAsset-Delete-Reason-219',
- 'zIntResou-Trash State-220',
- 'zIntResou-Trashed Date-221',
- 'zAsset-Cloud Delete State-222',
- 'zIntResou-Cloud Delete State-223',
- 'zAddAssetAttr-PTP Trashed State-224',
- 'zIntResou-PTP Trashed State-225',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-226',
- 'zMedAnlyAstAttr-Media Analysis Timestamp-227',
- 'zAsset-Analysis State Modificaion Date-228',
- 'zAddAssetAttr- Pending View Count-229',
- 'zAddAssetAttr- View Count-230',
- 'zAddAssetAttr- Pending Play Count-231',
- 'zAddAssetAttr- Play Count-232',
- 'zAddAssetAttr- Pending Share Count-233',
- 'zAddAssetAttr- Share Count-234',
- 'zAddAssetAttr-Allowed for Analysis-235',
- 'zAddAssetAttr-Scene Analysis Version-236',
- 'zAddAssetAttr-Scene Analysis is From Preview-237',
- 'zAddAssetAttr-Scene Analysis Timestamp-238',
- 'zAsset-Duplication Asset Visibility State-239',
- 'zAddAssetAttr-Destination Asset Copy State-240',
- 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-241',
- 'zSceneP-Data-HEX NSKeyed Plist-242',
- 'zSceneP-Duplicate Matching Data-HEX NSKeyed Plist-243',
- 'zSceneP-Duplicate Matching Alternat Data-HEX NSKeyed Plist-244',
- 'zAddAssetAttr-Source Asset for Duplication Scope ID-245',
- 'zCldMast-Source Master For Duplication Scope ID-246',
- 'zAddAssetAttr-Source Asset For Duplication ID-247',
- 'zCldMast-Source Master for Duplication ID-248',
- 'zAddAssetAttr-Variation Suggestions States-249',
- 'zAsset-High Frame Rate State-250',
- 'zAsset-Video Key Frame Time Scale-251',
- 'zAsset-Video Key Frame Value-252',
- 'zAsset-Current_Sleet_Cast-iOS18-253',
- 'zAddAssetAttr.Sleet_Is_Reversible-iOS18-254',
- 'zExtAttr-Sleet_Rendering_Version-iOS18-255',
- 'zExtAttr-Sleet_Intensity-iOS18-256',
- 'zExtAttr-Sleet_Tone_Bias-iOS18-257',
- 'zExtAttr-Sleet_Color_Bias-iOS18-258',
- 'zExtAttr-Sleet_Cast-iOS18-259',
- 'zExtAttr-ISO-260',
- 'zExtAttr-Metering Mode-261',
- 'zExtAttr-Sample Rate-262',
- 'zExtAttr-Track Format-263',
- 'zExtAttr-White Balance-264',
- 'zExtAttr-Aperture-265',
- 'zExtAttr-BitRate-266',
- 'zExtAttr-Exposure Bias-267',
- 'zExtAttr-Frames Per Second-268',
- 'zExtAttr-Shutter Speed-269',
- 'zExtAttr-Slush Scene Bias-270',
- 'zExtAttr-Slush Version-271',
- 'zExtAttr-Slush Preset-272',
- 'zExtAttr-Slush Warm Bias-273',
- 'zAsset-Height-274',
- 'zAddAssetAttr-Original Height-275',
- 'zIntResou-Unoriented Height-276',
- 'zAsset-Width-277',
- 'zAddAssetAttr-Original Width-278',
- 'zIntResou-Unoriented Width-279',
- 'zShare-Thumbnail Image Data-280',
- 'SPLzShare-Thumbnail Image Data-281',
- 'zAsset-Thumbnail Index-282',
- 'zAddAssetAttr-Embedded Thumbnail Height-283',
- 'zAddAssetAttr-Embedded Thumbnail Length-284',
- 'zAddAssetAttr-Embedded Thumbnail Offset-285',
- 'zAddAssetAttr-Embedded Thumbnail Width-286',
- 'zAddAssetAttr.Image Embedding Version-iOS18-287',
- 'zAsset-Packed Acceptable Crop Rect-288',
- 'zAsset-Packed Badge Attributes-289',
- 'zAsset-Packed Preferred Crop Rect-290',
- 'zAsset-Curation Score-291',
- 'zAsset-Camera Processing Adjustment State-292',
- 'zAsset-Depth Type-293',
- 'zAsset-Is Magic Carpet-QuicktimeMOVfile-294',
- 'zAddAssetAttr-Orig Resource Choice-295',
- 'zAsset-Spatial Type-296',
- 'zAddAssetAttr-Spatial Over Capture Group ID-297',
- 'zAddAssetAttr-Object Saliency Rects Data-HEX NSKeyed Plist-298',
- 'zAddAssetAttr-Original Hash-HEX-299',
- 'zAddAssetAttr-Place Annotation Data-300',
- 'zAddAssetAttr-Distance Identity-301',
- 'zAddAssetAttr-Edited IPTC Attributes-302',
- 'zGenAsstDesc-zAsset= zAsset-zPK-iOS18-303',
- 'zAsset-Generated_Asset_Description= zGenAsstDesc-zPK-iOS18-304',
- 'zGenAsstDesc-zPK= zAsset-GenAsstDesc-iOS18-305',
- 'zGenAsstDesc-zENT-iOS18-306',
- 'zGenAsstDesc-zOPT-iOS18-307',
- 'zGenAsstDesc-Analysis_Timestamp-iOS18-308',
- 'zGenAsstDesc-Analysis_Source_Type-iOS18-309',
- 'zGenAsstDesc-Analysis Version-iOS18-310',
- 'zGenAsstDesc-Description_Text-iOS18-311',
- 'zAssetDes-Long Description-312',
- 'zAddAssetAttr-Asset Description-313',
- 'zAddAssetAttr-Title-Comments via Cloud Website-314',
- 'zAddAssetAttr-Accessibility Description-315',
- 'zAddAssetAttr-Photo Stream Tag ID-316',
- 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-317',
- 'zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-318',
- 'zPhotoAnalysisAssetAttr-Wallpaper Properties Data-319',
- 'zCldFeedEnt-Entry Date-320',
- 'zCldFeedEnt-Entry_Is_Mine-iOS18-321',
- 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-322',
- 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-323',
- 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-324',
- 'zCldFeedEnt-Entry Priority Number-325',
- 'zCldFeedEnt-Entry Type Number-326',
- 'zCldSharedComment-Cloud GUID-4TableStart-327',
- 'zCldSharedComment-Date-328',
- 'zCldSharedComment-Comment Client Date-329',
- 'zAsset-Cloud Last Viewed Comment Date-330',
- 'zCldSharedComment-Type-331',
- 'zCldSharedComment-Comment Text-332',
- 'zCldSharedComment-Commenter Hashed Person ID-333',
- 'zCldSharedComment-Batch Comment-334',
- 'zCldSharedComment-Is a Caption-335',
- 'zAsset-Cloud Has Comments by Me-336',
- 'zCldSharedComment-Is My Comment-337',
- 'zCldSharedComment-Is Deletable-338',
- 'zAsset-Cloud Has Comments Conversation-339',
- 'zAsset-Cloud Has Unseen Comments-340',
- 'zCldSharedComment-Liked-341',
- 'zAddAssetAttr-Share Type-342',
- 'zAsset-Library Scope Share State- StillTesting-343',
- 'zAsset-Active Library Scope Participation State-344',
- 'zAddAssetAttr-Library Scope Asset Contributors To Update-345',
- 'zShare-UUID-CMM-4TableStart-346',
- 'SPLzShare-UUID-SPL-4TableStart-347',
- 'zShare-zENT-CMM-348',
- 'SPLzShare-zENT-SPL-349',
- 'zSharePartic-z62SHARE-350',
- 'SPLzSharePartic-z62SHARE-351',
- 'zShare-Status-CMM-352',
- 'zShare-Status-SPL-353',
- 'zShare-Scope Type-CMM-354',
- 'zShare-Scope Type-SPL-355',
- 'zShare-Local Publish State-CMM-356',
- 'SPLzShare-Local Publish State-SPL-357',
- 'zShare-Public Permission-CMM-358',
- 'SPLzShare-Public Permission-SPL-359',
- 'zShare-Originating Scope ID-CMM-360',
- 'SPLzShare-Originating Scope ID-SPL-361',
- 'zShare-Scope ID-CMM-362',
- 'SPLzShare-Scope ID-SPL-363',
- 'zShare-Title-CMM-364',
- 'SPLzShare-Title-SPL-365',
- 'zShare-Share URL-CMM-366',
- 'SPLzShare-Share URL-SPL-367',
- 'zShare-Creation Date-CMM-368',
- 'SPLzShare-Creation Date-SPL-369',
- 'zShare-Start Date-CMM-370',
- 'SPLzShare-Start Date-SPL-371',
- 'zShare-End Date-CMM-372',
- 'SPLzShare-End Date-SPL-373',
- 'zShare-Expiry Date-CMM-374',
- 'SPLzShare-Expiry Date-SPL-375',
- 'zShare-Cloud Item Count-CMM-376',
- 'SPLzShare-Cloud Item Count-SPL-377',
- 'zShare-Asset Count-CMM-378',
- 'SPLzShare-Asset Count-SPL-379',
- 'zShare-Cloud Photo Count-CMM-380',
- 'SPLzShare-Cloud Photo Count-SPL-381',
- 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-382',
- 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-383',
- 'zShare-Photos Count-CMM-384',
- 'SPLzShare-Photos Count-CMM-SPL-385',
- 'zShare-Uploaded Photos Count-CMM-386',
- 'SPLzShare-Uploaded Photos Count-SPL-387',
- 'zShare-Cloud Video Count-CMM-388',
- 'SPLzShare-Cloud Video Count-SPL-389',
- 'zShare-Videos Count-CMM-390',
- 'SPLzShare-Videos Count-SPL-391',
- 'zShare-Uploaded Videos Count-CMM-392',
- 'SPLzShare-Uploaded Videos Count-SPL-393',
- 'zShare-Force Sync Attempted-CMM-394',
- 'SPLzShare-Force Sync Attempted-SPL-395',
- 'zShare-Cloud Local State-CMM-396',
- 'SPLzShare-Cloud Local State-SPL-397',
- 'zShare-Scope Syncing State-CMM-398',
- 'SPLzShare-Scope Syncing State-SPL-399',
- 'zShare-Auto Share Policy-CMM-400',
- 'SPLzShare-Auto Share Policy-SPL-401',
- 'zShare-Should Notify On Upload Completion-CMM-402',
- 'SPLzShare-Should Notify On Upload Completion-SPL-403',
- 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-404',
- 'zShare-Trashed State-CMM-405',
- 'SPLzShare-Trashed State-SPL-406',
- 'zShare-Cloud Delete State-CMM-407',
- 'SPLzShare-Cloud Delete State-SPL-408',
- 'zShare-Trashed Date-CMM-409',
- 'SPLzShare-Trashed Date-SPL-410',
- 'zShare-LastParticipant Asset Trash Notification Date-CMM-411',
- 'SPLzShare-LastParticipant Asset Trash Notification Date-SPL-412',
- 'zShare-Last Participant Asset Trash Notification View Date-CMM-413',
- 'SPLzShare-Last Participant Asset Trash Notification View Date-SPL-414',
- 'zShare-Exit Source-CMM-415',
- 'SPLzShare-Exit Source-SPL-416',
- 'zShare-SPL_Exit State-CMM-417',
- 'SPLzShare-SPL_Exit State-SPL-418',
- 'zShare-Exit Type-CMM-419',
- 'SPLzShare-Exit Type-SPL-420',
- 'zShare-Should Ignor Budgets-CMM-421',
- 'SPLzShare-Should Ignor Budgets-SPL-422',
- 'zShare-Preview State-CMM-423',
- 'SPLzShare-Preview State-SPL-424',
- 'zShare-Preview Data-CMM-425',
- 'SPLzShare-Preview Data-SPL-426',
- 'zShare-Rules-CMM-427',
- 'SPLzShare-Rules-SPL-428',
- 'zShare-Thumbnail Image Data-CMM-429',
- 'SPLzShare-Thumbnail Image Data-SPL-430',
- 'zShare-Participant Cloud Update State-CMM-431',
- 'SPLzShare-Participant Cloud Update State-SPL-432',
- 'zSharePartic-UUID-4TableStart-433',
- 'SPLzSharePartic-UUID-4TableStart-434',
- 'zSharePartic-Acceptance Status-435',
- 'SPLzSharePartic-Acceptance Status-436',
- 'zSharePartic-Is Current User-437',
- 'SPLzSharePartic-Is Current User-438',
- 'zSharePartic-Role-439',
- 'SPLzSharePartic-Role-440',
- 'zSharePartic-Premission-441',
- 'SPLzSharePartic-Premission-442',
- 'zSharePartic-Participant ID-443',
- 'SPLzSharePartic-Participant ID-444',
- 'zSharePartic-User ID-445',
- 'SPLzSharePartic-User ID-446',
- 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-447',
- 'SPLzSharePartic-zPK-4TableStart-448',
- 'zSharePartic-zPK-4TableStart-449',
- 'zSharePartic-Email Address-450',
- 'SPLzSharePartic-Email Address-451',
- 'zSharePartic-Phone Number-452',
- 'SPLzSharePartic-Phone Number-453',
- 'zSharePartic-Name Components-454',
- 'SPLzSharePartic-Name Components-455',
- 'zSharePartic-Exit State-456',
- 'SPLzSharePartic-Exit State-457',
- 'ParentzGenAlbum-UUID-4TableStart-458',
- 'zGenAlbum-UUID-4TableStart-459',
- 'SWYConverszGenAlbum-UUID-4TableStart-460',
- 'ParentzGenAlbum-Cloud GUID-4TableStart-461',
- 'zGenAlbum-Cloud GUID-4TableStart-462',
- 'SWYConverszGenAlbum-Cloud GUID-4TableStart-463',
- 'zCldShareAlbumInvRec-Album GUID-4TableStart-464',
- 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-465',
- 'zGenAlbum-Project Render UUID-4TableStart-466',
- 'SWYConverszGenAlbum-Project Render UUID-4TableStart-467',
- 'zAlbumList-Needs Reordering Number-468',
- 'zGenAlbum-zENT- Entity-469',
- 'ParentzGenAlbum-Kind-470',
- 'zGenAlbum-Album Kind-471',
- 'SWYConverszGenAlbum-Album Kind-472',
- 'ParentzGenAlbum-Cloud-Local-State-473',
- 'zGenAlbum-Cloud_Local_State-474',
- 'SWYConverszGenAlbum-Cloud_Local_State-475',
- 'ParentzGenAlbum- Title-476',
- 'zGenAlbum- Title-User&System Applied-477',
- 'SWYConverszGenAlbum- Title -User&System Applied-478',
- 'zGenAlbum-Import Session ID-SWY-479',
- 'zAsset- Conversation= zGenAlbum_zPK-480',
- 'SWYConverszGenAlbum- Import Session ID-SWY-481',
- 'zGenAlbum-Imported by Bundle Identifier-482',
- 'SWYzGenAlbum-Imported by Bundle Identifier-483',
- 'SWYConverszGenAlbum- Syndicate-484',
- 'ParentzGenAlbum-Creation Date-485',
- 'zGenAlbum-Creation Date-486',
- 'SWYConverszGenAlbum-Creation Date-487',
- 'zGenAlbum-Cloud Creation Date-488',
- 'SWYConverszGenAlbum-Cloud Creation Date-489',
- 'zGenAlbum-Start Date-490',
- 'SWYConverszGenAlbum-Start Date-491',
- 'zGenAlbum-End Date-492',
- 'SWYConverszGenAlbum-End Date-493',
- 'zGenAlbum-Cloud Subscription Date-494',
- 'SWYConverszGenAlbum-Cloud Subscription Date-495',
- 'zGenAlbum-Cloud Metadata-HEX NSKeyed Plist-496',
- 'SWYConverszGenAlbum-Cloud Metadata-HEX NSKeyed Plist-497',
- 'ParentzGenAlbum-Pending Items Count-498',
- 'zGenAlbum-Pending Items Count-499',
- 'SWYConverszGenAlbum-Pending Items Count-500',
- 'ParentzGenAlbum-Pending Items Type-501',
- 'zGenAlbum-Pending Items Type-502',
- 'SWYConverszGenAlbum-Pending Items Type-503',
- 'zGenAlbum- Cached Photos Count-504',
- 'SWYConverszGenAlbum- Cached Photos Count-505',
- 'zGenAlbum- Cached Videos Count-506',
- 'SWYConverszGenAlbum- Cached Videos Count-507',
- 'zGenAlbum- Cached Count-508',
- 'SWYConverszGenAlbum- Cached Count-509',
- 'ParentzGenAlbum-Sync Event Order Key-510',
- 'zGenAlbum-Sync Event Order Key-511',
- 'SWYConverszGenAlbum-Sync Event Order Key-512',
- 'zGenAlbum-Has Unseen Content-513',
- 'SWYConverszGenAlbum-Has Unseen Content-514',
- 'zGenAlbum-Unseen Asset Count-515',
- 'SWYConverszGenAlbum-Unseen Asset Count-516',
- 'zGenAlbum-is Owned-517',
- 'SWYConverszGenAlbum-is Owned-518',
- 'zGenAlbum-Cloud Relationship State-519',
- 'SWYConverszGenAlbum-Cloud Relationship State-520',
- 'zGenAlbum-Cloud Relationship State Local-521',
- 'SWYConverszGenAlbum-Cloud Relationship State Local-522',
- 'zGenAlbum-Cloud Owner Mail Key-523',
- 'SWYConverszGenAlbum-Cloud Owner Mail Key-524',
- 'zGenAlbum-Cloud Owner Frist Name-525',
- 'SWYConverszGenAlbum-Cloud Owner Frist Name-526',
- 'zGenAlbum-Cloud Owner Last Name-527',
- 'SWYConverszGenAlbum-Cloud Owner Last Name-528',
- 'zGenAlbum-Cloud Owner Full Name-529',
- 'SWYConverszGenAlbum-Cloud Owner Full Name-530',
- 'zGenAlbum-Cloud Person ID-531',
- 'SWYConverszGenAlbum-Cloud Person ID-532',
- 'zAsset-Cloud Owner Hashed Person ID-533',
- 'zGenAlbum-Cloud Owner Hashed Person ID-534',
- 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-535',
- 'zGenAlbum-Local Cloud Multi-Contributors Enabled-536',
- 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-537',
- 'zGenAlbum-Cloud Multi-Contributors Enabled-538',
- 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-539',
- 'zGenAlbum-Cloud Album Sub Type-540',
- 'SWYConverszGenAlbum-Cloud Album Sub Type-541',
- 'zGenAlbum-Cloud Contribution Date-542',
- 'SWYConverszGenAlbum-Cloud Contribution Date-543',
- 'zGenAlbum-Cloud Last Interesting Change Date-544',
- 'SWYConverszGenAlbum-Cloud Last Interesting Change Date-545',
- 'zGenAlbum-Cloud Notification Enabled-546',
- 'SWYConverszGenAlbum-Cloud Notification Enabled-547',
- 'ParentzGenAlbum-Pinned-548',
- 'zGenAlbum-Pinned-549',
- 'SWYConverszGenAlbum-Pinned-550',
- 'ParentzGenAlbum-Custom Sort Key-551',
- 'zGenAlbum-Custom Sort Key-552',
- 'SWYConverszGenAlbum-Custom Sort Key-553',
- 'ParentzGenAlbum-Custom Sort Ascending-554',
- 'zGenAlbum-Custom Sort Ascending-555',
- 'SWYConverszGenAlbum-Custom Sort Ascending-556',
- 'ParentzGenAlbum-Is Prototype-557',
- 'zGenAlbum-Is Prototype-558',
- 'SWYConverszGenAlbum-Is Prototype-559',
- 'ParentzGenAlbum-Project Document Type-560',
- 'zGenAlbum-Project Document Type-561',
- 'SWYConverszGenAlbum-Project Document Type-562',
- 'ParentzGenAlbum-Custom Query Type-563',
- 'zGenAlbum-Custom Query Type-564',
- 'SWYConverszGenAlbum-Custom Query Type-565',
- 'ParentzGenAlbum-Trashed State-566',
- 'ParentzGenAlbum-Trash Date-567',
- 'zGenAlbum-Trashed State-568',
- 'zGenAlbum-Trash Date-569',
- 'SWYConverszGenAlbum-Trashed State-570',
- 'SWYConverszGenAlbum-Trash Date-571',
- 'ParentzGenAlbum-Cloud Delete State-572',
- 'zGenAlbum-Cloud Delete State-573',
- 'SWYConverszGenAlbum-Cloud Delete State-574',
- 'zGenAlbum-Cloud Owner Whitelisted-575',
- 'SWYConverszGenAlbum-Cloud Owner Whitelisted-576',
- 'zGenAlbum-Cloud Local Public URL Enabled-577',
- 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-578',
- 'zGenAlbum-Cloud Public URL Enabled-579',
- 'zGenAlbum-Public URL-580',
- 'SWYConverszGenAlbum-Cloud Public URL Enabled-581',
- 'SWYConverszGenAlbum-Public URL-582',
- 'zGenAlbum-Key Asset Face Thumb Index-583',
- 'SWYConverszGenAlbum-Key Asset Face Thumb Index-584',
- 'zGenAlbum-Project Text Extension ID-585',
- 'SWYConverszGenAlbum-Project Text Extension ID-586',
- 'zGenAlbum-User Query Data-587',
- 'SWYConverszGenAlbum-User Query Data-588',
- 'zGenAlbum-Custom Query Parameters-589',
- 'SWYConverszGenAlbum-Custom Query Parameters-590',
- 'zGenAlbum-Project Data-591',
- 'SWYConverszGenAlbum-Project Data-592',
- 'zGenAlbum-Search Index Rebuild State-593',
- 'SWYConverszGenAlbum-Search Index Rebuild State-594',
- 'zGenAlbum-Duplicate Type-595',
- 'SWYConverszGenAlbum-Duplicate Type-596',
- 'zGenAlbum-Privacy State-597',
- 'SWYConverszGenAlbum-Privacy State-598',
- 'zCldShareAlbumInvRec-zUUID-4TableStart-599',
- 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-600',
- 'zCldShareAlbumInvRec-Invitation State Local-601',
- 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-602',
- 'zCldShareAlbumInvRec-Subscription Date-603',
- 'zCldShareAlbumInvRec-Invitee First Name-604',
- 'zCldShareAlbumInvRec-Invitee Last Name-605',
- 'zCldShareAlbumInvRec-Invitee Full Name-606',
- 'zCldShareAlbumInvRec-Invitee Hashed Person ID-607',
- 'zCldShareAlbumInvRec-Invitee Email Key-608',
- 'zGenAlbum-Key Asset Face ID-609',
- 'zFaceCrop-Face Area Points-610',
- 'zAddAssetAttr.Has_People_Scene Mid_Or_Greater_Confidence-iOS18-611',
- 'zAsset-Face Adjustment Version-612',
- 'zAddAssetAttr-Face Regions HEX-613',
- 'zAddAssetAttr-Face Analysis Version-614',
- 'zDetFace-Asset Visible-615',
- 'zDetFacePrint-Data HEX-616',
- 'zPerson-Contact Matching Dictionary HEX-617',
- 'zPerson-Face Count-618',
- 'zDetFace-Face Crop-619',
- 'zDetFace-Face Algorithm Version-620',
- 'zDetFace-Adjustment Version-621',
- 'zDetFace-UUID-4TableStart-622',
- 'zPerson-Person UUID-4TableStart-623',
- 'zPerson-Is_Me_Confidence-iOS18-624',
- 'zPerson - MD ID-625',
- 'zPerson - Asset Sort Order-626',
- 'zDetFace-Confirmed Face Crop Generation State-627',
- 'zDetFace-Manual-628',
- 'zDetFace-Detection Type-629',
- 'zPerson-Detection Type-630',
- 'zDetFace-VIP Model Type-631',
- 'zDetFace-Name Source-632',
- 'zDetFace-Cloud Name Source-633',
- 'zPerson-Merge Candidate Confidence-634',
- 'zPerson-Person URI-635',
- 'zPerson-Display Name-636',
- 'zPerson-Full Name-637',
- 'zPerson-Cloud Verified Type-638',
- 'zFaceCrop-State-639',
- 'zFaceCrop-Type-640',
- 'zFaceCrop-Resource Data-HEX-PHOTO used for FaceCrop-641',
- 'zFaceCrop-UUID-4TableStart-642',
- 'zPerson-Type-643',
- 'zPerson-Verified Type-644',
- 'zPerson-Gender Type-645',
- 'zDetFace-Gender Type-646',
- 'zDetFace-Center X-647',
- 'zDetFace-Center Y-648',
- 'zPerson-Age Type Estimate-649',
- 'zDetFace-Age Type Estimate-650',
- 'zDetFace-Ethnicity Type-651',
- 'zDetFace-Skin Tone Type-652',
- 'zDetFace-Hair Type-653',
- 'zDetFace-Hair Color Type-654',
- 'zDetFace-Head Gear Type-655',
- 'zDetFace-Facial Hair Type-656',
- 'zDetFace-Has Face Mask-657',
- 'zDetFace-Pose Type-658',
- 'zDetFace-Face Expression Type-659',
- 'zDetFace-Has Smile-660',
- 'zDetFace-Smile Type-661',
- 'zDetFace-Lip Makeup Type-662',
- 'zDetFace-Eyes State-663',
- 'zDetFace-Is Left Eye Closed-664',
- 'zDetFace-Is Right Eye Closed-665',
- 'zDetFace-Gaze Center X-666',
- 'zDetFace-Gaze Center Y-667',
- 'zDetFace-Face Gaze Type-668',
- 'zDetFace-Eye Glasses Type-669',
- 'zDetFace-Eye Makeup Type-670',
- 'zDetFace-Cluster Squence Number Key-671',
- 'zDetFace-Grouping ID-672',
- 'zDetFace-Master ID-673',
- 'zDetFace-Quality-674',
- 'zDetFace-Quality Measure-675',
- 'zDetFace-Source Height-676',
- 'zDetFace-Source Width-677',
- 'zDetFace-Hidden-Asset Hidden-678',
- 'zDetFace-In Trash-Recently Deleted-679',
- 'zDetFace-Cloud Local State-680',
- 'zDetFace-Training Type-681',
- 'zDetFace.Pose Yaw-682',
- 'zDetFace-Body Center X-683',
- 'zDetFace-Body Center Y-684',
- 'zDetFace-Body Height-685',
- 'zDetFace-Body Width-686',
- 'zDetFace-Roll-687',
- 'zDetFace-Size-688',
- 'zDetFace-Cluster Squence Number-689',
- 'zDetFace-Blur Score-690',
- 'zDetFacePrint-Face Print Version-691',
- 'zMedAnlyAstAttr-Face Count-692',
- 'zDetFaceGroup-UUID-4TableStart-693',
- 'zDetFaceGroup-Person Builder State-694',
- 'zDetFaceGroup-UnNamed Face Count-695',
- 'zPerson-In Person Naming Model-696',
- 'zPerson-Key Face Pick Source Key-697',
- 'zPerson-Manual Order Key-698',
- 'zPerson-Question Type-699',
- 'zPerson-Suggested For Client Type-700',
- 'zPerson-Merge Target Person-701',
- 'zPerson-Cloud Local State-702',
- 'zFaceCrop-Cloud Local State-703',
- 'zFaceCrop-Cloud Type-704',
- 'zPerson-Cloud Delete State-705',
- 'zFaceCrop-Cloud Delete State-706',
- 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-707',
- 'zAsset-Highlight Visibility Score-708',
- 'zMemory-UUID-4TableStart-709',
- 'zMemory-AssetListPredicte-710',
- 'zMemory-Score-711',
- 'zMemory-SubTitle-712',
- 'zMemory-Title-713',
- 'zMemory-Category-714',
- 'zMemory-SubCategory-715',
- 'zMemory-Creation Date-716',
- 'zMemory-Last Enrichment Date-717',
- 'zMemory-User Action Options-718',
- 'zMemory-Favorite Memory-719',
- 'zMemory-View Count-720',
- 'zMemory-Play Count-721',
- 'zMemory-Rejected-722',
- 'zMemory-Share Count-723',
- 'zMemory-Sharing Composition-724',
- 'zMemory-PhotosGraphData-HEX NSKeyed Plist-725',
- 'zMemory-MovieAssetState-HEX NSKeyed Plist-726',
- 'zMemory-MovieData-HEX NSKeyed Plist-727',
- 'zMemory-Last Movie Play Date-728',
- 'zMemory-Last Viewed Date-729',
- 'zMemory-Pending Play Count Memory-730',
- 'zMemory-Pending Share Count Memory-731',
- 'zMemory-Pending View Count Memory-732',
- 'zMemory-Pending State-733',
- 'zMemory-Featured State-734',
- 'zMemory-Photos Graph Version-735',
- 'zMemory-Graph Memory Identifier-736',
- 'zMemory-Notification State-737',
- 'zMemory-Cloud Local State-738',
- 'zMemory-Cloud Delete State-739',
- 'zMemory-Story Color Grade Kind-740',
- 'zMemory-Story Serialized Title Category-741',
- 'zMemory-Syndicated Content State-742',
- 'zMemory-Search Index Rebuild State-743',
- 'zMemory-Black Listed Feature-744',
- 'zMoment-UUID-4TableStart-745',
- 'zMoment-Aggregation Score-746',
- 'zMoment-Start Date-747',
- 'zMoment-Representative Date-748',
- 'zMoment-Timezone Offset-749',
- 'zMoment-Modification Date-750',
- 'zMoment-End Date-751',
- 'zMoment-SubTitle-752',
- 'zMoment-Localized Location Names-753',
- 'zMoment-Title-754',
- 'zMoment-Originator State-755',
- 'zMoment-Sharing Composition-756',
- 'zMoment-Cached Count Shared-757',
- 'zMoment-Processed Location-758',
- 'zMoment-Approx Latitude-759',
- 'zMoment-Approx Longitude-760',
- 'zMoment-GPS Horizontal Accuracy-761',
- 'zMoment-Cache Count-762',
- 'zMoment-Cached Photos Count-763',
- 'zMoment-Cached Videos Count-764',
- 'zMoment-Trashed State-765',
- 'SBKAzSugg-UUID-4TableStart-766',
- 'SBKAzSugg-Suggestion Context-767',
- 'SBKAzSugg-Sharing Composition-768',
- 'SBKAzSugg-Start Date-769',
- 'SBKAzSugg-State-770',
- 'SBKAzSugg-Featured State-771',
- 'SBKAzSugg- Available Features-772',
- 'SBKAzSugg-Notification State-773',
- 'SBKAzSugg-Creation Date-774',
- 'SBKAzSugg-End Date-775',
- 'SBKAzSugg-Activation Date-776',
- 'SBKAzSugg-Expunge Date-777',
- 'SBKAzSugg-Relevant Until Date-778',
- 'SBKAzSugg-Title-779',
- 'SBKAzSugg-Sub Title-780',
- 'SBKAzSugg-Cached Count-781',
- 'SBKAzSugg-Cahed Photos Count-782',
- 'SBKAzSugg-Cached Videos Count-783',
- 'SBKAzSugg-Type-784',
- 'SBKAzSugg-Sub Type-785',
- 'SBKAzSugg-Action Data-786',
- 'SBKAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist-787',
- 'SBKAzSugg-Version-788',
- 'SBKAzSugg-Cloud Local State-789',
- 'SBKAzSugg-Cloud Delete State-790',
- 'SBRAzSugg-UUID-4TableStart-791',
- 'SBRAzSugg-Suggestion Context-792',
- 'SBRAzSugg-Sharing Composition-793',
- 'SBRAzSugg-Start Date-794',
- 'SBRAzSugg-State-795',
- 'SBRAzSugg-Featured State-796',
- 'SBRAzSugg- Available Features-797',
- 'SBRAzSugg-Notification State-798',
- 'SBRAzSugg-Creation Date-799',
- 'SBRAzSugg-End Date-800',
- 'SBRAzSugg-Activation Date-801',
- 'SBRAzSugg-Expunge Date-802',
- 'SBRAzSugg-Relevant Until Date-803',
- 'SBRAzSugg-Title-804',
- 'SBRAzSugg-Sub Title-805',
- 'SBRAzSugg-Cached Count-806',
- 'SBRAzSugg-Cahed Photos Count-807',
- 'SBRAzSugg-Cached Videos Count-808',
- 'SBRAzSugg-Type-809',
- 'SBRAzSugg-Sub Type-810',
- 'SBRAzSugg-Action Data-811',
- 'SBRAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist-812',
- 'SBRAzSugg-Version-813',
- 'SBRAzSugg-Cloud Local State-814',
- 'SBRAzSugg-Cloud Delete State-815',
- 'zMedAnlyAstAttr-Media Analysis Version-816',
- 'zMedAnlyAstAttr-Audio Classification-817',
- 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-818',
- 'zMedAnlyAstAttr-Best Video Range Start Time Scale-819',
- 'zMedAnlyAstAttr-Best Video Range Duration Value-820',
- 'zMedAnlyAstAttr-Best Video Range Start Value-821',
- 'zMedAnlyAstAttr-Packed Best Playback Rect-822',
- 'zMedAnlyAstAttr-Activity Score-823',
- 'zMedAnlyAstAttr-Video Score-824',
- 'zMedAnlyAstAttr-Audio Score-825',
- 'zMedAnlyAstAttr-Wallpaper Score-826',
- 'zMedAnlyAstAttr-AutoPlay Suggestion Score-827',
- 'zMedAnlyAstAttr-Blurriness Score-828',
- 'zMedAnlyAstAttr-Exposure Score-829',
- 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-830',
- 'zMedAnlyAstAttr-Probable Rotation Direction-831',
- 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-832',
- 'zMedAnlyAstAttr-Color Normalization Data-833',
- 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18-834',
- 'zMedAnlyAstAttr-Image_Caption_Version-iOS18-835',
- 'zMedAnlyAstAttr-Video_Caption_Version-iOS18-836',
- 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18-837',
- 'zAssetAnalyState-Asset UUID-4TableStart-838',
- 'zAssetAnalyState-Analyisis State-839',
- 'zAssetAnalyState-Worker Flags-840',
- 'zAssetAnalyState-Worker Type-841',
- 'zAssetAnalyState-Ignore Until Date-842',
- 'zAssetAnalyState-Last Ignored Date-843',
- 'zAssetAnalyState-Sort Token-844',
- 'zMedAnlyAstAttr-Character Recognition Attr-845',
- 'zCharRecogAttr-Algorithm Version-846',
- 'zCharRecogAttr-Adjustment Version-847',
- 'zCharRecogAttr-Character Recogition Data-HEX-848',
- 'zCharRecogAttr-Machine Readable Code Data-HEX-849',
- 'zMedAnlyAstAttr-Visual Search Attributes-850',
- 'zVisualSearchAttr-Algorithm Version-851',
- 'zVisualSearchAttr-Adjustment Version-852',
- 'zVisualSearchAttr-Visual Search Data-HEX-853',
- 'zVisualSearchAttr - Sticker Confidence Algorithm Version-854',
- 'zVisualSearchAttr - Sticker Confidence Score-855',
- 'zAsset-Sticker Confidence Score-856',
- 'zAsset-Overall Aesthetic Score-857',
- 'zCompAssetAttr-Behavioral Score-858',
- 'zCompAssetAttr-Failure Score zCompAssetAttr-859',
- 'zCompAssetAttr-Harmonious Color Score-860',
- 'zCompAssetAttr-Immersiveness Score-861',
- 'zCompAssetAttr-Interaction Score-862',
- 'zCompAssetAttr-Intersting Subject Score-863',
- 'zCompAssetAttr-Intrusive Object Presence Score-864',
- 'zCompAssetAttr-Lively Color Score-865',
- 'zCompAssetAttr-Low Light-866',
- 'zCompAssetAttr-Noise Score-867',
- 'zCompAssetAttr-Pleasant Camera Tilt Score-868',
- 'zCompAssetAttr-Pleasant Composition Score-869',
- 'zCompAssetAttr-Pleasant Lighting Score-870',
- 'zCompAssetAttr-Pleasant Pattern Score-871',
- 'zCompAssetAttr-Pleasant Perspective Score-872',
- 'zCompAssetAttr-Pleasant Post Processing Score-873',
- 'zCompAssetAttr-Pleasant Reflection Score-874',
- 'zCompAssetAttrPleasant Symmetry Score-875',
- 'zCompAssetAttr-Sharply Focused Subject Score-876',
- 'zCompAssetAttr-Tastfully Blurred Score-877',
- 'zCompAssetAttr-Well Chosen Subject Score-878',
- 'zCompAssetAttr-Well Framed Subject Score-879',
- 'zCompAssetAttr-Well Timeed Shot Score-880',
- 'zCldRes-Asset UUID-4TableStart-881',
- 'zCldRes-Cloud Local State-882',
- 'zCldRes-File Size-883',
- 'zCldRes-Height-884',
- 'zCldRes-Is Available-885',
- 'zCldRes-Is Locally Available-886',
- 'zCldRes-Prefetch Count-887',
- 'zCldRes-Source Type-888',
- 'zCldRes-Type-889',
- 'zCldRes-Width-890',
- 'zCldRes-Date Created-891',
- 'zCldRes-Last OnDemand Download Date-892',
- 'zCldRes-Last Prefetch Date-893',
- 'zCldRes-Prunedat-894',
- 'zCldRes-File Path-895',
- 'zCldRes-Fingerprint-896',
- 'zCldRes-Item ID-897',
- 'zCldRes-UniID-898',
- 'zUserFeedback-UUID-4TableStart-899',
- 'zUserFeedback-Feature-900',
- 'zUserFeedback-Type-901',
- 'zUserFeedback-Last Modified Date-902',
- 'zUserFeedback-Context-903',
- 'zUserFeedback-Cloud Local State-904',
- 'zUserFeedback-Cloud Delete State-905',
- 'zUserFeedback - Creation Type-906',
- 'zAddAssetAttr-zPK-907',
- 'zAddAssetAttr-zENT-908',
- 'ZAddAssetAttr-zOPT-909',
- 'zAddAssetAttr-zAsset= zAsset_zPK-910',
- 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-911',
- 'zAddAssetAttr-Original Stable Hash-iOS18-4Queryend-912',
- 'zAddAssetAttr-Public Global UUID-913',
- 'zAddAssetAttr-Deferred Photo Identifier-914',
- 'zAddAssetAttr-Original Assets UUID-915',
- 'zAddAssetAttr-Import Session ID-916',
- 'zAddAssetAttr-Originating Asset Identifier-4endquery-917',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-4endquery-918',
- 'zAlbumList-zPK= Album List Key-919',
- 'zAlbumList-zENT-920',
- 'zAlbumList-zOPT-921',
- 'zAlbumList-ID Key-922',
- 'zAlbumList-UUID-923',
- 'zAsset-zPK-924',
- 'zAsset-zENT-925',
- 'zAsset-zOPT-926',
- 'zAsset-Master= zCldMast-zPK-927',
- 'zAsset-Extended Attributes= zExtAttr-zPK-928',
- 'zAsset-Import Session Key-929',
- 'zAsset-Trashed by Participant= zSharePartic_zPK-930',
- 'zAsset-Photo Analysis Attributes Key-931',
- 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-932',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-933',
- 'zAsset-Moment Share Key= zShare-zPK-934',
- 'zAsset-zMoment Key= zMoment-zPK-935',
- 'zAsset-Computed Attributes Asset Key-936',
- 'zAsset-Highlight Being Assets-HBA Key-937',
- 'zAsset-Highlight Being Extended Assets-HBEA Key-938',
- 'zAsset-Highlight Being Key Asset Private-HBKAP Key-939',
- 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-940',
- 'zAsset-Highligh Being Summary Assets-HBSA Key-941',
- 'zAsset-Day Group Highlight Being Assets-DGHBA Key-942',
- 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-943',
- 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-944',
- 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-945',
- 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-946',
- 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-947',
- 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-948',
- 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-949',
- 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-950',
- 'zAsset-Promotion Score-951',
- 'zAsset-Iconic Score-952',
- 'zAsset-Media Analysis Attributes Key-953',
- 'zAsset-Media Group UUID-954',
- 'zAsset-UUID = store.cloudphotodb-955',
- 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-956',
- 'zAsset.Cloud Collection GUID-957',
- 'zAsset-Avalanche UUID-958',
- 'zAssetAnalyState-zPK-959',
- 'zAssetAnalyState-zEnt-960',
- 'zAssetAnalyState-zOpt-961',
- 'zAssetAnalyState-Asset= zAsset-zPK-962',
- 'zAssetAnalyState-Asset UUID-963',
- 'zAsstContrib-zPK-964',
- 'zAsstContrib-zEnt-965',
- 'zAsstContrib-zOpt-966',
- 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-967',
- 'zAsstContrib-Participant= zSharePartic-zPK-968',
- 'zAssetDes-zPK-969',
- 'zAssetDes-zENT-970',
- 'zAssetDes-zOPT-971',
- 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-972',
- 'zCharRecogAttr-zPK-973',
- 'zCharRecogAttr-zENT-974',
- 'zCharRecogAttr-zOPT-975',
- 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-976',
- 'zCldFeedEnt-zPK= zCldShared keys-977',
- 'zCldFeedEnt-zENT-978',
- 'zCldFeedEnt-zOPT-979',
- 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-980',
- 'zCldFeedEnt-Entry Invitation Record GUID-981',
- 'zCldFeedEnt-Entry Cloud Asset GUID-982',
- 'zCldMast-zPK= zAsset-Master-983',
- 'zCldMast-zENT-984',
- 'zCldMast-zOPT-985',
- 'zCldMast-Moment Share Key= zShare-zPK-986',
- 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-987',
- 'zCldMast-Originating Asset ID-988',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-989',
- 'CMzCldMastMedData-zENT-990',
- 'CMzCldMastMedData-zOPT-991',
- 'CMzCldMastMedData-CldMast= zCldMast-zPK-992',
- 'AAAzCldMastMedData-zENT-993',
- 'AAAzCldMastMedData-zOPT-994',
- 'AAAzCldMastMedData-CldMast key-995',
- 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-996',
- 'zCldRes-zPK-997',
- 'zCldRes-zENT-998',
- 'zCldRes-zOPT-999',
- 'zCldRes-Asset= zAsset-zPK-1000',
- 'zCldRes-Cloud Master= zCldMast-zPK-1001',
- 'zCldRes-Asset UUID-1002',
- 'zCldShareAlbumInvRec-zPK-1003',
- 'zCldShareAlbumInvRec-zEnt-1004',
- 'zCldShareAlbumInvRec-zOpt-1005',
- 'zCldShareAlbumInvRec-Album Key-1006',
- 'zCldShareAlbumInvRec-FOK Album Key-1007',
- 'zCldShareAlbumInvRec-Album GUID-1008',
- 'zCldShareAlbumInvRec-zUUID-1009',
- 'zCldShareAlbumInvRec-Cloud GUID-1010',
- 'zCldSharedComment-zPK-1011',
- 'zCldSharedComment-zENT-1012',
- 'zCldSharedComment-zOPT-1013',
- 'zCldSharedComment-Commented Asset Key= zAsset-zPK-1014',
- 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-1015',
- 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-1016',
- 'zCldSharedComment-Liked Asset Key= zAsset-zPK-1017',
- 'zCldSharedComment-CldFeedLikeCommentEntry Key-1018',
- 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-1019',
- 'zCldSharedComment-Cloud GUID-1020',
- 'zCompAssetAttr-zPK-1021',
- 'zCompAssetAttr-zEnt-1022',
- 'zCompAssetAttr-zOpt-1023',
- 'zCompAssetAttr-Asset Key-1024',
- 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-iOS18-1025',
- 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18-1026',
- 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18-1027',
- 'zCompSyncAttr-zENT-iOS18-1028',
- 'zCompSyncAttr-zOPT-iOS18-1029',
- 'zDetFace-zPK-1030',
- 'zDetFace-zEnt-1031',
- 'zDetFace.zOpt-1032',
- 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face-1033',
- 'zDetFace-PersonForFace= zPerson-zPK-1034',
- 'zDetFace-Person Being Key Face-1035',
- 'zDetFace-Face Print-1036',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-1037',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-1038',
- 'zDetFace-UUID-1039',
- 'zDetFaceGroup-zPK-1040',
- 'zDetFaceGroup-zENT-1041',
- 'zDetFaceGroup-zOPT-1042',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-1043',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-1044',
- 'zDetFaceGroup-UUID-1045',
- 'zDetFacePrint-zPK-1046',
- 'zDetFacePrint-zEnt-1047',
- 'zDetFacePrint-zOpt-1048',
- 'zDetFacePrint-Face Key-1049',
- 'zExtAttr-zPK= zAsset-zExtendedAttributes-1050',
- 'zExtAttr-zENT-1051',
- 'zExtAttr-zOPT-1052',
- 'zExtAttr-Asset Key-1053',
- 'zFaceCrop-zPK-1054',
- 'zFaceCrop-zEnt-1055',
- 'zFaceCrop-zOpt-1056',
- 'zFaceCrop-Asset Key-1057',
- 'zFaceCrop-Invalid Merge Canidate Person UUID-1058',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-1059',
- 'zFaceCrop-Face Key-1060',
- 'zFaceCrop-UUID-1061',
- 'zGenAlbum-zPK=26AlbumLists= 26Albums-1062',
- 'zGenAlbum-zENT-1063',
- 'zGenAlbum-zOpt-1064',
- 'zGenAlbum-Custom Key Asset-1065',
- 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-1066',
- 'zGenAlbum-FOK Parent Folder-1067',
- 'zGenAlbum-zSyndicate-1068',
- 'zGenAlbum-UUID-1069',
- 'SWYConverszGenAlbum-UUID-1070',
- 'zGenAlbum-Cloud_GUID = store.cloudphotodb-1071',
- 'SWYConverszGenAlbum-Cloud GUID-1072',
- 'zGenAlbum-Project Render UUID-1073',
- 'SWYConverszGenAlbum-Project Render UUID-1074',
- 'zIntResou-zPK-1075',
- 'zIntResou-zENT-1076',
- 'zIntResou-zOPT-1077',
- 'zIntResou-Asset= zAsset_zPK-1078',
- 'zIntResou-Fingerprint-iOS18-4Queryend-1079',
- 'zIntResou-Stable Hash-iOS18-4Queryend-1080',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-1081',
- 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1082',
- 'zMedAnlyAstAttr-zEnt-1083',
- 'zMedAnlyAstAttr-zOpt-1084',
- 'zMedAnlyAstAttr-Asset= zAsset-zPK-1085',
- 'zMemory-zPK-1086',
- 'zMemory-zENT-1087',
- 'zMemory-zOPT-1088',
- 'zMemory-Key Asset= zAsset-zPK-1089',
- 'zMemory-UUID-1090',
- 'zMoment-zPK-1091',
- 'zMoment-zENT-1092',
- 'zMoment-zOPT-1093',
- 'zMoment-Highlight Key-1094',
- 'zMoment-UUID-1095',
- 'zPerson-zPK=zDetFace-Person-1096',
- 'zPerson-zEnt-1097',
- 'zPerson-zOpt-1098',
- 'zPerson-Share Participant= zSharePartic-zPK-1099',
- 'zPerson-KeyFace=zDetFace-zPK-1100',
- 'zPerson-Assoc Face Group Key-1101',
- 'zPerson-Person UUID-1102',
- 'zPerson-Is_Me_Confidence-iOS18-1103',
- 'zPhotoAnalysisAssetAttr-zPK-1104',
- 'zPhotoAnalysisAssetAttr-zEnt-1105',
- 'zPhotoAnalysisAssetAttr-zOpt-1106',
- 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1107',
- 'zSceneP-zPK-1108',
- 'zSceneP-zENT-1109',
- 'zSceneP-zOPT-1110',
- 'zShare-zPK-1111',
- 'zShare-zENT-1112',
- 'zShare-zOPT-1113',
- 'zShare-UUID-1114',
- 'SPLzShare-UUID-1115',
- 'zShare-Scope ID = store.cloudphotodb-1116',
- 'zSharePartic-zPK-1117',
- 'zSharePartic-zENT-1118',
- 'zSharePartic-zOPT-1119',
- 'zSharePartic-Share Key= zShare-zPK-1120',
- 'zSharePartic-Person= zPerson-zPK-1121',
- 'zSharePartic-UUID-1122',
- 'SBKAzSugg-zPK-1123',
- 'SBKAzSugg-zENT-1124',
- 'SBKAzSugg-zOPT-1125',
- 'SBKAzSugg-UUID-1126',
- 'SBRAzSugg-zPK-1127',
- 'SBRAzSugg-zENT-1128',
- 'SBRAzSugg-zOPT-1129',
- 'SBRAzSugg-UUID-1130',
- 'z3SuggBRA-3RepAssets-1131',
- 'z3SuggBRA-66SuggBeingRepAssets-1132',
- 'z3SuggBKA-66SuggBeingKeyAssets= zSugg-zPK-1133',
- 'z3SuggBKA-3KeyAssets1= zAsset-zPK-1134',
- 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1135',
- 'zUnmAdj-zOPT-1136',
- 'zUnmAdj-zENT-1137',
- 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1138',
- 'zUnmAdj-UUID-1139',
- 'zUnmAdj-Other Adjustments Fingerprint-1140',
- 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1141',
- 'zUserFeedback-zPK-1142',
- 'zUserFeedback-zENT-1143',
- 'zUserFeedback-zOPT-1144',
- 'zUserFeedback-Person= zPerson-zPK-1145',
- 'zUserFeedback-Memory= zMemory-zPK-1146',
- 'zUserFeedback-UUID-1147',
- 'zVisualSearchAttr-zPK-1148',
- 'zVisualSearchAttr-zENT-1149',
- 'zVisualSearchAttr-zOPT-1150',
- 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1151',
- 'z30AlbumList-30Albums= zGenAlbum-zPK-1152',
- 'z30AlbumList-Album List Key-1153',
- 'z30AlbumList-FOK30Albums Key-1154',
- 'z31Assets-31Albums= zGenAlbum-zPK-1155',
- 'z31Assets-3Asset Key= zAsset-zPK in the Album-1156',
- 'z31Assets-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1157',
- 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1158',
- 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1159',
- 'z3MemoryBCAs-52MemoriesBeingCuratedAssets= zMemory-zPK-1160',
- 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1161',
- 'z3MemoryBECAs-52MemoriesBeingExtCuratedAssets= zMemory-zPK-1162',
- 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1163',
- 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK-1164',
- 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1165',
- 'z3MemoryBUCAs-52MemoriesBeingUserCuratedAssets= zMemory-zPK-1166',
- 'z3MemoryBCAs-52Memories Being Custom User Assets-1167',
- 'z3MemoryBCAs-3Custom User Assets-1168',
- 'z3MemoryBCAs-FOK-3Custom User Assets-1169')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph98.1-iOS18_Ref_for_Asset_Analysis-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
+ row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
+ row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
+ row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
+ row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
+ row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
+ row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
+ row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
+ row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
+ row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
+ row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
+ row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
+ row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
+ row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
+ row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
+ row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
+ row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
+ row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
+ row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
+ row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
+ row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307],
+ row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315],
+ row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323],
+ row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331],
+ row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339],
+ row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347],
+ row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355],
+ row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363],
+ row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371],
+ row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379],
+ row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387],
+ row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395],
+ row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403],
+ row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411],
+ row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419],
+ row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427],
+ row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435],
+ row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443],
+ row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451],
+ row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459],
+ row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467],
+ row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475],
+ row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483],
+ row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491],
+ row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499],
+ row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507],
+ row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515],
+ row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523],
+ row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531],
+ row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539],
+ row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547],
+ row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555],
+ row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563],
+ row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571],
+ row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579],
+ row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587],
+ row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595],
+ row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603],
+ row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611],
+ row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619],
+ row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627],
+ row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635],
+ row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643],
+ row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651],
+ row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659],
+ row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667],
+ row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675],
+ row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683],
+ row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691],
+ row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699],
+ row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707],
+ row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715],
+ row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723],
+ row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731],
+ row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739],
+ row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747],
+ row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755],
+ row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763],
+ row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771],
+ row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779],
+ row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787],
+ row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795],
+ row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803],
+ row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811],
+ row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819],
+ row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827],
+ row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835],
+ row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843],
+ row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851],
+ row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859],
+ row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867],
+ row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875],
+ row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883],
+ row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891],
+ row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899],
+ row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907],
+ row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915],
+ row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923],
+ row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931],
+ row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939],
+ row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947],
+ row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955],
+ row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963],
+ row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971],
+ row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979],
+ row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987],
+ row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995],
+ row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002],
+ row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009],
+ row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016],
+ row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023],
+ row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030],
+ row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037],
+ row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044],
+ row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051],
+ row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058],
+ row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065],
+ row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072],
+ row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079],
+ row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086],
+ row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093],
+ row[1094], row[1095], row[1096], row[1097], row[1098], row[1099], row[1100],
+ row[1101], row[1102], row[1103], row[1104], row[1105], row[1106], row[1107],
+ row[1108], row[1109], row[1110], row[1111], row[1112], row[1113], row[1114],
+ row[1115], row[1116], row[1117], row[1118], row[1119], row[1120], row[1121],
+ row[1122], row[1123], row[1124], row[1125], row[1126], row[1127], row[1128],
+ row[1129], row[1130], row[1131], row[1132], row[1133], row[1134], row[1135],
+ row[1136], row[1137], row[1138], row[1139], row[1140], row[1141], row[1142],
+ row[1143], row[1144], row[1145], row[1146], row[1147], row[1148], row[1149],
+ row[1150], row[1151], row[1152], row[1153], row[1154], row[1155], row[1156],
+ row[1157], row[1158], row[1159]))
- tlactivity = 'Ph98.1-iOS18_Ref_for_Asset_Analysis-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
+ data_headers = ('zAsset Complete-0',
+ 'zAsset-zPK-4QueryStart-1',
+ 'zAddAssetAttr-zPK-4QueryStart-2',
+ 'zAsset-UUID = store.cloudphotodb-4QueryStart-3',
+ 'zAddAssetAttr-Original Stable Hash-4QueryStart-4',
+ 'zIntResou-Fingerprint-4QueryStart-5',
+ 'zAddAssetAttr.Adjusted Stable Hash-4QueryStart-6',
+ 'zIntResou-Stable Hash-4QueryStart-7',
+ 'zAsset-Bundle Scope-8',
+ 'zAsset-Syndication State-9',
+ 'zAsset-Cloud is My Asset-10',
+ 'zAsset-Cloud is deletable-Asset-11',
+ 'zAsset-Cloud_Local_State-12',
+ 'zAsset-Visibility State-13',
+ 'zExtAttr-Camera Make-14',
+ 'zExtAttr-Camera Model-15',
+ 'zExtAttr-Lens Model-16',
+ 'zExtAttr-Flash Fired-17',
+ 'zExtAttr-Focal Lenght-18',
+ 'zExtAttr-Focal Lenth in 35MM-19',
+ 'zExtAttr-Digital Zoom Ratio-20',
+ 'zExtAttr-Generative_AI_Type-21',
+ 'zExtAttr-Credit-22',
+ 'zAsset-Derived Camera Capture Device-23',
+ 'zAsset-Capture_Session_Identifier-iOS18-24',
+ 'zAddAssetAttr-Camera Captured Device-25',
+ 'zAddAssetAttr-Imported by-26',
+ 'zCldMast-Imported By-27',
+ 'zAddAssetAttr.Imported by Bundle Identifier-28',
+ 'zAddAssetAttr-Imported By Display Name-29',
+ 'zCldMast-Imported by Bundle ID-30',
+ 'zCldMast-Imported by Display Name-31',
+ 'zAsset-ImageRequestHints-HEX-Path-32',
+ 'zAsset-Saved Asset Type-33',
+ 'zAsset-Is_Recently_Saved-34',
+ 'zAsset-Directory-Path-35',
+ 'zAsset-Filename-36',
+ 'zAddAssetAttr- Original Filename-37',
+ 'zCldMast- Original Filename-38',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-39',
+ 'zAsset-Active Library Scope Participation State -4QueryStart-40',
+ 'zAsset-Library Scope Share State- StillTesting -4QueryStart-41',
+ 'SPLzShare-Cloud Photo Count-SPL -4QueryStart-42',
+ 'SPLzShare-Cloud Video Count-SPL -4QueryStart-43',
+ ('zAsset-Added Date-44', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-45', 'datetime'),
+ ('zAddAssetAttr-Date Created Source-46', 'datetime'),
+ ('zAsset-Date Created-47', 'datetime'),
+ ('zCldMast-Creation Date-48', 'datetime'),
+ ('zIntResou-CldMst Date Created-49', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-50',
+ 'zAddAssetAttr-Time Zone Offset-51',
+ 'zAddAssetAttr-Inferred Time Zone Offset-52',
+ 'zAddAssetAttr-EXIF-String-53',
+ ('zAsset-Modification Date-54', 'datetime'),
+ ('zAddAssetAttr-Last Viewed Date-55', 'datetime'),
+ ('zAsset-Last Shared Date-56', 'datetime'),
+ 'zCldMast-Cloud Local State-57',
+ ('zCldMast-Import Date-58', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-59', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-4QueryStart-60',
+ ('zAddAssetAttr-Alt Import Image Date-61', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-62',
+ ('zAsset-Cloud Batch Publish Date-63', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-64', 'datetime'),
+ 'zAsset-Cloud Download Requests-65',
+ 'zAsset-Cloud Batch ID-66',
+ 'zAddAssetAttr-Upload Attempts-67',
+ 'zAsset-Latitude-68',
+ 'zExtAttr-Latitude-69',
+ 'zAsset-Longitude-70',
+ 'zExtAttr-Longitude-71',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-72',
+ 'zAddAssetAttr-Location Hash-73',
+ 'zAsset-Location Data-HEX-74',
+ 'zAddAssetAttr-Reverse Location Is Valid-75',
+ 'zAddAssetAttr-Reverse Location Data-76',
+ 'zAddAssetAttr-Shifted Location Valid-77',
+ 'zAddAssetAttr-Shifted Location Data-78',
+ 'ParentzGenAlbum-UUID-4QueryStart-79',
+ 'zGenAlbum-UUID-4QueryStart-80',
+ 'SWYConverszGenAlbum-UUID-4QueryStart-81',
+ 'ParentzGenAlbum-Cloud GUID-4QueryStart-82',
+ 'zGenAlbum-Cloud GUID-4QueryStart-83',
+ 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-84',
+ 'zCldShareAlbumInvRec-Album GUID-4QueryStart-85',
+ 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-86',
+ 'zGenAlbum-Project Render UUID-4QueryStart-87',
+ 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-88',
+ 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-89',
+ 'zGenAlbum-Cloud_Local_State-4QueryStart-90',
+ 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-91',
+ ('ParentzGenAlbum- Creation Date- 4QueryStart-92', 'datetime'),
+ ('zGenAlbum- Creation Date- 4QueryStart-93', 'datetime'),
+ ('SWYConverszGenAlbum- Creation Date- 4QueryStart-94', 'datetime'),
+ ('zGenAlbum- Cloud Creation Date- 4QueryStart-95', 'datetime'),
+ ('SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-96', 'datetime'),
+ ('zGenAlbum- Start Date- 4QueryStart-97', 'datetime'),
+ ('SWYConverszGenAlbum- Start Date- 4QueryStart-98', 'datetime'),
+ ('zGenAlbum- End Date- 4QueryStart-99', 'datetime'),
+ ('SWYConverszGenAlbum- End Date- 4QueryStart-100', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date- 4QueryStart-101', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-102', 'datetime'),
+ 'ParentzGenAlbum- Title- 4QueryStart-103',
+ 'zGenAlbum- Title-User&System Applied- 4QueryStart-104',
+ 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-105',
+ 'zGenAlbum-Import Session ID-SWY- 4QueryStart-106',
+ 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-107',
+ 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-108',
+ 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-109',
+ 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-110',
+ 'SWYConverszGenAlbum- Syndicate-4QueryStart-111',
+ 'zGenAlbum-zENT- Entity- 4QueryStart-112',
+ 'ParentzGenAlbum- Kind- 4QueryStart-113',
+ 'zGenAlbum-Album Kind- 4QueryStart-114',
+ 'SWYConverszGenAlbum-Album Kind- 4QueryStart-115',
+ 'AAAzCldMastMedData-zOPT-4TableStart-116',
+ 'zAddAssetAttr-Media Metadata Type-117',
+ 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-118',
+ 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-119',
+ 'AAAzCldMastMedData-Data-HEX-120',
+ 'CldMasterzCldMastMedData-zOPT-4TableStart-121',
+ 'zCldMast-Media Metadata Type-122',
+ 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-123',
+ 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-124',
+ 'CMzCldMastMedData-Data-HEX-125',
+ 'zAsset-Search Index Rebuild State-126',
+ 'zAddAssetAttr-Syndication History-127',
+ 'zMedAnlyAstAttr-Syndication Processing Version-128',
+ 'zMedAnlyAstAttr-Syndication Processing Value-129',
+ 'zAsset-Orientation-130',
+ 'zAddAssetAttr-Original Orientation-131',
+ 'zAsset-Kind-132',
+ 'zAsset-Is_Detected_Screenshot-133',
+ 'zAsset-Kind-Sub-Type-134',
+ 'zAddAssetAttr-Cloud Kind Sub Type-135',
+ 'zAsset-Playback Style-136',
+ 'zAsset-Playback Variation-137',
+ 'zAddAssetAttr.View_Presentation-iOS18-138',
+ 'zAsset-Video Duration-139',
+ 'zExtAttr-Duration-140',
+ 'zAsset-Video CP Duration-141',
+ 'zAddAssetAttr-Video CP Duration Time Scale-142',
+ 'zAsset-Video CP Visibility State-143',
+ 'zAddAssetAttr-Video CP Display Value-144',
+ 'zAddAssetAttr-Video CP Display Time Scale-145',
+ 'zIntResou-Datastore Class ID-146',
+ 'zAsset-Cloud Placeholder Kind-147',
+ 'zIntResou-Local Availability-148',
+ 'zIntResou-Local Availability Target-149',
+ 'zIntResou-Cloud Local State-150',
+ 'zIntResou-Remote Availability-151',
+ 'zIntResou-Remote Availability Target-152',
+ 'zIntResou-Transient Cloud Master-153',
+ 'zIntResou-Side Car Index-154',
+ 'zAsset-UUID = store.cloudphotodb-4TableStart-155',
+ 'zAddAssetAttr-Orignial Stable Hash-4TableStart-156',
+ 'zIntResou-Fingerprint-4TableStart-157',
+ 'zIntResou-Stable Hash-4TableStart-158',
+ 'zIntResou- File ID-159',
+ 'zIntResou-Version-160',
+ 'zAddAssetAttr- Original-File-Size-161',
+ 'zIntResou-Resource Type-162',
+ 'zIntResou-DataStoreKeyData-HEX-163',
+ 'zIntResou-Datastore Sub-Type-164',
+ 'zIntResou-Cloud Source Type-165',
+ 'zIntResou-Data Length-166',
+ 'zIntResou-Recipe ID-167',
+ ('zIntResou-Cloud Last Prefetch Date-168', 'datetime'),
+ 'zIntResou-Cloud Prefetch Count-169',
+ ('zIntResou- Cloud-Last-OnDemand Download-Date-170', 'datetime'),
+ 'zIntResou-UniformTypeID_UTI_Conformance_Hint-171',
+ 'zIntResou-Compact-UTI-172',
+ 'zAsset-Uniform Type ID-173',
+ 'zAsset-Original Color Space-174',
+ 'zCldMast-Uniform_Type_ID-175',
+ 'zCldMast-Full Size JPEG Source-176',
+ 'zAsset-HDR Gain-177',
+ 'zAsset-zHDR_Type-178',
+ 'zExtAttr-Codec-179',
+ 'zIntResou-Codec Four Char Code Name-180',
+ 'zCldMast-Codec Name-181',
+ 'zCldMast-Video Frame Rate-182',
+ 'zCldMast-Placeholder State-183',
+ 'zAsset-Depth_Type-184',
+ 'zAsset-Avalanche UUID-4TableStart-185',
+ 'zAsset-Avalanche_Kind-iOS18-186',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-187',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-188',
+ 'zAddAssetAttr-Cloud Recovery State-189',
+ 'zAddAssetAttr-Cloud State Recovery Attempts Count-190',
+ 'zAsset-Deferred Processing Needed-191',
+ 'zAsset-Video Deferred Processing Needed-192',
+ 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-193',
+ 'zAddAssetAttr-Deferred Processing Candidate Options-194',
+ 'zAsset-Adjustments_State-195',
+ 'zUnmAdj-UUID-4TableStart-196',
+ 'zAddAssetAttr.Adjusted Stable Hash-4TableStart-197',
+ 'zUnmAdj-Other Adjustments Fingerprint-4TableStart-198',
+ 'zUnmAdj-Similar to Orig Adjustments Fingerprint-4TableStart-199',
+ 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-4TableStart-200',
+ ('zAsset-Adjustment Timestamp-201', 'datetime'),
+ ('zUnmAdj-Adjustment Timestamp-202', 'datetime'),
+ 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-203',
+ 'zAddAssetAttr-Editor Bundle ID-204',
+ 'zUnmAdj-Editor Localized Name-205',
+ 'zUnmAdj-Adjustment Format ID-206',
+ 'zAddAssetAttr-Montage-207',
+ 'zUnmAdj-Adjustment Render Types-208',
+ 'zUnmAdj-Adjustment Format Version-209',
+ 'zUnmAdj-Adjustment Base Image Format-210',
+ 'zCompSyncAttr-Local_Analysis_Stage-211',
+ 'zCompSyncAttr-Cloud_Compute_State_Version-212',
+ 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18-213',
+ 'zAsset-Favorite-214',
+ 'zAsset-Hidden-215',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-216',
+ ('zAsset-Trashed Date-217', 'datetime'),
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-218',
+ 'zAsset-Delete-Reason-219',
+ 'zIntResou-Trash State-220',
+ ('zIntResou-Trashed Date-221', 'datetime'),
+ 'zAsset-Cloud Delete State-222',
+ 'zIntResou-Cloud Delete State-223',
+ 'zAddAssetAttr-PTP Trashed State-224',
+ 'zIntResou-PTP Trashed State-225',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-226',
+ ('zMedAnlyAstAttr-Media Analysis Timestamp-227', 'datetime'),
+ ('zAsset-Analysis State Modification Date-228', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-229',
+ 'zAddAssetAttr- View Count-230',
+ 'zAddAssetAttr- Pending Play Count-231',
+ 'zAddAssetAttr- Play Count-232',
+ 'zAddAssetAttr- Pending Share Count-233',
+ 'zAddAssetAttr- Share Count-234',
+ 'zAddAssetAttr-Allowed for Analysis-235',
+ 'zAddAssetAttr-Scene Analysis Version-236',
+ 'zAddAssetAttr-Scene Analysis is From Preview-237',
+ ('zAddAssetAttr-Scene Analysis Timestamp-238', 'datetime'),
+ 'zAsset-Duplication Asset Visibility State-239',
+ 'zAddAssetAttr-Destination Asset Copy State-240',
+ 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-241',
+ 'zSceneP-Data-HEX NSKeyed Plist-242',
+ 'zSceneP-Duplicate Matching Data-HEX NSKeyed Plist-243',
+ 'zSceneP-Duplicate Matching Alternate Data-HEX NSKeyed Plist-244',
+ 'zAddAssetAttr-Source Asset for Duplication Scope ID-245',
+ 'zCldMast-Source Master For Duplication Scope ID-246',
+ 'zAddAssetAttr-Source Asset For Duplication ID-247',
+ 'zCldMast-Source Master for Duplication ID-248',
+ 'zAddAssetAttr-Variation Suggestions States-249',
+ 'zAsset-High Frame Rate State-250',
+ 'zAsset-Video Key Frame Time Scale-251',
+ 'zAsset-Video Key Frame Value-252',
+ 'zAsset-Current_Sleet_Cast-iOS18-253',
+ 'zAddAssetAttr.Sleet_Is_Reversible-iOS18-254',
+ 'zExtAttr-Sleet_Rendering_Version-255',
+ 'zExtAttr-Sleet_Intensity-256',
+ 'zExtAttr-Sleet_Tone_Bias-257',
+ 'zExtAttr-Sleet_Color_Bias-258',
+ 'zExtAttr-Sleet_Cast-259',
+ 'zExtAttr-ISO-260',
+ 'zExtAttr-Metering Mode-261',
+ 'zExtAttr-Sample Rate-262',
+ 'zExtAttr-Track Format-263',
+ 'zExtAttr-White Balance-264',
+ 'zExtAttr-Aperture-265',
+ 'zExtAttr-BitRate-266',
+ 'zExtAttr-Exposure Bias-267',
+ 'zExtAttr-Frames Per Second-268',
+ 'zExtAttr-Shutter Speed-269',
+ 'zExtAttr-Slush Scene Bias-270',
+ 'zExtAttr-Slush Version-271',
+ 'zExtAttr-Slush Preset-272',
+ 'zExtAttr-Slush Warm Bias-273',
+ 'zAsset-Height-274',
+ 'zAddAssetAttr-Original Height-275',
+ 'zIntResou-Unoriented Height-276',
+ 'zAsset-Width-277',
+ 'zAddAssetAttr-Original Width-278',
+ 'zIntResou-Unoriented Width-279',
+ 'zShare-Thumbnail Image Data-280',
+ 'SPLzShare-Thumbnail Image Data-281',
+ 'zAsset-Thumbnail Index-282',
+ 'zAddAssetAttr-Embedded Thumbnail Height-283',
+ 'zAddAssetAttr-Embedded Thumbnail Length-284',
+ 'zAddAssetAttr-Embedded Thumbnail Offset-285',
+ 'zAddAssetAttr-Embedded Thumbnail Width-286',
+ 'zAsset-Packed Acceptable Crop Rect-287',
+ 'zAsset-Packed Badge Attributes-288',
+ 'zAsset-Packed Preferred Crop Rect-289',
+ 'zAsset-Curation Score-290',
+ 'zAsset-Camera Processing Adjustment State-291',
+ 'zAsset-Depth Type-292',
+ 'zAsset-Is Magic Carpet-QuicktimeMOVfile-293',
+ 'zAddAssetAttr-Orig Resource Choice-294',
+ 'zAsset-Spatial Type-295',
+ 'zAddAssetAttr-Spatial Over Capture Group ID-296',
+ 'zAddAssetAttr-Object Saliency Rects Data-HEX NSKeyed Plist-297',
+ 'zAddAssetAttr-Original Hash-HEX-298',
+ 'zAddAssetAttr-Place Annotation Data-299',
+ 'zAddAssetAttr-Distance Identity-300',
+ 'zAddAssetAttr-Edited IPTC Attributes-301',
+ 'zAssetDes-Long Description-302',
+ 'zAddAssetAttr-Asset Description-303',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-304',
+ 'zAddAssetAttr-Accessibility Description-305',
+ 'zAddAssetAttr-Photo Stream Tag ID-306',
+ 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-307',
+ ('zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-308', 'datetime'),
+ 'zPhotoAnalysisAssetAttr-Wallpaper Properties Data-309',
+ ('zCldFeedEnt-Entry Date-310', 'datetime'),
+ 'zCldFeedEnt-Entry_Is_Mine-iOS18-311',
+ 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-312',
+ 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-313',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-314',
+ 'zCldFeedEnt-Entry Priority Number-315',
+ 'zCldFeedEnt-Entry Type Number-316',
+ 'zCldSharedComment-Cloud GUID-4TableStart-317',
+ ('zCldSharedComment-Date-318', 'datetime'),
+ ('zCldSharedComment-Comment Client Date-319', 'datetime'),
+ ('zAsset-Cloud Last Viewed Comment Date-320', 'datetime'),
+ 'zCldSharedComment-Type-321',
+ 'zCldSharedComment-Comment Text-322',
+ 'zCldSharedComment-Commenter Hashed Person ID-323',
+ 'zCldSharedComment-Batch Comment-324',
+ 'zCldSharedComment-Is a Caption-325',
+ 'zAsset-Cloud Has Comments by Me-326',
+ 'zCldSharedComment-Is My Comment-327',
+ 'zCldSharedComment-Is Deletable-328',
+ 'zAsset-Cloud Has Comments Conversation-329',
+ 'zAsset-Cloud Has Unseen Comments-330',
+ 'zCldSharedComment-Liked-331',
+ 'zAddAssetAttr-Share Type-332',
+ 'zAsset-Library Scope Share State- StillTesting-333',
+ 'zAsset-Active Library Scope Participation State-334',
+ 'zAddAssetAttr-Library Scope Asset Contributors To Update-335',
+ 'zShare-UUID-CMM-4TableStart-336',
+ 'SPLzShare-UUID-SPL-4TableStart-337',
+ 'zShare-zENT-CMM-338',
+ 'SPLzShare-zENT-SPL-339',
+ 'zSharePartic-z61SHARE-340',
+ 'SPLzSharePartic-z61SHARE-341',
+ 'zShare-Status-CMM-342',
+ 'zShare-Status-SPL-343',
+ 'zShare-Scope Type-CMM-344',
+ 'zShare-Scope Type-SPL-345',
+ 'zShare-Local Publish State-CMM-346',
+ 'SPLzShare-Local Publish State-SPL-347',
+ 'zShare-Public Permission-CMM-348',
+ 'SPLzShare-Public Permission-SPL-349',
+ 'zShare-Originating Scope ID-CMM-350',
+ 'SPLzShare-Originating Scope ID-SPL-351',
+ 'zShare-Scope ID-CMM-352',
+ 'SPLzShare-Scope ID-SPL-353',
+ 'zShare-Title-CMM-354',
+ 'SPLzShare-Title-SPL-355',
+ 'zShare-Share URL-CMM-356',
+ 'SPLzShare-Share URL-SPL-357',
+ ('zShare-Creation Date-CMM-358', 'datetime'),
+ ('SPLzShare-Creation Date-SPL-359', 'datetime'),
+ ('zShare-Start Date-CMM-360', 'datetime'),
+ ('SPLzShare-Start Date-SPL-361', 'datetime'),
+ ('zShare-End Date-CMM-362', 'datetime'),
+ ('SPLzShare-End Date-SPL-363', 'datetime'),
+ ('zShare-Expiry Date-CMM-364', 'datetime'),
+ ('SPLzShare-Expiry Date-SPL-365', 'datetime'),
+ 'zShare-Cloud Item Count-CMM-366',
+ 'SPLzShare-Cloud Item Count-SPL-367',
+ 'zShare-Asset Count-CMM-368',
+ 'SPLzShare-Asset Count-SPL-369',
+ 'zShare-Cloud Photo Count-CMM-370',
+ 'SPLzShare-Cloud Photo Count-SPL-371',
+ 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-372',
+ 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-373',
+ 'zShare-Photos Count-CMM-374',
+ 'SPLzShare-Photos Count-CMM-SPL-375',
+ 'zShare-Uploaded Photos Count-CMM-376',
+ 'SPLzShare-Uploaded Photos Count-SPL-377',
+ 'zShare-Cloud Video Count-CMM-378',
+ 'SPLzShare-Cloud Video Count-SPL-379',
+ 'zShare-Videos Count-CMM-380',
+ 'SPLzShare-Videos Count-SPL-381',
+ 'zShare-Uploaded Videos Count-CMM-382',
+ 'SPLzShare-Uploaded Videos Count-SPL-383',
+ 'zShare-Force Sync Attempted-CMM-384',
+ 'SPLzShare-Force Sync Attempted-SPL-385',
+ 'zShare-Cloud Local State-CMM-386',
+ 'SPLzShare-Cloud Local State-SPL-387',
+ 'zShare-Scope Syncing State-CMM-388',
+ 'SPLzShare-Scope Syncing State-SPL-389',
+ 'zShare-Auto Share Policy-CMM-390',
+ 'SPLzShare-Auto Share Policy-SPL-391',
+ 'zShare-Should Notify On Upload Completion-CMM-392',
+ 'SPLzShare-Should Notify On Upload Completion-SPL-393',
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-394',
+ 'zShare-Trashed State-CMM-395',
+ 'SPLzShare-Trashed State-SPL-396',
+ 'zShare-Cloud Delete State-CMM-397',
+ 'SPLzShare-Cloud Delete State-SPL-398',
+ ('zShare-Trashed Date-CMM-399', 'datetime'),
+ ('SPLzShare-Trashed Date-SPL-400', 'datetime'),
+ ('zShare-LastParticipant Asset Trash Notification Date-CMM-401', 'datetime'),
+ ('SPLzShare-LastParticipant Asset Trash Notification Date-SPL-402', 'datetime'),
+ ('zShare-Last Participant Asset Trash Notification View Date-CMM-403', 'datetime'),
+ ('SPLzShare-Last Participant Asset Trash Notification View Date-SPL-404', 'datetime'),
+ 'zShare-Exit Source-CMM-405',
+ 'SPLzShare-Exit Source-SPL-406',
+ 'zShare-SPL_Exit State-CMM-407',
+ 'SPLzShare-SPL_Exit State-SPL-408',
+ 'zShare-Exit Type-CMM-409',
+ 'SPLzShare-Exit Type-SPL-410',
+ 'zShare-Should Ignor Budgets-CMM-411',
+ 'SPLzShare-Should Ignor Budgets-SPL-412',
+ 'zShare-Preview State-CMM-413',
+ 'SPLzShare-Preview State-SPL-414',
+ 'zShare-Preview Data-CMM-415',
+ 'SPLzShare-Preview Data-SPL-416',
+ 'zShare-Rules-CMM-417',
+ 'SPLzShare-Rules-SPL-418',
+ 'zShare-Thumbnail Image Data-CMM-419',
+ 'SPLzShare-Thumbnail Image Data-SPL-420',
+ 'zShare-Participant Cloud Update State-CMM-421',
+ 'SPLzShare-Participant Cloud Update State-SPL-422',
+ 'zSharePartic-UUID-4TableStart-423',
+ 'SPLzSharePartic-UUID-4TableStart-424',
+ 'zSharePartic-Acceptance Status-425',
+ 'SPLzSharePartic-Acceptance Status-426',
+ 'zSharePartic-Is Current User-427',
+ 'SPLzSharePartic-Is Current User-428',
+ 'zSharePartic-Role-429',
+ 'SPLzSharePartic-Role-430',
+ 'zSharePartic-Premission-431',
+ 'SPLzSharePartic-Premission-432',
+ 'zSharePartic-Participant ID-433',
+ 'SPLzSharePartic-Participant ID-434',
+ 'zSharePartic-User ID-435',
+ 'SPLzSharePartic-User ID-436',
+ 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-437',
+ 'SPLzSharePartic-zPK-4TableStart-438',
+ 'zSharePartic-zPK-4TableStart-439',
+ 'zSharePartic-Email Address-440',
+ 'SPLzSharePartic-Email Address-441',
+ 'zSharePartic-Phone Number-442',
+ 'SPLzSharePartic-Phone Number-443',
+ 'zSharePartic-Name Components-444',
+ 'SPLzSharePartic-Name Components-445',
+ 'zSharePartic-Exit State-446',
+ 'SPLzSharePartic-Exit State-447',
+ 'ParentzGenAlbum-UUID-4TableStart-448',
+ 'zGenAlbum-UUID-4TableStart-449',
+ 'SWYConverszGenAlbum-UUID-4TableStart-450',
+ 'ParentzGenAlbum-Cloud GUID-4TableStart-451',
+ 'zGenAlbum-Cloud GUID-4TableStart-452',
+ 'SWYConverszGenAlbum-Cloud GUID-4TableStart-453',
+ 'zCldShareAlbumInvRec-Album GUID-4TableStart-454',
+ 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-455',
+ 'zGenAlbum-Project Render UUID-4TableStart-456',
+ 'SWYConverszGenAlbum-Project Render UUID-4TableStart-457',
+ 'zAlbumList-Needs Reordering Number-458',
+ 'zGenAlbum-zENT- Entity-459',
+ 'ParentzGenAlbum-Kind-460',
+ 'zGenAlbum-Album Kind-461',
+ 'SWYConverszGenAlbum-Album Kind-462',
+ 'ParentzGenAlbum-Cloud-Local-State-463',
+ 'zGenAlbum-Cloud_Local_State-464',
+ 'SWYConverszGenAlbum-Cloud_Local_State-465',
+ 'ParentzGenAlbum- Title-466',
+ 'zGenAlbum- Title-User&System Applied-467',
+ 'SWYConverszGenAlbum- Title -User&System Applied-468',
+ 'zGenAlbum-Import Session ID-SWY-469',
+ 'zAsset- Conversation= zGenAlbum_zPK-470',
+ 'SWYConverszGenAlbum- Import Session ID-SWY-471',
+ 'zGenAlbum-Imported by Bundle Identifier-472',
+ 'SWYzGenAlbum-Imported by Bundle Identifier-473',
+ 'SWYConverszGenAlbum- Syndicate-474',
+ ('ParentzGenAlbum-Creation Date-475', 'datetime'),
+ ('zGenAlbum-Creation Date-476', 'datetime'),
+ ('SWYConverszGenAlbum-Creation Date-477', 'datetime'),
+ ('zGenAlbum-Cloud Creation Date-478', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Creation Date-479', 'datetime'),
+ ('zGenAlbum-Start Date-480', 'datetime'),
+ ('SWYConverszGenAlbum-Start Date-481', 'datetime'),
+ ('zGenAlbum-End Date-482', 'datetime'),
+ ('SWYConverszGenAlbum-End Date-483', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-484', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Subscription Date-485', 'datetime'),
+ 'zGenAlbum-Cloud Metadata-HEX NSKeyed Plist-486',
+ 'SWYConverszGenAlbum-Cloud Metadata-HEX NSKeyed Plist-487',
+ 'ParentzGenAlbum-Pending Items Count-488',
+ 'zGenAlbum-Pending Items Count-489',
+ 'SWYConverszGenAlbum-Pending Items Count-490',
+ 'ParentzGenAlbum-Pending Items Type-491',
+ 'zGenAlbum-Pending Items Type-492',
+ 'SWYConverszGenAlbum-Pending Items Type-493',
+ 'zGenAlbum- Cached Photos Count-494',
+ 'SWYConverszGenAlbum- Cached Photos Count-495',
+ 'zGenAlbum- Cached Videos Count-496',
+ 'SWYConverszGenAlbum- Cached Videos Count-497',
+ 'zGenAlbum- Cached Count-498',
+ 'SWYConverszGenAlbum- Cached Count-499',
+ 'ParentzGenAlbum-Sync Event Order Key-500',
+ 'zGenAlbum-Sync Event Order Key-501',
+ 'SWYConverszGenAlbum-Sync Event Order Key-502',
+ 'zGenAlbum-Has Unseen Content-503',
+ 'SWYConverszGenAlbum-Has Unseen Content-504',
+ 'zGenAlbum-Unseen Asset Count-505',
+ 'SWYConverszGenAlbum-Unseen Asset Count-506',
+ 'zGenAlbum-is Owned-507',
+ 'SWYConverszGenAlbum-is Owned-508',
+ 'zGenAlbum-Cloud Relationship State-509',
+ 'SWYConverszGenAlbum-Cloud Relationship State-510',
+ 'zGenAlbum-Cloud Relationship State Local-511',
+ 'SWYConverszGenAlbum-Cloud Relationship State Local-512',
+ 'zGenAlbum-Cloud Owner Mail Key-513',
+ 'SWYConverszGenAlbum-Cloud Owner Mail Key-514',
+ 'zGenAlbum-Cloud Owner Frist Name-515',
+ 'SWYConverszGenAlbum-Cloud Owner Frist Name-516',
+ 'zGenAlbum-Cloud Owner Last Name-517',
+ 'SWYConverszGenAlbum-Cloud Owner Last Name-518',
+ 'zGenAlbum-Cloud Owner Full Name-519',
+ 'SWYConverszGenAlbum-Cloud Owner Full Name-520',
+ 'zGenAlbum-Cloud Person ID-521',
+ 'SWYConverszGenAlbum-Cloud Person ID-522',
+ 'zAsset-Cloud Owner Hashed Person ID-523',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-524',
+ 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-525',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-526',
+ 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-527',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-528',
+ 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-529',
+ 'zGenAlbum-Cloud Album Sub Type-530',
+ 'SWYConverszGenAlbum-Cloud Album Sub Type-531',
+ ('zGenAlbum-Cloud Contribution Date-532', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Contribution Date-533', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-534', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Last Interesting Change Date-535', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-536',
+ 'SWYConverszGenAlbum-Cloud Notification Enabled-537',
+ 'ParentzGenAlbum-Pinned-538',
+ 'zGenAlbum-Pinned-539',
+ 'SWYConverszGenAlbum-Pinned-540',
+ 'ParentzGenAlbum-Custom Sort Key-541',
+ 'zGenAlbum-Custom Sort Key-542',
+ 'SWYConverszGenAlbum-Custom Sort Key-543',
+ 'ParentzGenAlbum-Custom Sort Ascending-544',
+ 'zGenAlbum-Custom Sort Ascending-545',
+ 'SWYConverszGenAlbum-Custom Sort Ascending-546',
+ 'ParentzGenAlbum-Is Prototype-547',
+ 'zGenAlbum-Is Prototype-548',
+ 'SWYConverszGenAlbum-Is Prototype-549',
+ 'ParentzGenAlbum-Project Document Type-550',
+ 'zGenAlbum-Project Document Type-551',
+ 'SWYConverszGenAlbum-Project Document Type-552',
+ 'ParentzGenAlbum-Custom Query Type-553',
+ 'zGenAlbum-Custom Query Type-554',
+ 'SWYConverszGenAlbum-Custom Query Type-555',
+ 'ParentzGenAlbum-Trashed State-556',
+ ('ParentzGenAlbum-Trash Date-557', 'datetime'),
+ 'zGenAlbum-Trashed State-558',
+ ('zGenAlbum-Trash Date-559', 'datetime'),
+ 'SWYConverszGenAlbum-Trashed State-560',
+ ('SWYConverszGenAlbum-Trash Date-561', 'datetime'),
+ 'ParentzGenAlbum-Cloud Delete State-562',
+ 'zGenAlbum-Cloud Delete State-563',
+ 'SWYConverszGenAlbum-Cloud Delete State-564',
+ 'zGenAlbum-Cloud Owner Whitelisted-565',
+ 'SWYConverszGenAlbum-Cloud Owner Whitelisted-566',
+ 'zGenAlbum-Cloud Local Public URL Enabled-567',
+ 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-568',
+ 'zGenAlbum-Cloud Public URL Enabled-569',
+ 'zGenAlbum-Public URL-570',
+ 'SWYConverszGenAlbum-Cloud Public URL Enabled-571',
+ 'SWYConverszGenAlbum-Public URL-572',
+ 'zGenAlbum-Key Asset Face Thumb Index-573',
+ 'SWYConverszGenAlbum-Key Asset Face Thumb Index-574',
+ 'zGenAlbum-Project Text Extension ID-575',
+ 'SWYConverszGenAlbum-Project Text Extension ID-576',
+ 'zGenAlbum-User Query Data-577',
+ 'SWYConverszGenAlbum-User Query Data-578',
+ 'zGenAlbum-Custom Query Parameters-579',
+ 'SWYConverszGenAlbum-Custom Query Parameters-580',
+ 'zGenAlbum-Project Data-581',
+ 'SWYConverszGenAlbum-Project Data-582',
+ 'zGenAlbum-Search Index Rebuild State-583',
+ 'SWYConverszGenAlbum-Search Index Rebuild State-584',
+ 'zGenAlbum-Duplicate Type-585',
+ 'SWYConverszGenAlbum-Duplicate Type-586',
+ 'zGenAlbum-Privacy State-587',
+ 'SWYConverszGenAlbum-Privacy State-588',
+ 'zCldShareAlbumInvRec-zUUID-4TableStart-589',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-590',
+ 'zCldShareAlbumInvRec-Invitation State Local-591',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-592',
+ ('zCldShareAlbumInvRec-Subscription Date-593', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-594',
+ 'zCldShareAlbumInvRec-Invitee Last Name-595',
+ 'zCldShareAlbumInvRec-Invitee Full Name-596',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-597',
+ 'zCldShareAlbumInvRec-Invitee Email Key-598',
+ 'zGenAlbum-Key Asset Face ID-599',
+ 'zFaceCrop-Face Area Points-600',
+ 'zAddAssetAttr.Has_People_Scene Mid_Or_Greater_Confidence-iOS18-601',
+ 'zAsset-Face Adjustment Version-602',
+ 'zAddAssetAttr-Face Regions HEX-603',
+ 'zAddAssetAttr-Face Analysis Version-604',
+ 'zDetFace-Asset Visible-605',
+ 'zDetFacePrint-Data HEX-606',
+ 'zPerson-Contact Matching Dictionary HEX-607',
+ 'zPerson-Face Count-608',
+ 'zDetFace-Face Crop-609',
+ 'zDetFace-Face Algorithm Version-610',
+ 'zDetFace-Adjustment Version-611',
+ 'zDetFace-UUID-4TableStart-612',
+ 'zPerson-Person UUID-4TableStart-613',
+ 'zPerson-Is_Me_Confidence-iOS18-614',
+ 'zPerson - MD ID-615',
+ 'zPerson - Asset Sort Order-616',
+ 'zDetFace-Confirmed Face Crop Generation State-617',
+ 'zDetFace-Manual-618',
+ 'zDetFace-Detection Type-619',
+ 'zPerson-Detection Type-620',
+ 'zDetFace-VIP Model Type-621',
+ 'zDetFace-Name Source-622',
+ 'zDetFace-Cloud Name Source-623',
+ 'zPerson-Merge Candidate Confidence-624',
+ 'zPerson-Person URI-625',
+ 'zPerson-Display Name-626',
+ 'zPerson-Full Name-627',
+ 'zPerson-Cloud Verified Type-628',
+ 'zFaceCrop-State-629',
+ 'zFaceCrop-Type-630',
+ 'zFaceCrop-Resource Data-HEX-PHOTO used for FaceCrop-631',
+ 'zFaceCrop-UUID-4TableStart-632',
+ 'zPerson-Type-633',
+ 'zPerson-Verified Type-634',
+ 'zPerson-Gender Type-635',
+ 'zDetFace-Gender Type-636',
+ 'zDetFace-Center X-637',
+ 'zDetFace-Center Y-638',
+ 'zPerson-Age Type Estimate-639',
+ 'zDetFace-Age Type Estimate-640',
+ 'zDetFace-Ethnicity Type-641',
+ 'zDetFace-Skin Tone Type-642',
+ 'zDetFace-Hair Type-643',
+ 'zDetFace-Hair Color Type-644',
+ 'zDetFace-Head Gear Type-645',
+ 'zDetFace-Facial Hair Type-646',
+ 'zDetFace-Has Face Mask-647',
+ 'zDetFace-Pose Type-648',
+ 'zDetFace-Face Expression Type-649',
+ 'zDetFace-Has Smile-650',
+ 'zDetFace-Smile Type-651',
+ 'zDetFace-Lip Makeup Type-652',
+ 'zDetFace-Eyes State-653',
+ 'zDetFace-Is Left Eye Closed-654',
+ 'zDetFace-Is Right Eye Closed-655',
+ 'zDetFace-Gaze Center X-656',
+ 'zDetFace-Gaze Center Y-657',
+ 'zDetFace-Face Gaze Type-658',
+ 'zDetFace-Eye Glasses Type-659',
+ 'zDetFace-Eye Makeup Type-660',
+ 'zDetFace-Cluster Squence Number Key-661',
+ 'zDetFace-Grouping ID-662',
+ 'zDetFace-Master ID-663',
+ 'zDetFace-Quality-664',
+ 'zDetFace-Quality Measure-665',
+ 'zDetFace-Source Height-666',
+ 'zDetFace-Source Width-667',
+ 'zDetFace-Hidden-Asset Hidden-668',
+ 'zDetFace-In Trash-Recently Deleted-669',
+ 'zDetFace-Cloud Local State-670',
+ 'zDetFace-Training Type-671',
+ 'zDetFace.Pose Yaw-672',
+ 'zDetFace-Body Center X-673',
+ 'zDetFace-Body Center Y-674',
+ 'zDetFace-Body Height-675',
+ 'zDetFace-Body Width-676',
+ 'zDetFace-Roll-677',
+ 'zDetFace-Size-678',
+ 'zDetFace-Cluster Squence Number-679',
+ 'zDetFace-Blur Score-680',
+ 'zDetFacePrint-Face Print Version-681',
+ 'zMedAnlyAstAttr-Face Count-682',
+ 'zDetFaceGroup-UUID-4TableStart-683',
+ 'zDetFaceGroup-Person Builder State-684',
+ 'zDetFaceGroup-UnNamed Face Count-685',
+ 'zPerson-In Person Naming Model-686',
+ 'zPerson-Key Face Pick Source Key-687',
+ 'zPerson-Manual Order Key-688',
+ 'zPerson-Question Type-689',
+ 'zPerson-Suggested For Client Type-690',
+ 'zPerson-Merge Target Person-691',
+ 'zPerson-Cloud Local State-692',
+ 'zFaceCrop-Cloud Local State-693',
+ 'zFaceCrop-Cloud Type-694',
+ 'zPerson-Cloud Delete State-695',
+ 'zFaceCrop-Cloud Delete State-696',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-697',
+ 'zAsset-Highlight Visibility Score-698',
+ 'zMemory-UUID-4TableStart-699',
+ 'zMemory-AssetListPredicte-700',
+ 'zMemory-Score-701',
+ 'zMemory-SubTitle-702',
+ 'zMemory-Title-703',
+ 'zMemory-Category-704',
+ 'zMemory-SubCategory-705',
+ ('zMemory-Creation Date-706', 'datetime'),
+ ('zMemory-Last Enrichment Date-707', 'datetime'),
+ 'zMemory-User Action Options-708',
+ 'zMemory-Favorite Memory-709',
+ 'zMemory-View Count-710',
+ 'zMemory-Play Count-711',
+ 'zMemory-Rejected-712',
+ 'zMemory-Share Count-713',
+ 'zMemory-Sharing Composition-714',
+ 'zMemory-PhotosGraphData-HEX NSKeyed Plist-715',
+ 'zMemory-MovieAssetState-HEX NSKeyed Plist-716',
+ 'zMemory-MovieData-HEX NSKeyed Plist-717',
+ ('zMemory-Last Movie Play Date-718', 'datetime'),
+ ('zMemory-Last Viewed Date-719', 'datetime'),
+ 'zMemory-Pending Play Count Memory-720',
+ 'zMemory-Pending Share Count Memory-721',
+ 'zMemory-Pending View Count Memory-722',
+ 'zMemory-Pending State-723',
+ 'zMemory-Featured State-724',
+ 'zMemory-Photos Graph Version-725',
+ 'zMemory-Graph Memory Identifier-726',
+ 'zMemory-Notification State-727',
+ 'zMemory-Cloud Local State-728',
+ 'zMemory-Cloud Delete State-729',
+ 'zMemory-Story Color Grade Kind-730',
+ 'zMemory-Story Serialized Title Category-731',
+ 'zMemory-Syndicated Content State-732',
+ 'zMemory-Search Index Rebuild State-733',
+ 'zMemory-Black Listed Feature-734',
+ 'zMoment-UUID-4TableStart-735',
+ 'zMoment-Aggregation Score-736',
+ ('zMoment-Start Date-737', 'datetime'),
+ ('zMoment-Representative Date-738', 'datetime'),
+ 'zMoment-Timezone Offset-739',
+ ('zMoment-Modification Date-740', 'datetime'),
+ ('zMoment-End Date-741', 'datetime'),
+ 'zMoment-SubTitle-742',
+ 'zMoment-Localized Location Names-743',
+ 'zMoment-Title-744',
+ 'zMoment-Originator State-745',
+ 'zMoment-Sharing Composition-746',
+ 'zMoment-Cached Count Shared-747',
+ 'zMoment-Processed Location-748',
+ 'zMoment-Approx Latitude-749',
+ 'zMoment-Approx Longitude-750',
+ 'zMoment-GPS Horizontal Accuracy-751',
+ 'zMoment-Cache Count-752',
+ 'zMoment-Cached Photos Count-753',
+ 'zMoment-Cached Videos Count-754',
+ 'zMoment-Trashed State-755',
+ 'SBKAzSugg-UUID-4TableStart-756',
+ 'SBKAzSugg-Suggestion Context-757',
+ 'SBKAzSugg-Sharing Composition-758',
+ ('SBKAzSugg-Start Date-759', 'datetime'),
+ 'SBKAzSugg-State-760',
+ 'SBKAzSugg-Featured State-761',
+ 'SBKAzSugg- Available Features-762',
+ 'SBKAzSugg-Notification State-763',
+ ('SBKAzSugg-Creation Date-764', 'datetime'),
+ ('SBKAzSugg-End Date-765', 'datetime'),
+ ('SBKAzSugg-Activation Date-766', 'datetime'),
+ ('SBKAzSugg-Expunge Date-767', 'datetime'),
+ ('SBKAzSugg-Relevant Until Date-768', 'datetime'),
+ 'SBKAzSugg-Title-769',
+ 'SBKAzSugg-Sub Title-770',
+ 'SBKAzSugg-Cached Count-771',
+ 'SBKAzSugg-Cahed Photos Count-772',
+ 'SBKAzSugg-Cached Videos Count-773',
+ 'SBKAzSugg-Type-774',
+ 'SBKAzSugg-Sub Type-775',
+ 'SBKAzSugg-Action Data-776',
+ 'SBKAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist-777',
+ 'SBKAzSugg-Version-778',
+ 'SBKAzSugg-Cloud Local State-779',
+ 'SBKAzSugg-Cloud Delete State-780',
+ 'SBRAzSugg-UUID-4TableStart-781',
+ 'SBRAzSugg-Suggestion Context-782',
+ 'SBRAzSugg-Sharing Composition-783',
+ ('SBRAzSugg-Start Date-784', 'datetime'),
+ 'SBRAzSugg-State-785',
+ 'SBRAzSugg-Featured State-786',
+ 'SBRAzSugg- Available Features-787',
+ 'SBRAzSugg-Notification State-788',
+ ('SBRAzSugg-Creation Date-789', 'datetime'),
+ ('SBRAzSugg-End Date-790', 'datetime'),
+ ('SBRAzSugg-Activation Date-791', 'datetime'),
+ ('SBRAzSugg-Expunge Date-792', 'datetime'),
+ ('SBRAzSugg-Relevant Until Date-793', 'datetime'),
+ 'SBRAzSugg-Title-794',
+ 'SBRAzSugg-Sub Title-795',
+ 'SBRAzSugg-Cached Count-796',
+ 'SBRAzSugg-Cahed Photos Count-797',
+ 'SBRAzSugg-Cached Videos Count-798',
+ 'SBRAzSugg-Type-799',
+ 'SBRAzSugg-Sub Type-800',
+ 'SBRAzSugg-Action Data-801',
+ 'SBRAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist-802',
+ 'SBRAzSugg-Version-803',
+ 'SBRAzSugg-Cloud Local State-804',
+ 'SBRAzSugg-Cloud Delete State-805',
+ 'zMedAnlyAstAttr-Media Analysis Version-806',
+ 'zMedAnlyAstAttr-Audio Classification-807',
+ 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-808',
+ 'zMedAnlyAstAttr-Best Video Range Start Time Scale-809',
+ 'zMedAnlyAstAttr-Best Video Range Duration Value-810',
+ 'zMedAnlyAstAttr-Best Video Range Start Value-811',
+ 'zMedAnlyAstAttr-Packed Best Playback Rect-812',
+ 'zMedAnlyAstAttr-Activity Score-813',
+ 'zMedAnlyAstAttr-Video Score-814',
+ 'zMedAnlyAstAttr-Audio Score-815',
+ 'zMedAnlyAstAttr-Wallpaper Score-816',
+ 'zMedAnlyAstAttr-AutoPlay Suggestion Score-817',
+ 'zMedAnlyAstAttr-Blurriness Score-818',
+ 'zMedAnlyAstAttr-Exposure Score-819',
+ 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-820',
+ 'zMedAnlyAstAttr-Probable Rotation Direction-821',
+ 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-822',
+ 'zMedAnlyAstAttr-Color Normalization Data-823',
+ 'zMedAnlyAstAttr-Media_Analysis Image_Version-824',
+ 'zMedAnlyAstAttr-Image_Caption_Version-825',
+ 'zMedAnlyAstAttr-Video_Caption_Version-826',
+ 'zMedAnlyAstAttr-VA_Location_Analysis_Version-827',
+ 'zAssetAnalyState-Asset UUID-4TableStart-828',
+ 'zAssetAnalyState-Analyisis State-829',
+ 'zAssetAnalyState-Worker Flags-830',
+ 'zAssetAnalyState-Worker Type-831',
+ ('zAssetAnalyState-Ignore Until Date-832', 'datetime'),
+ ('zAssetAnalyState-Last Ignored Date-833', 'datetime'),
+ ('zAssetAnalyState-Sort Token-834', 'datetime'),
+ 'zMedAnlyAstAttr-Character Recognition Attr-835',
+ 'zCharRecogAttr-Algorithm Version-836',
+ 'zCharRecogAttr-Adjustment Version-837',
+ 'zCharRecogAttr-Character Recognition Data-HEX-838',
+ 'zCharRecogAttr-Machine Readable Code Data-HEX-839',
+ 'zMedAnlyAstAttr-Visual Search Attributes-840',
+ 'zVisualSearchAttr-Algorithm Version-841',
+ 'zVisualSearchAttr-Adjustment Version-842',
+ 'zVisualSearchAttr-Visual Search Data-HEX-843',
+ 'zVisualSearchAttr - Sticker Confidence Algorithm Version-844',
+ 'zVisualSearchAttr - Sticker Confidence Score-845',
+ 'zAsset-Sticker Confidence Score-846',
+ 'zAsset-Overall Aesthetic Score-847',
+ 'zCompAssetAttr-Behavioral Score-848',
+ 'zCompAssetAttr-Failure Score zCompAssetAttr-849',
+ 'zCompAssetAttr-Harmonious Color Score-850',
+ 'zCompAssetAttr-Impressiveness Score-851',
+ 'zCompAssetAttr-Interaction Score-852',
+ 'zCompAssetAttr-Interesting Subject Score-853',
+ 'zCompAssetAttr-Intrusive Object Presence Score-854',
+ 'zCompAssetAttr-Lively Color Score-855',
+ 'zCompAssetAttr-Low Light-856',
+ 'zCompAssetAttr-Noise Score-857',
+ 'zCompAssetAttr-Pleasant Camera Tilt Score-858',
+ 'zCompAssetAttr-Pleasant Composition Score-859',
+ 'zCompAssetAttr-Pleasant Lighting Score-860',
+ 'zCompAssetAttr-Pleasant Pattern Score-861',
+ 'zCompAssetAttr-Pleasant Perspective Score-862',
+ 'zCompAssetAttr-Pleasant Post Processing Score-863',
+ 'zCompAssetAttr-Pleasant Reflection Score-864',
+ 'zCompAssetAttrPleasant Symmetry Score-865',
+ 'zCompAssetAttr-Sharply Focused Subject Score-866',
+ 'zCompAssetAttr-Tastefully Blurred Score-867',
+ 'zCompAssetAttr-Well Chosen Subject Score-868',
+ 'zCompAssetAttr-Well Framed Subject Score-869',
+ 'zCompAssetAttr-Well Timed Shot Score-870',
+ 'zCldRes-Asset UUID-4TableStart-871',
+ 'zCldRes-Cloud Local State-872',
+ 'zCldRes-File Size-873',
+ 'zCldRes-Height-874',
+ 'zCldRes-Is Available-875',
+ 'zCldRes-Is Locally Available-876',
+ 'zCldRes-Prefetch Count-877',
+ 'zCldRes-Source Type-878',
+ 'zCldRes-Type-879',
+ 'zCldRes-Width-880',
+ ('zCldRes-Date Created-881', 'datetime'),
+ ('zCldRes-Last OnDemand Download Date-882', 'datetime'),
+ ('zCldRes-Last Prefetch Date-883', 'datetime'),
+ 'zCldRes-Prunedat-884',
+ 'zCldRes-File Path-885',
+ 'zCldRes-Fingerprint-886',
+ 'zCldRes-Item ID-887',
+ 'zCldRes-UniID-888',
+ 'zUserFeedback-UUID-4TableStart-889',
+ 'zUserFeedback-Feature-890',
+ 'zUserFeedback-Type-891',
+ ('zUserFeedback-Last Modified Date-892', 'datetime'),
+ 'zUserFeedback-Context-893',
+ 'zUserFeedback-Cloud Local State-894',
+ 'zUserFeedback-Cloud Delete State-895',
+ 'zUserFeedback - Creation Type-896',
+ 'zAddAssetAttr-zPK-897',
+ 'zAddAssetAttr-zENT-898',
+ 'ZAddAssetAttr-zOPT-899',
+ 'zAddAssetAttr-zAsset= zAsset_zPK-900',
+ 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-901',
+ 'zAddAssetAttr-Original Stable Hash-4Queryend-902',
+ 'zAddAssetAttr-Public Global UUID-903',
+ 'zAddAssetAttr-Deferred Photo Identifier-904',
+ 'zAddAssetAttr-Original Assets UUID-905',
+ 'zAddAssetAttr-Import Session ID-906',
+ 'zAddAssetAttr-Originating Asset Identifier-4endquery-907',
+ 'zAddAssetAttr.Adjusted Stable Hash-4endquery-908',
+ 'zAlbumList-zPK= Album List Key-909',
+ 'zAlbumList-zENT-910',
+ 'zAlbumList-zOPT-911',
+ 'zAlbumList-ID Key-912',
+ 'zAlbumList-UUID-913',
+ 'zAsset-zPK-914',
+ 'zAsset-zENT-915',
+ 'zAsset-zOPT-916',
+ 'zAsset-Master= zCldMast-zPK-917',
+ 'zAsset-Extended Attributes= zExtAttr-zPK-918',
+ 'zAsset-Import Session Key-919',
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-920',
+ 'zAsset-Photo Analysis Attributes Key-921',
+ 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-922',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-923',
+ 'zAsset-Moment Share Key= zShare-zPK-924',
+ 'zAsset-zMoment Key= zMoment-zPK-925',
+ 'zAsset-Computed Attributes Asset Key-926',
+ 'zAsset-Highlight Being Assets-HBA Key-927',
+ 'zAsset-Highlight Being Extended Assets-HBEA Key-928',
+ 'zAsset-Highlight Being Key Asset Private-HBKAP Key-929',
+ 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-930',
+ 'zAsset-Highligh Being Summary Assets-HBSA Key-931',
+ 'zAsset-Day Group Highlight Being Assets-DGHBA Key-932',
+ 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-933',
+ 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-934',
+ 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-935',
+ 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-936',
+ 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-937',
+ 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-938',
+ 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-939',
+ 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-940',
+ 'zAsset-Promotion Score-941',
+ 'zAsset-Iconic Score-942',
+ 'zAsset-Media Analysis Attributes Key-943',
+ 'zAsset-Media Group UUID-944',
+ 'zAsset-UUID = store.cloudphotodb-945',
+ 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-946',
+ 'zAsset.Cloud Collection GUID-947',
+ 'zAsset-Avalanche UUID-948',
+ 'zAssetAnalyState-zPK-949',
+ 'zAssetAnalyState-zEnt-950',
+ 'zAssetAnalyState-zOpt-951',
+ 'zAssetAnalyState-Asset= zAsset-zPK-952',
+ 'zAssetAnalyState-Asset UUID-953',
+ 'zAsstContrib-zPK-954',
+ 'zAsstContrib-zEnt-955',
+ 'zAsstContrib-zOpt-956',
+ 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-957',
+ 'zAsstContrib-Participant= zSharePartic-zPK-958',
+ 'zAssetDes-zPK-959',
+ 'zAssetDes-zENT-960',
+ 'zAssetDes-zOPT-961',
+ 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-962',
+ 'zCharRecogAttr-zPK-963',
+ 'zCharRecogAttr-zENT-964',
+ 'zCharRecogAttr-zOPT-965',
+ 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-966',
+ 'zCldFeedEnt-zPK= zCldShared keys-967',
+ 'zCldFeedEnt-zENT-968',
+ 'zCldFeedEnt-zOPT-969',
+ 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-970',
+ 'zCldFeedEnt-Entry Invitation Record GUID-971',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-972',
+ 'zCldMast-zPK= zAsset-Master-973',
+ 'zCldMast-zENT-974',
+ 'zCldMast-zOPT-975',
+ 'zCldMast-Moment Share Key= zShare-zPK-976',
+ 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-977',
+ 'zCldMast-Originating Asset ID-978',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-979',
+ 'CMzCldMastMedData-zENT-980',
+ 'CMzCldMastMedData-zOPT-981',
+ 'CMzCldMastMedData-CldMast= zCldMast-zPK-982',
+ 'AAAzCldMastMedData-zENT-983',
+ 'AAAzCldMastMedData-zOPT-984',
+ 'AAAzCldMastMedData-CldMast key-985',
+ 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-986',
+ 'zCldRes-zPK-987',
+ 'zCldRes-zENT-988',
+ 'zCldRes-zOPT-989',
+ 'zCldRes-Asset= zAsset-zPK-990',
+ 'zCldRes-Cloud Master= zCldMast-zPK-991',
+ 'zCldRes-Asset UUID-992',
+ 'zCldShareAlbumInvRec-zPK-993',
+ 'zCldShareAlbumInvRec-zEnt-994',
+ 'zCldShareAlbumInvRec-zOpt-995',
+ 'zCldShareAlbumInvRec-Album Key-996',
+ 'zCldShareAlbumInvRec-FOK Album Key-997',
+ 'zCldShareAlbumInvRec-Album GUID-998',
+ 'zCldShareAlbumInvRec-zUUID-999',
+ 'zCldShareAlbumInvRec-Cloud GUID-1000',
+ 'zCldSharedComment-zPK-1001',
+ 'zCldSharedComment-zENT-1002',
+ 'zCldSharedComment-zOPT-1003',
+ 'zCldSharedComment-Commented Asset Key= zAsset-zPK-1004',
+ 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-1005',
+ 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-1006',
+ 'zCldSharedComment-Liked Asset Key= zAsset-zPK-1007',
+ 'zCldSharedComment-CldFeedLikeCommentEntry Key-1008',
+ 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-1009',
+ 'zCldSharedComment-Cloud GUID-1010',
+ 'zCompAssetAttr-zPK-1011',
+ 'zCompAssetAttr-zEnt-1012',
+ 'zCompAssetAttr-zOpt-1013',
+ 'zCompAssetAttr-Asset Key-1014',
+ 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-1015',
+ 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-1016',
+ 'zCompSyncAttr-zAsset= zAsset-zPK-1017',
+ 'zCompSyncAttr-zENT-1018',
+ 'zCompSyncAttr-zOPT-1019',
+ 'zDetFace-zPK-1020',
+ 'zDetFace-zEnt-1021',
+ 'zDetFace.zOpt-1022',
+ 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face-1023',
+ 'zDetFace-PersonForFace= zPerson-zPK-1024',
+ 'zDetFace-Person Being Key Face-1025',
+ 'zDetFace-Face Print-1026',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-1027',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-1028',
+ 'zDetFace-UUID-1029',
+ 'zDetFaceGroup-zPK-1030',
+ 'zDetFaceGroup-zENT-1031',
+ 'zDetFaceGroup-zOPT-1032',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-1033',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-1034',
+ 'zDetFaceGroup-UUID-1035',
+ 'zDetFacePrint-zPK-1036',
+ 'zDetFacePrint-zEnt-1037',
+ 'zDetFacePrint-zOpt-1038',
+ 'zDetFacePrint-Face Key-1039',
+ 'zExtAttr-zPK= zAsset-zExtendedAttributes-1040',
+ 'zExtAttr-zENT-1041',
+ 'zExtAttr-zOPT-1042',
+ 'zExtAttr-Asset Key-1043',
+ 'zFaceCrop-zPK-1044',
+ 'zFaceCrop-zEnt-1045',
+ 'zFaceCrop-zOpt-1046',
+ 'zFaceCrop-Asset Key-1047',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-1048',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-1049',
+ 'zFaceCrop-Face Key-1050',
+ 'zFaceCrop-UUID-1051',
+ 'zGenAlbum-zPK=26AlbumLists= 26Albums-1052',
+ 'zGenAlbum-zENT-1053',
+ 'zGenAlbum-zOpt-1054',
+ 'zGenAlbum-Custom Key Asset-1055',
+ 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-1056',
+ 'zGenAlbum-FOK Parent Folder-1057',
+ 'zGenAlbum-zSyndicate-1058',
+ 'zGenAlbum-UUID-1059',
+ 'SWYConverszGenAlbum-UUID-1060',
+ 'zGenAlbum-Cloud_GUID = store.cloudphotodb-1061',
+ 'SWYConverszGenAlbum-Cloud GUID-1062',
+ 'zGenAlbum-Project Render UUID-1063',
+ 'SWYConverszGenAlbum-Project Render UUID-1064',
+ 'zIntResou-zPK-1065',
+ 'zIntResou-zENT-1066',
+ 'zIntResou-zOPT-1067',
+ 'zIntResou-Asset= zAsset_zPK-1068',
+ 'zIntResou-Fingerprint-4Queryend-1069',
+ 'zIntResou-Stable Hash-4Queryend-1070',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-1071',
+ 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1072',
+ 'zMedAnlyAstAttr-zEnt-1073',
+ 'zMedAnlyAstAttr-zOpt-1074',
+ 'zMedAnlyAstAttr-Asset= zAsset-zPK-1075',
+ 'zMemory-zPK-1076',
+ 'zMemory-zENT-1077',
+ 'zMemory-zOPT-1078',
+ 'zMemory-Key Asset= zAsset-zPK-1079',
+ 'zMemory-UUID-1080',
+ 'zMoment-zPK-1081',
+ 'zMoment-zENT-1082',
+ 'zMoment-zOPT-1083',
+ 'zMoment-Highlight Key-1084',
+ 'zMoment-UUID-1085',
+ 'zPerson-zPK=zDetFace-Person-1086',
+ 'zPerson-zEnt-1087',
+ 'zPerson-zOpt-1088',
+ 'zPerson-Share Participant= zSharePartic-zPK-1089',
+ 'zPerson-KeyFace=zDetFace-zPK-1090',
+ 'zPerson-Assoc Face Group Key-1091',
+ 'zPerson-Person UUID-1092',
+ 'zPerson-Is_Me_Confidence-1093',
+ 'zPhotoAnalysisAssetAttr-zPK-1094',
+ 'zPhotoAnalysisAssetAttr-zEnt-1095',
+ 'zPhotoAnalysisAssetAttr-zOpt-1096',
+ 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1097',
+ 'zSceneP-zPK-1098',
+ 'zSceneP-zENT-1099',
+ 'zSceneP-zOPT-1100',
+ 'zShare-zPK-1101',
+ 'zShare-zENT-1102',
+ 'zShare-zOPT-1103',
+ 'zShare-UUID-1104',
+ 'SPLzShare-UUID-1105',
+ 'zShare-Scope ID = store.cloudphotodb-1106',
+ 'zSharePartic-zPK-1107',
+ 'zSharePartic-zENT-1108',
+ 'zSharePartic-zOPT-1109',
+ 'zSharePartic-Share Key= zShare-zPK-1110',
+ 'zSharePartic-Person= zPerson-zPK-1111',
+ 'zSharePartic-UUID-1112',
+ 'SBKAzSugg-zPK-1113',
+ 'SBKAzSugg-zENT-1114',
+ 'SBKAzSugg-zOPT-1115',
+ 'SBKAzSugg-UUID-1116',
+ 'SBRAzSugg-zPK-1117',
+ 'SBRAzSugg-zENT-1118',
+ 'SBRAzSugg-zOPT-1119',
+ 'SBRAzSugg-UUID-1120',
+ 'z3SuggBRA-3RepAssets-1121',
+ 'z3SuggBRA-65SuggBeingRepAssets-1122',
+ 'z3SuggBKA-65SuggBeingKeyAssets= zSugg-zPK-1123',
+ 'z3SuggBKA-3KeyAssets1= zAsset-zPK-1124',
+ 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1125',
+ 'zUnmAdj-zOPT-1126',
+ 'zUnmAdj-zENT-1127',
+ 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1128',
+ 'zUnmAdj-UUID-1129',
+ 'zUnmAdj-Other Adjustments Fingerprint-1130',
+ 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1131',
+ 'zUserFeedback-zPK-1132',
+ 'zUserFeedback-zENT-1133',
+ 'zUserFeedback-zOPT-1134',
+ 'zUserFeedback-Person= zPerson-zPK-1135',
+ 'zUserFeedback-Memory= zMemory-zPK-1136',
+ 'zUserFeedback-UUID-1137',
+ 'zVisualSearchAttr-zPK-1138',
+ 'zVisualSearchAttr-zENT-1139',
+ 'zVisualSearchAttr-zOPT-1140',
+ 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1141',
+ 'z29AlbumList-29Albums= zGenAlbum-zPK-1142',
+ 'z29AlbumList-Album List Key-1143',
+ 'z29AlbumList-FOK29Albums Key-1144',
+ 'z30Assets-30Albums= zGenAlbum-zPK-1145',
+ 'z30Assets-3Asset Key= zAsset-zPK in the Album-1146',
+ 'z30Assets-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1147',
+ 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1148',
+ 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1149',
+ 'z3MemoryBCAs-51MemoriesBeingCuratedAssets= zMemory-zPK-1150',
+ 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1151',
+ 'z3MemoryBECAs-51MemoriesBeingExtCuratedAssets= zMemory-zPK-1152',
+ 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1153',
+ 'z3MemoryBRAs-51RepresentativeAssets= zMemory-zPK-1154',
+ 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1155',
+ 'z3MemoryBUCAs-51MemoriesBeingUserCuratedAssets= zMemory-zPK-1156',
+ 'z3MemoryBCAs-51Memories Being Custom User Assets-1157',
+ 'z3MemoryBCAs-3Custom User Assets-1158',
+ 'z3MemoryBCAs-FOK-3Custom User Assets-1159')
+ data_list = get_sqlite_db_records(source_path, query)
- else:
- logfunc('No data available for iOS 18 PhotoData-Photos.sqlite')
+ return data_headers, data_list, source_path
- db.close()
- return
+@artifact_processor
+def Ph98_2iOS18RefforAssetAnalysisSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
-
-def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
-
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if (version.parse(iosversion) <= version.parse("17.8")) or (version.parse(iosversion) >= version.parse("19")):
- logfunc("Unsupported version for Syndication.photoslibrary-database-Photos.sqlite reference for asset analysis from iOS " + iosversion)
+ logfunc("Unsupported version for Syndication.photoslibrary for iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("19")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found, "Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
CASE zAsset.ZCOMPLETE
WHEN 1 THEN '1-Yes-1'
@@ -4149,10 +4124,10 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w
zAsset.Z_PK AS 'zAsset-zPK-4QueryStart',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK-4QueryStart',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb-4QueryStart',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18-4QueryStart',
- zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-iOS18-4QueryStart',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18-4QueryStart',
- zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-iOS18-4QueryStart',
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-4QueryStart',
+ zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-4QueryStart',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-4QueryStart',
+ zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-4QueryStart',
CASE zAsset.ZBUNDLESCOPE
WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0'
WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1'
@@ -4202,10 +4177,11 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w
zExtAttr.ZFOCALLENGTHIN35MM AS 'zExtAttr-Focal Lenth in 35MM',
zExtAttr.ZDIGITALZOOMRATIO AS 'zExtAttr-Digital Zoom Ratio',
CASE zExtAttr.ZGENERATIVEAITYPE
- WHEN 0 THEN '0-Not_Generative_AI iOS18_Still_Testing-0'
+ WHEN 0 THEN '0-Gen_AI_Type_Not_Detected-0'
+ WHEN 2 THEN '2-CleanUp-SafetyFilter-2'
ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || ''
- END AS 'zExtAttr-Generative_AI_Type-iOS18',
- zExtAttr.ZCREDIT AS 'zExtAttr-Credit-iOS18',
+ END AS 'zExtAttr-Generative_AI_Type',
+ zExtAttr.ZCREDIT AS 'zExtAttr-Credit',
CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE
WHEN 0 THEN '0-Back-Camera-Other-0'
WHEN 1 THEN '1-Front-Camera-1'
@@ -4268,10 +4244,10 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w
ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || ''
END AS 'zAsset-Saved Asset Type',
CASE zAsset.ZISRECENTLYSAVED
- WHEN 0 THEN '0-Not_Recenlty_Saved iOS18_Still_Testing-0'
- WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1'
+ WHEN 0 THEN '0-Not_Recently_Saved-0'
+ WHEN 1 THEN '1-Recently_Saved-1'
ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || ''
- END AS 'zAsset-Is_Recently_Saved-iOS18',
+ END AS 'zAsset-Is_Recently_Saved',
zAsset.ZDIRECTORY AS 'zAsset-Directory-Path',
zAsset.ZFILENAME AS 'zAsset-Filename',
zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename',
@@ -4520,10 +4496,10 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w
WHEN 1 THEN '1-Video-1'
END AS 'zAsset-Kind',
CASE zAsset.ZISDETECTEDSCREENSHOT
- WHEN 0 THEN '0-Not_Detected_Screenshot iOS18_Still_Testing-0'
- WHEN 1 THEN '1-Detected_Screenshot iOS18_Still_Testing-1'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZISDETECTEDSCREENSHOT || ''
- END AS 'zAsset-Is_Detected_Screenshot-iOS18',
+ WHEN 0 THEN '0-Not_Screenshot-0'
+ WHEN 1 THEN '1-Screenshot-1'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZISDETECTEDSCREENSHOT || ''
+ END AS 'zAsset-Is_Detected_Screenshot',
CASE zAsset.ZKINDSUBTYPE
WHEN 0 THEN '0-Still-Photo-0'
WHEN 1 THEN '1-Paorama-1'
@@ -4623,9 +4599,9 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w
zIntResou.ZTRANSIENTCLOUDMASTER AS 'zIntResou-Transient Cloud Master',
zIntResou.ZSIDECARINDEX AS 'zIntResou-Side Car Index',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb-4TableStart',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Orignial Stable Hash-iOS18-4TableStart',
- zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-iOS18-4TableStart',
- zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-iOS18-4TableStart',
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Orignial Stable Hash-4TableStart',
+ zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-4TableStart',
+ zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-4TableStart',
zIntResou.ZFILEID AS 'zIntResou- File ID',
CASE zIntResou.ZVERSION
WHEN 0 THEN '0-IR_Asset_Standard-0'
@@ -4821,19 +4797,19 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w
zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart',
zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options',
CASE zAsset.ZADJUSTMENTSSTATE
- WHEN 0 THEN '0-No-Adjustments-0'
- WHEN 2 THEN '2-Yes-Adjustments iOS18_needs_update_Decoding-2'
- WHEN 3 THEN '3-Yes-Adjustments iOS18_needs_update_Decoding-3'
- ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || ''
- END AS 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18',
+ WHEN 0 THEN '0-No-Adjustments-0'
+ WHEN 2 THEN '2-Adjusted-PhotosAppEdit-2'
+ WHEN 3 THEN '3-Adjusted-Camera-lens-3'
+ ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || ''
+ END AS 'zAsset-Adjustments_State',
zUnmAdj.ZUUID AS 'zUnmAdj-UUID-4TableStart',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18-4TableStart',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-4TableStart',
zUnmAdj.ZOTHERADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Other Adjustments Fingerprint-4TableStart',
zUnmAdj.ZSIMILARTOORIGINALADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Similar to Orig Adjustments Fingerprint-4TableStart',
- zCompSyncAttr.ZCLOUDCOMPUTESTATEADJUSTMENTFINGERPRINT AS 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18-4TableStart',
+ zCompSyncAttr.ZCLOUDCOMPUTESTATEADJUSTMENTFINGERPRINT AS 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-4TableStart',
DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp',
DateTime(zUnmAdj.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zUnmAdj-Adjustment Timestamp',
- DateTime(zCompSyncAttr.ZCLOUDCOMPUTESTATELASTUPDATEDDATE + 978307200, 'UNIXEPOCH') AS 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18',
+ DateTime(zCompSyncAttr.ZCLOUDCOMPUTESTATELASTUPDATEDDATE + 978307200, 'UNIXEPOCH') AS 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date',
zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID',
zUnmAdj.ZEDITORLOCALIZEDNAME AS 'zUnmAdj-Editor Localized Name',
zUnmAdj.ZADJUSTMENTFORMATIDENTIFIER AS 'zUnmAdj-Adjustment Format ID',
@@ -4974,14 +4950,14 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w
WHEN 1 THEN '1-Obs in iOS 18 still testing-1'
ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSLEETISREVERSIBLE || ''
END AS 'zAddAssetAttr.Sleet_Is_Reversible-iOS18',
- zExtAttr.ZSLEETRENDERINGVERSION AS 'zExtAttr-Sleet_Rendering_Version-iOS18',
- zExtAttr.ZSLEETINTENSITY AS 'zExtAttr-Sleet_Intensity-iOS18',
- zExtAttr.ZSLEETTONEBIAS AS 'zExtAttr-Sleet_Tone_Bias-iOS18',
- zExtAttr.ZSLEETCOLORBIAS AS 'zExtAttr-Sleet_Color_Bias-iOS18',
+ zExtAttr.ZSLEETRENDERINGVERSION AS 'zExtAttr-Sleet_Rendering_Version',
+ zExtAttr.ZSLEETINTENSITY AS 'zExtAttr-Sleet_Intensity',
+ zExtAttr.ZSLEETTONEBIAS AS 'zExtAttr-Sleet_Tone_Bias',
+ zExtAttr.ZSLEETCOLORBIAS AS 'zExtAttr-Sleet_Color_Bias',
CASE zExtAttr.ZSLEETCAST
WHEN 0 THEN '0-ObsButUnkn iOS18_Still_Testing-0'
ELSE 'Unknown-New-Value!: ' || zExtAttr.ZSLEETCAST || ''
- END AS 'zExtAttr-Sleet_Cast-iOS18',
+ END AS 'zExtAttr-Sleet_Cast',
zExtAttr.ZISO AS 'zExtAttr-ISO',
zExtAttr.ZMETERINGMODE AS 'zExtAttr-Metering Mode',
zExtAttr.ZSAMPLERATE AS 'zExtAttr-Sample Rate',
@@ -5009,11 +4985,6 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w
zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length',
zAddAssetAttr.ZEMBEDDEDTHUMBNAILOFFSET AS 'zAddAssetAttr-Embedded Thumbnail Offset',
zAddAssetAttr.ZEMBEDDEDTHUMBNAILWIDTH AS 'zAddAssetAttr-Embedded Thumbnail Width',
- CASE zAddAssetAttr.ZIMAGEEMBEDDINGVERSION
- WHEN 0 THEN '0-Obs_in_iOS18 still_testing-0'
- WHEN 1 THEN '1-Obs_in_iOS18 still_testing-1'
- ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMAGEEMBEDDINGVERSION || ''
- END AS 'zAddAssetAttr.Image Embedding Version-iOS18',
zAsset.ZPACKEDACCEPTABLECROPRECT AS 'zAsset-Packed Acceptable Crop Rect',
zAsset.ZPACKEDBADGEATTRIBUTES AS 'zAsset-Packed Badge Attributes',
zAsset.ZPACKEDPREFERREDCROPRECT AS 'zAsset-Packed Preferred Crop Rect',
@@ -5036,18 +5007,6 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w
zAddAssetAttr.ZPLACEANNOTATIONDATA AS 'zAddAssetAttr-Place Annotation Data',
zAddAssetAttr.ZDISTANCEIDENTITY AS 'zAddAssetAttr-Distance Identity',
zAddAssetAttr.ZEDITEDIPTCATTRIBUTES AS 'zAddAssetAttr-Edited IPTC Attributes',
- zGenAsstDesc.ZASSET AS 'zGenAsstDesc-zAsset= zAsset-zPK-iOS18',
- zAsset.ZGENERATEDASSETDESCRIPTION AS 'zAsset-Generated_Asset_Description= zGenAsstDesc-zPK-iOS18',
- zGenAsstDesc.Z_PK AS 'zGenAsstDesc-zPK= zAsset-GenAsstDesc-iOS18',
- zGenAsstDesc.Z_ENT AS 'zGenAsstDesc-zENT-iOS18',
- zGenAsstDesc.Z_OPT AS 'zGenAsstDesc-zOPT-iOS18',
- DateTime(zGenAsstDesc.ZANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zGenAsstDesc-Analysis_Timestamp-iOS18',
- CASE zGenAsstDesc.ZANALYSISSOURCETYPE
- WHEN 0 THEN '0-NotYetObs iOS18_Still_Testing-0'
- ELSE 'Unknown-New-Value!: ' || zGenAsstDesc.ZANALYSISSOURCETYPE || ''
- END AS 'zGenAsstDesc-Analysis_Source_Type-iOS18',
- zGenAsstDesc.ZANALYSISVERSION AS 'zGenAsstDesc-Analysis Version-iOS18',
- zGenAsstDesc.ZDESCRIPTIONTEXT AS 'zGenAsstDesc-Description_Text-iOS18',
zAssetDes.ZLONGDESCRIPTION AS 'zAssetDes-Long Description',
zAddAssetAttr.ZASSETDESCRIPTION AS 'zAddAssetAttr-Asset Description',
zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website',
@@ -5143,31 +5102,31 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w
CASE zShare.Z_ENT
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || ''
END AS 'zShare-zENT-CMM',
CASE SPLzShare.Z_ENT
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
ELSE 'Unknown-New-Value!: ' || SPLzShare.Z_ENT || ''
END AS 'SPLzShare-zENT-SPL',
- CASE zSharePartic.Z62_SHARE
+ CASE zSharePartic.Z61_SHARE
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
- ELSE 'Unknown-New-Value!: ' || zSharePartic.Z62_SHARE || ''
- END AS 'zSharePartic-z62SHARE',
- CASE SPLzSharePartic.Z62_SHARE
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
+ ELSE 'Unknown-New-Value!: ' || zSharePartic.Z61_SHARE || ''
+ END AS 'zSharePartic-z61SHARE',
+ CASE SPLzSharePartic.Z61_SHARE
WHEN 55 THEN '55-SPL-Entity-55'
WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56'
- WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63'
- WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64'
- ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.Z62_SHARE || ''
- END AS 'SPLzSharePartic-z62SHARE',
+ WHEN 63 THEN '63-SPL-Active-Participant-63'
+ WHEN 64 THEN '64-CMM-iCloud-Link-64'
+ ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.Z61_SHARE || ''
+ END AS 'SPLzSharePartic-z61SHARE',
CASE zShare.ZSTATUS
WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1'
WHEN 3 THEN '3-SPL-Actively-Sharing-3'
@@ -5879,7 +5838,7 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w
WHEN 0 THEN '0-Obs in iOS 18 still testing-0'
WHEN 1 THEN '1-Obs in iOS 18 still testing-1'
ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZHASPEOPLESCENEMIDORGREATERCONFIDENCE || ''
- END AS 'zAddAssetAttr.Has_People_Scene Mid_Or_Greater_Confidence-iOS18',
+ END AS 'zAddAssetAttr.Has_People_Scene Mid_Or_Greater_Confidence',
zAsset.ZFACEADJUSTMENTVERSION AS 'zAsset-Face Adjustment Version',
zAddAssetAttr.ZFACEREGIONS AS 'zAddAssetAttr-Face Regions HEX',
zAddAssetAttr.ZFACEANALYSISVERSION AS 'zAddAssetAttr-Face Analysis Version',
@@ -5896,7 +5855,7 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w
zDetFace.ZADJUSTMENTVERSION AS 'zDetFace-Adjustment Version',
zDetFace.ZUUID AS 'zDetFace-UUID-4TableStart',
zPerson.ZPERSONUUID AS 'zPerson-Person UUID-4TableStart',
- zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence-iOS18',
+ zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence',
zPerson.ZMDID AS 'zPerson - MD ID',
CASE zPerson.ZASSETSORTORDER
WHEN 0 THEN '0-StillTesting'
@@ -6493,17 +6452,17 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w
zMedAnlyAstAttr.ZPROBABLEROTATIONDIRECTION AS 'zMedAnlyAstAttr-Probable Rotation Direction',
zMedAnlyAstAttr.ZSCREENTIMEDEVICEIMAGESENSITIVITY AS 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity',
zMedAnlyAstAttr.ZCOLORNORMALIZATIONDATA AS 'zMedAnlyAstAttr-Color Normalization Data',
- zMedAnlyAstAttr.ZMEDIAANALYSISIMAGEVERSION AS 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18',
- zMedAnlyAstAttr.ZIMAGECAPTIONVERSION AS 'zMedAnlyAstAttr-Image_Caption_Version-iOS18',
- zMedAnlyAstAttr.ZVIDEOCAPTIONVERSION AS 'zMedAnlyAstAttr-Video_Caption_Version-iOS18',
- zMedAnlyAstAttr.ZVALOCATIONANALYSISVERSION AS 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18',
+ zMedAnlyAstAttr.ZMEDIAANALYSISIMAGEVERSION AS 'zMedAnlyAstAttr-Media_Analysis Image_Version',
+ zMedAnlyAstAttr.ZIMAGECAPTIONVERSION AS 'zMedAnlyAstAttr-Image_Caption_Version',
+ zMedAnlyAstAttr.ZVIDEOCAPTIONVERSION AS 'zMedAnlyAstAttr-Video_Caption_Version',
+ zMedAnlyAstAttr.ZVALOCATIONANALYSISVERSION AS 'zMedAnlyAstAttr-VA_Location_Analysis_Version',
zAssetAnalyState.ZASSETUUID AS 'zAssetAnalyState-Asset UUID-4TableStart',
zAssetAnalyState.ZANALYSISSTATE AS 'zAssetAnalyState-Analyisis State',
zAssetAnalyState.ZWORKERFLAGS AS 'zAssetAnalyState-Worker Flags',
zAssetAnalyState.ZWORKERTYPE AS 'zAssetAnalyState-Worker Type',
DateTime(zAssetAnalyState.ZIGNOREUNTILDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Ignore Until Date',
DateTime(zAssetAnalyState.ZLASTIGNOREDDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Last Ignored Date',
- zAssetAnalyState.ZSORTTOKEN AS 'zAssetAnalyState-Sort Token',
+ DateTime(zAssetAnalyState.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Sort Token',
zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES AS 'zMedAnlyAstAttr-Character Recognition Attr',
zCharRecogAttr.ZALGORITHMVERSION AS 'zCharRecogAttr-Algorithm Version',
zCharRecogAttr.ZADJUSTMENTVERSION AS 'zCharRecogAttr-Adjustment Version',
@@ -6571,13 +6530,13 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w
zAddAssetAttr.Z_OPT AS 'ZAddAssetAttr-zOPT',
zAddAssetAttr.ZASSET AS 'zAddAssetAttr-zAsset= zAsset_zPK',
zAddAssetAttr.ZUNMANAGEDADJUSTMENT AS 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18-4Queryend',
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-4Queryend',
zAddAssetAttr.ZPUBLICGLOBALUUID AS 'zAddAssetAttr-Public Global UUID',
zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier',
zAddAssetAttr.ZORIGINALASSETSUUID AS 'zAddAssetAttr-Original Assets UUID',
zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID',
zAddAssetAttr.ZORIGINATINGASSETIDENTIFIER AS 'zAddAssetAttr-Originating Asset Identifier-4endquery',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18-4endquery',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-4endquery',
zAlbumList.Z_PK AS 'zAlbumList-zPK= Album List Key',
zAlbumList.Z_ENT AS 'zAlbumList-zENT',
zAlbumList.Z_OPT AS 'zAlbumList-zOPT',
@@ -6684,11 +6643,11 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w
zCompAssetAttr.Z_ENT AS 'zCompAssetAttr-zEnt',
zCompAssetAttr.Z_OPT AS 'zCompAssetAttr-zOpt',
zCompAssetAttr.ZASSET AS 'zCompAssetAttr-Asset Key',
- zAsset.ZCOMPUTESYNCATTRIBUTES AS 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-iOS18',
- zCompSyncAttr.Z_PK AS 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18',
- zCompSyncAttr.ZASSET AS 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18',
- zCompSyncAttr.Z_ENT AS 'zCompSyncAttr-zENT-iOS18',
- zCompSyncAttr.Z_OPT AS 'zCompSyncAttr-zOPT-iOS18',
+ zAsset.ZCOMPUTESYNCATTRIBUTES AS 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK',
+ zCompSyncAttr.Z_PK AS 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr',
+ zCompSyncAttr.ZASSET AS 'zCompSyncAttr-zAsset= zAsset-zPK',
+ zCompSyncAttr.Z_ENT AS 'zCompSyncAttr-zENT',
+ zCompSyncAttr.Z_OPT AS 'zCompSyncAttr-zOPT',
zDetFace.Z_PK AS 'zDetFace-zPK',
zDetFace.Z_ENT AS 'zDetFace-zEnt',
zDetFace.Z_OPT AS 'zDetFace.zOpt',
@@ -6738,8 +6697,8 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w
zIntResou.Z_ENT AS 'zIntResou-zENT',
zIntResou.Z_OPT AS 'zIntResou-zOPT',
zIntResou.ZASSET AS 'zIntResou-Asset= zAsset_zPK',
- zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-iOS18-4Queryend',
- zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-iOS18-4Queryend',
+ zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-4Queryend',
+ zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-4Queryend',
zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type',
zMedAnlyAstAttr.Z_PK AS 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata',
zMedAnlyAstAttr.Z_ENT AS 'zMedAnlyAstAttr-zEnt',
@@ -6762,7 +6721,7 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w
zPerson.ZKEYFACE AS 'zPerson-KeyFace=zDetFace-zPK',
zPerson.ZASSOCIATEDFACEGROUP AS 'zPerson-Assoc Face Group Key',
zPerson.ZPERSONUUID AS 'zPerson-Person UUID',
- zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence-iOS18',
+ zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence',
zPhotoAnalysisAssetAttr.Z_PK AS 'zPhotoAnalysisAssetAttr-zPK',
zPhotoAnalysisAssetAttr.Z_ENT AS 'zPhotoAnalysisAssetAttr-zEnt',
zPhotoAnalysisAssetAttr.Z_OPT AS 'zPhotoAnalysisAssetAttr-zOpt',
@@ -6791,8 +6750,8 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w
SBRAzSugg.Z_OPT AS 'SBRAzSugg-zOPT',
SBRAzSugg.ZUUID AS 'SBRAzSugg-UUID',
z3SuggBRA.Z_3REPRESENTATIVEASSETS AS 'z3SuggBRA-3RepAssets',
- z3SuggBRA.Z_66SUGGESTIONSBEINGREPRESENTATIVEASSETS AS 'z3SuggBRA-66SuggBeingRepAssets',
- z3SuggBKA.Z_66SUGGESTIONSBEINGKEYASSETS AS 'z3SuggBKA-66SuggBeingKeyAssets= zSugg-zPK',
+ z3SuggBRA.Z_65SUGGESTIONSBEINGREPRESENTATIVEASSETS AS 'z3SuggBRA-65SuggBeingRepAssets',
+ z3SuggBKA.Z_65SUGGESTIONSBEINGKEYASSETS AS 'z3SuggBKA-65SuggBeingKeyAssets= zSugg-zPK',
z3SuggBKA.Z_3KEYASSETS1 AS 'z3SuggBKA-3KeyAssets1= zAsset-zPK',
zUnmAdj.Z_PK AS 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key',
zUnmAdj.Z_OPT AS 'zUnmAdj-zOPT',
@@ -6811,22 +6770,22 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w
zVisualSearchAttr.Z_ENT AS 'zVisualSearchAttr-zENT',
zVisualSearchAttr.Z_OPT AS 'zVisualSearchAttr-zOPT',
zVisualSearchAttr.ZMEDIAANALYSISASSETATTRIBUTES AS 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK',
- z30AlbumLists.Z_30ALBUMS AS 'z30AlbumList-30Albums= zGenAlbum-zPK',
- z30AlbumLists.Z_2ALBUMLISTS AS 'z30AlbumList-Album List Key',
- z30AlbumLists.Z_FOK_30ALBUMS AS 'z30AlbumList-FOK30Albums Key',
- z31Assets.Z_31ALBUMS AS 'z31Assets-31Albums= zGenAlbum-zPK',
- z31Assets.Z_3ASSETS AS 'z31Assets-3Asset Key= zAsset-zPK in the Album',
- z31Assets.Z_FOK_3ASSETS AS 'z31Assets-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY',
+ z29AlbumLists.Z_29ALBUMS AS 'z29AlbumList-29Albums= zGenAlbum-zPK',
+ z29AlbumLists.Z_2ALBUMLISTS AS 'z29AlbumList-Album List Key',
+ z29AlbumLists.Z_FOK_29ALBUMS AS 'z29AlbumList-FOK29Albums Key',
+ z30Assets.Z_30ALBUMS AS 'z30Assets-30Albums= zGenAlbum-zPK',
+ z30Assets.Z_3ASSETS AS 'z30Assets-3Asset Key= zAsset-zPK in the Album',
+ z30Assets.Z_FOK_3ASSETS AS 'z30Assets-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY',
z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AS 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK',
z3MemoryBCAs.Z_3CURATEDASSETS AS 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK',
- z3MemoryBCAs.Z_52MEMORIESBEINGCURATEDASSETS AS 'z3MemoryBCAs-52MemoriesBeingCuratedAssets= zMemory-zPK',
+ z3MemoryBCAs.Z_51MEMORIESBEINGCURATEDASSETS AS 'z3MemoryBCAs-51MemoriesBeingCuratedAssets= zMemory-zPK',
z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK',
- z3MemoryBECAs.Z_52MEMORIESBEINGEXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-52MemoriesBeingExtCuratedAssets= zMemory-zPK',
+ z3MemoryBECAs.Z_51MEMORIESBEINGEXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-51MemoriesBeingExtCuratedAssets= zMemory-zPK',
z3MemoryBRAs.Z_3REPRESENTATIVEASSETS1 AS 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK',
- z3MemoryBRAs.Z_52MEMORIESBEINGREPRESENTATIVEASSETS AS 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK',
+ z3MemoryBRAs.Z_51MEMORIESBEINGREPRESENTATIVEASSETS AS 'z3MemoryBRAs-51RepresentativeAssets= zMemory-zPK',
z3MemoryBUCAs.Z_3USERCURATEDASSETS AS 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK',
- z3MemoryBUCAs.Z_52MEMORIESBEINGUSERCURATEDASSETS AS 'z3MemoryBUCAs-52MemoriesBeingUserCuratedAssets= zMemory-zPK',
- z3MemoryBCUAs.Z_52MEMORIESBEINGCUSTOMUSERASSETS AS 'z3MemoryBCAs-52Memories Being Custom User Assets',
+ z3MemoryBUCAs.Z_51MEMORIESBEINGUSERCURATEDASSETS AS 'z3MemoryBUCAs-51MemoriesBeingUserCuratedAssets= zMemory-zPK',
+ z3MemoryBCUAs.Z_51MEMORIESBEINGCUSTOMUSERASSETS AS 'z3MemoryBCAs-51Memories Being Custom User Assets',
z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AS 'z3MemoryBCAs-3Custom User Assets',
z3MemoryBCUAs.Z_FOK_3CUSTOMUSERASSETS AS 'z3MemoryBCAs-FOK-3Custom User Assets'
FROM ZASSET zAsset
@@ -6834,15 +6793,14 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w
LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES
LEFT JOIN ZINTERNALRESOURCE zIntResou ON zIntResou.ZASSET = zAsset.Z_PK
LEFT JOIN ZSCENEPRINT zSceneP ON zSceneP.Z_PK = zAddAssetAttr.ZSCENEPRINT
- LEFT JOIN Z_31ASSETS z31Assets ON z31Assets.Z_3ASSETS = zAsset.Z_PK
- LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z31Assets.Z_31ALBUMS
+ LEFT JOIN Z_30ASSETS z30Assets ON z30Assets.Z_3ASSETS = zAsset.Z_PK
+ LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z30Assets.Z_30ALBUMS
LEFT JOIN ZUNMANAGEDADJUSTMENT zUnmAdj ON zAddAssetAttr.ZUNMANAGEDADJUSTMENT = zUnmAdj.Z_PK
- LEFT JOIN Z_30ALBUMLISTS z30AlbumLists ON z30AlbumLists.Z_30ALBUMS = zGenAlbum.Z_PK
- LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z30AlbumLists.Z_2ALBUMLISTS
+ LEFT JOIN Z_29ALBUMLISTS z29AlbumLists ON z29AlbumLists.Z_29ALBUMS = zGenAlbum.Z_PK
+ LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z29AlbumLists.Z_2ALBUMLISTS
LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER
LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION
LEFT JOIN ZASSETDESCRIPTION zAssetDes ON zAssetDes.Z_PK = zAddAssetAttr.ZASSETDESCRIPTION
- LEFT JOIN ZGENERATEDASSETDESCRIPTION zGenAsstDesc ON zGenAsstDesc.Z_PK = zAsset.ZGENERATEDASSETDESCRIPTION
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA
LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA
@@ -6869,1403 +6827,1331 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w
LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON
LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP
LEFT JOIN Z_3MEMORIESBEINGCURATEDASSETS z3MemoryBCAs ON zAsset.Z_PK = z3MemoryBCAs.Z_3CURATEDASSETS
- LEFT JOIN ZMEMORY zMemory ON z3MemoryBCAs.Z_52MEMORIESBEINGCURATEDASSETS = zMemory.Z_PK
- LEFT JOIN Z_3MEMORIESBEINGCUSTOMUSERASSETS z3MemoryBCUAs ON zAsset.Z_PK = z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AND z3MemoryBCUAs.Z_52MEMORIESBEINGCUSTOMUSERASSETS = zMemory.Z_PK
- LEFT JOIN Z_3MEMORIESBEINGEXTENDEDCURATEDASSETS z3MemoryBECAs ON zAsset.Z_PK = z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AND z3MemoryBECAs.Z_52MEMORIESBEINGEXTENDEDCURATEDASSETS = zMemory.Z_PK
- LEFT JOIN Z_3MEMORIESBEINGMOVIECURATEDASSETS z3MemoryBMCAs ON zAsset.Z_PK = z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AND z3MemoryBMCAs.Z_52MEMORIESBEINGMOVIECURATEDASSETS = zMemory.Z_PK
- LEFT JOIN Z_3MEMORIESBEINGREPRESENTATIVEASSETS z3MemoryBRAs ON zAsset.Z_PK = z3MemoryBRAs.Z_3REPRESENTATIVEASSETS1 AND z3MemoryBRAs.Z_52MEMORIESBEINGREPRESENTATIVEASSETS = zMemory.Z_PK
- LEFT JOIN Z_3MEMORIESBEINGUSERCURATEDASSETS z3MemoryBUCAs ON zAsset.Z_PK = z3MemoryBUCAs.Z_3USERCURATEDASSETS AND z3MemoryBUCAs.Z_52MEMORIESBEINGUSERCURATEDASSETS = zMemory.Z_PK
+ LEFT JOIN ZMEMORY zMemory ON z3MemoryBCAs.Z_51MEMORIESBEINGCURATEDASSETS = zMemory.Z_PK
+ LEFT JOIN Z_3MEMORIESBEINGCUSTOMUSERASSETS z3MemoryBCUAs ON zAsset.Z_PK = z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AND z3MemoryBCUAs.Z_51MEMORIESBEINGCUSTOMUSERASSETS = zMemory.Z_PK
+ LEFT JOIN Z_3MEMORIESBEINGEXTENDEDCURATEDASSETS z3MemoryBECAs ON zAsset.Z_PK = z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AND z3MemoryBECAs.Z_51MEMORIESBEINGEXTENDEDCURATEDASSETS = zMemory.Z_PK
+ LEFT JOIN Z_3MEMORIESBEINGMOVIECURATEDASSETS z3MemoryBMCAs ON zAsset.Z_PK = z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AND z3MemoryBMCAs.Z_51MEMORIESBEINGMOVIECURATEDASSETS = zMemory.Z_PK
+ LEFT JOIN Z_3MEMORIESBEINGREPRESENTATIVEASSETS z3MemoryBRAs ON zAsset.Z_PK = z3MemoryBRAs.Z_3REPRESENTATIVEASSETS1 AND z3MemoryBRAs.Z_51MEMORIESBEINGREPRESENTATIVEASSETS = zMemory.Z_PK
+ LEFT JOIN Z_3MEMORIESBEINGUSERCURATEDASSETS z3MemoryBUCAs ON zAsset.Z_PK = z3MemoryBUCAs.Z_3USERCURATEDASSETS AND z3MemoryBUCAs.Z_51MEMORIESBEINGUSERCURATEDASSETS = zMemory.Z_PK
LEFT JOIN ZUSERFEEDBACK zUserFeedback ON zUserFeedback.ZMEMORY = zMemory.Z_PK
LEFT JOIN ZMOMENT zMoment ON zMoment.Z_PK = zAsset.ZMOMENT
LEFT JOIN Z_3SUGGESTIONSBEINGKEYASSETS z3SuggBKA ON z3SuggBKA.Z_3KEYASSETS1 = zAsset.Z_PK
- LEFT JOIN ZSUGGESTION SBKAzSugg ON SBKAzSugg.Z_PK = z3SuggBKA.Z_66SUGGESTIONSBEINGKEYASSETS
+ LEFT JOIN ZSUGGESTION SBKAzSugg ON SBKAzSugg.Z_PK = z3SuggBKA.Z_65SUGGESTIONSBEINGKEYASSETS
LEFT JOIN Z_3SUGGESTIONSBEINGREPRESENTATIVEASSETS z3SuggBRA ON z3SuggBRA.Z_3REPRESENTATIVEASSETS = zAsset.Z_PK
- LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_66SUGGESTIONSBEINGREPRESENTATIVEASSETS
+ LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_65SUGGESTIONSBEINGREPRESENTATIVEASSETS
ORDER BY zAsset.ZADDEDDATE
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
- row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
- row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
- row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
- row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
- row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
- row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
- row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
- row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
- row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
- row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
- row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
- row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
- row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
- row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
- row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
- row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
- row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
- row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
- row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
- row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
- row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
- row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
- row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
- row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
- row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
- row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
- row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
- row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
- row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
- row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
- row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
- row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
- row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
- row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
- row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307],
- row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315],
- row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323],
- row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331],
- row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339],
- row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347],
- row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355],
- row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363],
- row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371],
- row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379],
- row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387],
- row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395],
- row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403],
- row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411],
- row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419],
- row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427],
- row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435],
- row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443],
- row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451],
- row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459],
- row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467],
- row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475],
- row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483],
- row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491],
- row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499],
- row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507],
- row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515],
- row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523],
- row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531],
- row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539],
- row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547],
- row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555],
- row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563],
- row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571],
- row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579],
- row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587],
- row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595],
- row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603],
- row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611],
- row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619],
- row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627],
- row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635],
- row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643],
- row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651],
- row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659],
- row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667],
- row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675],
- row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683],
- row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691],
- row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699],
- row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707],
- row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715],
- row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723],
- row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731],
- row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739],
- row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747],
- row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755],
- row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763],
- row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771],
- row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779],
- row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787],
- row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795],
- row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803],
- row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811],
- row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819],
- row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827],
- row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835],
- row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843],
- row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851],
- row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859],
- row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867],
- row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875],
- row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883],
- row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891],
- row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899],
- row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907],
- row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915],
- row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923],
- row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931],
- row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939],
- row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947],
- row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955],
- row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963],
- row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971],
- row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979],
- row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987],
- row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995],
- row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002],
- row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009],
- row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016],
- row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023],
- row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030],
- row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037],
- row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044],
- row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051],
- row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058],
- row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065],
- row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072],
- row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079],
- row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086],
- row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093],
- row[1094], row[1095], row[1096], row[1097], row[1098], row[1099], row[1100],
- row[1101], row[1102], row[1103], row[1104], row[1105], row[1106], row[1107],
- row[1108], row[1109], row[1110], row[1111], row[1112], row[1113], row[1114],
- row[1115], row[1116], row[1117], row[1118], row[1119], row[1120], row[1121],
- row[1122], row[1123], row[1124], row[1125], row[1126], row[1127], row[1128],
- row[1129], row[1130], row[1131], row[1132], row[1133], row[1134], row[1135],
- row[1136], row[1137], row[1138], row[1139], row[1140], row[1141], row[1142],
- row[1143], row[1144], row[1145], row[1146], row[1147], row[1148], row[1149],
- row[1150], row[1151], row[1152], row[1153], row[1154], row[1155], row[1156],
- row[1157], row[1158], row[1159], row[1160], row[1161], row[1162], row[1163],
- row[1164], row[1165], row[1166], row[1167], row[1168], row[1169]))
-
- counter += 1
+ '''
- description = ('Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.'
- ' This parser includes the largest set of decoded data based on testing and research'
- ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the'
- ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md'
- ' TimelineExplorer to view, search and filter the results.')
- report = ArtifactHtmlReport('Ph98.2-iOS18_Ref_for_Asset_Analysis-SyndPL')
- report.start_artifact_report(report_folder, 'Ph98.2-iOS18_Ref_for_Asset_Analysis-SyndPL', description)
- report.add_script()
- data_headers = ('zAsset Complete-0',
- 'zAsset-zPK-4QueryStart-1',
- 'zAddAssetAttr-zPK-4QueryStart-2',
- 'zAsset-UUID = store.cloudphotodb-4QueryStart-3',
- 'zAddAssetAttr-Original Stable Hash-iOS18-4QueryStart-4',
- 'zIntResou-Fingerprint-iOS18-4QueryStart-5',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-4QueryStart-6',
- 'zIntResou-Stable Hash-iOS18-4QueryStart-7',
- 'zAsset-Bundle Scope-8',
- 'zAsset-Syndication State-9',
- 'zAsset-Cloud is My Asset-10',
- 'zAsset-Cloud is deletable-Asset-11',
- 'zAsset-Cloud_Local_State-12',
- 'zAsset-Visibility State-13',
- 'zExtAttr-Camera Make-14',
- 'zExtAttr-Camera Model-15',
- 'zExtAttr-Lens Model-16',
- 'zExtAttr-Flash Fired-17',
- 'zExtAttr-Focal Lenght-18',
- 'zExtAttr-Focal Lenth in 35MM-19',
- 'zExtAttr-Digital Zoom Ratio-20',
- 'zExtAttr-Generative_AI_Type-iOS18-21',
- 'zExtAttr-Credit-iOS18-22',
- 'zAsset-Derived Camera Capture Device-23',
- 'zAsset-Capture_Session_Identifier-iOS18-24',
- 'zAddAssetAttr-Camera Captured Device-25',
- 'zAddAssetAttr-Imported by-26',
- 'zCldMast-Imported By-27',
- 'zAddAssetAttr.Imported by Bundle Identifier-28',
- 'zAddAssetAttr-Imported By Display Name-29',
- 'zCldMast-Imported by Bundle ID-30',
- 'zCldMast-Imported by Display Name-31',
- 'zAsset-ImageRequestHints-HEX-Path-32',
- 'zAsset-Saved Asset Type-33',
- 'zAsset-Is_Recently_Saved-iOS18-34',
- 'zAsset-Directory-Path-35',
- 'zAsset-Filename-36',
- 'zAddAssetAttr- Original Filename-37',
- 'zCldMast- Original Filename-38',
- 'zAddAssetAttr- Syndication Identifier-SWY-Files-39',
- 'zAsset-Active Library Scope Participation State -4QueryStart-40',
- 'zAsset-Library Scope Share State- StillTesting -4QueryStart-41',
- 'SPLzShare-Cloud Photo Count-SPL -4QueryStart-42',
- 'SPLzShare-Cloud Video Count-SPL -4QueryStart-43',
- 'zAsset-Added Date-44',
- 'zAsset- SortToken -CameraRoll-45',
- 'zAddAssetAttr-Date Created Source-46',
- 'zAsset-Date Created-47',
- 'zCldMast-Creation Date-48',
- 'zIntResou-CldMst Date Created-49',
- 'zAddAssetAttr-Time Zone Name-50',
- 'zAddAssetAttr-Time Zone Offset-51',
- 'zAddAssetAttr-Inferred Time Zone Offset-52',
- 'zAddAssetAttr-EXIF-String-53',
- 'zAsset-Modification Date-54',
- 'zAddAssetAttr-Last Viewed Date-55',
- 'zAsset-Last Shared Date-56',
- 'zCldMast-Cloud Local State-57',
- 'zCldMast-Import Date-58',
- 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-59',
- 'zAddAssetAttr-Import Session ID-4QueryStart-60',
- 'zAddAssetAttr-Alt Import Image Date-61',
- 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-62',
- 'zAsset-Cloud Batch Publish Date-63',
- 'zAsset-Cloud Server Publish Date-64',
- 'zAsset-Cloud Download Requests-65',
- 'zAsset-Cloud Batch ID-66',
- 'zAddAssetAttr-Upload Attempts-67',
- 'zAsset-Latitude-68',
- 'zExtAttr-Latitude-69',
- 'zAsset-Longitude-70',
- 'zExtAttr-Longitude-71',
- 'zAddAssetAttr-GPS Horizontal Accuracy-72',
- 'zAddAssetAttr-Location Hash-73',
- 'zAsset-Location Data-HEX-74',
- 'zAddAssetAttr-Reverse Location Is Valid-75',
- 'zAddAssetAttr-Reverse Location Data-76',
- 'zAddAssetAttr-Shifted Location Valid-77',
- 'zAddAssetAttr-Shifted Location Data-78',
- 'ParentzGenAlbum-UUID-4QueryStart-79',
- 'zGenAlbum-UUID-4QueryStart-80',
- 'SWYConverszGenAlbum-UUID-4QueryStart-81',
- 'ParentzGenAlbum-Cloud GUID-4QueryStart-82',
- 'zGenAlbum-Cloud GUID-4QueryStart-83',
- 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-84',
- 'zCldShareAlbumInvRec-Album GUID-4QueryStart-85',
- 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-86',
- 'zGenAlbum-Project Render UUID-4QueryStart-87',
- 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-88',
- 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-89',
- 'zGenAlbum-Cloud_Local_State-4QueryStart-90',
- 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-91',
- 'ParentzGenAlbum- Creation Date- 4QueryStart-92',
- 'zGenAlbum- Creation Date- 4QueryStart-93',
- 'SWYConverszGenAlbum- Creation Date- 4QueryStart-94',
- 'zGenAlbum- Cloud Creation Date- 4QueryStart-95',
- 'SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-96',
- 'zGenAlbum- Start Date- 4QueryStart-97',
- 'SWYConverszGenAlbum- Start Date- 4QueryStart-98',
- 'zGenAlbum- End Date- 4QueryStart-99',
- 'SWYConverszGenAlbum- End Date- 4QueryStart-100',
- 'zGenAlbum-Cloud Subscription Date- 4QueryStart-101',
- 'SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-102',
- 'ParentzGenAlbum- Title- 4QueryStart-103',
- 'zGenAlbum- Title-User&System Applied- 4QueryStart-104',
- 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-105',
- 'zGenAlbum-Import Session ID-SWY- 4QueryStart-106',
- 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-107',
- 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-108',
- 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-109',
- 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-110',
- 'SWYConverszGenAlbum- Syndicate-4QueryStart-111',
- 'zGenAlbum-zENT- Entity- 4QueryStart-112',
- 'ParentzGenAlbum- Kind- 4QueryStart-113',
- 'zGenAlbum-Album Kind- 4QueryStart-114',
- 'SWYConverszGenAlbum-Album Kind- 4QueryStart-115',
- 'AAAzCldMastMedData-zOPT-4TableStart-116',
- 'zAddAssetAttr-Media Metadata Type-117',
- 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-118',
- 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-119',
- 'AAAzCldMastMedData-Data-HEX-120',
- 'CldMasterzCldMastMedData-zOPT-4TableStart-121',
- 'zCldMast-Media Metadata Type-122',
- 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-123',
- 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-124',
- 'CMzCldMastMedData-Data-HEX-125',
- 'zAsset-Search Index Rebuild State-126',
- 'zAddAssetAttr-Syndication History-127',
- 'zMedAnlyAstAttr-Syndication Processing Version-128',
- 'zMedAnlyAstAttr-Syndication Processing Value-129',
- 'zAsset-Orientation-130',
- 'zAddAssetAttr-Original Orientation-131',
- 'zAsset-Kind-132',
- 'zAsset-Is_Detected_Screenshot-iOS18-133',
- 'zAsset-Kind-Sub-Type-134',
- 'zAddAssetAttr-Cloud Kind Sub Type-135',
- 'zAsset-Playback Style-136',
- 'zAsset-Playback Variation-137',
- 'zAddAssetAttr.View_Presentation-iOS18-138',
- 'zAsset-Video Duration-139',
- 'zExtAttr-Duration-140',
- 'zAsset-Video CP Duration-141',
- 'zAddAssetAttr-Video CP Duration Time Scale-142',
- 'zAsset-Video CP Visibility State-143',
- 'zAddAssetAttr-Video CP Display Value-144',
- 'zAddAssetAttr-Video CP Display Time Scale-145',
- 'zIntResou-Datastore Class ID-146',
- 'zAsset-Cloud Placeholder Kind-147',
- 'zIntResou-Local Availability-148',
- 'zIntResou-Local Availability Target-149',
- 'zIntResou-Cloud Local State-150',
- 'zIntResou-Remote Availability-151',
- 'zIntResou-Remote Availability Target-152',
- 'zIntResou-Transient Cloud Master-153',
- 'zIntResou-Side Car Index-154',
- 'zAsset-UUID = store.cloudphotodb-4TableStart-155',
- 'zAddAssetAttr-Orignial Stable Hash-iOS18-4TableStart-156',
- 'zIntResou-Fingerprint-iOS18-4TableStart-157',
- 'zIntResou-Stable Hash-iOS18-4TableStart-158',
- 'zIntResou- File ID-159',
- 'zIntResou-Version-160',
- 'zAddAssetAttr- Original-File-Size-161',
- 'zIntResou-Resource Type-162',
- 'zIntResou-DataStoreKeyData-HEX-163',
- 'zIntResou-Datastore Sub-Type-164',
- 'zIntResou-Cloud Source Type-165',
- 'zIntResou-Data Length-166',
- 'zIntResou-Recipe ID-167',
- 'zIntResou-Cloud Last Prefetch Date-168',
- 'zIntResou-Cloud Prefetch Count-169',
- 'zIntResou- Cloud-Last-OnDemand Download-Date-170',
- 'zIntResou-UniformTypeID_UTI_Conformance_Hint-171',
- 'zIntResou-Compact-UTI-172',
- 'zAsset-Uniform Type ID-173',
- 'zAsset-Original Color Space-174',
- 'zCldMast-Uniform_Type_ID-175',
- 'zCldMast-Full Size JPEG Source-176',
- 'zAsset-HDR Gain-177',
- 'zAsset-zHDR_Type-178',
- 'zExtAttr-Codec-179',
- 'zIntResou-Codec Four Char Code Name-180',
- 'zCldMast-Codec Name-181',
- 'zCldMast-Video Frame Rate-182',
- 'zCldMast-Placeholder State-183',
- 'zAsset-Depth_Type-184',
- 'zAsset-Avalanche UUID-4TableStart-185',
- 'zAsset-Avalanche_Kind-iOS18-186',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-187',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-188',
- 'zAddAssetAttr-Cloud Recovery State-189',
- 'zAddAssetAttr-Cloud State Recovery Attempts Count-190',
- 'zAsset-Deferred Processing Needed-191',
- 'zAsset-Video Deferred Processing Needed-192',
- 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-193',
- 'zAddAssetAttr-Deferred Processing Candidate Options-194',
- 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18-195',
- 'zUnmAdj-UUID-4TableStart-196',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-4TableStart-197',
- 'zUnmAdj-Other Adjustments Fingerprint-4TableStart-198',
- 'zUnmAdj-Similar to Orig Adjustments Fingerprint-4TableStart-199',
- 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18-4TableStart-200',
- 'zAsset-Adjustment Timestamp-201',
- 'zUnmAdj-Adjustment Timestamp-202',
- 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18-203',
- 'zAddAssetAttr-Editor Bundle ID-204',
- 'zUnmAdj-Editor Localized Name-205',
- 'zUnmAdj-Adjustment Format ID-206',
- 'zAddAssetAttr-Montage-207',
- 'zUnmAdj-Adjustment Render Types-208',
- 'zUnmAdj-Adjustment Format Version-209',
- 'zUnmAdj-Adjustment Base Image Format-210',
- 'zCompSyncAttr-Local_Analysis_Stage-iOS18-211',
- 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18-212',
- 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18-213',
- 'zAsset-Favorite-214',
- 'zAsset-Hidden-215',
- 'zAsset-Trashed State-LocalAssetRecentlyDeleted-216',
- 'zAsset-Trashed Date-217',
- 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-218',
- 'zAsset-Delete-Reason-219',
- 'zIntResou-Trash State-220',
- 'zIntResou-Trashed Date-221',
- 'zAsset-Cloud Delete State-222',
- 'zIntResou-Cloud Delete State-223',
- 'zAddAssetAttr-PTP Trashed State-224',
- 'zIntResou-PTP Trashed State-225',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-226',
- 'zMedAnlyAstAttr-Media Analysis Timestamp-227',
- 'zAsset-Analysis State Modificaion Date-228',
- 'zAddAssetAttr- Pending View Count-229',
- 'zAddAssetAttr- View Count-230',
- 'zAddAssetAttr- Pending Play Count-231',
- 'zAddAssetAttr- Play Count-232',
- 'zAddAssetAttr- Pending Share Count-233',
- 'zAddAssetAttr- Share Count-234',
- 'zAddAssetAttr-Allowed for Analysis-235',
- 'zAddAssetAttr-Scene Analysis Version-236',
- 'zAddAssetAttr-Scene Analysis is From Preview-237',
- 'zAddAssetAttr-Scene Analysis Timestamp-238',
- 'zAsset-Duplication Asset Visibility State-239',
- 'zAddAssetAttr-Destination Asset Copy State-240',
- 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-241',
- 'zSceneP-Data-HEX NSKeyed Plist-242',
- 'zSceneP-Duplicate Matching Data-HEX NSKeyed Plist-243',
- 'zSceneP-Duplicate Matching Alternat Data-HEX NSKeyed Plist-244',
- 'zAddAssetAttr-Source Asset for Duplication Scope ID-245',
- 'zCldMast-Source Master For Duplication Scope ID-246',
- 'zAddAssetAttr-Source Asset For Duplication ID-247',
- 'zCldMast-Source Master for Duplication ID-248',
- 'zAddAssetAttr-Variation Suggestions States-249',
- 'zAsset-High Frame Rate State-250',
- 'zAsset-Video Key Frame Time Scale-251',
- 'zAsset-Video Key Frame Value-252',
- 'zAsset-Current_Sleet_Cast-iOS18-253',
- 'zAddAssetAttr.Sleet_Is_Reversible-iOS18-254',
- 'zExtAttr-Sleet_Rendering_Version-iOS18-255',
- 'zExtAttr-Sleet_Intensity-iOS18-256',
- 'zExtAttr-Sleet_Tone_Bias-iOS18-257',
- 'zExtAttr-Sleet_Color_Bias-iOS18-258',
- 'zExtAttr-Sleet_Cast-iOS18-259',
- 'zExtAttr-ISO-260',
- 'zExtAttr-Metering Mode-261',
- 'zExtAttr-Sample Rate-262',
- 'zExtAttr-Track Format-263',
- 'zExtAttr-White Balance-264',
- 'zExtAttr-Aperture-265',
- 'zExtAttr-BitRate-266',
- 'zExtAttr-Exposure Bias-267',
- 'zExtAttr-Frames Per Second-268',
- 'zExtAttr-Shutter Speed-269',
- 'zExtAttr-Slush Scene Bias-270',
- 'zExtAttr-Slush Version-271',
- 'zExtAttr-Slush Preset-272',
- 'zExtAttr-Slush Warm Bias-273',
- 'zAsset-Height-274',
- 'zAddAssetAttr-Original Height-275',
- 'zIntResou-Unoriented Height-276',
- 'zAsset-Width-277',
- 'zAddAssetAttr-Original Width-278',
- 'zIntResou-Unoriented Width-279',
- 'zShare-Thumbnail Image Data-280',
- 'SPLzShare-Thumbnail Image Data-281',
- 'zAsset-Thumbnail Index-282',
- 'zAddAssetAttr-Embedded Thumbnail Height-283',
- 'zAddAssetAttr-Embedded Thumbnail Length-284',
- 'zAddAssetAttr-Embedded Thumbnail Offset-285',
- 'zAddAssetAttr-Embedded Thumbnail Width-286',
- 'zAddAssetAttr.Image Embedding Version-iOS18-287',
- 'zAsset-Packed Acceptable Crop Rect-288',
- 'zAsset-Packed Badge Attributes-289',
- 'zAsset-Packed Preferred Crop Rect-290',
- 'zAsset-Curation Score-291',
- 'zAsset-Camera Processing Adjustment State-292',
- 'zAsset-Depth Type-293',
- 'zAsset-Is Magic Carpet-QuicktimeMOVfile-294',
- 'zAddAssetAttr-Orig Resource Choice-295',
- 'zAsset-Spatial Type-296',
- 'zAddAssetAttr-Spatial Over Capture Group ID-297',
- 'zAddAssetAttr-Object Saliency Rects Data-HEX NSKeyed Plist-298',
- 'zAddAssetAttr-Original Hash-HEX-299',
- 'zAddAssetAttr-Place Annotation Data-300',
- 'zAddAssetAttr-Distance Identity-301',
- 'zAddAssetAttr-Edited IPTC Attributes-302',
- 'zGenAsstDesc-zAsset= zAsset-zPK-iOS18-303',
- 'zAsset-Generated_Asset_Description= zGenAsstDesc-zPK-iOS18-304',
- 'zGenAsstDesc-zPK= zAsset-GenAsstDesc-iOS18-305',
- 'zGenAsstDesc-zENT-iOS18-306',
- 'zGenAsstDesc-zOPT-iOS18-307',
- 'zGenAsstDesc-Analysis_Timestamp-iOS18-308',
- 'zGenAsstDesc-Analysis_Source_Type-iOS18-309',
- 'zGenAsstDesc-Analysis Version-iOS18-310',
- 'zGenAsstDesc-Description_Text-iOS18-311',
- 'zAssetDes-Long Description-312',
- 'zAddAssetAttr-Asset Description-313',
- 'zAddAssetAttr-Title-Comments via Cloud Website-314',
- 'zAddAssetAttr-Accessibility Description-315',
- 'zAddAssetAttr-Photo Stream Tag ID-316',
- 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-317',
- 'zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-318',
- 'zPhotoAnalysisAssetAttr-Wallpaper Properties Data-319',
- 'zCldFeedEnt-Entry Date-320',
- 'zCldFeedEnt-Entry_Is_Mine-iOS18-321',
- 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-322',
- 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-323',
- 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-324',
- 'zCldFeedEnt-Entry Priority Number-325',
- 'zCldFeedEnt-Entry Type Number-326',
- 'zCldSharedComment-Cloud GUID-4TableStart-327',
- 'zCldSharedComment-Date-328',
- 'zCldSharedComment-Comment Client Date-329',
- 'zAsset-Cloud Last Viewed Comment Date-330',
- 'zCldSharedComment-Type-331',
- 'zCldSharedComment-Comment Text-332',
- 'zCldSharedComment-Commenter Hashed Person ID-333',
- 'zCldSharedComment-Batch Comment-334',
- 'zCldSharedComment-Is a Caption-335',
- 'zAsset-Cloud Has Comments by Me-336',
- 'zCldSharedComment-Is My Comment-337',
- 'zCldSharedComment-Is Deletable-338',
- 'zAsset-Cloud Has Comments Conversation-339',
- 'zAsset-Cloud Has Unseen Comments-340',
- 'zCldSharedComment-Liked-341',
- 'zAddAssetAttr-Share Type-342',
- 'zAsset-Library Scope Share State- StillTesting-343',
- 'zAsset-Active Library Scope Participation State-344',
- 'zAddAssetAttr-Library Scope Asset Contributors To Update-345',
- 'zShare-UUID-CMM-4TableStart-346',
- 'SPLzShare-UUID-SPL-4TableStart-347',
- 'zShare-zENT-CMM-348',
- 'SPLzShare-zENT-SPL-349',
- 'zSharePartic-z62SHARE-350',
- 'SPLzSharePartic-z62SHARE-351',
- 'zShare-Status-CMM-352',
- 'zShare-Status-SPL-353',
- 'zShare-Scope Type-CMM-354',
- 'zShare-Scope Type-SPL-355',
- 'zShare-Local Publish State-CMM-356',
- 'SPLzShare-Local Publish State-SPL-357',
- 'zShare-Public Permission-CMM-358',
- 'SPLzShare-Public Permission-SPL-359',
- 'zShare-Originating Scope ID-CMM-360',
- 'SPLzShare-Originating Scope ID-SPL-361',
- 'zShare-Scope ID-CMM-362',
- 'SPLzShare-Scope ID-SPL-363',
- 'zShare-Title-CMM-364',
- 'SPLzShare-Title-SPL-365',
- 'zShare-Share URL-CMM-366',
- 'SPLzShare-Share URL-SPL-367',
- 'zShare-Creation Date-CMM-368',
- 'SPLzShare-Creation Date-SPL-369',
- 'zShare-Start Date-CMM-370',
- 'SPLzShare-Start Date-SPL-371',
- 'zShare-End Date-CMM-372',
- 'SPLzShare-End Date-SPL-373',
- 'zShare-Expiry Date-CMM-374',
- 'SPLzShare-Expiry Date-SPL-375',
- 'zShare-Cloud Item Count-CMM-376',
- 'SPLzShare-Cloud Item Count-SPL-377',
- 'zShare-Asset Count-CMM-378',
- 'SPLzShare-Asset Count-SPL-379',
- 'zShare-Cloud Photo Count-CMM-380',
- 'SPLzShare-Cloud Photo Count-SPL-381',
- 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-382',
- 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-383',
- 'zShare-Photos Count-CMM-384',
- 'SPLzShare-Photos Count-CMM-SPL-385',
- 'zShare-Uploaded Photos Count-CMM-386',
- 'SPLzShare-Uploaded Photos Count-SPL-387',
- 'zShare-Cloud Video Count-CMM-388',
- 'SPLzShare-Cloud Video Count-SPL-389',
- 'zShare-Videos Count-CMM-390',
- 'SPLzShare-Videos Count-SPL-391',
- 'zShare-Uploaded Videos Count-CMM-392',
- 'SPLzShare-Uploaded Videos Count-SPL-393',
- 'zShare-Force Sync Attempted-CMM-394',
- 'SPLzShare-Force Sync Attempted-SPL-395',
- 'zShare-Cloud Local State-CMM-396',
- 'SPLzShare-Cloud Local State-SPL-397',
- 'zShare-Scope Syncing State-CMM-398',
- 'SPLzShare-Scope Syncing State-SPL-399',
- 'zShare-Auto Share Policy-CMM-400',
- 'SPLzShare-Auto Share Policy-SPL-401',
- 'zShare-Should Notify On Upload Completion-CMM-402',
- 'SPLzShare-Should Notify On Upload Completion-SPL-403',
- 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-404',
- 'zShare-Trashed State-CMM-405',
- 'SPLzShare-Trashed State-SPL-406',
- 'zShare-Cloud Delete State-CMM-407',
- 'SPLzShare-Cloud Delete State-SPL-408',
- 'zShare-Trashed Date-CMM-409',
- 'SPLzShare-Trashed Date-SPL-410',
- 'zShare-LastParticipant Asset Trash Notification Date-CMM-411',
- 'SPLzShare-LastParticipant Asset Trash Notification Date-SPL-412',
- 'zShare-Last Participant Asset Trash Notification View Date-CMM-413',
- 'SPLzShare-Last Participant Asset Trash Notification View Date-SPL-414',
- 'zShare-Exit Source-CMM-415',
- 'SPLzShare-Exit Source-SPL-416',
- 'zShare-SPL_Exit State-CMM-417',
- 'SPLzShare-SPL_Exit State-SPL-418',
- 'zShare-Exit Type-CMM-419',
- 'SPLzShare-Exit Type-SPL-420',
- 'zShare-Should Ignor Budgets-CMM-421',
- 'SPLzShare-Should Ignor Budgets-SPL-422',
- 'zShare-Preview State-CMM-423',
- 'SPLzShare-Preview State-SPL-424',
- 'zShare-Preview Data-CMM-425',
- 'SPLzShare-Preview Data-SPL-426',
- 'zShare-Rules-CMM-427',
- 'SPLzShare-Rules-SPL-428',
- 'zShare-Thumbnail Image Data-CMM-429',
- 'SPLzShare-Thumbnail Image Data-SPL-430',
- 'zShare-Participant Cloud Update State-CMM-431',
- 'SPLzShare-Participant Cloud Update State-SPL-432',
- 'zSharePartic-UUID-4TableStart-433',
- 'SPLzSharePartic-UUID-4TableStart-434',
- 'zSharePartic-Acceptance Status-435',
- 'SPLzSharePartic-Acceptance Status-436',
- 'zSharePartic-Is Current User-437',
- 'SPLzSharePartic-Is Current User-438',
- 'zSharePartic-Role-439',
- 'SPLzSharePartic-Role-440',
- 'zSharePartic-Premission-441',
- 'SPLzSharePartic-Premission-442',
- 'zSharePartic-Participant ID-443',
- 'SPLzSharePartic-Participant ID-444',
- 'zSharePartic-User ID-445',
- 'SPLzSharePartic-User ID-446',
- 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-447',
- 'SPLzSharePartic-zPK-4TableStart-448',
- 'zSharePartic-zPK-4TableStart-449',
- 'zSharePartic-Email Address-450',
- 'SPLzSharePartic-Email Address-451',
- 'zSharePartic-Phone Number-452',
- 'SPLzSharePartic-Phone Number-453',
- 'zSharePartic-Name Components-454',
- 'SPLzSharePartic-Name Components-455',
- 'zSharePartic-Exit State-456',
- 'SPLzSharePartic-Exit State-457',
- 'ParentzGenAlbum-UUID-4TableStart-458',
- 'zGenAlbum-UUID-4TableStart-459',
- 'SWYConverszGenAlbum-UUID-4TableStart-460',
- 'ParentzGenAlbum-Cloud GUID-4TableStart-461',
- 'zGenAlbum-Cloud GUID-4TableStart-462',
- 'SWYConverszGenAlbum-Cloud GUID-4TableStart-463',
- 'zCldShareAlbumInvRec-Album GUID-4TableStart-464',
- 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-465',
- 'zGenAlbum-Project Render UUID-4TableStart-466',
- 'SWYConverszGenAlbum-Project Render UUID-4TableStart-467',
- 'zAlbumList-Needs Reordering Number-468',
- 'zGenAlbum-zENT- Entity-469',
- 'ParentzGenAlbum-Kind-470',
- 'zGenAlbum-Album Kind-471',
- 'SWYConverszGenAlbum-Album Kind-472',
- 'ParentzGenAlbum-Cloud-Local-State-473',
- 'zGenAlbum-Cloud_Local_State-474',
- 'SWYConverszGenAlbum-Cloud_Local_State-475',
- 'ParentzGenAlbum- Title-476',
- 'zGenAlbum- Title-User&System Applied-477',
- 'SWYConverszGenAlbum- Title -User&System Applied-478',
- 'zGenAlbum-Import Session ID-SWY-479',
- 'zAsset- Conversation= zGenAlbum_zPK-480',
- 'SWYConverszGenAlbum- Import Session ID-SWY-481',
- 'zGenAlbum-Imported by Bundle Identifier-482',
- 'SWYzGenAlbum-Imported by Bundle Identifier-483',
- 'SWYConverszGenAlbum- Syndicate-484',
- 'ParentzGenAlbum-Creation Date-485',
- 'zGenAlbum-Creation Date-486',
- 'SWYConverszGenAlbum-Creation Date-487',
- 'zGenAlbum-Cloud Creation Date-488',
- 'SWYConverszGenAlbum-Cloud Creation Date-489',
- 'zGenAlbum-Start Date-490',
- 'SWYConverszGenAlbum-Start Date-491',
- 'zGenAlbum-End Date-492',
- 'SWYConverszGenAlbum-End Date-493',
- 'zGenAlbum-Cloud Subscription Date-494',
- 'SWYConverszGenAlbum-Cloud Subscription Date-495',
- 'zGenAlbum-Cloud Metadata-HEX NSKeyed Plist-496',
- 'SWYConverszGenAlbum-Cloud Metadata-HEX NSKeyed Plist-497',
- 'ParentzGenAlbum-Pending Items Count-498',
- 'zGenAlbum-Pending Items Count-499',
- 'SWYConverszGenAlbum-Pending Items Count-500',
- 'ParentzGenAlbum-Pending Items Type-501',
- 'zGenAlbum-Pending Items Type-502',
- 'SWYConverszGenAlbum-Pending Items Type-503',
- 'zGenAlbum- Cached Photos Count-504',
- 'SWYConverszGenAlbum- Cached Photos Count-505',
- 'zGenAlbum- Cached Videos Count-506',
- 'SWYConverszGenAlbum- Cached Videos Count-507',
- 'zGenAlbum- Cached Count-508',
- 'SWYConverszGenAlbum- Cached Count-509',
- 'ParentzGenAlbum-Sync Event Order Key-510',
- 'zGenAlbum-Sync Event Order Key-511',
- 'SWYConverszGenAlbum-Sync Event Order Key-512',
- 'zGenAlbum-Has Unseen Content-513',
- 'SWYConverszGenAlbum-Has Unseen Content-514',
- 'zGenAlbum-Unseen Asset Count-515',
- 'SWYConverszGenAlbum-Unseen Asset Count-516',
- 'zGenAlbum-is Owned-517',
- 'SWYConverszGenAlbum-is Owned-518',
- 'zGenAlbum-Cloud Relationship State-519',
- 'SWYConverszGenAlbum-Cloud Relationship State-520',
- 'zGenAlbum-Cloud Relationship State Local-521',
- 'SWYConverszGenAlbum-Cloud Relationship State Local-522',
- 'zGenAlbum-Cloud Owner Mail Key-523',
- 'SWYConverszGenAlbum-Cloud Owner Mail Key-524',
- 'zGenAlbum-Cloud Owner Frist Name-525',
- 'SWYConverszGenAlbum-Cloud Owner Frist Name-526',
- 'zGenAlbum-Cloud Owner Last Name-527',
- 'SWYConverszGenAlbum-Cloud Owner Last Name-528',
- 'zGenAlbum-Cloud Owner Full Name-529',
- 'SWYConverszGenAlbum-Cloud Owner Full Name-530',
- 'zGenAlbum-Cloud Person ID-531',
- 'SWYConverszGenAlbum-Cloud Person ID-532',
- 'zAsset-Cloud Owner Hashed Person ID-533',
- 'zGenAlbum-Cloud Owner Hashed Person ID-534',
- 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-535',
- 'zGenAlbum-Local Cloud Multi-Contributors Enabled-536',
- 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-537',
- 'zGenAlbum-Cloud Multi-Contributors Enabled-538',
- 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-539',
- 'zGenAlbum-Cloud Album Sub Type-540',
- 'SWYConverszGenAlbum-Cloud Album Sub Type-541',
- 'zGenAlbum-Cloud Contribution Date-542',
- 'SWYConverszGenAlbum-Cloud Contribution Date-543',
- 'zGenAlbum-Cloud Last Interesting Change Date-544',
- 'SWYConverszGenAlbum-Cloud Last Interesting Change Date-545',
- 'zGenAlbum-Cloud Notification Enabled-546',
- 'SWYConverszGenAlbum-Cloud Notification Enabled-547',
- 'ParentzGenAlbum-Pinned-548',
- 'zGenAlbum-Pinned-549',
- 'SWYConverszGenAlbum-Pinned-550',
- 'ParentzGenAlbum-Custom Sort Key-551',
- 'zGenAlbum-Custom Sort Key-552',
- 'SWYConverszGenAlbum-Custom Sort Key-553',
- 'ParentzGenAlbum-Custom Sort Ascending-554',
- 'zGenAlbum-Custom Sort Ascending-555',
- 'SWYConverszGenAlbum-Custom Sort Ascending-556',
- 'ParentzGenAlbum-Is Prototype-557',
- 'zGenAlbum-Is Prototype-558',
- 'SWYConverszGenAlbum-Is Prototype-559',
- 'ParentzGenAlbum-Project Document Type-560',
- 'zGenAlbum-Project Document Type-561',
- 'SWYConverszGenAlbum-Project Document Type-562',
- 'ParentzGenAlbum-Custom Query Type-563',
- 'zGenAlbum-Custom Query Type-564',
- 'SWYConverszGenAlbum-Custom Query Type-565',
- 'ParentzGenAlbum-Trashed State-566',
- 'ParentzGenAlbum-Trash Date-567',
- 'zGenAlbum-Trashed State-568',
- 'zGenAlbum-Trash Date-569',
- 'SWYConverszGenAlbum-Trashed State-570',
- 'SWYConverszGenAlbum-Trash Date-571',
- 'ParentzGenAlbum-Cloud Delete State-572',
- 'zGenAlbum-Cloud Delete State-573',
- 'SWYConverszGenAlbum-Cloud Delete State-574',
- 'zGenAlbum-Cloud Owner Whitelisted-575',
- 'SWYConverszGenAlbum-Cloud Owner Whitelisted-576',
- 'zGenAlbum-Cloud Local Public URL Enabled-577',
- 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-578',
- 'zGenAlbum-Cloud Public URL Enabled-579',
- 'zGenAlbum-Public URL-580',
- 'SWYConverszGenAlbum-Cloud Public URL Enabled-581',
- 'SWYConverszGenAlbum-Public URL-582',
- 'zGenAlbum-Key Asset Face Thumb Index-583',
- 'SWYConverszGenAlbum-Key Asset Face Thumb Index-584',
- 'zGenAlbum-Project Text Extension ID-585',
- 'SWYConverszGenAlbum-Project Text Extension ID-586',
- 'zGenAlbum-User Query Data-587',
- 'SWYConverszGenAlbum-User Query Data-588',
- 'zGenAlbum-Custom Query Parameters-589',
- 'SWYConverszGenAlbum-Custom Query Parameters-590',
- 'zGenAlbum-Project Data-591',
- 'SWYConverszGenAlbum-Project Data-592',
- 'zGenAlbum-Search Index Rebuild State-593',
- 'SWYConverszGenAlbum-Search Index Rebuild State-594',
- 'zGenAlbum-Duplicate Type-595',
- 'SWYConverszGenAlbum-Duplicate Type-596',
- 'zGenAlbum-Privacy State-597',
- 'SWYConverszGenAlbum-Privacy State-598',
- 'zCldShareAlbumInvRec-zUUID-4TableStart-599',
- 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-600',
- 'zCldShareAlbumInvRec-Invitation State Local-601',
- 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-602',
- 'zCldShareAlbumInvRec-Subscription Date-603',
- 'zCldShareAlbumInvRec-Invitee First Name-604',
- 'zCldShareAlbumInvRec-Invitee Last Name-605',
- 'zCldShareAlbumInvRec-Invitee Full Name-606',
- 'zCldShareAlbumInvRec-Invitee Hashed Person ID-607',
- 'zCldShareAlbumInvRec-Invitee Email Key-608',
- 'zGenAlbum-Key Asset Face ID-609',
- 'zFaceCrop-Face Area Points-610',
- 'zAddAssetAttr.Has_People_Scene Mid_Or_Greater_Confidence-iOS18-611',
- 'zAsset-Face Adjustment Version-612',
- 'zAddAssetAttr-Face Regions HEX-613',
- 'zAddAssetAttr-Face Analysis Version-614',
- 'zDetFace-Asset Visible-615',
- 'zDetFacePrint-Data HEX-616',
- 'zPerson-Contact Matching Dictionary HEX-617',
- 'zPerson-Face Count-618',
- 'zDetFace-Face Crop-619',
- 'zDetFace-Face Algorithm Version-620',
- 'zDetFace-Adjustment Version-621',
- 'zDetFace-UUID-4TableStart-622',
- 'zPerson-Person UUID-4TableStart-623',
- 'zPerson-Is_Me_Confidence-iOS18-624',
- 'zPerson - MD ID-625',
- 'zPerson - Asset Sort Order-626',
- 'zDetFace-Confirmed Face Crop Generation State-627',
- 'zDetFace-Manual-628',
- 'zDetFace-Detection Type-629',
- 'zPerson-Detection Type-630',
- 'zDetFace-VIP Model Type-631',
- 'zDetFace-Name Source-632',
- 'zDetFace-Cloud Name Source-633',
- 'zPerson-Merge Candidate Confidence-634',
- 'zPerson-Person URI-635',
- 'zPerson-Display Name-636',
- 'zPerson-Full Name-637',
- 'zPerson-Cloud Verified Type-638',
- 'zFaceCrop-State-639',
- 'zFaceCrop-Type-640',
- 'zFaceCrop-Resource Data-HEX-PHOTO used for FaceCrop-641',
- 'zFaceCrop-UUID-4TableStart-642',
- 'zPerson-Type-643',
- 'zPerson-Verified Type-644',
- 'zPerson-Gender Type-645',
- 'zDetFace-Gender Type-646',
- 'zDetFace-Center X-647',
- 'zDetFace-Center Y-648',
- 'zPerson-Age Type Estimate-649',
- 'zDetFace-Age Type Estimate-650',
- 'zDetFace-Ethnicity Type-651',
- 'zDetFace-Skin Tone Type-652',
- 'zDetFace-Hair Type-653',
- 'zDetFace-Hair Color Type-654',
- 'zDetFace-Head Gear Type-655',
- 'zDetFace-Facial Hair Type-656',
- 'zDetFace-Has Face Mask-657',
- 'zDetFace-Pose Type-658',
- 'zDetFace-Face Expression Type-659',
- 'zDetFace-Has Smile-660',
- 'zDetFace-Smile Type-661',
- 'zDetFace-Lip Makeup Type-662',
- 'zDetFace-Eyes State-663',
- 'zDetFace-Is Left Eye Closed-664',
- 'zDetFace-Is Right Eye Closed-665',
- 'zDetFace-Gaze Center X-666',
- 'zDetFace-Gaze Center Y-667',
- 'zDetFace-Face Gaze Type-668',
- 'zDetFace-Eye Glasses Type-669',
- 'zDetFace-Eye Makeup Type-670',
- 'zDetFace-Cluster Squence Number Key-671',
- 'zDetFace-Grouping ID-672',
- 'zDetFace-Master ID-673',
- 'zDetFace-Quality-674',
- 'zDetFace-Quality Measure-675',
- 'zDetFace-Source Height-676',
- 'zDetFace-Source Width-677',
- 'zDetFace-Hidden-Asset Hidden-678',
- 'zDetFace-In Trash-Recently Deleted-679',
- 'zDetFace-Cloud Local State-680',
- 'zDetFace-Training Type-681',
- 'zDetFace.Pose Yaw-682',
- 'zDetFace-Body Center X-683',
- 'zDetFace-Body Center Y-684',
- 'zDetFace-Body Height-685',
- 'zDetFace-Body Width-686',
- 'zDetFace-Roll-687',
- 'zDetFace-Size-688',
- 'zDetFace-Cluster Squence Number-689',
- 'zDetFace-Blur Score-690',
- 'zDetFacePrint-Face Print Version-691',
- 'zMedAnlyAstAttr-Face Count-692',
- 'zDetFaceGroup-UUID-4TableStart-693',
- 'zDetFaceGroup-Person Builder State-694',
- 'zDetFaceGroup-UnNamed Face Count-695',
- 'zPerson-In Person Naming Model-696',
- 'zPerson-Key Face Pick Source Key-697',
- 'zPerson-Manual Order Key-698',
- 'zPerson-Question Type-699',
- 'zPerson-Suggested For Client Type-700',
- 'zPerson-Merge Target Person-701',
- 'zPerson-Cloud Local State-702',
- 'zFaceCrop-Cloud Local State-703',
- 'zFaceCrop-Cloud Type-704',
- 'zPerson-Cloud Delete State-705',
- 'zFaceCrop-Cloud Delete State-706',
- 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-707',
- 'zAsset-Highlight Visibility Score-708',
- 'zMemory-UUID-4TableStart-709',
- 'zMemory-AssetListPredicte-710',
- 'zMemory-Score-711',
- 'zMemory-SubTitle-712',
- 'zMemory-Title-713',
- 'zMemory-Category-714',
- 'zMemory-SubCategory-715',
- 'zMemory-Creation Date-716',
- 'zMemory-Last Enrichment Date-717',
- 'zMemory-User Action Options-718',
- 'zMemory-Favorite Memory-719',
- 'zMemory-View Count-720',
- 'zMemory-Play Count-721',
- 'zMemory-Rejected-722',
- 'zMemory-Share Count-723',
- 'zMemory-Sharing Composition-724',
- 'zMemory-PhotosGraphData-HEX NSKeyed Plist-725',
- 'zMemory-MovieAssetState-HEX NSKeyed Plist-726',
- 'zMemory-MovieData-HEX NSKeyed Plist-727',
- 'zMemory-Last Movie Play Date-728',
- 'zMemory-Last Viewed Date-729',
- 'zMemory-Pending Play Count Memory-730',
- 'zMemory-Pending Share Count Memory-731',
- 'zMemory-Pending View Count Memory-732',
- 'zMemory-Pending State-733',
- 'zMemory-Featured State-734',
- 'zMemory-Photos Graph Version-735',
- 'zMemory-Graph Memory Identifier-736',
- 'zMemory-Notification State-737',
- 'zMemory-Cloud Local State-738',
- 'zMemory-Cloud Delete State-739',
- 'zMemory-Story Color Grade Kind-740',
- 'zMemory-Story Serialized Title Category-741',
- 'zMemory-Syndicated Content State-742',
- 'zMemory-Search Index Rebuild State-743',
- 'zMemory-Black Listed Feature-744',
- 'zMoment-UUID-4TableStart-745',
- 'zMoment-Aggregation Score-746',
- 'zMoment-Start Date-747',
- 'zMoment-Representative Date-748',
- 'zMoment-Timezone Offset-749',
- 'zMoment-Modification Date-750',
- 'zMoment-End Date-751',
- 'zMoment-SubTitle-752',
- 'zMoment-Localized Location Names-753',
- 'zMoment-Title-754',
- 'zMoment-Originator State-755',
- 'zMoment-Sharing Composition-756',
- 'zMoment-Cached Count Shared-757',
- 'zMoment-Processed Location-758',
- 'zMoment-Approx Latitude-759',
- 'zMoment-Approx Longitude-760',
- 'zMoment-GPS Horizontal Accuracy-761',
- 'zMoment-Cache Count-762',
- 'zMoment-Cached Photos Count-763',
- 'zMoment-Cached Videos Count-764',
- 'zMoment-Trashed State-765',
- 'SBKAzSugg-UUID-4TableStart-766',
- 'SBKAzSugg-Suggestion Context-767',
- 'SBKAzSugg-Sharing Composition-768',
- 'SBKAzSugg-Start Date-769',
- 'SBKAzSugg-State-770',
- 'SBKAzSugg-Featured State-771',
- 'SBKAzSugg- Available Features-772',
- 'SBKAzSugg-Notification State-773',
- 'SBKAzSugg-Creation Date-774',
- 'SBKAzSugg-End Date-775',
- 'SBKAzSugg-Activation Date-776',
- 'SBKAzSugg-Expunge Date-777',
- 'SBKAzSugg-Relevant Until Date-778',
- 'SBKAzSugg-Title-779',
- 'SBKAzSugg-Sub Title-780',
- 'SBKAzSugg-Cached Count-781',
- 'SBKAzSugg-Cahed Photos Count-782',
- 'SBKAzSugg-Cached Videos Count-783',
- 'SBKAzSugg-Type-784',
- 'SBKAzSugg-Sub Type-785',
- 'SBKAzSugg-Action Data-786',
- 'SBKAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist-787',
- 'SBKAzSugg-Version-788',
- 'SBKAzSugg-Cloud Local State-789',
- 'SBKAzSugg-Cloud Delete State-790',
- 'SBRAzSugg-UUID-4TableStart-791',
- 'SBRAzSugg-Suggestion Context-792',
- 'SBRAzSugg-Sharing Composition-793',
- 'SBRAzSugg-Start Date-794',
- 'SBRAzSugg-State-795',
- 'SBRAzSugg-Featured State-796',
- 'SBRAzSugg- Available Features-797',
- 'SBRAzSugg-Notification State-798',
- 'SBRAzSugg-Creation Date-799',
- 'SBRAzSugg-End Date-800',
- 'SBRAzSugg-Activation Date-801',
- 'SBRAzSugg-Expunge Date-802',
- 'SBRAzSugg-Relevant Until Date-803',
- 'SBRAzSugg-Title-804',
- 'SBRAzSugg-Sub Title-805',
- 'SBRAzSugg-Cached Count-806',
- 'SBRAzSugg-Cahed Photos Count-807',
- 'SBRAzSugg-Cached Videos Count-808',
- 'SBRAzSugg-Type-809',
- 'SBRAzSugg-Sub Type-810',
- 'SBRAzSugg-Action Data-811',
- 'SBRAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist-812',
- 'SBRAzSugg-Version-813',
- 'SBRAzSugg-Cloud Local State-814',
- 'SBRAzSugg-Cloud Delete State-815',
- 'zMedAnlyAstAttr-Media Analysis Version-816',
- 'zMedAnlyAstAttr-Audio Classification-817',
- 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-818',
- 'zMedAnlyAstAttr-Best Video Range Start Time Scale-819',
- 'zMedAnlyAstAttr-Best Video Range Duration Value-820',
- 'zMedAnlyAstAttr-Best Video Range Start Value-821',
- 'zMedAnlyAstAttr-Packed Best Playback Rect-822',
- 'zMedAnlyAstAttr-Activity Score-823',
- 'zMedAnlyAstAttr-Video Score-824',
- 'zMedAnlyAstAttr-Audio Score-825',
- 'zMedAnlyAstAttr-Wallpaper Score-826',
- 'zMedAnlyAstAttr-AutoPlay Suggestion Score-827',
- 'zMedAnlyAstAttr-Blurriness Score-828',
- 'zMedAnlyAstAttr-Exposure Score-829',
- 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-830',
- 'zMedAnlyAstAttr-Probable Rotation Direction-831',
- 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-832',
- 'zMedAnlyAstAttr-Color Normalization Data-833',
- 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18-834',
- 'zMedAnlyAstAttr-Image_Caption_Version-iOS18-835',
- 'zMedAnlyAstAttr-Video_Caption_Version-iOS18-836',
- 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18-837',
- 'zAssetAnalyState-Asset UUID-4TableStart-838',
- 'zAssetAnalyState-Analyisis State-839',
- 'zAssetAnalyState-Worker Flags-840',
- 'zAssetAnalyState-Worker Type-841',
- 'zAssetAnalyState-Ignore Until Date-842',
- 'zAssetAnalyState-Last Ignored Date-843',
- 'zAssetAnalyState-Sort Token-844',
- 'zMedAnlyAstAttr-Character Recognition Attr-845',
- 'zCharRecogAttr-Algorithm Version-846',
- 'zCharRecogAttr-Adjustment Version-847',
- 'zCharRecogAttr-Character Recogition Data-HEX-848',
- 'zCharRecogAttr-Machine Readable Code Data-HEX-849',
- 'zMedAnlyAstAttr-Visual Search Attributes-850',
- 'zVisualSearchAttr-Algorithm Version-851',
- 'zVisualSearchAttr-Adjustment Version-852',
- 'zVisualSearchAttr-Visual Search Data-HEX-853',
- 'zVisualSearchAttr - Sticker Confidence Algorithm Version-854',
- 'zVisualSearchAttr - Sticker Confidence Score-855',
- 'zAsset-Sticker Confidence Score-856',
- 'zAsset-Overall Aesthetic Score-857',
- 'zCompAssetAttr-Behavioral Score-858',
- 'zCompAssetAttr-Failure Score zCompAssetAttr-859',
- 'zCompAssetAttr-Harmonious Color Score-860',
- 'zCompAssetAttr-Immersiveness Score-861',
- 'zCompAssetAttr-Interaction Score-862',
- 'zCompAssetAttr-Intersting Subject Score-863',
- 'zCompAssetAttr-Intrusive Object Presence Score-864',
- 'zCompAssetAttr-Lively Color Score-865',
- 'zCompAssetAttr-Low Light-866',
- 'zCompAssetAttr-Noise Score-867',
- 'zCompAssetAttr-Pleasant Camera Tilt Score-868',
- 'zCompAssetAttr-Pleasant Composition Score-869',
- 'zCompAssetAttr-Pleasant Lighting Score-870',
- 'zCompAssetAttr-Pleasant Pattern Score-871',
- 'zCompAssetAttr-Pleasant Perspective Score-872',
- 'zCompAssetAttr-Pleasant Post Processing Score-873',
- 'zCompAssetAttr-Pleasant Reflection Score-874',
- 'zCompAssetAttrPleasant Symmetry Score-875',
- 'zCompAssetAttr-Sharply Focused Subject Score-876',
- 'zCompAssetAttr-Tastfully Blurred Score-877',
- 'zCompAssetAttr-Well Chosen Subject Score-878',
- 'zCompAssetAttr-Well Framed Subject Score-879',
- 'zCompAssetAttr-Well Timeed Shot Score-880',
- 'zCldRes-Asset UUID-4TableStart-881',
- 'zCldRes-Cloud Local State-882',
- 'zCldRes-File Size-883',
- 'zCldRes-Height-884',
- 'zCldRes-Is Available-885',
- 'zCldRes-Is Locally Available-886',
- 'zCldRes-Prefetch Count-887',
- 'zCldRes-Source Type-888',
- 'zCldRes-Type-889',
- 'zCldRes-Width-890',
- 'zCldRes-Date Created-891',
- 'zCldRes-Last OnDemand Download Date-892',
- 'zCldRes-Last Prefetch Date-893',
- 'zCldRes-Prunedat-894',
- 'zCldRes-File Path-895',
- 'zCldRes-Fingerprint-896',
- 'zCldRes-Item ID-897',
- 'zCldRes-UniID-898',
- 'zUserFeedback-UUID-4TableStart-899',
- 'zUserFeedback-Feature-900',
- 'zUserFeedback-Type-901',
- 'zUserFeedback-Last Modified Date-902',
- 'zUserFeedback-Context-903',
- 'zUserFeedback-Cloud Local State-904',
- 'zUserFeedback-Cloud Delete State-905',
- 'zUserFeedback - Creation Type-906',
- 'zAddAssetAttr-zPK-907',
- 'zAddAssetAttr-zENT-908',
- 'ZAddAssetAttr-zOPT-909',
- 'zAddAssetAttr-zAsset= zAsset_zPK-910',
- 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-911',
- 'zAddAssetAttr-Original Stable Hash-iOS18-4Queryend-912',
- 'zAddAssetAttr-Public Global UUID-913',
- 'zAddAssetAttr-Deferred Photo Identifier-914',
- 'zAddAssetAttr-Original Assets UUID-915',
- 'zAddAssetAttr-Import Session ID-916',
- 'zAddAssetAttr-Originating Asset Identifier-4endquery-917',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-4endquery-918',
- 'zAlbumList-zPK= Album List Key-919',
- 'zAlbumList-zENT-920',
- 'zAlbumList-zOPT-921',
- 'zAlbumList-ID Key-922',
- 'zAlbumList-UUID-923',
- 'zAsset-zPK-924',
- 'zAsset-zENT-925',
- 'zAsset-zOPT-926',
- 'zAsset-Master= zCldMast-zPK-927',
- 'zAsset-Extended Attributes= zExtAttr-zPK-928',
- 'zAsset-Import Session Key-929',
- 'zAsset-Trashed by Participant= zSharePartic_zPK-930',
- 'zAsset-Photo Analysis Attributes Key-931',
- 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-932',
- 'zAsset-FOK-Cloud Feed Asset Entry Key-933',
- 'zAsset-Moment Share Key= zShare-zPK-934',
- 'zAsset-zMoment Key= zMoment-zPK-935',
- 'zAsset-Computed Attributes Asset Key-936',
- 'zAsset-Highlight Being Assets-HBA Key-937',
- 'zAsset-Highlight Being Extended Assets-HBEA Key-938',
- 'zAsset-Highlight Being Key Asset Private-HBKAP Key-939',
- 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-940',
- 'zAsset-Highligh Being Summary Assets-HBSA Key-941',
- 'zAsset-Day Group Highlight Being Assets-DGHBA Key-942',
- 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-943',
- 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-944',
- 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-945',
- 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-946',
- 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-947',
- 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-948',
- 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-949',
- 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-950',
- 'zAsset-Promotion Score-951',
- 'zAsset-Iconic Score-952',
- 'zAsset-Media Analysis Attributes Key-953',
- 'zAsset-Media Group UUID-954',
- 'zAsset-UUID = store.cloudphotodb-955',
- 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-956',
- 'zAsset.Cloud Collection GUID-957',
- 'zAsset-Avalanche UUID-958',
- 'zAssetAnalyState-zPK-959',
- 'zAssetAnalyState-zEnt-960',
- 'zAssetAnalyState-zOpt-961',
- 'zAssetAnalyState-Asset= zAsset-zPK-962',
- 'zAssetAnalyState-Asset UUID-963',
- 'zAsstContrib-zPK-964',
- 'zAsstContrib-zEnt-965',
- 'zAsstContrib-zOpt-966',
- 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-967',
- 'zAsstContrib-Participant= zSharePartic-zPK-968',
- 'zAssetDes-zPK-969',
- 'zAssetDes-zENT-970',
- 'zAssetDes-zOPT-971',
- 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-972',
- 'zCharRecogAttr-zPK-973',
- 'zCharRecogAttr-zENT-974',
- 'zCharRecogAttr-zOPT-975',
- 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-976',
- 'zCldFeedEnt-zPK= zCldShared keys-977',
- 'zCldFeedEnt-zENT-978',
- 'zCldFeedEnt-zOPT-979',
- 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-980',
- 'zCldFeedEnt-Entry Invitation Record GUID-981',
- 'zCldFeedEnt-Entry Cloud Asset GUID-982',
- 'zCldMast-zPK= zAsset-Master-983',
- 'zCldMast-zENT-984',
- 'zCldMast-zOPT-985',
- 'zCldMast-Moment Share Key= zShare-zPK-986',
- 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-987',
- 'zCldMast-Originating Asset ID-988',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-989',
- 'CMzCldMastMedData-zENT-990',
- 'CMzCldMastMedData-zOPT-991',
- 'CMzCldMastMedData-CldMast= zCldMast-zPK-992',
- 'AAAzCldMastMedData-zENT-993',
- 'AAAzCldMastMedData-zOPT-994',
- 'AAAzCldMastMedData-CldMast key-995',
- 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-996',
- 'zCldRes-zPK-997',
- 'zCldRes-zENT-998',
- 'zCldRes-zOPT-999',
- 'zCldRes-Asset= zAsset-zPK-1000',
- 'zCldRes-Cloud Master= zCldMast-zPK-1001',
- 'zCldRes-Asset UUID-1002',
- 'zCldShareAlbumInvRec-zPK-1003',
- 'zCldShareAlbumInvRec-zEnt-1004',
- 'zCldShareAlbumInvRec-zOpt-1005',
- 'zCldShareAlbumInvRec-Album Key-1006',
- 'zCldShareAlbumInvRec-FOK Album Key-1007',
- 'zCldShareAlbumInvRec-Album GUID-1008',
- 'zCldShareAlbumInvRec-zUUID-1009',
- 'zCldShareAlbumInvRec-Cloud GUID-1010',
- 'zCldSharedComment-zPK-1011',
- 'zCldSharedComment-zENT-1012',
- 'zCldSharedComment-zOPT-1013',
- 'zCldSharedComment-Commented Asset Key= zAsset-zPK-1014',
- 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-1015',
- 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-1016',
- 'zCldSharedComment-Liked Asset Key= zAsset-zPK-1017',
- 'zCldSharedComment-CldFeedLikeCommentEntry Key-1018',
- 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-1019',
- 'zCldSharedComment-Cloud GUID-1020',
- 'zCompAssetAttr-zPK-1021',
- 'zCompAssetAttr-zEnt-1022',
- 'zCompAssetAttr-zOpt-1023',
- 'zCompAssetAttr-Asset Key-1024',
- 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-iOS18-1025',
- 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18-1026',
- 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18-1027',
- 'zCompSyncAttr-zENT-iOS18-1028',
- 'zCompSyncAttr-zOPT-iOS18-1029',
- 'zDetFace-zPK-1030',
- 'zDetFace-zEnt-1031',
- 'zDetFace.zOpt-1032',
- 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face-1033',
- 'zDetFace-PersonForFace= zPerson-zPK-1034',
- 'zDetFace-Person Being Key Face-1035',
- 'zDetFace-Face Print-1036',
- 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-1037',
- 'zDetFace-FaceGroup= zDetFaceGroup-zPK-1038',
- 'zDetFace-UUID-1039',
- 'zDetFaceGroup-zPK-1040',
- 'zDetFaceGroup-zENT-1041',
- 'zDetFaceGroup-zOPT-1042',
- 'zDetFaceGroup-AssocPerson= zPerson-zPK-1043',
- 'zDetFaceGroup-KeyFace= zDetFace-zPK-1044',
- 'zDetFaceGroup-UUID-1045',
- 'zDetFacePrint-zPK-1046',
- 'zDetFacePrint-zEnt-1047',
- 'zDetFacePrint-zOpt-1048',
- 'zDetFacePrint-Face Key-1049',
- 'zExtAttr-zPK= zAsset-zExtendedAttributes-1050',
- 'zExtAttr-zENT-1051',
- 'zExtAttr-zOPT-1052',
- 'zExtAttr-Asset Key-1053',
- 'zFaceCrop-zPK-1054',
- 'zFaceCrop-zEnt-1055',
- 'zFaceCrop-zOpt-1056',
- 'zFaceCrop-Asset Key-1057',
- 'zFaceCrop-Invalid Merge Canidate Person UUID-1058',
- 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-1059',
- 'zFaceCrop-Face Key-1060',
- 'zFaceCrop-UUID-1061',
- 'zGenAlbum-zPK=26AlbumLists= 26Albums-1062',
- 'zGenAlbum-zENT-1063',
- 'zGenAlbum-zOpt-1064',
- 'zGenAlbum-Custom Key Asset-1065',
- 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-1066',
- 'zGenAlbum-FOK Parent Folder-1067',
- 'zGenAlbum-zSyndicate-1068',
- 'zGenAlbum-UUID-1069',
- 'SWYConverszGenAlbum-UUID-1070',
- 'zGenAlbum-Cloud_GUID = store.cloudphotodb-1071',
- 'SWYConverszGenAlbum-Cloud GUID-1072',
- 'zGenAlbum-Project Render UUID-1073',
- 'SWYConverszGenAlbum-Project Render UUID-1074',
- 'zIntResou-zPK-1075',
- 'zIntResou-zENT-1076',
- 'zIntResou-zOPT-1077',
- 'zIntResou-Asset= zAsset_zPK-1078',
- 'zIntResou-Fingerprint-iOS18-4Queryend-1079',
- 'zIntResou-Stable Hash-iOS18-4Queryend-1080',
- 'zIntResou-Cloud Delete Asset UUID With Resource Type-1081',
- 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1082',
- 'zMedAnlyAstAttr-zEnt-1083',
- 'zMedAnlyAstAttr-zOpt-1084',
- 'zMedAnlyAstAttr-Asset= zAsset-zPK-1085',
- 'zMemory-zPK-1086',
- 'zMemory-zENT-1087',
- 'zMemory-zOPT-1088',
- 'zMemory-Key Asset= zAsset-zPK-1089',
- 'zMemory-UUID-1090',
- 'zMoment-zPK-1091',
- 'zMoment-zENT-1092',
- 'zMoment-zOPT-1093',
- 'zMoment-Highlight Key-1094',
- 'zMoment-UUID-1095',
- 'zPerson-zPK=zDetFace-Person-1096',
- 'zPerson-zEnt-1097',
- 'zPerson-zOpt-1098',
- 'zPerson-Share Participant= zSharePartic-zPK-1099',
- 'zPerson-KeyFace=zDetFace-zPK-1100',
- 'zPerson-Assoc Face Group Key-1101',
- 'zPerson-Person UUID-1102',
- 'zPerson-Is_Me_Confidence-iOS18-1103',
- 'zPhotoAnalysisAssetAttr-zPK-1104',
- 'zPhotoAnalysisAssetAttr-zEnt-1105',
- 'zPhotoAnalysisAssetAttr-zOpt-1106',
- 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1107',
- 'zSceneP-zPK-1108',
- 'zSceneP-zENT-1109',
- 'zSceneP-zOPT-1110',
- 'zShare-zPK-1111',
- 'zShare-zENT-1112',
- 'zShare-zOPT-1113',
- 'zShare-UUID-1114',
- 'SPLzShare-UUID-1115',
- 'zShare-Scope ID = store.cloudphotodb-1116',
- 'zSharePartic-zPK-1117',
- 'zSharePartic-zENT-1118',
- 'zSharePartic-zOPT-1119',
- 'zSharePartic-Share Key= zShare-zPK-1120',
- 'zSharePartic-Person= zPerson-zPK-1121',
- 'zSharePartic-UUID-1122',
- 'SBKAzSugg-zPK-1123',
- 'SBKAzSugg-zENT-1124',
- 'SBKAzSugg-zOPT-1125',
- 'SBKAzSugg-UUID-1126',
- 'SBRAzSugg-zPK-1127',
- 'SBRAzSugg-zENT-1128',
- 'SBRAzSugg-zOPT-1129',
- 'SBRAzSugg-UUID-1130',
- 'z3SuggBRA-3RepAssets-1131',
- 'z3SuggBRA-66SuggBeingRepAssets-1132',
- 'z3SuggBKA-66SuggBeingKeyAssets= zSugg-zPK-1133',
- 'z3SuggBKA-3KeyAssets1= zAsset-zPK-1134',
- 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1135',
- 'zUnmAdj-zOPT-1136',
- 'zUnmAdj-zENT-1137',
- 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1138',
- 'zUnmAdj-UUID-1139',
- 'zUnmAdj-Other Adjustments Fingerprint-1140',
- 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1141',
- 'zUserFeedback-zPK-1142',
- 'zUserFeedback-zENT-1143',
- 'zUserFeedback-zOPT-1144',
- 'zUserFeedback-Person= zPerson-zPK-1145',
- 'zUserFeedback-Memory= zMemory-zPK-1146',
- 'zUserFeedback-UUID-1147',
- 'zVisualSearchAttr-zPK-1148',
- 'zVisualSearchAttr-zENT-1149',
- 'zVisualSearchAttr-zOPT-1150',
- 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1151',
- 'z30AlbumList-30Albums= zGenAlbum-zPK-1152',
- 'z30AlbumList-Album List Key-1153',
- 'z30AlbumList-FOK30Albums Key-1154',
- 'z31Assets-31Albums= zGenAlbum-zPK-1155',
- 'z31Assets-3Asset Key= zAsset-zPK in the Album-1156',
- 'z31Assets-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1157',
- 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1158',
- 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1159',
- 'z3MemoryBCAs-52MemoriesBeingCuratedAssets= zMemory-zPK-1160',
- 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1161',
- 'z3MemoryBECAs-52MemoriesBeingExtCuratedAssets= zMemory-zPK-1162',
- 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1163',
- 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK-1164',
- 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1165',
- 'z3MemoryBUCAs-52MemoriesBeingUserCuratedAssets= zMemory-zPK-1166',
- 'z3MemoryBCAs-52Memories Being Custom User Assets-1167',
- 'z3MemoryBCAs-3Custom User Assets-1168',
- 'z3MemoryBCAs-FOK-3Custom User Assets-1169')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18],
+ row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27],
+ row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36],
+ row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45],
+ row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54],
+ row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63],
+ row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72],
+ row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81],
+ row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90],
+ row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99],
+ row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107],
+ row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115],
+ row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123],
+ row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131],
+ row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139],
+ row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147],
+ row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155],
+ row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163],
+ row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171],
+ row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179],
+ row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187],
+ row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195],
+ row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203],
+ row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211],
+ row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219],
+ row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227],
+ row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235],
+ row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243],
+ row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251],
+ row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259],
+ row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267],
+ row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275],
+ row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283],
+ row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291],
+ row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299],
+ row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307],
+ row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315],
+ row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323],
+ row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331],
+ row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339],
+ row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347],
+ row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355],
+ row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363],
+ row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371],
+ row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379],
+ row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387],
+ row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395],
+ row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403],
+ row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411],
+ row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419],
+ row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427],
+ row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435],
+ row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443],
+ row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451],
+ row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459],
+ row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467],
+ row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475],
+ row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483],
+ row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491],
+ row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499],
+ row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507],
+ row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515],
+ row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523],
+ row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531],
+ row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539],
+ row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547],
+ row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555],
+ row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563],
+ row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571],
+ row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579],
+ row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587],
+ row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595],
+ row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603],
+ row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611],
+ row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619],
+ row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627],
+ row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635],
+ row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643],
+ row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651],
+ row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659],
+ row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667],
+ row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675],
+ row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683],
+ row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691],
+ row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699],
+ row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707],
+ row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715],
+ row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723],
+ row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731],
+ row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739],
+ row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747],
+ row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755],
+ row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763],
+ row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771],
+ row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779],
+ row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787],
+ row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795],
+ row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803],
+ row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811],
+ row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819],
+ row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827],
+ row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835],
+ row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843],
+ row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851],
+ row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859],
+ row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867],
+ row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875],
+ row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883],
+ row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891],
+ row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899],
+ row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907],
+ row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915],
+ row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923],
+ row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931],
+ row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939],
+ row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947],
+ row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955],
+ row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963],
+ row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971],
+ row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979],
+ row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987],
+ row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995],
+ row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002],
+ row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009],
+ row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016],
+ row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023],
+ row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030],
+ row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037],
+ row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044],
+ row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051],
+ row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058],
+ row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065],
+ row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072],
+ row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079],
+ row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086],
+ row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093],
+ row[1094], row[1095], row[1096], row[1097], row[1098], row[1099], row[1100],
+ row[1101], row[1102], row[1103], row[1104], row[1105], row[1106], row[1107],
+ row[1108], row[1109], row[1110], row[1111], row[1112], row[1113], row[1114],
+ row[1115], row[1116], row[1117], row[1118], row[1119], row[1120], row[1121],
+ row[1122], row[1123], row[1124], row[1125], row[1126], row[1127], row[1128],
+ row[1129], row[1130], row[1131], row[1132], row[1133], row[1134], row[1135],
+ row[1136], row[1137], row[1138], row[1139], row[1140], row[1141], row[1142],
+ row[1143], row[1144], row[1145], row[1146], row[1147], row[1148], row[1149],
+ row[1150], row[1151], row[1152], row[1153], row[1154], row[1155], row[1156],
+ row[1157], row[1158], row[1159]))
- tsvname = 'Ph98.2-iOS18_Ref_for_Asset_Analysis-SyndPL'
- tsv(report_folder, data_headers, data_list, tsvname)
+ data_headers = ('zAsset Complete-0',
+ 'zAsset-zPK-4QueryStart-1',
+ 'zAddAssetAttr-zPK-4QueryStart-2',
+ 'zAsset-UUID = store.cloudphotodb-4QueryStart-3',
+ 'zAddAssetAttr-Original Stable Hash-4QueryStart-4',
+ 'zIntResou-Fingerprint-4QueryStart-5',
+ 'zAddAssetAttr.Adjusted Stable Hash-4QueryStart-6',
+ 'zIntResou-Stable Hash-4QueryStart-7',
+ 'zAsset-Bundle Scope-8',
+ 'zAsset-Syndication State-9',
+ 'zAsset-Cloud is My Asset-10',
+ 'zAsset-Cloud is deletable-Asset-11',
+ 'zAsset-Cloud_Local_State-12',
+ 'zAsset-Visibility State-13',
+ 'zExtAttr-Camera Make-14',
+ 'zExtAttr-Camera Model-15',
+ 'zExtAttr-Lens Model-16',
+ 'zExtAttr-Flash Fired-17',
+ 'zExtAttr-Focal Lenght-18',
+ 'zExtAttr-Focal Lenth in 35MM-19',
+ 'zExtAttr-Digital Zoom Ratio-20',
+ 'zExtAttr-Generative_AI_Type-21',
+ 'zExtAttr-Credit-22',
+ 'zAsset-Derived Camera Capture Device-23',
+ 'zAsset-Capture_Session_Identifier-iOS18-24',
+ 'zAddAssetAttr-Camera Captured Device-25',
+ 'zAddAssetAttr-Imported by-26',
+ 'zCldMast-Imported By-27',
+ 'zAddAssetAttr.Imported by Bundle Identifier-28',
+ 'zAddAssetAttr-Imported By Display Name-29',
+ 'zCldMast-Imported by Bundle ID-30',
+ 'zCldMast-Imported by Display Name-31',
+ 'zAsset-ImageRequestHints-HEX-Path-32',
+ 'zAsset-Saved Asset Type-33',
+ 'zAsset-Is_Recently_Saved-34',
+ 'zAsset-Directory-Path-35',
+ 'zAsset-Filename-36',
+ 'zAddAssetAttr- Original Filename-37',
+ 'zCldMast- Original Filename-38',
+ 'zAddAssetAttr- Syndication Identifier-SWY-Files-39',
+ 'zAsset-Active Library Scope Participation State -4QueryStart-40',
+ 'zAsset-Library Scope Share State- StillTesting -4QueryStart-41',
+ 'SPLzShare-Cloud Photo Count-SPL -4QueryStart-42',
+ 'SPLzShare-Cloud Video Count-SPL -4QueryStart-43',
+ ('zAsset-Added Date-44', 'datetime'),
+ ('zAsset- SortToken -CameraRoll-45', 'datetime'),
+ ('zAddAssetAttr-Date Created Source-46', 'datetime'),
+ ('zAsset-Date Created-47', 'datetime'),
+ ('zCldMast-Creation Date-48', 'datetime'),
+ ('zIntResou-CldMst Date Created-49', 'datetime'),
+ 'zAddAssetAttr-Time Zone Name-50',
+ 'zAddAssetAttr-Time Zone Offset-51',
+ 'zAddAssetAttr-Inferred Time Zone Offset-52',
+ 'zAddAssetAttr-EXIF-String-53',
+ ('zAsset-Modification Date-54', 'datetime'),
+ ('zAddAssetAttr-Last Viewed Date-55', 'datetime'),
+ ('zAsset-Last Shared Date-56', 'datetime'),
+ 'zCldMast-Cloud Local State-57',
+ ('zCldMast-Import Date-58', 'datetime'),
+ ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-59', 'datetime'),
+ 'zAddAssetAttr-Import Session ID-4QueryStart-60',
+ ('zAddAssetAttr-Alt Import Image Date-61', 'datetime'),
+ 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-62',
+ ('zAsset-Cloud Batch Publish Date-63', 'datetime'),
+ ('zAsset-Cloud Server Publish Date-64', 'datetime'),
+ 'zAsset-Cloud Download Requests-65',
+ 'zAsset-Cloud Batch ID-66',
+ 'zAddAssetAttr-Upload Attempts-67',
+ 'zAsset-Latitude-68',
+ 'zExtAttr-Latitude-69',
+ 'zAsset-Longitude-70',
+ 'zExtAttr-Longitude-71',
+ 'zAddAssetAttr-GPS Horizontal Accuracy-72',
+ 'zAddAssetAttr-Location Hash-73',
+ 'zAsset-Location Data-HEX-74',
+ 'zAddAssetAttr-Reverse Location Is Valid-75',
+ 'zAddAssetAttr-Reverse Location Data-76',
+ 'zAddAssetAttr-Shifted Location Valid-77',
+ 'zAddAssetAttr-Shifted Location Data-78',
+ 'ParentzGenAlbum-UUID-4QueryStart-79',
+ 'zGenAlbum-UUID-4QueryStart-80',
+ 'SWYConverszGenAlbum-UUID-4QueryStart-81',
+ 'ParentzGenAlbum-Cloud GUID-4QueryStart-82',
+ 'zGenAlbum-Cloud GUID-4QueryStart-83',
+ 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-84',
+ 'zCldShareAlbumInvRec-Album GUID-4QueryStart-85',
+ 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-86',
+ 'zGenAlbum-Project Render UUID-4QueryStart-87',
+ 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-88',
+ 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-89',
+ 'zGenAlbum-Cloud_Local_State-4QueryStart-90',
+ 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-91',
+ ('ParentzGenAlbum- Creation Date- 4QueryStart-92', 'datetime'),
+ ('zGenAlbum- Creation Date- 4QueryStart-93', 'datetime'),
+ ('SWYConverszGenAlbum- Creation Date- 4QueryStart-94', 'datetime'),
+ ('zGenAlbum- Cloud Creation Date- 4QueryStart-95', 'datetime'),
+ ('SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-96', 'datetime'),
+ ('zGenAlbum- Start Date- 4QueryStart-97', 'datetime'),
+ ('SWYConverszGenAlbum- Start Date- 4QueryStart-98', 'datetime'),
+ ('zGenAlbum- End Date- 4QueryStart-99', 'datetime'),
+ ('SWYConverszGenAlbum- End Date- 4QueryStart-100', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date- 4QueryStart-101', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-102', 'datetime'),
+ 'ParentzGenAlbum- Title- 4QueryStart-103',
+ 'zGenAlbum- Title-User&System Applied- 4QueryStart-104',
+ 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-105',
+ 'zGenAlbum-Import Session ID-SWY- 4QueryStart-106',
+ 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-107',
+ 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-108',
+ 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-109',
+ 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-110',
+ 'SWYConverszGenAlbum- Syndicate-4QueryStart-111',
+ 'zGenAlbum-zENT- Entity- 4QueryStart-112',
+ 'ParentzGenAlbum- Kind- 4QueryStart-113',
+ 'zGenAlbum-Album Kind- 4QueryStart-114',
+ 'SWYConverszGenAlbum-Album Kind- 4QueryStart-115',
+ 'AAAzCldMastMedData-zOPT-4TableStart-116',
+ 'zAddAssetAttr-Media Metadata Type-117',
+ 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-118',
+ 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-119',
+ 'AAAzCldMastMedData-Data-HEX-120',
+ 'CldMasterzCldMastMedData-zOPT-4TableStart-121',
+ 'zCldMast-Media Metadata Type-122',
+ 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-123',
+ 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-124',
+ 'CMzCldMastMedData-Data-HEX-125',
+ 'zAsset-Search Index Rebuild State-126',
+ 'zAddAssetAttr-Syndication History-127',
+ 'zMedAnlyAstAttr-Syndication Processing Version-128',
+ 'zMedAnlyAstAttr-Syndication Processing Value-129',
+ 'zAsset-Orientation-130',
+ 'zAddAssetAttr-Original Orientation-131',
+ 'zAsset-Kind-132',
+ 'zAsset-Is_Detected_Screenshot-133',
+ 'zAsset-Kind-Sub-Type-134',
+ 'zAddAssetAttr-Cloud Kind Sub Type-135',
+ 'zAsset-Playback Style-136',
+ 'zAsset-Playback Variation-137',
+ 'zAddAssetAttr.View_Presentation-iOS18-138',
+ 'zAsset-Video Duration-139',
+ 'zExtAttr-Duration-140',
+ 'zAsset-Video CP Duration-141',
+ 'zAddAssetAttr-Video CP Duration Time Scale-142',
+ 'zAsset-Video CP Visibility State-143',
+ 'zAddAssetAttr-Video CP Display Value-144',
+ 'zAddAssetAttr-Video CP Display Time Scale-145',
+ 'zIntResou-Datastore Class ID-146',
+ 'zAsset-Cloud Placeholder Kind-147',
+ 'zIntResou-Local Availability-148',
+ 'zIntResou-Local Availability Target-149',
+ 'zIntResou-Cloud Local State-150',
+ 'zIntResou-Remote Availability-151',
+ 'zIntResou-Remote Availability Target-152',
+ 'zIntResou-Transient Cloud Master-153',
+ 'zIntResou-Side Car Index-154',
+ 'zAsset-UUID = store.cloudphotodb-4TableStart-155',
+ 'zAddAssetAttr-Orignial Stable Hash-4TableStart-156',
+ 'zIntResou-Fingerprint-4TableStart-157',
+ 'zIntResou-Stable Hash-4TableStart-158',
+ 'zIntResou- File ID-159',
+ 'zIntResou-Version-160',
+ 'zAddAssetAttr- Original-File-Size-161',
+ 'zIntResou-Resource Type-162',
+ 'zIntResou-DataStoreKeyData-HEX-163',
+ 'zIntResou-Datastore Sub-Type-164',
+ 'zIntResou-Cloud Source Type-165',
+ 'zIntResou-Data Length-166',
+ 'zIntResou-Recipe ID-167',
+ ('zIntResou-Cloud Last Prefetch Date-168', 'datetime'),
+ 'zIntResou-Cloud Prefetch Count-169',
+ ('zIntResou- Cloud-Last-OnDemand Download-Date-170', 'datetime'),
+ 'zIntResou-UniformTypeID_UTI_Conformance_Hint-171',
+ 'zIntResou-Compact-UTI-172',
+ 'zAsset-Uniform Type ID-173',
+ 'zAsset-Original Color Space-174',
+ 'zCldMast-Uniform_Type_ID-175',
+ 'zCldMast-Full Size JPEG Source-176',
+ 'zAsset-HDR Gain-177',
+ 'zAsset-zHDR_Type-178',
+ 'zExtAttr-Codec-179',
+ 'zIntResou-Codec Four Char Code Name-180',
+ 'zCldMast-Codec Name-181',
+ 'zCldMast-Video Frame Rate-182',
+ 'zCldMast-Placeholder State-183',
+ 'zAsset-Depth_Type-184',
+ 'zAsset-Avalanche UUID-4TableStart-185',
+ 'zAsset-Avalanche_Kind-iOS18-186',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-187',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-188',
+ 'zAddAssetAttr-Cloud Recovery State-189',
+ 'zAddAssetAttr-Cloud State Recovery Attempts Count-190',
+ 'zAsset-Deferred Processing Needed-191',
+ 'zAsset-Video Deferred Processing Needed-192',
+ 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-193',
+ 'zAddAssetAttr-Deferred Processing Candidate Options-194',
+ 'zAsset-Adjustments_State-195',
+ 'zUnmAdj-UUID-4TableStart-196',
+ 'zAddAssetAttr.Adjusted Stable Hash-4TableStart-197',
+ 'zUnmAdj-Other Adjustments Fingerprint-4TableStart-198',
+ 'zUnmAdj-Similar to Orig Adjustments Fingerprint-4TableStart-199',
+ 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-4TableStart-200',
+ ('zAsset-Adjustment Timestamp-201', 'datetime'),
+ ('zUnmAdj-Adjustment Timestamp-202', 'datetime'),
+ 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-203',
+ 'zAddAssetAttr-Editor Bundle ID-204',
+ 'zUnmAdj-Editor Localized Name-205',
+ 'zUnmAdj-Adjustment Format ID-206',
+ 'zAddAssetAttr-Montage-207',
+ 'zUnmAdj-Adjustment Render Types-208',
+ 'zUnmAdj-Adjustment Format Version-209',
+ 'zUnmAdj-Adjustment Base Image Format-210',
+ 'zCompSyncAttr-Local_Analysis_Stage-iOS18-211',
+ 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18-212',
+ 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18-213',
+ 'zAsset-Favorite-214',
+ 'zAsset-Hidden-215',
+ 'zAsset-Trashed State-LocalAssetRecentlyDeleted-216',
+ ('zAsset-Trashed Date-217', 'datetime'),
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-218',
+ 'zAsset-Delete-Reason-219',
+ 'zIntResou-Trash State-220',
+ ('zIntResou-Trashed Date-221', 'datetime'),
+ 'zAsset-Cloud Delete State-222',
+ 'zIntResou-Cloud Delete State-223',
+ 'zAddAssetAttr-PTP Trashed State-224',
+ 'zIntResou-PTP Trashed State-225',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-226',
+ ('zMedAnlyAstAttr-Media Analysis Timestamp-227', 'datetime'),
+ ('zAsset-Analysis State Modification Date-228', 'datetime'),
+ 'zAddAssetAttr- Pending View Count-229',
+ 'zAddAssetAttr- View Count-230',
+ 'zAddAssetAttr- Pending Play Count-231',
+ 'zAddAssetAttr- Play Count-232',
+ 'zAddAssetAttr- Pending Share Count-233',
+ 'zAddAssetAttr- Share Count-234',
+ 'zAddAssetAttr-Allowed for Analysis-235',
+ 'zAddAssetAttr-Scene Analysis Version-236',
+ 'zAddAssetAttr-Scene Analysis is From Preview-237',
+ ('zAddAssetAttr-Scene Analysis Timestamp-238', 'datetime'),
+ 'zAsset-Duplication Asset Visibility State-239',
+ 'zAddAssetAttr-Destination Asset Copy State-240',
+ 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-241',
+ 'zSceneP-Data-HEX NSKeyed Plist-242',
+ 'zSceneP-Duplicate Matching Data-HEX NSKeyed Plist-243',
+ 'zSceneP-Duplicate Matching Alternate Data-HEX NSKeyed Plist-244',
+ 'zAddAssetAttr-Source Asset for Duplication Scope ID-245',
+ 'zCldMast-Source Master For Duplication Scope ID-246',
+ 'zAddAssetAttr-Source Asset For Duplication ID-247',
+ 'zCldMast-Source Master for Duplication ID-248',
+ 'zAddAssetAttr-Variation Suggestions States-249',
+ 'zAsset-High Frame Rate State-250',
+ 'zAsset-Video Key Frame Time Scale-251',
+ 'zAsset-Video Key Frame Value-252',
+ 'zAsset-Current_Sleet_Cast-iOS18-253',
+ 'zAddAssetAttr.Sleet_Is_Reversible-iOS18-254',
+ 'zExtAttr-Sleet_Rendering_Version-255',
+ 'zExtAttr-Sleet_Intensity-256',
+ 'zExtAttr-Sleet_Tone_Bias-257',
+ 'zExtAttr-Sleet_Color_Bias-258',
+ 'zExtAttr-Sleet_Cast-259',
+ 'zExtAttr-ISO-260',
+ 'zExtAttr-Metering Mode-261',
+ 'zExtAttr-Sample Rate-262',
+ 'zExtAttr-Track Format-263',
+ 'zExtAttr-White Balance-264',
+ 'zExtAttr-Aperture-265',
+ 'zExtAttr-BitRate-266',
+ 'zExtAttr-Exposure Bias-267',
+ 'zExtAttr-Frames Per Second-268',
+ 'zExtAttr-Shutter Speed-269',
+ 'zExtAttr-Slush Scene Bias-270',
+ 'zExtAttr-Slush Version-271',
+ 'zExtAttr-Slush Preset-272',
+ 'zExtAttr-Slush Warm Bias-273',
+ 'zAsset-Height-274',
+ 'zAddAssetAttr-Original Height-275',
+ 'zIntResou-Unoriented Height-276',
+ 'zAsset-Width-277',
+ 'zAddAssetAttr-Original Width-278',
+ 'zIntResou-Unoriented Width-279',
+ 'zShare-Thumbnail Image Data-280',
+ 'SPLzShare-Thumbnail Image Data-281',
+ 'zAsset-Thumbnail Index-282',
+ 'zAddAssetAttr-Embedded Thumbnail Height-283',
+ 'zAddAssetAttr-Embedded Thumbnail Length-284',
+ 'zAddAssetAttr-Embedded Thumbnail Offset-285',
+ 'zAddAssetAttr-Embedded Thumbnail Width-286',
+ 'zAsset-Packed Acceptable Crop Rect-287',
+ 'zAsset-Packed Badge Attributes-288',
+ 'zAsset-Packed Preferred Crop Rect-289',
+ 'zAsset-Curation Score-290',
+ 'zAsset-Camera Processing Adjustment State-291',
+ 'zAsset-Depth Type-292',
+ 'zAsset-Is Magic Carpet-QuicktimeMOVfile-293',
+ 'zAddAssetAttr-Orig Resource Choice-294',
+ 'zAsset-Spatial Type-295',
+ 'zAddAssetAttr-Spatial Over Capture Group ID-296',
+ 'zAddAssetAttr-Object Saliency Rects Data-HEX NSKeyed Plist-297',
+ 'zAddAssetAttr-Original Hash-HEX-298',
+ 'zAddAssetAttr-Place Annotation Data-299',
+ 'zAddAssetAttr-Distance Identity-300',
+ 'zAddAssetAttr-Edited IPTC Attributes-301',
+ 'zAssetDes-Long Description-302',
+ 'zAddAssetAttr-Asset Description-303',
+ 'zAddAssetAttr-Title-Comments via Cloud Website-304',
+ 'zAddAssetAttr-Accessibility Description-305',
+ 'zAddAssetAttr-Photo Stream Tag ID-306',
+ 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-307',
+ ('zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-308', 'datetime'),
+ 'zPhotoAnalysisAssetAttr-Wallpaper Properties Data-309',
+ ('zCldFeedEnt-Entry Date-310', 'datetime'),
+ 'zCldFeedEnt-Entry_Is_Mine-iOS18-311',
+ 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-312',
+ 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-313',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-314',
+ 'zCldFeedEnt-Entry Priority Number-315',
+ 'zCldFeedEnt-Entry Type Number-316',
+ 'zCldSharedComment-Cloud GUID-4TableStart-317',
+ ('zCldSharedComment-Date-318', 'datetime'),
+ ('zCldSharedComment-Comment Client Date-319', 'datetime'),
+ ('zAsset-Cloud Last Viewed Comment Date-320', 'datetime'),
+ 'zCldSharedComment-Type-321',
+ 'zCldSharedComment-Comment Text-322',
+ 'zCldSharedComment-Commenter Hashed Person ID-323',
+ 'zCldSharedComment-Batch Comment-324',
+ 'zCldSharedComment-Is a Caption-325',
+ 'zAsset-Cloud Has Comments by Me-326',
+ 'zCldSharedComment-Is My Comment-327',
+ 'zCldSharedComment-Is Deletable-328',
+ 'zAsset-Cloud Has Comments Conversation-329',
+ 'zAsset-Cloud Has Unseen Comments-330',
+ 'zCldSharedComment-Liked-331',
+ 'zAddAssetAttr-Share Type-332',
+ 'zAsset-Library Scope Share State- StillTesting-333',
+ 'zAsset-Active Library Scope Participation State-334',
+ 'zAddAssetAttr-Library Scope Asset Contributors To Update-335',
+ 'zShare-UUID-CMM-4TableStart-336',
+ 'SPLzShare-UUID-SPL-4TableStart-337',
+ 'zShare-zENT-CMM-338',
+ 'SPLzShare-zENT-SPL-339',
+ 'zSharePartic-z61SHARE-340',
+ 'SPLzSharePartic-z61SHARE-341',
+ 'zShare-Status-CMM-342',
+ 'zShare-Status-SPL-343',
+ 'zShare-Scope Type-CMM-344',
+ 'zShare-Scope Type-SPL-345',
+ 'zShare-Local Publish State-CMM-346',
+ 'SPLzShare-Local Publish State-SPL-347',
+ 'zShare-Public Permission-CMM-348',
+ 'SPLzShare-Public Permission-SPL-349',
+ 'zShare-Originating Scope ID-CMM-350',
+ 'SPLzShare-Originating Scope ID-SPL-351',
+ 'zShare-Scope ID-CMM-352',
+ 'SPLzShare-Scope ID-SPL-353',
+ 'zShare-Title-CMM-354',
+ 'SPLzShare-Title-SPL-355',
+ 'zShare-Share URL-CMM-356',
+ 'SPLzShare-Share URL-SPL-357',
+ ('zShare-Creation Date-CMM-358', 'datetime'),
+ ('SPLzShare-Creation Date-SPL-359', 'datetime'),
+ ('zShare-Start Date-CMM-360', 'datetime'),
+ ('SPLzShare-Start Date-SPL-361', 'datetime'),
+ ('zShare-End Date-CMM-362', 'datetime'),
+ ('SPLzShare-End Date-SPL-363', 'datetime'),
+ ('zShare-Expiry Date-CMM-364', 'datetime'),
+ ('SPLzShare-Expiry Date-SPL-365', 'datetime'),
+ 'zShare-Cloud Item Count-CMM-366',
+ 'SPLzShare-Cloud Item Count-SPL-367',
+ 'zShare-Asset Count-CMM-368',
+ 'SPLzShare-Asset Count-SPL-369',
+ 'zShare-Cloud Photo Count-CMM-370',
+ 'SPLzShare-Cloud Photo Count-SPL-371',
+ 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-372',
+ 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-373',
+ 'zShare-Photos Count-CMM-374',
+ 'SPLzShare-Photos Count-CMM-SPL-375',
+ 'zShare-Uploaded Photos Count-CMM-376',
+ 'SPLzShare-Uploaded Photos Count-SPL-377',
+ 'zShare-Cloud Video Count-CMM-378',
+ 'SPLzShare-Cloud Video Count-SPL-379',
+ 'zShare-Videos Count-CMM-380',
+ 'SPLzShare-Videos Count-SPL-381',
+ 'zShare-Uploaded Videos Count-CMM-382',
+ 'SPLzShare-Uploaded Videos Count-SPL-383',
+ 'zShare-Force Sync Attempted-CMM-384',
+ 'SPLzShare-Force Sync Attempted-SPL-385',
+ 'zShare-Cloud Local State-CMM-386',
+ 'SPLzShare-Cloud Local State-SPL-387',
+ 'zShare-Scope Syncing State-CMM-388',
+ 'SPLzShare-Scope Syncing State-SPL-389',
+ 'zShare-Auto Share Policy-CMM-390',
+ 'SPLzShare-Auto Share Policy-SPL-391',
+ 'zShare-Should Notify On Upload Completion-CMM-392',
+ 'SPLzShare-Should Notify On Upload Completion-SPL-393',
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-394',
+ 'zShare-Trashed State-CMM-395',
+ 'SPLzShare-Trashed State-SPL-396',
+ 'zShare-Cloud Delete State-CMM-397',
+ 'SPLzShare-Cloud Delete State-SPL-398',
+ ('zShare-Trashed Date-CMM-399', 'datetime'),
+ ('SPLzShare-Trashed Date-SPL-400', 'datetime'),
+ ('zShare-LastParticipant Asset Trash Notification Date-CMM-401', 'datetime'),
+ ('SPLzShare-LastParticipant Asset Trash Notification Date-SPL-402', 'datetime'),
+ ('zShare-Last Participant Asset Trash Notification View Date-CMM-403', 'datetime'),
+ ('SPLzShare-Last Participant Asset Trash Notification View Date-SPL-404', 'datetime'),
+ 'zShare-Exit Source-CMM-405',
+ 'SPLzShare-Exit Source-SPL-406',
+ 'zShare-SPL_Exit State-CMM-407',
+ 'SPLzShare-SPL_Exit State-SPL-408',
+ 'zShare-Exit Type-CMM-409',
+ 'SPLzShare-Exit Type-SPL-410',
+ 'zShare-Should Ignor Budgets-CMM-411',
+ 'SPLzShare-Should Ignor Budgets-SPL-412',
+ 'zShare-Preview State-CMM-413',
+ 'SPLzShare-Preview State-SPL-414',
+ 'zShare-Preview Data-CMM-415',
+ 'SPLzShare-Preview Data-SPL-416',
+ 'zShare-Rules-CMM-417',
+ 'SPLzShare-Rules-SPL-418',
+ 'zShare-Thumbnail Image Data-CMM-419',
+ 'SPLzShare-Thumbnail Image Data-SPL-420',
+ 'zShare-Participant Cloud Update State-CMM-421',
+ 'SPLzShare-Participant Cloud Update State-SPL-422',
+ 'zSharePartic-UUID-4TableStart-423',
+ 'SPLzSharePartic-UUID-4TableStart-424',
+ 'zSharePartic-Acceptance Status-425',
+ 'SPLzSharePartic-Acceptance Status-426',
+ 'zSharePartic-Is Current User-427',
+ 'SPLzSharePartic-Is Current User-428',
+ 'zSharePartic-Role-429',
+ 'SPLzSharePartic-Role-430',
+ 'zSharePartic-Premission-431',
+ 'SPLzSharePartic-Premission-432',
+ 'zSharePartic-Participant ID-433',
+ 'SPLzSharePartic-Participant ID-434',
+ 'zSharePartic-User ID-435',
+ 'SPLzSharePartic-User ID-436',
+ 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-437',
+ 'SPLzSharePartic-zPK-4TableStart-438',
+ 'zSharePartic-zPK-4TableStart-439',
+ 'zSharePartic-Email Address-440',
+ 'SPLzSharePartic-Email Address-441',
+ 'zSharePartic-Phone Number-442',
+ 'SPLzSharePartic-Phone Number-443',
+ 'zSharePartic-Name Components-444',
+ 'SPLzSharePartic-Name Components-445',
+ 'zSharePartic-Exit State-446',
+ 'SPLzSharePartic-Exit State-447',
+ 'ParentzGenAlbum-UUID-4TableStart-448',
+ 'zGenAlbum-UUID-4TableStart-449',
+ 'SWYConverszGenAlbum-UUID-4TableStart-450',
+ 'ParentzGenAlbum-Cloud GUID-4TableStart-451',
+ 'zGenAlbum-Cloud GUID-4TableStart-452',
+ 'SWYConverszGenAlbum-Cloud GUID-4TableStart-453',
+ 'zCldShareAlbumInvRec-Album GUID-4TableStart-454',
+ 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-455',
+ 'zGenAlbum-Project Render UUID-4TableStart-456',
+ 'SWYConverszGenAlbum-Project Render UUID-4TableStart-457',
+ 'zAlbumList-Needs Reordering Number-458',
+ 'zGenAlbum-zENT- Entity-459',
+ 'ParentzGenAlbum-Kind-460',
+ 'zGenAlbum-Album Kind-461',
+ 'SWYConverszGenAlbum-Album Kind-462',
+ 'ParentzGenAlbum-Cloud-Local-State-463',
+ 'zGenAlbum-Cloud_Local_State-464',
+ 'SWYConverszGenAlbum-Cloud_Local_State-465',
+ 'ParentzGenAlbum- Title-466',
+ 'zGenAlbum- Title-User&System Applied-467',
+ 'SWYConverszGenAlbum- Title -User&System Applied-468',
+ 'zGenAlbum-Import Session ID-SWY-469',
+ 'zAsset- Conversation= zGenAlbum_zPK-470',
+ 'SWYConverszGenAlbum- Import Session ID-SWY-471',
+ 'zGenAlbum-Imported by Bundle Identifier-472',
+ 'SWYzGenAlbum-Imported by Bundle Identifier-473',
+ 'SWYConverszGenAlbum- Syndicate-474',
+ ('ParentzGenAlbum-Creation Date-475', 'datetime'),
+ ('zGenAlbum-Creation Date-476', 'datetime'),
+ ('SWYConverszGenAlbum-Creation Date-477', 'datetime'),
+ ('zGenAlbum-Cloud Creation Date-478', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Creation Date-479', 'datetime'),
+ ('zGenAlbum-Start Date-480', 'datetime'),
+ ('SWYConverszGenAlbum-Start Date-481', 'datetime'),
+ ('zGenAlbum-End Date-482', 'datetime'),
+ ('SWYConverszGenAlbum-End Date-483', 'datetime'),
+ ('zGenAlbum-Cloud Subscription Date-484', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Subscription Date-485', 'datetime'),
+ 'zGenAlbum-Cloud Metadata-HEX NSKeyed Plist-486',
+ 'SWYConverszGenAlbum-Cloud Metadata-HEX NSKeyed Plist-487',
+ 'ParentzGenAlbum-Pending Items Count-488',
+ 'zGenAlbum-Pending Items Count-489',
+ 'SWYConverszGenAlbum-Pending Items Count-490',
+ 'ParentzGenAlbum-Pending Items Type-491',
+ 'zGenAlbum-Pending Items Type-492',
+ 'SWYConverszGenAlbum-Pending Items Type-493',
+ 'zGenAlbum- Cached Photos Count-494',
+ 'SWYConverszGenAlbum- Cached Photos Count-495',
+ 'zGenAlbum- Cached Videos Count-496',
+ 'SWYConverszGenAlbum- Cached Videos Count-497',
+ 'zGenAlbum- Cached Count-498',
+ 'SWYConverszGenAlbum- Cached Count-499',
+ 'ParentzGenAlbum-Sync Event Order Key-500',
+ 'zGenAlbum-Sync Event Order Key-501',
+ 'SWYConverszGenAlbum-Sync Event Order Key-502',
+ 'zGenAlbum-Has Unseen Content-503',
+ 'SWYConverszGenAlbum-Has Unseen Content-504',
+ 'zGenAlbum-Unseen Asset Count-505',
+ 'SWYConverszGenAlbum-Unseen Asset Count-506',
+ 'zGenAlbum-is Owned-507',
+ 'SWYConverszGenAlbum-is Owned-508',
+ 'zGenAlbum-Cloud Relationship State-509',
+ 'SWYConverszGenAlbum-Cloud Relationship State-510',
+ 'zGenAlbum-Cloud Relationship State Local-511',
+ 'SWYConverszGenAlbum-Cloud Relationship State Local-512',
+ 'zGenAlbum-Cloud Owner Mail Key-513',
+ 'SWYConverszGenAlbum-Cloud Owner Mail Key-514',
+ 'zGenAlbum-Cloud Owner Frist Name-515',
+ 'SWYConverszGenAlbum-Cloud Owner Frist Name-516',
+ 'zGenAlbum-Cloud Owner Last Name-517',
+ 'SWYConverszGenAlbum-Cloud Owner Last Name-518',
+ 'zGenAlbum-Cloud Owner Full Name-519',
+ 'SWYConverszGenAlbum-Cloud Owner Full Name-520',
+ 'zGenAlbum-Cloud Person ID-521',
+ 'SWYConverszGenAlbum-Cloud Person ID-522',
+ 'zAsset-Cloud Owner Hashed Person ID-523',
+ 'zGenAlbum-Cloud Owner Hashed Person ID-524',
+ 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-525',
+ 'zGenAlbum-Local Cloud Multi-Contributors Enabled-526',
+ 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-527',
+ 'zGenAlbum-Cloud Multi-Contributors Enabled-528',
+ 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-529',
+ 'zGenAlbum-Cloud Album Sub Type-530',
+ 'SWYConverszGenAlbum-Cloud Album Sub Type-531',
+ ('zGenAlbum-Cloud Contribution Date-532', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Contribution Date-533', 'datetime'),
+ ('zGenAlbum-Cloud Last Interesting Change Date-534', 'datetime'),
+ ('SWYConverszGenAlbum-Cloud Last Interesting Change Date-535', 'datetime'),
+ 'zGenAlbum-Cloud Notification Enabled-536',
+ 'SWYConverszGenAlbum-Cloud Notification Enabled-537',
+ 'ParentzGenAlbum-Pinned-538',
+ 'zGenAlbum-Pinned-539',
+ 'SWYConverszGenAlbum-Pinned-540',
+ 'ParentzGenAlbum-Custom Sort Key-541',
+ 'zGenAlbum-Custom Sort Key-542',
+ 'SWYConverszGenAlbum-Custom Sort Key-543',
+ 'ParentzGenAlbum-Custom Sort Ascending-544',
+ 'zGenAlbum-Custom Sort Ascending-545',
+ 'SWYConverszGenAlbum-Custom Sort Ascending-546',
+ 'ParentzGenAlbum-Is Prototype-547',
+ 'zGenAlbum-Is Prototype-548',
+ 'SWYConverszGenAlbum-Is Prototype-549',
+ 'ParentzGenAlbum-Project Document Type-550',
+ 'zGenAlbum-Project Document Type-551',
+ 'SWYConverszGenAlbum-Project Document Type-552',
+ 'ParentzGenAlbum-Custom Query Type-553',
+ 'zGenAlbum-Custom Query Type-554',
+ 'SWYConverszGenAlbum-Custom Query Type-555',
+ 'ParentzGenAlbum-Trashed State-556',
+ ('ParentzGenAlbum-Trash Date-557', 'datetime'),
+ 'zGenAlbum-Trashed State-558',
+ ('zGenAlbum-Trash Date-559', 'datetime'),
+ 'SWYConverszGenAlbum-Trashed State-560',
+ ('SWYConverszGenAlbum-Trash Date-561', 'datetime'),
+ 'ParentzGenAlbum-Cloud Delete State-562',
+ 'zGenAlbum-Cloud Delete State-563',
+ 'SWYConverszGenAlbum-Cloud Delete State-564',
+ 'zGenAlbum-Cloud Owner Whitelisted-565',
+ 'SWYConverszGenAlbum-Cloud Owner Whitelisted-566',
+ 'zGenAlbum-Cloud Local Public URL Enabled-567',
+ 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-568',
+ 'zGenAlbum-Cloud Public URL Enabled-569',
+ 'zGenAlbum-Public URL-570',
+ 'SWYConverszGenAlbum-Cloud Public URL Enabled-571',
+ 'SWYConverszGenAlbum-Public URL-572',
+ 'zGenAlbum-Key Asset Face Thumb Index-573',
+ 'SWYConverszGenAlbum-Key Asset Face Thumb Index-574',
+ 'zGenAlbum-Project Text Extension ID-575',
+ 'SWYConverszGenAlbum-Project Text Extension ID-576',
+ 'zGenAlbum-User Query Data-577',
+ 'SWYConverszGenAlbum-User Query Data-578',
+ 'zGenAlbum-Custom Query Parameters-579',
+ 'SWYConverszGenAlbum-Custom Query Parameters-580',
+ 'zGenAlbum-Project Data-581',
+ 'SWYConverszGenAlbum-Project Data-582',
+ 'zGenAlbum-Search Index Rebuild State-583',
+ 'SWYConverszGenAlbum-Search Index Rebuild State-584',
+ 'zGenAlbum-Duplicate Type-585',
+ 'SWYConverszGenAlbum-Duplicate Type-586',
+ 'zGenAlbum-Privacy State-587',
+ 'SWYConverszGenAlbum-Privacy State-588',
+ 'zCldShareAlbumInvRec-zUUID-4TableStart-589',
+ 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-590',
+ 'zCldShareAlbumInvRec-Invitation State Local-591',
+ 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-592',
+ ('zCldShareAlbumInvRec-Subscription Date-593', 'datetime'),
+ 'zCldShareAlbumInvRec-Invitee First Name-594',
+ 'zCldShareAlbumInvRec-Invitee Last Name-595',
+ 'zCldShareAlbumInvRec-Invitee Full Name-596',
+ 'zCldShareAlbumInvRec-Invitee Hashed Person ID-597',
+ 'zCldShareAlbumInvRec-Invitee Email Key-598',
+ 'zGenAlbum-Key Asset Face ID-599',
+ 'zFaceCrop-Face Area Points-600',
+ 'zAddAssetAttr.Has_People_Scene Mid_Or_Greater_Confidence-601',
+ 'zAsset-Face Adjustment Version-602',
+ 'zAddAssetAttr-Face Regions HEX-603',
+ 'zAddAssetAttr-Face Analysis Version-604',
+ 'zDetFace-Asset Visible-605',
+ 'zDetFacePrint-Data HEX-606',
+ 'zPerson-Contact Matching Dictionary HEX-607',
+ 'zPerson-Face Count-608',
+ 'zDetFace-Face Crop-609',
+ 'zDetFace-Face Algorithm Version-610',
+ 'zDetFace-Adjustment Version-611',
+ 'zDetFace-UUID-4TableStart-612',
+ 'zPerson-Person UUID-4TableStart-613',
+ 'zPerson-Is_Me_Confidence-614',
+ 'zPerson - MD ID-615',
+ 'zPerson - Asset Sort Order-616',
+ 'zDetFace-Confirmed Face Crop Generation State-617',
+ 'zDetFace-Manual-618',
+ 'zDetFace-Detection Type-619',
+ 'zPerson-Detection Type-620',
+ 'zDetFace-VIP Model Type-621',
+ 'zDetFace-Name Source-622',
+ 'zDetFace-Cloud Name Source-623',
+ 'zPerson-Merge Candidate Confidence-624',
+ 'zPerson-Person URI-625',
+ 'zPerson-Display Name-626',
+ 'zPerson-Full Name-627',
+ 'zPerson-Cloud Verified Type-628',
+ 'zFaceCrop-State-629',
+ 'zFaceCrop-Type-630',
+ 'zFaceCrop-Resource Data-HEX-PHOTO used for FaceCrop-631',
+ 'zFaceCrop-UUID-4TableStart-632',
+ 'zPerson-Type-633',
+ 'zPerson-Verified Type-634',
+ 'zPerson-Gender Type-635',
+ 'zDetFace-Gender Type-636',
+ 'zDetFace-Center X-637',
+ 'zDetFace-Center Y-638',
+ 'zPerson-Age Type Estimate-639',
+ 'zDetFace-Age Type Estimate-640',
+ 'zDetFace-Ethnicity Type-641',
+ 'zDetFace-Skin Tone Type-642',
+ 'zDetFace-Hair Type-643',
+ 'zDetFace-Hair Color Type-644',
+ 'zDetFace-Head Gear Type-645',
+ 'zDetFace-Facial Hair Type-646',
+ 'zDetFace-Has Face Mask-647',
+ 'zDetFace-Pose Type-648',
+ 'zDetFace-Face Expression Type-649',
+ 'zDetFace-Has Smile-650',
+ 'zDetFace-Smile Type-651',
+ 'zDetFace-Lip Makeup Type-652',
+ 'zDetFace-Eyes State-653',
+ 'zDetFace-Is Left Eye Closed-654',
+ 'zDetFace-Is Right Eye Closed-655',
+ 'zDetFace-Gaze Center X-656',
+ 'zDetFace-Gaze Center Y-657',
+ 'zDetFace-Face Gaze Type-658',
+ 'zDetFace-Eye Glasses Type-659',
+ 'zDetFace-Eye Makeup Type-660',
+ 'zDetFace-Cluster Squence Number Key-661',
+ 'zDetFace-Grouping ID-662',
+ 'zDetFace-Master ID-663',
+ 'zDetFace-Quality-664',
+ 'zDetFace-Quality Measure-665',
+ 'zDetFace-Source Height-666',
+ 'zDetFace-Source Width-667',
+ 'zDetFace-Hidden-Asset Hidden-668',
+ 'zDetFace-In Trash-Recently Deleted-669',
+ 'zDetFace-Cloud Local State-670',
+ 'zDetFace-Training Type-671',
+ 'zDetFace.Pose Yaw-672',
+ 'zDetFace-Body Center X-673',
+ 'zDetFace-Body Center Y-674',
+ 'zDetFace-Body Height-675',
+ 'zDetFace-Body Width-676',
+ 'zDetFace-Roll-677',
+ 'zDetFace-Size-678',
+ 'zDetFace-Cluster Squence Number-679',
+ 'zDetFace-Blur Score-680',
+ 'zDetFacePrint-Face Print Version-681',
+ 'zMedAnlyAstAttr-Face Count-682',
+ 'zDetFaceGroup-UUID-4TableStart-683',
+ 'zDetFaceGroup-Person Builder State-684',
+ 'zDetFaceGroup-UnNamed Face Count-685',
+ 'zPerson-In Person Naming Model-686',
+ 'zPerson-Key Face Pick Source Key-687',
+ 'zPerson-Manual Order Key-688',
+ 'zPerson-Question Type-689',
+ 'zPerson-Suggested For Client Type-690',
+ 'zPerson-Merge Target Person-691',
+ 'zPerson-Cloud Local State-692',
+ 'zFaceCrop-Cloud Local State-693',
+ 'zFaceCrop-Cloud Type-694',
+ 'zPerson-Cloud Delete State-695',
+ 'zFaceCrop-Cloud Delete State-696',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-697',
+ 'zAsset-Highlight Visibility Score-698',
+ 'zMemory-UUID-4TableStart-699',
+ 'zMemory-AssetListPredicte-700',
+ 'zMemory-Score-701',
+ 'zMemory-SubTitle-702',
+ 'zMemory-Title-703',
+ 'zMemory-Category-704',
+ 'zMemory-SubCategory-705',
+ ('zMemory-Creation Date-706', 'datetime'),
+ ('zMemory-Last Enrichment Date-707', 'datetime'),
+ 'zMemory-User Action Options-708',
+ 'zMemory-Favorite Memory-709',
+ 'zMemory-View Count-710',
+ 'zMemory-Play Count-711',
+ 'zMemory-Rejected-712',
+ 'zMemory-Share Count-713',
+ 'zMemory-Sharing Composition-714',
+ 'zMemory-PhotosGraphData-HEX NSKeyed Plist-715',
+ 'zMemory-MovieAssetState-HEX NSKeyed Plist-716',
+ 'zMemory-MovieData-HEX NSKeyed Plist-717',
+ ('zMemory-Last Movie Play Date-718', 'datetime'),
+ ('zMemory-Last Viewed Date-719', 'datetime'),
+ 'zMemory-Pending Play Count Memory-720',
+ 'zMemory-Pending Share Count Memory-721',
+ 'zMemory-Pending View Count Memory-722',
+ 'zMemory-Pending State-723',
+ 'zMemory-Featured State-724',
+ 'zMemory-Photos Graph Version-725',
+ 'zMemory-Graph Memory Identifier-726',
+ 'zMemory-Notification State-727',
+ 'zMemory-Cloud Local State-728',
+ 'zMemory-Cloud Delete State-729',
+ 'zMemory-Story Color Grade Kind-730',
+ 'zMemory-Story Serialized Title Category-731',
+ 'zMemory-Syndicated Content State-732',
+ 'zMemory-Search Index Rebuild State-733',
+ 'zMemory-Black Listed Feature-734',
+ 'zMoment-UUID-4TableStart-735',
+ 'zMoment-Aggregation Score-736',
+ ('zMoment-Start Date-737', 'datetime'),
+ ('zMoment-Representative Date-738', 'datetime'),
+ 'zMoment-Timezone Offset-739',
+ ('zMoment-Modification Date-740', 'datetime'),
+ ('zMoment-End Date-741', 'datetime'),
+ 'zMoment-SubTitle-742',
+ 'zMoment-Localized Location Names-743',
+ 'zMoment-Title-744',
+ 'zMoment-Originator State-745',
+ 'zMoment-Sharing Composition-746',
+ 'zMoment-Cached Count Shared-747',
+ 'zMoment-Processed Location-748',
+ 'zMoment-Approx Latitude-749',
+ 'zMoment-Approx Longitude-750',
+ 'zMoment-GPS Horizontal Accuracy-751',
+ 'zMoment-Cache Count-752',
+ 'zMoment-Cached Photos Count-753',
+ 'zMoment-Cached Videos Count-754',
+ 'zMoment-Trashed State-755',
+ 'SBKAzSugg-UUID-4TableStart-756',
+ 'SBKAzSugg-Suggestion Context-757',
+ 'SBKAzSugg-Sharing Composition-758',
+ ('SBKAzSugg-Start Date-759', 'datetime'),
+ 'SBKAzSugg-State-760',
+ 'SBKAzSugg-Featured State-761',
+ 'SBKAzSugg- Available Features-762',
+ 'SBKAzSugg-Notification State-763',
+ ('SBKAzSugg-Creation Date-764', 'datetime'),
+ ('SBKAzSugg-End Date-765', 'datetime'),
+ ('SBKAzSugg-Activation Date-766', 'datetime'),
+ ('SBKAzSugg-Expunge Date-767', 'datetime'),
+ ('SBKAzSugg-Relevant Until Date-768', 'datetime'),
+ 'SBKAzSugg-Title-769',
+ 'SBKAzSugg-Sub Title-770',
+ 'SBKAzSugg-Cached Count-771',
+ 'SBKAzSugg-Cahed Photos Count-772',
+ 'SBKAzSugg-Cached Videos Count-773',
+ 'SBKAzSugg-Type-774',
+ 'SBKAzSugg-Sub Type-775',
+ 'SBKAzSugg-Action Data-776',
+ 'SBKAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist-777',
+ 'SBKAzSugg-Version-778',
+ 'SBKAzSugg-Cloud Local State-779',
+ 'SBKAzSugg-Cloud Delete State-780',
+ 'SBRAzSugg-UUID-4TableStart-781',
+ 'SBRAzSugg-Suggestion Context-782',
+ 'SBRAzSugg-Sharing Composition-783',
+ ('SBRAzSugg-Start Date-784', 'datetime'),
+ 'SBRAzSugg-State-785',
+ 'SBRAzSugg-Featured State-786',
+ 'SBRAzSugg- Available Features-787',
+ 'SBRAzSugg-Notification State-788',
+ ('SBRAzSugg-Creation Date-789', 'datetime'),
+ ('SBRAzSugg-End Date-790', 'datetime'),
+ ('SBRAzSugg-Activation Date-791', 'datetime'),
+ ('SBRAzSugg-Expunge Date-792', 'datetime'),
+ ('SBRAzSugg-Relevant Until Date-793', 'datetime'),
+ 'SBRAzSugg-Title-794',
+ 'SBRAzSugg-Sub Title-795',
+ 'SBRAzSugg-Cached Count-796',
+ 'SBRAzSugg-Cahed Photos Count-797',
+ 'SBRAzSugg-Cached Videos Count-798',
+ 'SBRAzSugg-Type-799',
+ 'SBRAzSugg-Sub Type-800',
+ 'SBRAzSugg-Action Data-801',
+ 'SBRAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist-802',
+ 'SBRAzSugg-Version-803',
+ 'SBRAzSugg-Cloud Local State-804',
+ 'SBRAzSugg-Cloud Delete State-805',
+ 'zMedAnlyAstAttr-Media Analysis Version-806',
+ 'zMedAnlyAstAttr-Audio Classification-807',
+ 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-808',
+ 'zMedAnlyAstAttr-Best Video Range Start Time Scale-809',
+ 'zMedAnlyAstAttr-Best Video Range Duration Value-810',
+ 'zMedAnlyAstAttr-Best Video Range Start Value-811',
+ 'zMedAnlyAstAttr-Packed Best Playback Rect-812',
+ 'zMedAnlyAstAttr-Activity Score-813',
+ 'zMedAnlyAstAttr-Video Score-814',
+ 'zMedAnlyAstAttr-Audio Score-815',
+ 'zMedAnlyAstAttr-Wallpaper Score-816',
+ 'zMedAnlyAstAttr-AutoPlay Suggestion Score-817',
+ 'zMedAnlyAstAttr-Blurriness Score-818',
+ 'zMedAnlyAstAttr-Exposure Score-819',
+ 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-820',
+ 'zMedAnlyAstAttr-Probable Rotation Direction-821',
+ 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-822',
+ 'zMedAnlyAstAttr-Color Normalization Data-823',
+ 'zMedAnlyAstAttr-Media_Analysis Image_Version-824',
+ 'zMedAnlyAstAttr-Image_Caption_Version-825',
+ 'zMedAnlyAstAttr-Video_Caption_Version-826',
+ 'zMedAnlyAstAttr-VA_Location_Analysis_Version-827',
+ 'zAssetAnalyState-Asset UUID-4TableStart-828',
+ 'zAssetAnalyState-Analysis State-829',
+ 'zAssetAnalyState-Worker Flags-830',
+ 'zAssetAnalyState-Worker Type-831',
+ ('zAssetAnalyState-Ignore Until Date-832', 'datetime'),
+ ('zAssetAnalyState-Last Ignored Date-833', 'datetime'),
+ ('zAssetAnalyState-Sort Token-834', 'datetime'),
+ 'zMedAnlyAstAttr-Character Recognition Attr-835',
+ 'zCharRecogAttr-Algorithm Version-836',
+ 'zCharRecogAttr-Adjustment Version-837',
+ 'zCharRecogAttr-Character Recognition Data-HEX-838',
+ 'zCharRecogAttr-Machine Readable Code Data-HEX-839',
+ 'zMedAnlyAstAttr-Visual Search Attributes-840',
+ 'zVisualSearchAttr-Algorithm Version-841',
+ 'zVisualSearchAttr-Adjustment Version-842',
+ 'zVisualSearchAttr-Visual Search Data-HEX-843',
+ 'zVisualSearchAttr - Sticker Confidence Algorithm Version-844',
+ 'zVisualSearchAttr - Sticker Confidence Score-845',
+ 'zAsset-Sticker Confidence Score-846',
+ 'zAsset-Overall Aesthetic Score-847',
+ 'zCompAssetAttr-Behavioral Score-848',
+ 'zCompAssetAttr-Failure Score zCompAssetAttr-849',
+ 'zCompAssetAttr-Harmonious Color Score-850',
+ 'zCompAssetAttr-Impressiveness Score-851',
+ 'zCompAssetAttr-Interaction Score-852',
+ 'zCompAssetAttr-Interesting Subject Score-853',
+ 'zCompAssetAttr-Intrusive Object Presence Score-854',
+ 'zCompAssetAttr-Lively Color Score-855',
+ 'zCompAssetAttr-Low Light-856',
+ 'zCompAssetAttr-Noise Score-857',
+ 'zCompAssetAttr-Pleasant Camera Tilt Score-858',
+ 'zCompAssetAttr-Pleasant Composition Score-859',
+ 'zCompAssetAttr-Pleasant Lighting Score-860',
+ 'zCompAssetAttr-Pleasant Pattern Score-861',
+ 'zCompAssetAttr-Pleasant Perspective Score-862',
+ 'zCompAssetAttr-Pleasant Post Processing Score-863',
+ 'zCompAssetAttr-Pleasant Reflection Score-864',
+ 'zCompAssetAttrPleasant Symmetry Score-865',
+ 'zCompAssetAttr-Sharply Focused Subject Score-866',
+ 'zCompAssetAttr-Tastfully Blurred Score-867',
+ 'zCompAssetAttr-Well Chosen Subject Score-868',
+ 'zCompAssetAttr-Well Framed Subject Score-869',
+ 'zCompAssetAttr-Well Timeed Shot Score-870',
+ 'zCldRes-Asset UUID-4TableStart-871',
+ 'zCldRes-Cloud Local State-872',
+ 'zCldRes-File Size-873',
+ 'zCldRes-Height-874',
+ 'zCldRes-Is Available-875',
+ 'zCldRes-Is Locally Available-876',
+ 'zCldRes-Prefetch Count-877',
+ 'zCldRes-Source Type-878',
+ 'zCldRes-Type-879',
+ 'zCldRes-Width-880',
+ ('zCldRes-Date Created-881', 'datetime'),
+ ('zCldRes-Last OnDemand Download Date-882', 'datetime'),
+ ('zCldRes-Last Prefetch Date-883', 'datetime'),
+ 'zCldRes-Prunedat-884',
+ 'zCldRes-File Path-885',
+ 'zCldRes-Fingerprint-886',
+ 'zCldRes-Item ID-887',
+ 'zCldRes-UniID-888',
+ 'zUserFeedback-UUID-4TableStart-889',
+ 'zUserFeedback-Feature-890',
+ 'zUserFeedback-Type-891',
+ ('zUserFeedback-Last Modified Date-892', 'datetime'),
+ 'zUserFeedback-Context-893',
+ 'zUserFeedback-Cloud Local State-894',
+ 'zUserFeedback-Cloud Delete State-895',
+ 'zUserFeedback - Creation Type-896',
+ 'zAddAssetAttr-zPK-897',
+ 'zAddAssetAttr-zENT-898',
+ 'ZAddAssetAttr-zOPT-899',
+ 'zAddAssetAttr-zAsset= zAsset_zPK-900',
+ 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-901',
+ 'zAddAssetAttr-Original Stable Hash-4Queryend-902',
+ 'zAddAssetAttr-Public Global UUID-903',
+ 'zAddAssetAttr-Deferred Photo Identifier-904',
+ 'zAddAssetAttr-Original Assets UUID-905',
+ 'zAddAssetAttr-Import Session ID-906',
+ 'zAddAssetAttr-Originating Asset Identifier-4endquery-907',
+ 'zAddAssetAttr.Adjusted Stable Hash-4endquery-908',
+ 'zAlbumList-zPK= Album List Key-909',
+ 'zAlbumList-zENT-910',
+ 'zAlbumList-zOPT-911',
+ 'zAlbumList-ID Key-912',
+ 'zAlbumList-UUID-913',
+ 'zAsset-zPK-914',
+ 'zAsset-zENT-915',
+ 'zAsset-zOPT-916',
+ 'zAsset-Master= zCldMast-zPK-917',
+ 'zAsset-Extended Attributes= zExtAttr-zPK-918',
+ 'zAsset-Import Session Key-919',
+ 'zAsset-Trashed by Participant= zSharePartic_zPK-920',
+ 'zAsset-Photo Analysis Attributes Key-921',
+ 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-922',
+ 'zAsset-FOK-Cloud Feed Asset Entry Key-923',
+ 'zAsset-Moment Share Key= zShare-zPK-924',
+ 'zAsset-zMoment Key= zMoment-zPK-925',
+ 'zAsset-Computed Attributes Asset Key-926',
+ 'zAsset-Highlight Being Assets-HBA Key-927',
+ 'zAsset-Highlight Being Extended Assets-HBEA Key-928',
+ 'zAsset-Highlight Being Key Asset Private-HBKAP Key-929',
+ 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-930',
+ 'zAsset-Highlight Being Summary Assets-HBSA Key-931',
+ 'zAsset-Day Group Highlight Being Assets-DGHBA Key-932',
+ 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-933',
+ 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-934',
+ 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-935',
+ 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-936',
+ 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-937',
+ 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-938',
+ 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-939',
+ 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-940',
+ 'zAsset-Promotion Score-941',
+ 'zAsset-Iconic Score-942',
+ 'zAsset-Media Analysis Attributes Key-943',
+ 'zAsset-Media Group UUID-944',
+ 'zAsset-UUID = store.cloudphotodb-945',
+ 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-946',
+ 'zAsset.Cloud Collection GUID-947',
+ 'zAsset-Avalanche UUID-948',
+ 'zAssetAnalyState-zPK-949',
+ 'zAssetAnalyState-zEnt-950',
+ 'zAssetAnalyState-zOpt-951',
+ 'zAssetAnalyState-Asset= zAsset-zPK-952',
+ 'zAssetAnalyState-Asset UUID-953',
+ 'zAsstContrib-zPK-954',
+ 'zAsstContrib-zEnt-955',
+ 'zAsstContrib-zOpt-956',
+ 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-957',
+ 'zAsstContrib-Participant= zSharePartic-zPK-958',
+ 'zAssetDes-zPK-959',
+ 'zAssetDes-zENT-960',
+ 'zAssetDes-zOPT-961',
+ 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-962',
+ 'zCharRecogAttr-zPK-963',
+ 'zCharRecogAttr-zENT-964',
+ 'zCharRecogAttr-zOPT-965',
+ 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-966',
+ 'zCldFeedEnt-zPK= zCldShared keys-967',
+ 'zCldFeedEnt-zENT-968',
+ 'zCldFeedEnt-zOPT-969',
+ 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-970',
+ 'zCldFeedEnt-Entry Invitation Record GUID-971',
+ 'zCldFeedEnt-Entry Cloud Asset GUID-972',
+ 'zCldMast-zPK= zAsset-Master-973',
+ 'zCldMast-zENT-974',
+ 'zCldMast-zOPT-975',
+ 'zCldMast-Moment Share Key= zShare-zPK-976',
+ 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-977',
+ 'zCldMast-Originating Asset ID-978',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-979',
+ 'CMzCldMastMedData-zENT-980',
+ 'CMzCldMastMedData-zOPT-981',
+ 'CMzCldMastMedData-CldMast= zCldMast-zPK-982',
+ 'AAAzCldMastMedData-zENT-983',
+ 'AAAzCldMastMedData-zOPT-984',
+ 'AAAzCldMastMedData-CldMast key-985',
+ 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-986',
+ 'zCldRes-zPK-987',
+ 'zCldRes-zENT-988',
+ 'zCldRes-zOPT-989',
+ 'zCldRes-Asset= zAsset-zPK-990',
+ 'zCldRes-Cloud Master= zCldMast-zPK-991',
+ 'zCldRes-Asset UUID-992',
+ 'zCldShareAlbumInvRec-zPK-993',
+ 'zCldShareAlbumInvRec-zEnt-994',
+ 'zCldShareAlbumInvRec-zOpt-995',
+ 'zCldShareAlbumInvRec-Album Key-996',
+ 'zCldShareAlbumInvRec-FOK Album Key-997',
+ 'zCldShareAlbumInvRec-Album GUID-998',
+ 'zCldShareAlbumInvRec-zUUID-999',
+ 'zCldShareAlbumInvRec-Cloud GUID-1000',
+ 'zCldSharedComment-zPK-1001',
+ 'zCldSharedComment-zENT-1002',
+ 'zCldSharedComment-zOPT-1003',
+ 'zCldSharedComment-Commented Asset Key= zAsset-zPK-1004',
+ 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-1005',
+ 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-1006',
+ 'zCldSharedComment-Liked Asset Key= zAsset-zPK-1007',
+ 'zCldSharedComment-CldFeedLikeCommentEntry Key-1008',
+ 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-1009',
+ 'zCldSharedComment-Cloud GUID-1010',
+ 'zCompAssetAttr-zPK-1011',
+ 'zCompAssetAttr-zEnt-1012',
+ 'zCompAssetAttr-zOpt-1013',
+ 'zCompAssetAttr-Asset Key-1014',
+ 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-1015',
+ 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-1016',
+ 'zCompSyncAttr-zAsset= zAsset-zPK-1017',
+ 'zCompSyncAttr-zENT-1018',
+ 'zCompSyncAttr-zOPT-1019',
+ 'zDetFace-zPK-1020',
+ 'zDetFace-zEnt-1021',
+ 'zDetFace.zOpt-1022',
+ 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face-1023',
+ 'zDetFace-PersonForFace= zPerson-zPK-1024',
+ 'zDetFace-Person Being Key Face-1025',
+ 'zDetFace-Face Print-1026',
+ 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-1027',
+ 'zDetFace-FaceGroup= zDetFaceGroup-zPK-1028',
+ 'zDetFace-UUID-1029',
+ 'zDetFaceGroup-zPK-1030',
+ 'zDetFaceGroup-zENT-1031',
+ 'zDetFaceGroup-zOPT-1032',
+ 'zDetFaceGroup-AssocPerson= zPerson-zPK-1033',
+ 'zDetFaceGroup-KeyFace= zDetFace-zPK-1034',
+ 'zDetFaceGroup-UUID-1035',
+ 'zDetFacePrint-zPK-1036',
+ 'zDetFacePrint-zEnt-1037',
+ 'zDetFacePrint-zOpt-1038',
+ 'zDetFacePrint-Face Key-1039',
+ 'zExtAttr-zPK= zAsset-zExtendedAttributes-1040',
+ 'zExtAttr-zENT-1041',
+ 'zExtAttr-zOPT-1042',
+ 'zExtAttr-Asset Key-1043',
+ 'zFaceCrop-zPK-1044',
+ 'zFaceCrop-zEnt-1045',
+ 'zFaceCrop-zOpt-1046',
+ 'zFaceCrop-Asset Key-1047',
+ 'zFaceCrop-Invalid Merge Canidate Person UUID-1048',
+ 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-1049',
+ 'zFaceCrop-Face Key-1050',
+ 'zFaceCrop-UUID-1051',
+ 'zGenAlbum-zPK=26AlbumLists= 26Albums-1052',
+ 'zGenAlbum-zENT-1053',
+ 'zGenAlbum-zOpt-1054',
+ 'zGenAlbum-Custom Key Asset-1055',
+ 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-1056',
+ 'zGenAlbum-FOK Parent Folder-1057',
+ 'zGenAlbum-zSyndicate-1058',
+ 'zGenAlbum-UUID-1059',
+ 'SWYConverszGenAlbum-UUID-1060',
+ 'zGenAlbum-Cloud_GUID = store.cloudphotodb-1061',
+ 'SWYConverszGenAlbum-Cloud GUID-1062',
+ 'zGenAlbum-Project Render UUID-1063',
+ 'SWYConverszGenAlbum-Project Render UUID-1064',
+ 'zIntResou-zPK-1065',
+ 'zIntResou-zENT-1066',
+ 'zIntResou-zOPT-1067',
+ 'zIntResou-Asset= zAsset_zPK-1068',
+ 'zIntResou-Fingerprint-4Queryend-1069',
+ 'zIntResou-Stable Hash-4Queryend-1070',
+ 'zIntResou-Cloud Delete Asset UUID With Resource Type-1071',
+ 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1072',
+ 'zMedAnlyAstAttr-zEnt-1073',
+ 'zMedAnlyAstAttr-zOpt-1074',
+ 'zMedAnlyAstAttr-Asset= zAsset-zPK-1075',
+ 'zMemory-zPK-1076',
+ 'zMemory-zENT-1077',
+ 'zMemory-zOPT-1078',
+ 'zMemory-Key Asset= zAsset-zPK-1079',
+ 'zMemory-UUID-1080',
+ 'zMoment-zPK-1081',
+ 'zMoment-zENT-1082',
+ 'zMoment-zOPT-1083',
+ 'zMoment-Highlight Key-1084',
+ 'zMoment-UUID-1085',
+ 'zPerson-zPK=zDetFace-Person-1086',
+ 'zPerson-zEnt-1087',
+ 'zPerson-zOpt-1088',
+ 'zPerson-Share Participant= zSharePartic-zPK-1089',
+ 'zPerson-KeyFace=zDetFace-zPK-1090',
+ 'zPerson-Assoc Face Group Key-1091',
+ 'zPerson-Person UUID-1092',
+ 'zPerson-Is_Me_Confidence-1093',
+ 'zPhotoAnalysisAssetAttr-zPK-1094',
+ 'zPhotoAnalysisAssetAttr-zEnt-1095',
+ 'zPhotoAnalysisAssetAttr-zOpt-1096',
+ 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1097',
+ 'zSceneP-zPK-1098',
+ 'zSceneP-zENT-1099',
+ 'zSceneP-zOPT-1100',
+ 'zShare-zPK-1101',
+ 'zShare-zENT-1102',
+ 'zShare-zOPT-1103',
+ 'zShare-UUID-1104',
+ 'SPLzShare-UUID-1105',
+ 'zShare-Scope ID = store.cloudphotodb-1106',
+ 'zSharePartic-zPK-1107',
+ 'zSharePartic-zENT-1108',
+ 'zSharePartic-zOPT-1109',
+ 'zSharePartic-Share Key= zShare-zPK-1110',
+ 'zSharePartic-Person= zPerson-zPK-1111',
+ 'zSharePartic-UUID-1112',
+ 'SBKAzSugg-zPK-1113',
+ 'SBKAzSugg-zENT-1114',
+ 'SBKAzSugg-zOPT-1115',
+ 'SBKAzSugg-UUID-1116',
+ 'SBRAzSugg-zPK-1117',
+ 'SBRAzSugg-zENT-1118',
+ 'SBRAzSugg-zOPT-1119',
+ 'SBRAzSugg-UUID-1120',
+ 'z3SuggBRA-3RepAssets-1121',
+ 'z3SuggBRA-65SuggBeingRepAssets-1122',
+ 'z3SuggBKA-65SuggBeingKeyAssets= zSugg-zPK-1123',
+ 'z3SuggBKA-3KeyAssets1= zAsset-zPK-1124',
+ 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1125',
+ 'zUnmAdj-zOPT-1126',
+ 'zUnmAdj-zENT-1127',
+ 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1128',
+ 'zUnmAdj-UUID-1129',
+ 'zUnmAdj-Other Adjustments Fingerprint-1130',
+ 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1131',
+ 'zUserFeedback-zPK-1132',
+ 'zUserFeedback-zENT-1133',
+ 'zUserFeedback-zOPT-1134',
+ 'zUserFeedback-Person= zPerson-zPK-1135',
+ 'zUserFeedback-Memory= zMemory-zPK-1136',
+ 'zUserFeedback-UUID-1137',
+ 'zVisualSearchAttr-zPK-1138',
+ 'zVisualSearchAttr-zENT-1139',
+ 'zVisualSearchAttr-zOPT-1140',
+ 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1141',
+ 'z29AlbumList-29Albums= zGenAlbum-zPK-1142',
+ 'z29AlbumList-Album List Key-1143',
+ 'z29AlbumList-FOK29Albums Key-1144',
+ 'z30Assets-30Albums= zGenAlbum-zPK-1145',
+ 'z30Assets-3Asset Key= zAsset-zPK in the Album-1146',
+ 'z30Assets-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1147',
+ 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1148',
+ 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1149',
+ 'z3MemoryBCAs-51MemoriesBeingCuratedAssets= zMemory-zPK-1150',
+ 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1151',
+ 'z3MemoryBECAs-51MemoriesBeingExtCuratedAssets= zMemory-zPK-1152',
+ 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1153',
+ 'z3MemoryBRAs-51RepresentativeAssets= zMemory-zPK-1154',
+ 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1155',
+ 'z3MemoryBUCAs-51MemoriesBeingUserCuratedAssets= zMemory-zPK-1156',
+ 'z3MemoryBCAs-51Memories Being Custom User Assets-1157',
+ 'z3MemoryBCAs-3Custom User Assets-1158',
+ 'z3MemoryBCAs-FOK-3Custom User Assets-1159')
+ data_list = get_sqlite_db_records(source_path, query)
- tlactivity = 'Ph98.2-iOS18_Ref_for_Asset_Analysis-SyndPL'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for iOS 18 Syndication.photoslibrary-database-Photos.sqlite')
-
- db.close()
- return
-
-
-__artifacts_v2__ = {
- 'Ph98-1-iOS18_Ref_for_Asset_Analysis-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite Ph98.1 iOS18 Reference for Asset Analysis',
- 'description': 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest'
- ' set of decoded data based on testing and research conducted by Scott Koenig'
- ' https://theforensicscooter.com/. I recommend opening the TSV generated reports'
- ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer'
- ' to view, search and filter the results.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '1.0',
- 'date': '2024-06-14',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph98ios18refforassetanalysisphdapsql'
- },
- 'Ph98-2-iOS18_Ref_for_Asset_Analysis-SyndPL': {
- 'name': 'SyndPL Photos.sqlite Ph98.2 iOS18 Reference for Asset Analysis',
- 'description': 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.'
- ' This parser includes the largest set of decoded data based on testing and research'
- ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the'
- ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md'
- ' TimelineExplorer to view, search and filter the results.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '1.0',
- 'date': '2024-06-14',
- 'requirements': 'Acquisition that contains Syndication.photoslibrary-database-Photos.sqlite',
- 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis',
- 'notes': '',
- 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',
- 'function': 'get_ph98ios18refforassetanalysissyndpl'
- }
-}
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/Ph9BurstAvalanche.py b/scripts/artifacts/Ph9BurstAvalanche.py
index 750b8268..045327ee 100644
--- a/scripts/artifacts/Ph9BurstAvalanche.py
+++ b/scripts/artifacts/Ph9BurstAvalanche.py
@@ -1,39 +1,48 @@
-# Photos.sqlite
-# Author: Scott Koenig, assisted by past contributors
-# Version: 2.0
-#
-# Description:
-# Parses basic asset record data from Photos.sqlite for burst avalanche assets and supports iOS 11-18.
-# The results for this script will contain one record per ZASSET table Z_PK value.
-# This parser is based on research and SQLite queries written by Scott Koenig
-# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347
-#
+__artifacts_v2__ = {
+ 'Ph9BurstAvalanchePhDaPsql': {
+ 'name': 'Ph9-Burst Avalanche-PhDaPsql',
+ 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite for burst avalanche assets'
+ ' and supports iOS 11-17. The results for this script will contain'
+ ' one row per ZASSET table Z_PK value.',
+ 'author': 'Scott Koenig',
+ 'version': '5.0',
+ 'date': '2025-01-05',
+ 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
+ 'category': 'Photos.sqlite-C-Other_Artifacts',
+ 'notes': '',
+ 'paths': ('*/PhotoData/Photos.sqlite*',),
+ "output_types": ["standard", "tsv", "none"]
+ }
+}
import os
import scripts.artifacts.artGlobals
from packaging import version
-from scripts.artifact_report import ArtifactHtmlReport
-from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly
-
+from scripts.builds_ids import OS_build
+from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc
-def get_ph9burstavalanchephdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
- for file_found in files_found:
- file_found = str(file_found)
+@artifact_processor
+def Ph9BurstAvalanchePhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset):
+ for source_path in files_found:
+ source_path = str(source_path)
- if file_found.endswith('.sqlite'):
+ if source_path.endswith('.sqlite'):
break
if report_folder.endswith('/') or report_folder.endswith('\\'):
report_folder = report_folder[:-1]
iosversion = scripts.artifacts.artGlobals.versionf
if version.parse(iosversion) <= version.parse("10.3.4"):
- logfunc("Unsupported version for PhotoData-Photos.sqlite burst avalanche assets from iOS " + iosversion)
+ logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion)
+ return (), [], source_path
if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("14")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
CASE zAsset.ZAVALANCHEPICKTYPE
@@ -76,59 +85,38 @@ def get_ph9burstavalanchephdapsql(files_found, report_folder, seeker, wrap_text,
WHERE (zAsset.ZAVALANCHEPICKTYPE > 0) OR
(zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE > 0)
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for burst avalanche assets' \
- ' and supports iOS 11-13. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph9-Burst Avalanche-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph9-Burst Avalanche-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created',
- 'zAsset-Avalanche_Pick_Type-BurstAsset',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset',
- 'zAsset-Visibility State',
- 'zAsset-Directory-Path',
- 'zAsset-Filename',
- 'zAddAssetAttr- Original Filename',
- 'zCldMast- Original Filename',
- 'zCldMast-Import Session ID- AirDrop-StillTesting',
- 'zAsset-zPK',
- 'zAddAssetAttr-zPK',
- 'zAsset-UUID = store.cloudphotodb',
- 'zAddAssetAttr-Master Fingerprint')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph9-Burst Avalanche-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph9-Burst Avalanche-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc(f'No data available for PhotoData-Photos.sqlite Burst Avalanche Assets')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-1',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-2',
+ 'zAsset-Visibility State-3',
+ 'zAsset-Directory-Path-4',
+ 'zAsset-Filename-5',
+ 'zAddAssetAttr- Original Filename-6',
+ 'zCldMast- Original Filename-7',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-8',
+ 'zAsset-zPK-9',
+ 'zAddAssetAttr-zPK-10',
+ 'zAsset-UUID = store.cloudphotodb-11',
+ 'zAddAssetAttr-Master Fingerprint-12')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("18")):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
CASE zAsset.ZAVALANCHEPICKTYPE
@@ -171,66 +159,45 @@ def get_ph9burstavalanchephdapsql(files_found, report_folder, seeker, wrap_text,
WHERE (zAsset.ZAVALANCHEPICKTYPE > 0) OR
(zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE > 0)
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for burst avalanche assets' \
- ' and supports iOS 14-17. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph9-Burst Avalanche-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph9-Burst Avalanche-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-1',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-2',
- 'zAsset-Visibility State-3',
- 'zAsset-Directory-Path-4',
- 'zAsset-Filename-5',
- 'zAddAssetAttr- Original Filename-6',
- 'zCldMast- Original Filename-7',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-8',
- 'zAsset-zPK-9',
- 'zAddAssetAttr-zPK-10',
- 'zAsset-UUID = store.cloudphotodb-11',
- 'zAddAssetAttr-Master Fingerprint-12')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph9-Burst Avalanche-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph9-Burst Avalanche-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc(f'No data available for PhotoData-Photos.sqlite Burst Avalanche Assets')
-
- db.close()
- return
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-1',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-2',
+ 'zAsset-Visibility State-3',
+ 'zAsset-Directory-Path-4',
+ 'zAsset-Filename-5',
+ 'zAddAssetAttr- Original Filename-6',
+ 'zCldMast- Original Filename-7',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-8',
+ 'zAsset-zPK-9',
+ 'zAddAssetAttr-zPK-10',
+ 'zAsset-UUID = store.cloudphotodb-11',
+ 'zAddAssetAttr-Master Fingerprint-12')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
elif version.parse(iosversion) >= version.parse("18"):
- file_found = str(files_found[0])
- db = open_sqlite_db_readonly(file_found)
- cursor = db.cursor()
+ source_path = get_file_path(files_found,"Photos.sqlite")
+ if source_path is None or not os.path.exists(source_path):
+ logfunc(f"Photos.sqlite not found for iOS version {iosversion}")
+ return (), [], source_path
+ data_list = []
- cursor.execute("""
+ query = '''
SELECT
DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created',
CASE zAsset.ZAVALANCHEKIND
- WHEN 0 THEN '0-No_Avalanche iOS18_Still_Testing-0'
- WHEN 1 THEN '1-Is_Avalanche iOS18_Still_Testing-1'
+ WHEN 0 THEN '0-No_Avalanche_Still_Testing-0'
+ WHEN 1 THEN '1-Is_Avalanche_Still_Testing-1'
ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEKIND || ''
- END AS 'zAsset-Avalanche_Kind-iOS18',
+ END AS 'zAsset-Avalanche_Kind',
CASE zAsset.ZAVALANCHEPICKTYPE
WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT'
WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT'
@@ -264,77 +231,36 @@ def get_ph9burstavalanchephdapsql(files_found, report_folder, seeker, wrap_text,
zAsset.Z_PK AS 'zAsset-zPK',
zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK',
zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb',
- zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18',
- zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18'
+ zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash',
+ zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash'
FROM ZASSET zAsset
LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES
LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK
WHERE (zAsset.ZAVALANCHEPICKTYPE > 0) OR
(zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE > 0)
ORDER BY zAsset.ZDATECREATED
- """)
-
- all_rows = cursor.fetchall()
- usageentries = len(all_rows)
- data_list = []
- counter = 0
- if usageentries > 0:
- for row in all_rows:
- data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
- row[10], row[11], row[12], row[13], row[14]))
-
- counter += 1
-
- description = 'Parses basic asset record data from PhotoData-Photos.sqlite for burst avalanche assets' \
- ' and supports iOS 18. The results for this script will contain' \
- ' one record per ZASSET table Z_PK value.'
- report = ArtifactHtmlReport('Ph9-Burst Avalanche-PhDaPsql')
- report.start_artifact_report(report_folder, 'Ph9-Burst Avalanche-PhDaPsql', description)
- report.add_script()
- data_headers = ('zAsset-Date Created-0',
- 'zAsset-Avalanche_Kind-iOS18-1',
- 'zAsset-Avalanche_Pick_Type-BurstAsset-2',
- 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-3',
- 'zAsset-Visibility State-4',
- 'zAsset-Directory-Path-5',
- 'zAsset-Filename-6',
- 'zAddAssetAttr- Original Filename-7',
- 'zCldMast- Original Filename-8',
- 'zCldMast-Import Session ID- AirDrop-StillTesting-9',
- 'zAsset-zPK-10',
- 'zAddAssetAttr-zPK-11',
- 'zAsset-UUID = store.cloudphotodb-12',
- 'zAddAssetAttr-Original Stable Hash-iOS18-13',
- 'zAddAssetAttr.Adjusted Stable Hash-iOS18-14')
- report.write_artifact_data_table(data_headers, data_list, file_found)
- report.end_artifact_report()
-
- tsvname = 'Ph9-Burst Avalanche-PhDaPsql'
- tsv(report_folder, data_headers, data_list, tsvname)
-
- tlactivity = 'Ph9-Burst Avalanche-PhDaPsql'
- timeline(report_folder, tlactivity, data_list, data_headers)
-
- else:
- logfunc('No data available for PhotoData-Photos.sqlite Burst Avalanche Assets')
-
- db.close()
- return
-
-
-__artifacts_v2__ = {
- 'Ph9-Burst Avalanche-PhDaPsql': {
- 'name': 'PhDaPL Photos.sqlite Ph9 Burst Avalanche Assets',
- 'description': 'Parses basic asset record data from PhotoData-Photos.sqlite for burst avalanche assets'
- ' and supports iOS 11-17. The results for this script will contain'
- ' one record per ZASSET table Z_PK value.',
- 'author': 'Scott Koenig https://theforensicscooter.com/',
- 'version': '2.0',
- 'date': '2024-06-12',
- 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite',
- 'category': 'Photos.sqlite-C-Other_Artifacts',
- 'notes': '',
- 'paths': '*/PhotoData/Photos.sqlite*',
- 'function': 'get_ph9burstavalanchephdapsql'
- }
-}
+ '''
+
+ db_records = get_sqlite_db_records(source_path, query)
+ for row in db_records:
+ data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9],
+ row[10], row[11], row[12], row[13], row[14]))
+
+ data_headers = (('zAsset-Date Created-0', 'datetime'),
+ 'zAsset-Avalanche_Kind-1',
+ 'zAsset-Avalanche_Pick_Type-BurstAsset-2',
+ 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-3',
+ 'zAsset-Visibility State-4',
+ 'zAsset-Directory-Path-5',
+ 'zAsset-Filename-6',
+ 'zAddAssetAttr- Original Filename-7',
+ 'zCldMast- Original Filename-8',
+ 'zCldMast-Import Session ID- AirDrop-StillTesting-9',
+ 'zAsset-zPK-10',
+ 'zAddAssetAttr-zPK-11',
+ 'zAsset-UUID = store.cloudphotodb-12',
+ 'zAddAssetAttr-Original Stable Hash-13',
+ 'zAddAssetAttr.Adjusted Stable Hash-14')
+ data_list = get_sqlite_db_records(source_path, query)
+
+ return data_headers, data_list, source_path
diff --git a/scripts/artifacts/systemVersionPlist.py b/scripts/artifacts/systemVersionPlist.py
index dceade4f..962764a5 100644
--- a/scripts/artifacts/systemVersionPlist.py
+++ b/scripts/artifacts/systemVersionPlist.py
@@ -1,23 +1,22 @@
__artifacts_v2__ = {
'systemVersionPlist': {
'name': 'System Version plist',
- 'description': 'Parses basic data from device acquisition */System/Library/CoreServices/SystemVersion.plist'
- ' which contains some important data related to a device being analyzed to include'
- ' the iOS version. Previously named Ph99SystemVersionPlist.py',
+ 'description': 'Parses basic data from */System/Library/CoreServices/SystemVersion.plist'
+ ' which is a plist in GK Logical Plus extractions that will contain the iOS version.'
+ ' Previously named Ph99SystemVersionPlist.py',
'author': 'Scott Koenig',
- 'version': '1.1',
- 'date': '2024-06-17',
+ 'version': '5.0',
+ 'date': '2025-01-03',
'requirements': 'Acquisition that contains SystemVersion.plist',
'category': 'IOS Build',
'notes': '',
'paths': ('*/System/Library/CoreServices/SystemVersion.plist',),
- "output_types": ["html", "tsv", "lava"]
+ "output_types": ["standard", "tsv", "none"]
}
}
import plistlib
-import scripts.artifacts.artGlobals
-
+import scripts.artifacts.artGlobals
from scripts.ilapfuncs import artifact_processor, logfunc, device_info
@artifact_processor
@@ -40,5 +39,5 @@ def systemVersionPlist(files_found, report_folder, seeker, wrap_text, time_offse
if key == "ProductName":
device_info("Device Information", "Product Name", val, source_path)
- data_headers = ('Property','Property Value' )
+ data_headers = ('Property','Property Value')
return data_headers, data_list, source_path
diff --git a/scripts/report_icons.py b/scripts/report_icons.py
index 634d75c6..285ca850 100644
--- a/scripts/report_icons.py
+++ b/scripts/report_icons.py
@@ -710,13 +710,13 @@
'PHOTOS.SQLITE-B-INTERACTION_ARTIFACTS': {
'PH3.1-TRASHED RECENTLY DELETED-PHDAPSQL': 'trash-2',
'PH4-HIDDEN-PHDAPSQL': 'eye-off',
- 'PH6-VIEWED AND PLAYED DATA-PHDAPSQL': 'eye',
+ 'PH6-VIEW AND PLAY DATA-PHDAPSQL': 'eye',
'PH7-FAVORITE-PHDAPSQL': 'heart',
'PH8-HAS ADJUSTMENT-PHDAPSQL': 'edit',
'PH11-KWRDSCAPSTITLESDESCRIPSLIKESBASICASSTDATA-PHDAPSQL': 'info',
},
'PHOTOS.SQLITE-C-OTHER_ARTIFACTS': {
- 'PH5.1-HAS LOCATIONS-PHDAPSQL': 'map-pin',
+ 'PH5.1-ASSETS HAVE VALID LOCATIONS-PHDAPSQL': 'map-pin',
'PH9-BURST AVALANCHE-PHDAPSQL': 'layers',
'PH10.1-ASSETS HAVE EMBEDDED FILES-PHDAPSQL': 'file-plus',
'PH26.1-SYNDICATION ID ASSETS-PHDAPSQL': 'refresh-ccw',
@@ -724,17 +724,17 @@
'PHOTOS.SQLITE-D-GENERIC_ALBUM_RECORDS-NAD': {
'PH20.1-ALBUM RECORDS NAD-PHDAPSQL': 'book',
'PH21-NON-SHARED ALBUM RECORDS NAD-PHDAPSQL': 'book',
- 'PH23-SHARED ALBUM RECORDS NAD-PHDAPSQL': 'upload-cloud',
+ 'PH23-SHARED ALBUM RECORDS & INVITES NAD-PHDAPSQL': 'upload-cloud',
'PH25.1-SWY CONVERSATION RECORDS NAD-PHDAPSQL': 'message-square',
},
'PHOTOS.SQLITE-E-ASSET_IN_ALBUMS': {
'PH22-ASSETS IN NON-SHARED ALBUMS-PHDAPSQL': 'book-open',
- 'PH24-ASSETS IN SHARED ALBUMS-PHDAPSQL': 'upload-cloud',
+ 'PH24-ASSETS IN SHARED ALBUMS & INVITES-PHDAPSQL': 'upload-cloud',
},
'PHOTOS.SQLITE-F-CLOUD_SHARED_METHODS': {
- 'PH30-ICLD SHARE METHODS NAD-PHDAPSQL': 'upload-cloud',
- 'PH31-ICLD SHARED PHOTO LIB RECORDS NAD-PHDAPSQL': 'upload-cloud',
- 'PH32-ICLD SHARED PHOTO LIB ASSETS-PHDAPSQL': 'upload-cloud',
+ 'PH30-ICLOUD SHARED METHODS NAD-PHDAPSQL': 'upload-cloud',
+ 'PH31-ICLOUD SPL WITH PARTICIPANTS NAD-PHDAPSQL': 'upload-cloud',
+ 'PH32-ICLOUD SPL ASSETS WITH CONTRIBUTOR-PHDAPSQL': 'upload-cloud',
'PH33-ICLD SPL ASSETS FROM OTHER CONTRIB-PHDAPSQL': 'download-cloud',
'PH34-ICLD SHARED LINK RECORDS NAD-PHDAPSQL': 'link',
'PH35-ICLD SHARED LINK ASSETS-PHDAPSQL': 'link',
@@ -772,7 +772,7 @@
'PH1.2-ASSET BASIC DATA-SYNDPL': 'image',
'PH2.2-ASSET BASIC DATA & CONVERS DATA-SYNDPL': 'image',
'PH3.2-REMOVED FROM CAMERA ROLL-SYNDPL': 'delete',
- 'PH5.2-HAS LOCATIONS-SYNDPL': 'map-pin',
+ 'PH5.2-ASSETS HAVE VALID LOCATIONS-SYNDPL': 'map-pin',
'PH10.2-ASSETS HAVE EMBEDDED FILES-SYNDPL': 'file-plus',
'PH15.2-PEOPLE & FACES NAD-SYNDPL': 'smile',
'PH16.2-PEOPLE & FACES ASSET DATA-SYNDPL': 'smile',