From 70debe99952e1e378b6fe5000e03f40817e90495 Mon Sep 17 00:00:00 2001 From: Dylan Knutson Date: Sun, 2 Mar 2025 04:03:56 +0000 Subject: [PATCH] [WIP] perceptual hashing --- .devcontainer/Dockerfile.devcontainer | 1 - .devcontainer/fish-shell-conf-d/rustup.fish | 1 + .devcontainer/install-extensions.sh | 2 + app/models/domain/perceptual_hash.rb | 28 +++++++++++ app/models/domain/post_file.rb | 5 ++ app/models/domain/post_file_thumbnail.rb | 47 ++++++++++++++++++ ...0001_create_domain_post_file_thumbnails.rb | 14 ++++++ ...1000002_create_domain_perceptual_hashes.rb | 17 +++++++ media-thumbnailer/Cargo.lock | 7 +++ media-thumbnailer/Cargo.toml | 6 +++ media-thumbnailer/src/main.rs | 3 ++ media-thumbnailer/target/.rustc_info.json | 1 + media-thumbnailer/target/CACHEDIR.TAG | 3 ++ media-thumbnailer/target/debug/.cargo-lock | 0 .../bin-media-thumbnailer | 1 + .../bin-media-thumbnailer.json | 1 + .../dep-bin-media-thumbnailer | Bin 0 -> 31 bytes .../invoked.timestamp | 1 + .../dep-test-bin-media-thumbnailer | Bin 0 -> 31 bytes .../invoked.timestamp | 1 + .../test-bin-media-thumbnailer | 1 + .../test-bin-media-thumbnailer.json | 1 + ...ibmedia_thumbnailer-5574003c59783d36.rmeta | 0 ...ibmedia_thumbnailer-706bac28c87bc41d.rmeta | 0 .../deps/media_thumbnailer-5574003c59783d36.d | 5 ++ .../deps/media_thumbnailer-706bac28c87bc41d.d | 5 ++ .../dep-graph.bin | Bin 0 -> 26018 bytes .../query-cache.bin | Bin 0 -> 3325 bytes .../work-products.bin | Bin 0 -> 50 bytes .../s-h53asv9n6w-1xysgjz.lock | 0 .../dep-graph.bin | Bin 0 -> 20632 bytes .../query-cache.bin | Bin 0 -> 2517 bytes .../work-products.bin | Bin 0 -> 50 bytes .../s-h53asv9n60-11c0hlh.lock | 0 34 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 .devcontainer/fish-shell-conf-d/rustup.fish create mode 100644 app/models/domain/perceptual_hash.rb create mode 100644 app/models/domain/post_file_thumbnail.rb create mode 100644 db/migrate/20250301000001_create_domain_post_file_thumbnails.rb create mode 100644 db/migrate/20250301000002_create_domain_perceptual_hashes.rb create mode 100644 media-thumbnailer/Cargo.lock create mode 100644 media-thumbnailer/Cargo.toml create mode 100644 media-thumbnailer/src/main.rs create mode 100644 media-thumbnailer/target/.rustc_info.json create mode 100644 media-thumbnailer/target/CACHEDIR.TAG create mode 100644 media-thumbnailer/target/debug/.cargo-lock create mode 100644 media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-5574003c59783d36/bin-media-thumbnailer create mode 100644 media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-5574003c59783d36/bin-media-thumbnailer.json create mode 100644 media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-5574003c59783d36/dep-bin-media-thumbnailer create mode 100644 media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-5574003c59783d36/invoked.timestamp create mode 100644 media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-706bac28c87bc41d/dep-test-bin-media-thumbnailer create mode 100644 media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-706bac28c87bc41d/invoked.timestamp create mode 100644 media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-706bac28c87bc41d/test-bin-media-thumbnailer create mode 100644 media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-706bac28c87bc41d/test-bin-media-thumbnailer.json create mode 100644 media-thumbnailer/target/debug/deps/libmedia_thumbnailer-5574003c59783d36.rmeta create mode 100644 media-thumbnailer/target/debug/deps/libmedia_thumbnailer-706bac28c87bc41d.rmeta create mode 100644 media-thumbnailer/target/debug/deps/media_thumbnailer-5574003c59783d36.d create mode 100644 media-thumbnailer/target/debug/deps/media_thumbnailer-706bac28c87bc41d.d create mode 100644 media-thumbnailer/target/debug/incremental/media_thumbnailer-12j6s9cwqumgz/s-h53asv9n6w-1xysgjz-8rax631t5yfm5k93uvl4bwr4j/dep-graph.bin create mode 100644 media-thumbnailer/target/debug/incremental/media_thumbnailer-12j6s9cwqumgz/s-h53asv9n6w-1xysgjz-8rax631t5yfm5k93uvl4bwr4j/query-cache.bin create mode 100644 media-thumbnailer/target/debug/incremental/media_thumbnailer-12j6s9cwqumgz/s-h53asv9n6w-1xysgjz-8rax631t5yfm5k93uvl4bwr4j/work-products.bin create mode 100644 media-thumbnailer/target/debug/incremental/media_thumbnailer-12j6s9cwqumgz/s-h53asv9n6w-1xysgjz.lock create mode 100644 media-thumbnailer/target/debug/incremental/media_thumbnailer-2d5lzuagfo6id/s-h53asv9n60-11c0hlh-3jmsj3bfshs38uj28t0j8z7kj/dep-graph.bin create mode 100644 media-thumbnailer/target/debug/incremental/media_thumbnailer-2d5lzuagfo6id/s-h53asv9n60-11c0hlh-3jmsj3bfshs38uj28t0j8z7kj/query-cache.bin create mode 100644 media-thumbnailer/target/debug/incremental/media_thumbnailer-2d5lzuagfo6id/s-h53asv9n60-11c0hlh-3jmsj3bfshs38uj28t0j8z7kj/work-products.bin create mode 100644 media-thumbnailer/target/debug/incremental/media_thumbnailer-2d5lzuagfo6id/s-h53asv9n60-11c0hlh.lock diff --git a/.devcontainer/Dockerfile.devcontainer b/.devcontainer/Dockerfile.devcontainer index 709bc0f1..ce17e8d5 100644 --- a/.devcontainer/Dockerfile.devcontainer +++ b/.devcontainer/Dockerfile.devcontainer @@ -49,7 +49,6 @@ RUN \ libvips42 \ libyaml-dev \ patch \ - rustc \ uuid-dev \ zlib1g-dev \ watchman \ diff --git a/.devcontainer/fish-shell-conf-d/rustup.fish b/.devcontainer/fish-shell-conf-d/rustup.fish new file mode 100644 index 00000000..e4cb3639 --- /dev/null +++ b/.devcontainer/fish-shell-conf-d/rustup.fish @@ -0,0 +1 @@ +source "$HOME/.cargo/env.fish" diff --git a/.devcontainer/install-extensions.sh b/.devcontainer/install-extensions.sh index 0c8b8165..f60d0f3e 100755 --- a/.devcontainer/install-extensions.sh +++ b/.devcontainer/install-extensions.sh @@ -18,3 +18,5 @@ install_extension KoichiSasada.vscode-rdbg install_extension qwtel.sqlite-viewer install_extension esbenp.prettier-vscode install_extension ms-azuretools.vscode-docker +install_extension 1YiB.rust-bundle +install_extension rust-lang.rust-analyzer diff --git a/app/models/domain/perceptual_hash.rb b/app/models/domain/perceptual_hash.rb new file mode 100644 index 00000000..6bd3fec0 --- /dev/null +++ b/app/models/domain/perceptual_hash.rb @@ -0,0 +1,28 @@ +# typed: strict +class Domain::PerceptualHash < ReduxApplicationRecord + include AttrJsonRecordAliases + self.table_name = "domain_perceptual_hashes" + + belongs_to :thumbnail, + foreign_key: :thumbnail_id, + class_name: "::Domain::PostFileThumbnail" + + validates :algorithm, presence: true + validates :hash_value, presence: true + + # Ensure uniqueness of algorithm and hash_version per thumbnail + validates :algorithm, uniqueness: { scope: %i[thumbnail_id] } + + # Supported perceptual hash algorithms + ALGORITHMS = + T.let( + { + phash: "phash", # Perceptual hash + dhash: "dhash", # Difference hash + ahash: "ahash", # Average hash + whash: "whash", # Wavelet hash + colorhash: "colorhash", # Color histogram hash + }, + T::Hash[Symbol, String], + ) +end diff --git a/app/models/domain/post_file.rb b/app/models/domain/post_file.rb index 7eb87c65..8b8562c1 100644 --- a/app/models/domain/post_file.rb +++ b/app/models/domain/post_file.rb @@ -10,6 +10,11 @@ class Domain::PostFile < ReduxApplicationRecord optional: true, foreign_key: :blob_sha256 + has_many :thumbnails, + class_name: "::Domain::PostFileThumbnail", + foreign_key: :post_file_id, + dependent: :destroy + attr_json :state, :string attr_json :url_str, :string attr_json :error_message, :string diff --git a/app/models/domain/post_file_thumbnail.rb b/app/models/domain/post_file_thumbnail.rb new file mode 100644 index 00000000..d9a9fb87 --- /dev/null +++ b/app/models/domain/post_file_thumbnail.rb @@ -0,0 +1,47 @@ +# typed: strict +class Domain::PostFileThumbnail < ReduxApplicationRecord + include AttrJsonRecordAliases + self.table_name = "domain_post_file_thumbnails" + + belongs_to :post_file, + foreign_key: :post_file_id, + class_name: "::Domain::PostFile" + + has_many :perceptual_hashes, + class_name: "::Domain::PerceptualHash", + foreign_key: :thumbnail_id, + dependent: :destroy + + validates :thumbnail_type, + presence: true, + uniqueness: { + scope: :post_file_id, + }, + inclusion: { + in: THUMBNAIL_TYPES.keys, + } + + # Thumbnail types for different uses + THUMBNAIL_TYPES = + T.let( + { + small: { + width: 128, + height: 128, + }, + medium: { + width: 256, + height: 256, + }, + large: { + width: 512, + height: 512, + }, + phash: { + width: 64, + height: 64, + }, # Special size for perceptual hashing + }, + T::Hash[Symbol, T::Hash[Symbol, Integer]], + ) +end diff --git a/db/migrate/20250301000001_create_domain_post_file_thumbnails.rb b/db/migrate/20250301000001_create_domain_post_file_thumbnails.rb new file mode 100644 index 00000000..77ec23d2 --- /dev/null +++ b/db/migrate/20250301000001_create_domain_post_file_thumbnails.rb @@ -0,0 +1,14 @@ +class CreateDomainPostFileThumbnails < ActiveRecord::Migration[7.0] + def change + create_table :domain_post_file_thumbnails do |t| + t.references :post_file, + null: false, + foreign_key: { + to_table: :domain_post_files, + }, + index: true + t.string :thumbnail_type, null: false, index: true + t.timestamps + end + end +end diff --git a/db/migrate/20250301000002_create_domain_perceptual_hashes.rb b/db/migrate/20250301000002_create_domain_perceptual_hashes.rb new file mode 100644 index 00000000..a22301fd --- /dev/null +++ b/db/migrate/20250301000002_create_domain_perceptual_hashes.rb @@ -0,0 +1,17 @@ +class CreateDomainPerceptualHashes < ActiveRecord::Migration[7.0] + def change + create_table :domain_perceptual_hashes do |t| + t.references :thumbnail, + null: false, + foreign_key: { + to_table: :domain_post_file_thumbnails, + }, + index: true + t.string :algorithm, null: false, index: true + t.vector :hash_value + t.timestamps + end + + # TODO - figure out right index type for hash_value + end +end diff --git a/media-thumbnailer/Cargo.lock b/media-thumbnailer/Cargo.lock new file mode 100644 index 00000000..a6210db0 --- /dev/null +++ b/media-thumbnailer/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "media-thumbnailer" +version = "0.1.0" diff --git a/media-thumbnailer/Cargo.toml b/media-thumbnailer/Cargo.toml new file mode 100644 index 00000000..c3b6adf6 --- /dev/null +++ b/media-thumbnailer/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "media-thumbnailer" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/media-thumbnailer/src/main.rs b/media-thumbnailer/src/main.rs new file mode 100644 index 00000000..e7a11a96 --- /dev/null +++ b/media-thumbnailer/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/media-thumbnailer/target/.rustc_info.json b/media-thumbnailer/target/.rustc_info.json new file mode 100644 index 00000000..f1153a88 --- /dev/null +++ b/media-thumbnailer/target/.rustc_info.json @@ -0,0 +1 @@ +{"rustc_fingerprint":2276600985026381000,"outputs":{"13331785392996375709":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/vscode/.rustup/toolchains/stable-x86_64-unknown-linux-gnu\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"unknown\"\nunix\n","stderr":""},"17747080675513052775":{"success":true,"status":"","code":0,"stdout":"rustc 1.85.0 (4d91de4e4 2025-02-17)\nbinary: rustc\ncommit-hash: 4d91de4e48198da2e33413efdcd9cd2cc0c46688\ncommit-date: 2025-02-17\nhost: x86_64-unknown-linux-gnu\nrelease: 1.85.0\nLLVM version: 19.1.7\n","stderr":""},"2063776225603076451":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/vscode/.rustup/toolchains/stable-x86_64-unknown-linux-gnu\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"unknown\"\nunix\n","stderr":""}},"successes":{}} \ No newline at end of file diff --git a/media-thumbnailer/target/CACHEDIR.TAG b/media-thumbnailer/target/CACHEDIR.TAG new file mode 100644 index 00000000..20d7c319 --- /dev/null +++ b/media-thumbnailer/target/CACHEDIR.TAG @@ -0,0 +1,3 @@ +Signature: 8a477f597d28d172789f06886806bc55 +# This file is a cache directory tag created by cargo. +# For information about cache directory tags see https://bford.info/cachedir/ diff --git a/media-thumbnailer/target/debug/.cargo-lock b/media-thumbnailer/target/debug/.cargo-lock new file mode 100644 index 00000000..e69de29b diff --git a/media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-5574003c59783d36/bin-media-thumbnailer b/media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-5574003c59783d36/bin-media-thumbnailer new file mode 100644 index 00000000..33cd0ecf --- /dev/null +++ b/media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-5574003c59783d36/bin-media-thumbnailer @@ -0,0 +1 @@ +db843a6414af8582 \ No newline at end of file diff --git a/media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-5574003c59783d36/bin-media-thumbnailer.json b/media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-5574003c59783d36/bin-media-thumbnailer.json new file mode 100644 index 00000000..e943051e --- /dev/null +++ b/media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-5574003c59783d36/bin-media-thumbnailer.json @@ -0,0 +1 @@ +{"rustc":8277423686421874925,"features":"[]","declared_features":"[]","target":9596570253498806976,"profile":17672942494452627365,"path":4942398508502643691,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/media-thumbnailer-5574003c59783d36/dep-bin-media-thumbnailer","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0} \ No newline at end of file diff --git a/media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-5574003c59783d36/dep-bin-media-thumbnailer b/media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-5574003c59783d36/dep-bin-media-thumbnailer new file mode 100644 index 0000000000000000000000000000000000000000..5c54f74a99114dbe9324f717bdccb4490efa0e4f GIT binary patch literal 31 hcmZQ%U|{&q2qGD{85kIfi<0$o6EpMlii#OP002r{1w8-& literal 0 HcmV?d00001 diff --git a/media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-5574003c59783d36/invoked.timestamp b/media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-5574003c59783d36/invoked.timestamp new file mode 100644 index 00000000..e00328da --- /dev/null +++ b/media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-5574003c59783d36/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-706bac28c87bc41d/dep-test-bin-media-thumbnailer b/media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-706bac28c87bc41d/dep-test-bin-media-thumbnailer new file mode 100644 index 0000000000000000000000000000000000000000..5c54f74a99114dbe9324f717bdccb4490efa0e4f GIT binary patch literal 31 hcmZQ%U|{&q2qGD{85kIfi<0$o6EpMlii#OP002r{1w8-& literal 0 HcmV?d00001 diff --git a/media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-706bac28c87bc41d/invoked.timestamp b/media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-706bac28c87bc41d/invoked.timestamp new file mode 100644 index 00000000..e00328da --- /dev/null +++ b/media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-706bac28c87bc41d/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-706bac28c87bc41d/test-bin-media-thumbnailer b/media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-706bac28c87bc41d/test-bin-media-thumbnailer new file mode 100644 index 00000000..1efb0d8a --- /dev/null +++ b/media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-706bac28c87bc41d/test-bin-media-thumbnailer @@ -0,0 +1 @@ +a43eef7362df3a3f \ No newline at end of file diff --git a/media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-706bac28c87bc41d/test-bin-media-thumbnailer.json b/media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-706bac28c87bc41d/test-bin-media-thumbnailer.json new file mode 100644 index 00000000..352bd530 --- /dev/null +++ b/media-thumbnailer/target/debug/.fingerprint/media-thumbnailer-706bac28c87bc41d/test-bin-media-thumbnailer.json @@ -0,0 +1 @@ +{"rustc":8277423686421874925,"features":"[]","declared_features":"[]","target":9596570253498806976,"profile":3316208278650011218,"path":4942398508502643691,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/media-thumbnailer-706bac28c87bc41d/dep-test-bin-media-thumbnailer","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0} \ No newline at end of file diff --git a/media-thumbnailer/target/debug/deps/libmedia_thumbnailer-5574003c59783d36.rmeta b/media-thumbnailer/target/debug/deps/libmedia_thumbnailer-5574003c59783d36.rmeta new file mode 100644 index 00000000..e69de29b diff --git a/media-thumbnailer/target/debug/deps/libmedia_thumbnailer-706bac28c87bc41d.rmeta b/media-thumbnailer/target/debug/deps/libmedia_thumbnailer-706bac28c87bc41d.rmeta new file mode 100644 index 00000000..e69de29b diff --git a/media-thumbnailer/target/debug/deps/media_thumbnailer-5574003c59783d36.d b/media-thumbnailer/target/debug/deps/media_thumbnailer-5574003c59783d36.d new file mode 100644 index 00000000..ba936ffa --- /dev/null +++ b/media-thumbnailer/target/debug/deps/media_thumbnailer-5574003c59783d36.d @@ -0,0 +1,5 @@ +/workspaces/redux-scraper/media-thumbnailer/target/debug/deps/libmedia_thumbnailer-5574003c59783d36.rmeta: src/main.rs + +/workspaces/redux-scraper/media-thumbnailer/target/debug/deps/media_thumbnailer-5574003c59783d36.d: src/main.rs + +src/main.rs: diff --git a/media-thumbnailer/target/debug/deps/media_thumbnailer-706bac28c87bc41d.d b/media-thumbnailer/target/debug/deps/media_thumbnailer-706bac28c87bc41d.d new file mode 100644 index 00000000..1ad2a023 --- /dev/null +++ b/media-thumbnailer/target/debug/deps/media_thumbnailer-706bac28c87bc41d.d @@ -0,0 +1,5 @@ +/workspaces/redux-scraper/media-thumbnailer/target/debug/deps/libmedia_thumbnailer-706bac28c87bc41d.rmeta: src/main.rs + +/workspaces/redux-scraper/media-thumbnailer/target/debug/deps/media_thumbnailer-706bac28c87bc41d.d: src/main.rs + +src/main.rs: diff --git a/media-thumbnailer/target/debug/incremental/media_thumbnailer-12j6s9cwqumgz/s-h53asv9n6w-1xysgjz-8rax631t5yfm5k93uvl4bwr4j/dep-graph.bin b/media-thumbnailer/target/debug/incremental/media_thumbnailer-12j6s9cwqumgz/s-h53asv9n6w-1xysgjz-8rax631t5yfm5k93uvl4bwr4j/dep-graph.bin new file mode 100644 index 0000000000000000000000000000000000000000..daf1e1a82d846a0529259ef9fddd0facc7f8647e GIT binary patch literal 26018 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 literal 0 HcmV?d00001 diff --git a/media-thumbnailer/target/debug/incremental/media_thumbnailer-12j6s9cwqumgz/s-h53asv9n6w-1xysgjz-8rax631t5yfm5k93uvl4bwr4j/work-products.bin b/media-thumbnailer/target/debug/incremental/media_thumbnailer-12j6s9cwqumgz/s-h53asv9n6w-1xysgjz-8rax631t5yfm5k93uvl4bwr4j/work-products.bin new file mode 100644 index 0000000000000000000000000000000000000000..85e1d98ee553b85ecce270756d3b1c17e7716dbc GIT binary patch literal 50 zcmWFv_H<@okTuk^Fx4|q&@f4{G)ze~Ni|V0GB7gLH89dOG}mM(DlIP2P0dTuP0P$l F1ppbN42}Q* literal 0 HcmV?d00001 diff --git a/media-thumbnailer/target/debug/incremental/media_thumbnailer-12j6s9cwqumgz/s-h53asv9n6w-1xysgjz.lock b/media-thumbnailer/target/debug/incremental/media_thumbnailer-12j6s9cwqumgz/s-h53asv9n6w-1xysgjz.lock new file mode 100644 index 00000000..e69de29b diff --git a/media-thumbnailer/target/debug/incremental/media_thumbnailer-2d5lzuagfo6id/s-h53asv9n60-11c0hlh-3jmsj3bfshs38uj28t0j8z7kj/dep-graph.bin b/media-thumbnailer/target/debug/incremental/media_thumbnailer-2d5lzuagfo6id/s-h53asv9n60-11c0hlh-3jmsj3bfshs38uj28t0j8z7kj/dep-graph.bin new file mode 100644 index 0000000000000000000000000000000000000000..44ce551860e26cdce6e4ba43142b39529e1e9def GIT binary patch literal 20632 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 LOVLfs%t-|Rwb(Iq literal 0 HcmV?d00001 diff --git a/media-thumbnailer/target/debug/incremental/media_thumbnailer-2d5lzuagfo6id/s-h53asv9n60-11c0hlh-3jmsj3bfshs38uj28t0j8z7kj/query-cache.bin b/media-thumbnailer/target/debug/incremental/media_thumbnailer-2d5lzuagfo6id/s-h53asv9n60-11c0hlh-3jmsj3bfshs38uj28t0j8z7kj/query-cache.bin new file mode 100644 index 0000000000000000000000000000000000000000..88e43020de6e5f30d01b6bab6c9512868f509a8f GIT binary patch literal 2517 zcmWFv_H<@okTuk^Fx4|q&@f4{G)ze~Ni|V0GB7gLH89dOG}p{zVE)RgS~^L*XZEhp zX*`;O=cmK?SJ~$?GR)Pu1LMc?E?OTinsAVTfq{V$UC^VEkr!QzL8O5Zq?mz$<0li8 z@gK%$VPs%n`NPD(z|zDFB0$_t!78#@ClGXnz$)Ex}WmzeliVJaOa zUuC-x`RM{9x&Q+Mr(;oiX>Mv>N%28O24M=LU|=iAOifNLJ_y(O#k9q$ zoMW*sBLhtBp;Z$kWL5>wWO~SkM^(xn>8O@fJr|fBFkw-}z`z0yw(avLO=$WzdwLTi zBLf>(6Eo8#CeG>1th_z9b(qwH7N6eE`o(C*HNF}K#!E~Byf7EQ0)mNwjfu6L84(D= zmzY>CG4b%QH8L|W3SdYx3c#I$Fai{SOiT=naH)d14Nub#@>UTMnvA=dummFGEo@$f zIi6O*$H)LmfXqw`EFcCW4-+FpBQp~N<9t?dNHc%!UR$yIg5r;fLmb@@kXDcw zBLg$si7=;wfX`cNiA$%*;zNYF_X*g-*3!{`KNE z#TBqLE_tzf+C?9kpI^gQvR0coFH?r;(77&S(&{zst+&m*Nr$YzX)(bh*!E7+FuJZD zJ4x@g;???e-zJ!Zj6^bn9rx=y`(+)?l-P}xAHXCyXWIvgZ(Wt~?c+TatCjn{b9}m( z=lGb-(Lnym&RF;Q#2Y)4}seaz%J#ih;ge;aY|J0FSHOvyE01^--yM~7D}S^(3*-C2Z$yRv_%}M`qJsKtbRB{NFJIgGBmQi8IxrpF@s{d#evjr>PxqaA!cW9qGOKFI zncm6j{}qe;D+`Ypw~9(i^zo)F`05PP!KeL4%e1IV|EyM3!40SN*Ji_9rQ+^m_x=oX z>&}Za?pEJ9@^&Ijhv41=R?JPQwH2-(Jxv8ye(WymcDMfKF`@37Uv3i8zZOgspn}E zfAB4N#{?;Nm=50Kckg+WiaXp*l8g(9xcZ(C<|^gcd}oTpWDFL4k@?E?FUxN!Oozbl zzG}X}ueSe#B4Ug;RQQm n0|!QFI)ejNF2YLclN=1^x$+^kKSNPzafxnfUW#s7W=<*q=NnB; literal 0 HcmV?d00001 diff --git a/media-thumbnailer/target/debug/incremental/media_thumbnailer-2d5lzuagfo6id/s-h53asv9n60-11c0hlh-3jmsj3bfshs38uj28t0j8z7kj/work-products.bin b/media-thumbnailer/target/debug/incremental/media_thumbnailer-2d5lzuagfo6id/s-h53asv9n60-11c0hlh-3jmsj3bfshs38uj28t0j8z7kj/work-products.bin new file mode 100644 index 0000000000000000000000000000000000000000..85e1d98ee553b85ecce270756d3b1c17e7716dbc GIT binary patch literal 50 zcmWFv_H<@okTuk^Fx4|q&@f4{G)ze~Ni|V0GB7gLH89dOG}mM(DlIP2P0dTuP0P$l F1ppbN42}Q* literal 0 HcmV?d00001 diff --git a/media-thumbnailer/target/debug/incremental/media_thumbnailer-2d5lzuagfo6id/s-h53asv9n60-11c0hlh.lock b/media-thumbnailer/target/debug/incremental/media_thumbnailer-2d5lzuagfo6id/s-h53asv9n60-11c0hlh.lock new file mode 100644 index 00000000..e69de29b