From 165daada23406ca6d95b11fed54103f91b8d95cb Mon Sep 17 00:00:00 2001 From: Hare Date: Tue, 11 Aug 2026 18:33:49 +0900 Subject: [PATCH] Add host-structured imports --- README.md | 4 +- crates/decodal-cli/src/main.rs | 10 +- .../examples/structured_import.rs | 87 +++++++++ crates/decodal-core/src/eval.rs | 176 ++++++++++++++++-- crates/decodal-core/src/lib.rs | 2 +- crates/decodal-core/src/module.rs | 43 ++++- crates/decodal-wasm/src/lib.rs | 12 +- doc/manual/souce/design/embedding-api.md | 29 ++- doc/manual/souce/design/execution-pipeline.md | 14 +- doc/manual/souce/design/runtime-model.md | 4 +- .../souce/language/modules-and-imports.md | 67 ++++++- packages/decodal-wasm/decodal_wasm_bg.wasm | Bin 313060 -> 330981 bytes 12 files changed, 402 insertions(+), 46 deletions(-) create mode 100644 crates/decodal-core/examples/structured_import.rs diff --git a/README.md b/README.md index fc36662..be0dd53 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Decodal is a small deterministic DSL for describing, composing, validating, and It is designed around a lightweight Rust library: -- host-supplied imports through `SourceLoader` +- host-supplied source and structured-value imports through `ImportLoader` - no filesystem access in the library core - concrete and abstract values with constraints and defaults - deterministic expression evaluation @@ -13,7 +13,7 @@ It is designed around a lightweight Rust library: ## Library crate -Embedded hosts should depend on `decodal` and provide imports with a `SourceLoader`. +Embedded hosts should depend on `decodal` and provide imports with an `ImportLoader`. ```toml [dependencies] diff --git a/crates/decodal-cli/src/main.rs b/crates/decodal-cli/src/main.rs index f040243..423a8ed 100644 --- a/crates/decodal-cli/src/main.rs +++ b/crates/decodal-cli/src/main.rs @@ -5,8 +5,8 @@ use std::{ }; use decodal::{ - Data, Diagnostic, DiagnosticKind, Engine, LoadedSource, SourceId, SourceLoader, Span, - format_diagnostic_with, + Data, Diagnostic, DiagnosticKind, Engine, ImportLoader, LoadedImport, LoadedSource, SourceId, + Span, format_diagnostic_with, }; fn main() -> ExitCode { @@ -95,12 +95,12 @@ fn read_root_source(path: &str) -> Result { #[derive(Debug, Clone, Copy)] struct FsLoader; -impl SourceLoader for FsLoader { +impl ImportLoader for FsLoader { fn load( &mut self, current_key: Option<&str>, specifier: &str, - ) -> Result { + ) -> Result { let path = Path::new(specifier); let path = if path.is_absolute() { PathBuf::from(path) @@ -112,7 +112,7 @@ impl SourceLoader for FsLoader { } else { PathBuf::from(path) }; - load_path(&path) + load_path(&path).map(LoadedImport::Source) } } diff --git a/crates/decodal-core/examples/structured_import.rs b/crates/decodal-core/examples/structured_import.rs new file mode 100644 index 0000000..b0d12a8 --- /dev/null +++ b/crates/decodal-core/examples/structured_import.rs @@ -0,0 +1,87 @@ +use decodal::{ + Data, Diagnostic, DiagnosticKind, Engine, HostValue, ImportLoader, LoadedImport, Span, +}; + +const POST: &str = r#"--- +title: Hello +draft: false +--- +# Hello + +This body stays as Markdown. +"#; + +struct ContentLoader; + +impl ImportLoader for ContentLoader { + fn load( + &mut self, + _current_key: Option<&str>, + specifier: &str, + ) -> decodal::Result { + if specifier != "./post.md" { + return Err(Diagnostic::new( + DiagnosticKind::Import, + Span::default(), + format!("unknown content import `{specifier}`"), + )); + } + Ok(LoadedImport::value( + "content/post.md", + parse_markdown(POST)?, + )) + } +} + +fn parse_markdown(source: &str) -> decodal::Result { + let source = source.strip_prefix("---\n").ok_or_else(frontmatter_error)?; + let (frontmatter, body) = source.split_once("\n---\n").ok_or_else(frontmatter_error)?; + let mut fields = Vec::new(); + for line in frontmatter.lines() { + let (name, value) = line.split_once(':').ok_or_else(frontmatter_error)?; + let value = match value.trim() { + "true" => HostValue::bool(true), + "false" => HostValue::bool(false), + value => HostValue::string(value), + }; + fields.push((name.trim(), value)); + } + Ok(HostValue::object([ + ("frontmatter", HostValue::object(fields)), + ("body", HostValue::string(body)), + ])) +} + +fn frontmatter_error() -> Diagnostic { + Diagnostic::new( + DiagnosticKind::Import, + Span::default(), + "invalid Markdown frontmatter", + ) +} + +fn main() -> decodal::Result<()> { + let mut engine = Engine::new(ContentLoader); + let module = engine.add_root_source( + "main.dcdl", + "main.dcdl", + r#" + let post = import "./post.md"; + in { + title = post.frontmatter.title; + draft = post.frontmatter.draft; + body = post.body; + } + "#, + )?; + let value = engine.eval_module(module)?; + let data = engine.materialize(&value)?; + + let Data::Object(fields) = data else { + panic!("expected imported Markdown to produce an object") + }; + assert_eq!(fields[0].value, Data::String(String::from("Hello"))); + assert_eq!(fields[1].value, Data::Bool(false)); + assert!(matches!(fields[2].value, Data::String(_))); + Ok(()) +} diff --git a/crates/decodal-core/src/eval.rs b/crates/decodal-core/src/eval.rs index 6a061e3..13dc5d5 100644 --- a/crates/decodal-core/src/eval.rs +++ b/crates/decodal-core/src/eval.rs @@ -6,7 +6,7 @@ use crate::{ constraints::normalize_constraints, diagnostic::{Diagnostic, DiagnosticKind, Result}, embedding::HostValue, - module::{EmptyLoader, LoadedSource, Module, SourceLoader}, + module::{EmptyLoader, ImportLoader, LoadedImport, LoadedSource, LoadedValue, Module}, parse_source_with_source_id, runtime::{ AbstractValue, Binding, ConcreteValue, Constraint, ConstraintEntry, Data, DataField, Env, @@ -19,10 +19,16 @@ pub struct Engine { loader: L, prelude_env: EnvId, modules: Vec, + imported_values: Vec, thunks: Vec, envs: Vec, } +struct ImportedValue { + key: String, + root: ThunkId, +} + impl Engine { pub fn from_parse(ast: Ast, root: ExprId) -> Self { let mut this = Self::new(EmptyLoader); @@ -38,12 +44,13 @@ impl Engine { } } -impl Engine { +impl Engine { pub fn new(loader: L) -> Self { Self { loader, prelude_env: EnvId(0), modules: Vec::new(), + imported_values: Vec::new(), thunks: Vec::new(), envs: vec![Env { parent: None, @@ -236,10 +243,37 @@ impl Engine { .map(|index| ModuleId(index as u32)) } - fn load_import(&mut self, current: ModuleId, specifier: &str) -> Result { + fn eval_import(&mut self, current: ModuleId, specifier: &str) -> Result { let current_key = self.modules[current.0 as usize].key.clone(); - let LoadedSource { key, name, source } = self.loader.load(Some(¤t_key), specifier)?; - self.add_source(key, name, &source) + let loaded = self.loader.load(Some(¤t_key), specifier)?; + match loaded { + LoadedImport::Source(LoadedSource { key, name, source }) => { + if let Some(value) = self.find_imported_value(&key) { + return self.force(value); + } + let module = self.add_source(key, name, &source)?; + self.eval_module(module) + } + LoadedImport::Value(LoadedValue { key, value }) => { + if let Some(module) = self.find_module(&key) { + return self.eval_module(module); + } + if let Some(value) = self.find_imported_value(&key) { + return self.force(value); + } + let value = self.internalize_host_value(value)?; + let root = self.add_value_thunk(value); + self.imported_values.push(ImportedValue { key, root }); + self.force(root) + } + } + } + + fn find_imported_value(&self, key: &str) -> Option { + self.imported_values + .iter() + .find(|value| value.key == key) + .map(|value| value.root) } fn eval_expr(&mut self, reference: ExprRef, env: EnvId) -> Result { @@ -303,10 +337,7 @@ impl Engine { let_env, ) } - Expr::Import(specifier) => { - let module = self.load_import(reference.module, &specifier)?; - self.eval_module(module) - } + Expr::Import(specifier) => self.eval_import(reference.module, &specifier), Expr::Path { base, field } => { let base = self.eval_expr( ExprRef { @@ -1964,8 +1995,8 @@ mod tests { sources: Vec<(String, String)>, } - impl SourceLoader for MapLoader { - fn load(&mut self, _current_key: Option<&str>, specifier: &str) -> Result { + impl ImportLoader for MapLoader { + fn load(&mut self, _current_key: Option<&str>, specifier: &str) -> Result { let source = self .sources .iter() @@ -1974,11 +2005,11 @@ mod tests { .ok_or_else(|| { Diagnostic::new(DiagnosticKind::Import, Span::default(), "missing source") })?; - Ok(LoadedSource { + Ok(LoadedImport::Source(LoadedSource { key: specifier.into(), name: specifier.into(), source, - }) + })) } } @@ -2003,6 +2034,125 @@ mod tests { assert_eq!(fields[0].value, Data::Int(9000)); } + struct MarkdownLoader { + source: String, + } + + impl ImportLoader for MarkdownLoader { + fn load(&mut self, _current_key: Option<&str>, specifier: &str) -> Result { + if specifier != "./post.md" { + return Err(Diagnostic::new( + DiagnosticKind::Import, + Span::default(), + format!("unknown content import `{specifier}`"), + )); + } + let value = parse_test_markdown(&self.source)?; + Ok(LoadedImport::value("content/post.md", value)) + } + } + + fn parse_test_markdown(source: &str) -> Result { + let source = source.strip_prefix("---\n").ok_or_else(|| { + Diagnostic::new( + DiagnosticKind::Import, + Span::default(), + "markdown frontmatter must start with `---`", + ) + })?; + let (frontmatter, body) = source.split_once("\n---\n").ok_or_else(|| { + Diagnostic::new( + DiagnosticKind::Import, + Span::default(), + "markdown frontmatter is not terminated", + ) + })?; + let mut fields = Vec::new(); + for line in frontmatter.lines() { + let (name, value) = line.split_once(':').ok_or_else(|| { + Diagnostic::new( + DiagnosticKind::Import, + Span::default(), + "invalid markdown frontmatter field", + ) + })?; + let value = match value.trim() { + "true" => HostValue::bool(true), + "false" => HostValue::bool(false), + value => HostValue::string(value.trim_matches('"')), + }; + fields.push((name.trim(), value)); + } + Ok(HostValue::object([ + ("frontmatter", HostValue::object(fields)), + ("body", HostValue::string(body)), + ])) + } + + #[test] + fn imports_host_structured_content() { + let mut engine = Engine::new(MarkdownLoader { + source: String::from("---\ntitle: \"Hello\"\ndraft: false\n---\n# Hello\n\nBody text."), + }); + let module = engine + .add_root_source( + "main.dcdl", + "main.dcdl", + r#" + let + Post = { + frontmatter = { + title = String; + draft = Bool; + }; + body = String; + }; + post = Post & import "./post.md"; + in { + title = post.frontmatter.title; + draft = post.frontmatter.draft; + body = post.body; + } + "#, + ) + .unwrap(); + let value = engine.eval_module(module).unwrap(); + let data = engine.materialize(&value).unwrap(); + let Data::Object(fields) = data else { panic!() }; + assert_eq!(fields[0].value, Data::String(String::from("Hello"))); + assert_eq!(fields[1].value, Data::Bool(false)); + assert_eq!( + fields[2].value, + Data::String(String::from("# Hello\n\nBody text.")) + ); + } + + struct StructuredAliasLoader; + + impl ImportLoader for StructuredAliasLoader { + fn load(&mut self, _current_key: Option<&str>, _specifier: &str) -> Result { + Ok(LoadedImport::value( + "shared-value", + HostValue::int_type().default_int(1)?, + )) + } + } + + #[test] + fn structured_imports_share_cached_runtime_value_by_key() { + let mut engine = Engine::new(StructuredAliasLoader); + let module = engine + .add_root_source( + "main.dcdl", + "main.dcdl", + r#"(import "./first.data") & (import "./second.data")"#, + ) + .unwrap(); + let value = engine.eval_module(module).unwrap(); + let data = engine.materialize(&value).unwrap(); + assert_eq!(data, Data::Int(1)); + } + #[test] fn top_level_fields_are_recursive_module_scope() { let mut engine = Engine::new(EmptyLoader); diff --git a/crates/decodal-core/src/lib.rs b/crates/decodal-core/src/lib.rs index 27900be..4eebbb4 100644 --- a/crates/decodal-core/src/lib.rs +++ b/crates/decodal-core/src/lib.rs @@ -21,7 +21,7 @@ pub use decodal_derive::Decodal; pub use diagnostic::{Diagnostic, DiagnosticKind, Result}; pub use embedding::{HostField, HostValue}; pub use eval::{Engine, format_diagnostic_with}; -pub use module::{EmptyLoader, LoadedSource, Module, SourceLoader}; +pub use module::{EmptyLoader, ImportLoader, LoadedImport, LoadedSource, LoadedValue, Module}; pub use parser::{ParseOutput, Parser, SourceForm, parse_source, parse_source_with_source_id}; pub use runtime::{Constraint, Data, ExprRef, LiteralValue, ModuleId, PrimitiveType, RuntimeValue}; pub use span::{SourceId, Span}; diff --git a/crates/decodal-core/src/module.rs b/crates/decodal-core/src/module.rs index c7e209a..70b5f8d 100644 --- a/crates/decodal-core/src/module.rs +++ b/crates/decodal-core/src/module.rs @@ -1,7 +1,7 @@ use alloc::string::String; use crate::{ - Ast, ExprId, SourceForm, SourceId, + Ast, ExprId, HostValue, SourceForm, SourceId, runtime::{EnvId, ThunkId}, }; @@ -24,15 +24,48 @@ pub struct LoadedSource { pub source: String, } -pub trait SourceLoader { - fn load(&mut self, current_key: Option<&str>, specifier: &str) -> crate::Result; +#[derive(Debug, Clone)] +pub struct LoadedValue { + pub key: String, + pub value: HostValue, +} + +#[derive(Debug, Clone)] +pub enum LoadedImport { + Source(LoadedSource), + Value(LoadedValue), +} + +impl LoadedImport { + pub fn source( + key: impl Into, + name: impl Into, + source: impl Into, + ) -> Self { + Self::Source(LoadedSource { + key: key.into(), + name: name.into(), + source: source.into(), + }) + } + + pub fn value(key: impl Into, value: HostValue) -> Self { + Self::Value(LoadedValue { + key: key.into(), + value, + }) + } +} + +pub trait ImportLoader { + fn load(&mut self, current_key: Option<&str>, specifier: &str) -> crate::Result; } #[derive(Debug, Clone, Copy, Default)] pub struct EmptyLoader; -impl SourceLoader for EmptyLoader { - fn load(&mut self, _current_key: Option<&str>, specifier: &str) -> crate::Result { +impl ImportLoader for EmptyLoader { + fn load(&mut self, _current_key: Option<&str>, specifier: &str) -> crate::Result { Err(crate::Diagnostic::new( crate::DiagnosticKind::Import, crate::Span::default(), diff --git a/crates/decodal-wasm/src/lib.rs b/crates/decodal-wasm/src/lib.rs index 1c5f7af..5a2705f 100644 --- a/crates/decodal-wasm/src/lib.rs +++ b/crates/decodal-wasm/src/lib.rs @@ -1,8 +1,8 @@ use std::collections::BTreeMap; use decodal::{ - Data, Diagnostic, DiagnosticKind, EmptyLoader, Engine, LoadedSource, SourceId, SourceLoader, - Span, format_diagnostic_with, + Data, Diagnostic, DiagnosticKind, EmptyLoader, Engine, ImportLoader, LoadedImport, + LoadedSource, SourceId, Span, format_diagnostic_with, }; use wasm_bindgen::prelude::*; @@ -76,12 +76,12 @@ struct VirtualLoader { files: BTreeMap, } -impl SourceLoader for VirtualLoader { +impl ImportLoader for VirtualLoader { fn load( &mut self, current_key: Option<&str>, specifier: &str, - ) -> decodal::Result { + ) -> decodal::Result { let key = resolve_import(current_key, specifier).ok_or_else(|| { Diagnostic::new( DiagnosticKind::Import, @@ -96,11 +96,11 @@ impl SourceLoader for VirtualLoader { format!("import `{specifier}` resolved to `{key}`, but that file does not exist"), ) })?; - Ok(LoadedSource { + Ok(LoadedImport::Source(LoadedSource { key: key.clone(), name: key, source, - }) + })) } } diff --git a/doc/manual/souce/design/embedding-api.md b/doc/manual/souce/design/embedding-api.md index 8b5df2c..5028ceb 100644 --- a/doc/manual/souce/design/embedding-api.md +++ b/doc/manual/souce/design/embedding-api.md @@ -1,7 +1,7 @@ # Embedding API Decodal core can be embedded without giving the core crate access to a filesystem. -The host supplies imported sources through `SourceLoader` and may also provide global bindings through the host prelude API. +The host supplies imports through `ImportLoader` and may also provide global bindings through the host prelude API. ## Host prelude @@ -131,11 +131,32 @@ Supported field attributes are intentionally small: The derive does not add host callbacks or reflection. It only generates schema construction and typed decoding code. -## SourceLoader and prelude together +## ImportLoader and prelude together -`SourceLoader` and host prelude bindings are independent mechanisms. +`ImportLoader` and host prelude bindings are independent mechanisms. -- Use `SourceLoader` when user sources should explicitly import host-provided modules. +- Use `ImportLoader` when user sources should explicitly import host-provided sources or values. - Use prelude bindings when host-provided schemas or constants should be globally available. Both mechanisms share the same runtime evaluator, thunk model, and materialization rules. + +## Structured imports + +`ImportLoader::load` returns either `LoadedImport::Source` or `LoadedImport::Value`. +The value variant carries a `HostValue`, allowing a host to parse non-Decodal resources such as Markdown into an application-specific structure. + +```text +import "./post.md" + -> host parses content + -> LoadedImport::Value( + { frontmatter: {...}, body: "..." } + ) + -> Engine internalizes HostValue + -> normal composition and materialization +``` + +The core does not select content types or bundle Markdown/frontmatter parsers. +The loader owns path resolution, media or extension dispatch, parsing rules, and parse diagnostics. +The stable loader key is also used to cache structured imports. + +`load` is the single import hook: loaders dispatch by extension, media type, or another host-defined rule and return the appropriate variant directly. diff --git a/doc/manual/souce/design/execution-pipeline.md b/doc/manual/souce/design/execution-pipeline.md index 1d40e29..a14860e 100644 --- a/doc/manual/souce/design/execution-pipeline.md +++ b/doc/manual/souce/design/execution-pipeline.md @@ -66,14 +66,16 @@ ModuleRegistry: 処理系は、まず root module を parse / desugar して registry に登録する。 import 先 module は、この段階で全て読み込む必要はない。 -import expression が評価されたとき、処理系は `SourceLoader` に現在の module key と import specifier を渡す。 -loader は module key、表示名、source text を返す。 -module registry は key が未登録なら対象 module を parse / desugar して登録する。 -登録された module は module root thunk を持つ。 -同じ module が複数回 import された場合は、同じ `ModuleId` を返す。 +import expression が評価されたとき、処理系は `ImportLoader::load` に現在の module key と import specifier を渡す。 +loader は module key、表示名、および DCDL source text または構造化済み `HostValue` を返す。 +DCDL source の場合、module registry は key が未登録なら対象 module を parse / desugar して登録する。 +登録された source module は module root thunk を持つ。 +構造化値の場合、host value を runtime value に internalize した root thunk を key でキャッシュする。 +同じ key が複数回 import された場合は、同じ source module または structured root thunk を使う。 -つまり import は module を即時評価しない。 +つまり source import は module を即時評価しない。 module を読み込み、module root を thunk として登録するだけにする。 +structured import も root value を thunk として保持し、object field や array item の既存 thunk model を利用する。 AST の `ExprId` は module-local である。 そのため runtime が保持する式参照は `ExprRef { module, expr }` として module-qualified にする。 diff --git a/doc/manual/souce/design/runtime-model.md b/doc/manual/souce/design/runtime-model.md index 7db2877..69d41d7 100644 --- a/doc/manual/souce/design/runtime-model.md +++ b/doc/manual/souce/design/runtime-model.md @@ -104,7 +104,7 @@ Concrete(Int(8000)) ## Runtime scope Decodal runtime は application runtime ではなく、pure value evaluator である。 -同じ source、同じ import sources、同じ host globals が与えられた場合、評価結果は決定的である。 +同じ source、同じ import results、同じ host globals が与えられた場合、評価結果は決定的である。 runtime が扱う責務は以下に限る。 @@ -114,7 +114,7 @@ runtime が扱う責務は以下に限る。 - materialize 時に constraint を検証する。 runtime は filesystem、network、environment variable、time、random、mutation を扱わない。 -core における import は host supplied source を受け取る境界であり、filesystem access ではない。 +core における import は host supplied source または structured value を受け取る境界であり、filesystem access ではない。 ## Constraint diff --git a/doc/manual/souce/language/modules-and-imports.md b/doc/manual/souce/language/modules-and-imports.md index f28273c..78a4509 100644 --- a/doc/manual/souce/language/modules-and-imports.md +++ b/doc/manual/souce/language/modules-and-imports.md @@ -32,15 +32,77 @@ result = schema; 通常の object literal 内の field は、その object 内の sibling field を暗黙には識別子として参照できない。 object 内の値を参照する場合は、外側で束縛された値や明示的な path reference を使う。 -## SourceLoader +## ImportLoader -`import` specifier の解決は処理系 core ではなく host 側の `SourceLoader` が行う。 +`import` specifier の解決は処理系 core ではなく host 側の `ImportLoader` が行う。 CLI では、specifier を現在の module path からの相対 path として解決する。 組み込み利用では、resource table や static source map など、filesystem 以外の loader を使える。 module cache の key は loader が返す安定 key を使う。 CLI では canonical path を key とする。 +### 構造化 import + +`ImportLoader::load` は DCDL source または host が構築した `HostValue` を import 結果として返す。 +Markdown、JSON、TOML などの解釈規則は core に固定せず、loader がファイル種別を判定して構造化する。 + +```rust +use decodal::{HostValue, ImportLoader, LoadedImport}; + +struct ContentLoader; + +impl ImportLoader for ContentLoader { + fn load( + &mut self, + current_key: Option<&str>, + specifier: &str, + ) -> decodal::Result { + if specifier.ends_with(".md") { + let markdown = read_content(current_key, specifier)?; + let parsed = parse_frontmatter(&markdown)?; + return Ok(LoadedImport::value( + parsed.key, + HostValue::object([ + ("frontmatter", parsed.frontmatter), + ("body", HostValue::string(parsed.body)), + ]), + )); + } + + let source = read_dcdl(current_key, specifier)?; + Ok(LoadedImport::source( + source.key, + specifier, + source.text, + )) + } +} +``` + +`read_content` と `parse_frontmatter` は host 独自の処理であり、Decodal core は Markdown や YAML parser に依存しない。 +上の loader を使うと、DCDL 側から次のように扱える。 + +```dcdl +Post = { + frontmatter = { + title = String; + draft = Bool default false; + }; + body = String; +}; + +post = Post & import "./hello.md"; +title = post.frontmatter.title; +body = post.body; +``` + +`LoadedImport::Value` は通常の concrete runtime value に internalize される。 +そのため、path reference、object composition、constraint validation、materialize は source 由来の値と同じ規則を使う。 +安定した `key` が同じ構造化 import は、engine 内で同じ値としてキャッシュされる。 + +`load` が唯一の import hook である。 +loader は拡張子、media type、または host 独自の規則で振り分け、対応する `LoadedImport` variant を直接返す。 + ## 循環 import モジュール間に循環参照があっても、必要なフィールドの依存関係が循環していなければ評価できる。 @@ -93,4 +155,5 @@ Module func - ファイルが読めない。 - import 先の構文解析に失敗する。 - import 先の評価で必要な値がエラーになる。 +- host による非 DCDL content の読み込みまたは構造化に失敗する。 - 実装が禁止する import 循環に該当する。 diff --git a/packages/decodal-wasm/decodal_wasm_bg.wasm b/packages/decodal-wasm/decodal_wasm_bg.wasm index 2a2cb52730453788e028d31a55bd46baf12bd4da..8139ed9fde7978b7b5ae2422893f3f8d93f12898 100644 GIT binary patch delta 86402 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 ?^0MB8N`$oMOED+K_ay%+e-8UPVpLyWqGHcPz> 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%0Aceq>@N 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 delta 70209 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%0Ar2R)RDFWEbrc$vQfFKX*81}_pVA!k?U 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 mnBaK0ewVnL!U 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