diff --git a/crates/csharp/src/AsyncSupport.cs b/crates/csharp/src/AsyncSupport.cs new file mode 100644 index 000000000..a80ec6e4a --- /dev/null +++ b/crates/csharp/src/AsyncSupport.cs @@ -0,0 +1,9 @@ +/** + * Helpers for the async support. + */ + + public enum CallbackCode +{ + Exit = 0, + Yield = 1, +} diff --git a/crates/csharp/src/FutureCommonSupport.cs b/crates/csharp/src/FutureCommonSupport.cs new file mode 100644 index 000000000..275dc53ca --- /dev/null +++ b/crates/csharp/src/FutureCommonSupport.cs @@ -0,0 +1,59 @@ +/** + * Helpers for future support. + */ + +public readonly struct WaitableStatus (int status) +{ + public int State => status & 0xf; + public int Count => (int)(status >> 4); + public bool IsBlocked => status == -1; + public bool IsCompleted => State == 0; + public bool IsDropped => State == 1; +} + +public enum EventCode +{ + None, + Subtask, + StreamRead, + StreamWrite, + FutureRead, + FutureWrite, + Cancel, +} + +public readonly struct EventWaitable +{ + public EventWaitable(EventCode eventCode, int waitable, int code) + { + Event = eventCode; + Waitable = waitable; + Status = new WaitableStatus(code); + } + public readonly EventCode Event; + public readonly int Waitable; + public readonly int Code; + + public readonly WaitableStatus Status; +} + +public partial class WaitableSet(int handle) : IDisposable +{ + public int Handle { get; } = handle; + + void Dispose(bool _disposing) + { + {{interop_name}}.WaitableSetDrop(Handle); + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + ~WaitableSet() + { + Dispose(false); + } +} \ No newline at end of file diff --git a/crates/csharp/src/FutureReaderSupport.cs b/crates/csharp/src/FutureReaderSupport.cs new file mode 100644 index 000000000..8def9ad1f --- /dev/null +++ b/crates/csharp/src/FutureReaderSupport.cs @@ -0,0 +1,49 @@ +/** + * Helpers for future reader support. + */ + +public abstract class FutureReader(int handle) : IDisposable // : TODO Waitable +{ + public int Handle { get; } = handle; + + // TODO: Generate per type for this instrinsic. + public Task Read() + { + // TODO: Generate for the interop name and the namespace. + + var status = new WaitableStatus(ReadInternal()); + if (status.IsBlocked) + { + //TODO: store somewhere so we can complete it later. + var tcs = new TaskCompletionSource(); + + return tcs.Task; + } + if (status.IsCompleted) + { + return Task.CompletedTask; + } + + throw new NotImplementedException(); + } + + void Dispose(bool _disposing) + { + // Free unmanaged resources if any. + Drop(); + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + ~FutureReader() + { + Dispose(false); + } + + protected abstract int ReadInternal(); + protected abstract void Drop(); +} \ No newline at end of file diff --git a/crates/csharp/src/FutureWriterSupport.cs b/crates/csharp/src/FutureWriterSupport.cs new file mode 100644 index 000000000..2e81fedcb --- /dev/null +++ b/crates/csharp/src/FutureWriterSupport.cs @@ -0,0 +1,44 @@ +/** + * Helpers for future writer support. + */ + +public abstract class FutureWriter(int handle) // : TODO Waitable +{ + public int Handle { get; } = handle; + + // TODO: Generate per type for this instrinsic. + public Task Write() + { + // TODO: Generate for the interop name. + var status = new WaitableStatus(Write(Handle, IntPtr.Zero)); + if (status.IsBlocked) + { + //TODO: store somewhere so we can complete it later. + var tcs = new TaskCompletionSource(); + return tcs.Task; + } + + throw new NotImplementedException(); + } + + protected abstract void Drop(); + + void Dispose(bool _disposing) + { + // Free unmanaged resources if any. + Drop(); + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + ~FutureWriter() + { + Dispose(false); + } + + protected abstract int Write(int handle, IntPtr buffer); +} diff --git a/crates/csharp/src/csproj.rs b/crates/csharp/src/csproj.rs index ebd6c4276..52661d877 100644 --- a/crates/csharp/src/csproj.rs +++ b/crates/csharp/src/csproj.rs @@ -109,11 +109,10 @@ impl CSProjectLLVMBuilder { csproj.push_str( &format!( r#" - - - - - "#), + + + + "#), ); fs::write( @@ -153,8 +152,9 @@ impl CSProjectLLVMBuilder { } csproj.push_str( - r#" - "#, + r#" + +"#, ); fs::write(self.dir.join(format!("{camel}.csproj")), csproj)?; diff --git a/crates/csharp/src/function.rs b/crates/csharp/src/function.rs index 55c4fc8e3..dcb9025e0 100644 --- a/crates/csharp/src/function.rs +++ b/crates/csharp/src/function.rs @@ -5,7 +5,7 @@ use heck::ToUpperCamelCase; use std::fmt::Write; use std::mem; use std::ops::Deref; -use wit_bindgen_core::abi::{Bindgen, Bitcast, Instruction}; +use wit_bindgen_core::abi::{self, Bindgen, Bitcast, Instruction}; use wit_bindgen_core::{uwrite, uwriteln, Direction, Ns}; use wit_parser::abi::WasmType; use wit_parser::{ @@ -32,6 +32,7 @@ pub(crate) struct FunctionBindgen<'a, 'b> { is_block: bool, fixed_statments: Vec, parameter_type: ParameterType, + result_type: Option, } impl<'a, 'b> FunctionBindgen<'a, 'b> { @@ -42,6 +43,7 @@ impl<'a, 'b> FunctionBindgen<'a, 'b> { params: Box<[String]>, results: Vec, parameter_type: ParameterType, + result_type: Option, ) -> FunctionBindgen<'a, 'b> { let mut locals = Ns::default(); // Ensure temporary variable names don't clash with parameter names: @@ -67,6 +69,7 @@ impl<'a, 'b> FunctionBindgen<'a, 'b> { is_block: false, fixed_statments: Vec::new(), parameter_type: parameter_type, + result_type: result_type, } } @@ -304,7 +307,13 @@ impl<'a, 'b> FunctionBindgen<'a, 'b> { let ty = self .interface_gen .type_name_with_qualifier(&func.result.unwrap(), true); - uwriteln!(self.src, "{ty} {ret};"); + let is_async = InterfaceGenerator::is_async(&func.kind); + + if is_async { + uwriteln!(self.src, "Task<{ty}> {ret};"); + } else { + uwriteln!(self.src, "{ty} {ret};"); + } let mut cases = Vec::with_capacity(self.results.len()); let mut oks = Vec::with_capacity(self.results.len()); let mut payload_is_void = false; @@ -371,6 +380,44 @@ impl<'a, 'b> FunctionBindgen<'a, 'b> { } ret } + + fn emit_allocation_for_type(&mut self, results: &[WasmType]) -> String { + let address = self.locals.tmp("address"); + let buffer_size = self.get_size_for_type(results); + let align = self.get_align_for_type(results); + uwriteln!(self.src, "void* {address} = global::System.Runtime.InteropServices.NativeMemory.AlignedAlloc({buffer_size}, {align});"); + + // TODO: Store the address somewhere so we can free it when the task completes. + address + } + + fn get_size_for_type(&self, results: &[WasmType]) -> usize { + match results { + [WasmType::I32] => 4, + [WasmType::I64] => 8, + [WasmType::F32] => 4, + [WasmType::F64] => 8, + [WasmType::Pointer, WasmType::Length] => 4, // TODO: Wasm64 + [WasmType::PointerOrI64, WasmType::Length] => 8, + _ => { + todo!("other types not yet supported"); + } + } + } + + fn get_align_for_type(&self, results: &[WasmType]) -> usize { + match results { + [WasmType::I32] => 4, + [WasmType::I64] => 8, + [WasmType::F32] => 4, + [WasmType::F64] => 8, + [WasmType::Pointer, WasmType::Length] => 4, // TODO: Wasm64 + [WasmType::PointerOrI64, WasmType::Length] => 8, + _ => { + todo!("other types not yet supported"); + } + } + } } impl Bindgen for FunctionBindgen<'_, '_> { @@ -400,22 +447,22 @@ impl Bindgen for FunctionBindgen<'_, '_> { })), Instruction::I32Load { offset } | Instruction::PointerLoad { offset } - | Instruction::LengthLoad { offset } => results.push(format!("global::System.BitConverter.ToInt32(new global::System.Span((void*)({} + {offset}), 4))",operands[0],offset = offset.size_wasm32())), - Instruction::I32Load8U { offset } => results.push(format!("new global::System.Span((void*)({} + {offset}), 1)[0]",operands[0],offset = offset.size_wasm32())), - Instruction::I32Load8S { offset } => results.push(format!("(sbyte)new global::System.Span((void*)({} + {offset}), 1)[0]",operands[0],offset = offset.size_wasm32())), - Instruction::I32Load16U { offset } => results.push(format!("global::System.BitConverter.ToUInt16(new global::System.Span((void*)({} + {offset}), 2))",operands[0],offset = offset.size_wasm32())), - Instruction::I32Load16S { offset } => results.push(format!("global::System.BitConverter.ToInt16(new global::System.Span((void*)({} + {offset}), 2))",operands[0],offset = offset.size_wasm32())), - Instruction::I64Load { offset } => results.push(format!("global::System.BitConverter.ToInt64(new global::System.Span((void*)({} + {offset}), 8))",operands[0],offset = offset.size_wasm32())), - Instruction::F32Load { offset } => results.push(format!("global::System.BitConverter.ToSingle(new global::System.Span((void*)({} + {offset}), 4))",operands[0],offset = offset.size_wasm32())), - Instruction::F64Load { offset } => results.push(format!("global::System.BitConverter.ToDouble(new global::System.Span((void*)({} + {offset}), 8))",operands[0],offset = offset.size_wasm32())), + | Instruction::LengthLoad { offset } => results.push(format!("global::System.BitConverter.ToInt32(new global::System.Span((byte*){} + {offset}, 4))",operands[0],offset = offset.size_wasm32())), + Instruction::I32Load8U { offset } => results.push(format!("new global::System.Span((byte*){} + {offset}, 1)[0]",operands[0],offset = offset.size_wasm32())), + Instruction::I32Load8S { offset } => results.push(format!("(sbyte)new global::System.Span((byte*){} + {offset}, 1)[0]",operands[0],offset = offset.size_wasm32())), + Instruction::I32Load16U { offset } => results.push(format!("global::System.BitConverter.ToUInt16(new global::System.Span((byte*){} + {offset}, 2))",operands[0],offset = offset.size_wasm32())), + Instruction::I32Load16S { offset } => results.push(format!("global::System.BitConverter.ToInt16(new global::System.Span((byte*){} + {offset}, 2))",operands[0],offset = offset.size_wasm32())), + Instruction::I64Load { offset } => results.push(format!("global::System.BitConverter.ToInt64(new global::System.Span((byte*){} + {offset}, 8))",operands[0],offset = offset.size_wasm32())), + Instruction::F32Load { offset } => results.push(format!("global::System.BitConverter.ToSingle(new global::System.Span((byte*){} + {offset}, 4))",operands[0],offset = offset.size_wasm32())), + Instruction::F64Load { offset } => results.push(format!("global::System.BitConverter.ToDouble(new global::System.Span((byte*){} + {offset}, 8))",operands[0],offset = offset.size_wasm32())), Instruction::I32Store { offset } | Instruction::PointerStore { offset } - | Instruction::LengthStore { offset } => uwriteln!(self.src, "global::System.BitConverter.TryWriteBytes(new global::System.Span((void*)({} + {offset}), 4), {});", operands[1], operands[0],offset = offset.size_wasm32()), + | Instruction::LengthStore { offset } => uwriteln!(self.src, "global::System.BitConverter.TryWriteBytes(new global::System.Span((byte*){} + {offset}, 4), {});", operands[1], operands[0],offset = offset.size_wasm32()), Instruction::I32Store8 { offset } => uwriteln!(self.src, "*(byte*)({} + {offset}) = (byte){};", operands[1], operands[0],offset = offset.size_wasm32()), - Instruction::I32Store16 { offset } => uwriteln!(self.src, "global::System.BitConverter.TryWriteBytes(new global::System.Span((void*)({} + {offset}), 2), (short){});", operands[1], operands[0],offset = offset.size_wasm32()), - Instruction::I64Store { offset } => uwriteln!(self.src, "global::System.BitConverter.TryWriteBytes(new global::System.Span((void*)({} + {offset}), 8), unchecked((long){}));", operands[1], operands[0],offset = offset.size_wasm32()), - Instruction::F32Store { offset } => uwriteln!(self.src, "global::System.BitConverter.TryWriteBytes(new global::System.Span((void*)({} + {offset}), 4), unchecked((float){}));", operands[1], operands[0],offset = offset.size_wasm32()), - Instruction::F64Store { offset } => uwriteln!(self.src, "global::System.BitConverter.TryWriteBytes(new global::System.Span((void*)({} + {offset}), 8), unchecked((double){}));", operands[1], operands[0],offset = offset.size_wasm32()), + Instruction::I32Store16 { offset } => uwriteln!(self.src, "global::System.BitConverter.TryWriteBytes(new global::System.Span((byte*){} + {offset}, 2), (short){});", operands[1], operands[0],offset = offset.size_wasm32()), + Instruction::I64Store { offset } => uwriteln!(self.src, "global::System.BitConverter.TryWriteBytes(new global::System.Span((byte*){} + {offset}, 8), unchecked((long){}));", operands[1], operands[0],offset = offset.size_wasm32()), + Instruction::F32Store { offset } => uwriteln!(self.src, "global::System.BitConverter.TryWriteBytes(new global::System.Span((byte*){} + {offset}, 4), unchecked((float){}));", operands[1], operands[0],offset = offset.size_wasm32()), + Instruction::F64Store { offset } => uwriteln!(self.src, "global::System.BitConverter.TryWriteBytes(new global::System.Span((byte*){} + {offset}, 8), unchecked((double){}));", operands[1], operands[0],offset = offset.size_wasm32()), Instruction::I64FromU64 => results.push(format!("unchecked((long)({}))", operands[0])), Instruction::I32FromChar => results.push(format!("((int){})", operands[0])), @@ -956,11 +1003,24 @@ impl Bindgen for FunctionBindgen<'_, '_> { } Instruction::CallWasm { sig, .. } => { + let is_async = InterfaceGenerator::is_async(self.kind); + + let requires_async_return_buffer_param = is_async && sig.results.len() >= 1; + let async_return_buffer = if requires_async_return_buffer_param { + let buffer = self.emit_allocation_for_type(&sig.results); + uwriteln!(self.src, "//TODO: store somewhere with the TaskCompletionSource, possibly in the state, using Task.AsyncState to retrieve it later."); + Some(buffer) + } else { + None + }; + let assignment = match &sig.results[..] { [_] => { let result = self.locals.tmp("result"); let assignment = format!("var {result} = "); - results.push(result); + if !requires_async_return_buffer_param { + results.push(result); + } assignment } @@ -971,12 +1031,36 @@ impl Bindgen for FunctionBindgen<'_, '_> { let func_name = self.func_name.to_upper_camel_case(); - let operands = operands.join(", "); + // Async functions that return a result need to pass a buffer where the result will later be written. + let operands = match async_return_buffer { + Some(ref buffer) if operands.is_empty() => buffer.clone(), + Some(ref buffer) => format!("{}, {}", operands.join(", "), buffer), + None => operands.join(", "), + }; + + let (_namespace, interface_name) = + &CSharp::get_class_name_from_qualified_name(self.interface_gen.name); + let interop_name = format!("{}Interop", interface_name.strip_prefix("I").unwrap()); uwriteln!( self.src, - "{assignment} {func_name}WasmInterop.wasmImport{func_name}({operands});" + "{assignment} {interop_name}.{func_name}WasmInterop.wasmImport{func_name}({operands});" ); + + if let Some(buffer) = async_return_buffer { + let result = abi::lift_from_memory( + self.interface_gen.resolve, + self, + buffer.clone(), + &self.result_type.unwrap(), + ); + uwriteln!( + self.src, + "global::System.Runtime.InteropServices.NativeMemory.Free({});", + buffer + ); + results.push(result); + } } Instruction::CallInterface { func, .. } => { @@ -1003,6 +1087,7 @@ impl Bindgen for FunctionBindgen<'_, '_> { } } + let is_async = InterfaceGenerator::is_async(self.kind); match self.kind { FunctionKind::Constructor(id) => { let target = self.interface_gen.csharp_gen.all_resources[id].export_impl_name(); @@ -1018,7 +1103,13 @@ impl Bindgen for FunctionBindgen<'_, '_> { }; match func.result { - None => uwriteln!(self.src, "{target}.{func_name}({oper});"), + None => { + if is_async{ + uwriteln!(self.src, "var ret = {target}.{func_name}({oper});"); + } else { + uwriteln!(self.src, "{target}.{func_name}({oper});"); + } + } Some(_ty) => { let ret = self.handle_result_call(func, target, func_name, oper); results.push(ret); @@ -1027,6 +1118,25 @@ impl Bindgen for FunctionBindgen<'_, '_> { } } + if is_async { + self.interface_gen.csharp_gen.needs_async_support = true; + let name = self.func_name.to_upper_camel_case(); + let ret_param = match func.result { + None => "", + Some(_ty) => "ret.Result" + }; + + uwriteln!(self.src, r#"if (ret.IsCompletedSuccessfully) + {{ + {name}TaskReturn({ret_param}); + return (uint)CallbackCode.Exit; + }} + + // TODO: Defer dropping borrowed resources until a result is returned. + return (uint)CallbackCode.Yield; + "#); + } + for (_, drop) in &self.resource_drops { uwriteln!(self.src, "{drop}?.Dispose();"); } @@ -1243,15 +1353,37 @@ impl Bindgen for FunctionBindgen<'_, '_> { results.extend(operands.iter().take(*amt).map(|v| v.clone())); } - Instruction::AsyncTaskReturn { .. } - | Instruction::FutureLower { .. } - | Instruction::FutureLift { .. } - | Instruction::StreamLower { .. } + Instruction::FutureLower { .. } => { + let op = &operands[0]; + self.interface_gen.add_future(self.func_name); + + results.push(format!("{op}.Handle")); + } + + Instruction::AsyncTaskReturn { name: _, params: _ } => { + uwriteln!(self.src, "// TODO_task_cancel.forget();"); + } + + Instruction::FutureLift { payload: _, ty: _ } => { + // TODO get the prefix for the type + let sig_type_name = "Void"; + uwriteln!(self.src, "var reader = new {}.FutureReader{}({});", self.interface_gen.name, sig_type_name, operands[0]); + self.interface_gen.csharp_gen.needs_future_reader_support = true; + results.push("reader".to_string()); + + self.interface_gen.add_future(self.func_name); + self.interface_gen.csharp_gen.needs_future_reader_support = true; + } + + Instruction::StreamLower { .. } | Instruction::StreamLift { .. } | Instruction::ErrorContextLower { .. } | Instruction::ErrorContextLift { .. } | Instruction::DropHandle { .. } - => todo!(), + => { + dbg!(inst); + todo!() + } } } diff --git a/crates/csharp/src/interface.rs b/crates/csharp/src/interface.rs index fa4464134..9a8c88fe4 100644 --- a/crates/csharp/src/interface.rs +++ b/crates/csharp/src/interface.rs @@ -47,9 +47,19 @@ pub(crate) struct InterfaceGenerator<'a> { pub(crate) resolve: &'a Resolve, pub(crate) name: &'a str, pub(crate) direction: Direction, + pub(crate) futures: Vec, } impl InterfaceGenerator<'_> { + pub fn is_async(kind: &FunctionKind) -> bool { + matches!( + kind, + FunctionKind::AsyncFreestanding + | FunctionKind::AsyncStatic(_) + | FunctionKind::AsyncMethod(_) + ) + } + pub(crate) fn define_interface_types(&mut self, id: InterfaceId) { let mut live = LiveTypes::default(); live.add_interface(self.resolve, id); @@ -117,6 +127,7 @@ impl InterfaceGenerator<'_> { // Handles don't require a separate definition beyond what we already define for the corresponding // resource types. } + TypeDefKind::Future(t) => self.type_future(type_id, typedef_name, t, &type_def.docs), _ => unreachable!(), } } @@ -161,6 +172,198 @@ impl InterfaceGenerator<'_> { }); } + pub(crate) fn add_futures(&mut self, import_module_name: &str) { + if self.futures.is_empty() { + return; + } + + let (_namespace, interface_name) = &CSharp::get_class_name_from_qualified_name(self.name); + let interop_name = format!("{}Interop", interface_name.strip_prefix("I").unwrap()); + + for future in &self.futures { + let camel_name = future.to_upper_camel_case(); + + //TODO: we need these per future type. + // Create a hash map.. + uwrite!( + self.csharp_interop_src, + r#" + [global::System.Runtime.InteropServices.DllImportAttribute("{import_module_name}", EntryPoint = "[future-new-0][async]{future}"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute] + internal static extern ulong {camel_name}VoidNew(); + "# + ); + + // TODO: Move this and other type dependent functions out to another function. + uwrite!( + self.csharp_interop_src, + r#" + [global::System.Runtime.InteropServices.DllImportAttribute("{import_module_name}", EntryPoint = "[future-cancel-read-0][async]{future}"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute] + internal static extern uint {camel_name}CancelRead(int readable); + "# + ); + + uwrite!( + self.csharp_interop_src, + r#" + [global::System.Runtime.InteropServices.DllImportAttribute("{import_module_name}", EntryPoint = "[future-cancel-write-0][async]{future}"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute] + internal static extern uint {camel_name}CancelWrite(int writeable); + "# + ); + + uwrite!( + self.csharp_interop_src, + r#" + [global::System.Runtime.InteropServices.DllImportAttribute("{import_module_name}", EntryPoint = "[future-drop-writeable-0][async]{future}"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute] + internal static extern void {camel_name}DropWriteable(int writeable); + "# + ); + + self.csharp_gen + .interface_fragments + .entry(self.name.to_string()) + .or_insert_with(|| InterfaceTypeAndFragments::new(false)) + .interface_fragments + .push(InterfaceFragment { + csharp_src: format!(r#" + public static (FutureReader, FutureWriter) {camel_name}VoidNew() + {{ + var packed = {interop_name}.{camel_name}VoidNew(); + var readerHandle = (int)(packed & 0xFFFFFFFF); + var writerHandle = (int)(packed >> 32); + + return (new FutureReaderVoid(readerHandle), new FutureWriterVoid(writerHandle)); + }} + "#).to_string(), + csharp_interop_src: "".to_string(), + stub: "".to_string(), + }); + + self.csharp_gen.needs_future_reader_support = true; + self.csharp_gen.needs_future_writer_support = true; + } + + uwrite!( + self.csharp_interop_src, + r#" + [global::System.Runtime.InteropServices.DllImportAttribute("$root", EntryPoint = "[waitable-set-new]"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute] + internal static extern int WaitableSetNew(); + "# + ); + + uwrite!( + self.csharp_interop_src, + r#" + [global::System.Runtime.InteropServices.DllImportAttribute("$root", EntryPoint = "[waitable-join]"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute] + internal static extern void WaitableJoin(int waitable, int set); + "# + ); + + uwrite!( + self.csharp_interop_src, + r#" + [global::System.Runtime.InteropServices.DllImportAttribute("$root", EntryPoint = "[waitable-set-wait]"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute] + internal static unsafe extern int WaitableSetWait(int waitable, int* waitableHandlePtr); + "# + ); + + uwrite!( + self.csharp_interop_src, + r#" + [global::System.Runtime.InteropServices.DllImportAttribute("$root", EntryPoint = "[waitable-set-drop]"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute] + internal static unsafe extern void WaitableSetDrop(int waitable); + "# + ); + + // TODO: for each type: + let future_type_name = "Void"; + + self.csharp_gen + .interface_fragments + .entry(self.name.to_string()) + .or_insert_with(|| InterfaceTypeAndFragments::new(false)) + .interface_fragments + .push(InterfaceFragment { + csharp_src: format!(r#" + public class FutureReader{future_type_name} : FutureReader + {{ + public FutureReader{future_type_name}(int handle) : base(handle) {{ }} + + protected override int ReadInternal() + {{ + return {interop_name}.FutureRead{future_type_name}(Handle, IntPtr.Zero); + }} + + protected override void Drop() + {{ + {interop_name}.FutureDropReader{future_type_name}(Handle); + }} + }} + + public class FutureWriter{future_type_name} : FutureWriter + {{ + public FutureWriter{future_type_name}(int handle) : base(handle) {{ }} + + protected override int Write(int handle, IntPtr buffer) + {{ + return {interop_name}.FutureWrite{future_type_name}(handle, buffer); + }} + + protected override void Drop() + {{ + {interop_name}.FutureDropWriter{future_type_name}(Handle); + }} + }} + "#).to_string(), + csharp_interop_src: format!(r#" + [global::System.Runtime.InteropServices.DllImportAttribute("{import_module_name}", EntryPoint = "[async-lower][future-read-0][async]read-future"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute] + internal static unsafe extern int FutureRead{future_type_name}(int readable, IntPtr ptr); + + [global::System.Runtime.InteropServices.DllImportAttribute("{import_module_name}", EntryPoint = "[async-lower][future-write-0][async]read-future"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute] + internal static unsafe extern int FutureWrite{future_type_name}(int writeable, IntPtr buffer); + + [global::System.Runtime.InteropServices.DllImportAttribute("{import_module_name}", EntryPoint = "[future-drop-readable-0][async]read-future"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute] + internal static extern void FutureDropReader{future_type_name}(int readable); + + [global::System.Runtime.InteropServices.DllImportAttribute("{import_module_name}", EntryPoint = "[future-drop-writable-0][async]read-future"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute] + internal static extern void FutureDropWriter{future_type_name}(int readable); + "#).to_string(), + stub: "".to_string(), + }); + + self.csharp_gen + .interface_fragments + .entry(self.name.to_string()) + .or_insert_with(|| InterfaceTypeAndFragments::new(false)) + .interface_fragments + .push(InterfaceFragment { + csharp_src: format!( + r#" + public static WaitableSet WaitableSetNew() + {{ + var waitable = {interop_name}.WaitableSetNew(); + return new WaitableSet(waitable); + }} + + public static void Join(FutureWriter writer, WaitableSet set) + {{ + {interop_name}.WaitableJoin(writer.Handle, set.Handle); + }} + + public unsafe static EventWaitable WaitableSetWait(WaitableSet set) + {{ + int* buffer = stackalloc int[2]; + var eventCode = (EventCode){interop_name}.WaitableSetWait(set.Handle, buffer); + return new EventWaitable(eventCode, buffer[0], buffer[1]); + }} + + "# + ) + .to_string(), + csharp_interop_src: "".to_string(), + stub: "".to_string(), + }); + } + pub(crate) fn add_world_fragment(self) { self.csharp_gen.world_fragments.push(InterfaceFragment { csharp_src: self.src, @@ -170,69 +373,80 @@ impl InterfaceGenerator<'_> { } pub(crate) fn import(&mut self, import_module_name: &str, func: &Function) { - let (camel_name, modifiers) = match &func.kind { + let camel_name = match &func.kind { FunctionKind::Freestanding | FunctionKind::Static(_) | FunctionKind::AsyncFreestanding - | FunctionKind::AsyncStatic(_) => (func.item_name().to_upper_camel_case(), "static"), + | FunctionKind::AsyncStatic(_) => func.item_name().to_upper_camel_case(), FunctionKind::Method(_) | FunctionKind::AsyncMethod(_) => { - (func.item_name().to_upper_camel_case(), "") + func.item_name().to_upper_camel_case() + } + FunctionKind::Constructor(id) => { + self.csharp_gen.all_resources[id].name.to_upper_camel_case() } - FunctionKind::Constructor(id) => ( - self.csharp_gen.all_resources[id].name.to_upper_camel_case(), - "", - ), }; let access = self.csharp_gen.access_modifier(); - let extra_modifiers = extra_modifiers(func, &camel_name); + let modifiers = modifiers(func, &camel_name, Direction::Import); let interop_camel_name = func.item_name().to_upper_camel_case(); let sig = self.resolve.wasm_signature(AbiVariant::GuestImport, func); - let wasm_result_type = match &sig.results[..] { - [] => "void", + let is_async = matches!( + func.kind, + FunctionKind::AsyncFreestanding + | FunctionKind::AsyncStatic(_) + | FunctionKind::AsyncMethod(_) + ); + + let mut wasm_result_type = match &sig.results[..] { + [] => { + if is_async { + "uint" + } else { + "void" + } + } [result] => crate::world_generator::wasm_type(*result), _ => unreachable!(), }; - let (result_type, results) = if let FunctionKind::Constructor(_) = &func.kind { - (String::new(), Vec::new()) + let (result_type, results) = self.func_payload_and_return_type(func); + + let is_async = InterfaceGenerator::is_async(&func.kind); + + let requires_async_return_buffer_param = is_async && !sig.results.is_empty(); + let sig_unsafe = if requires_async_return_buffer_param { + "unsafe " } else { - match func.result { - None => ("void".to_string(), Vec::new()), - Some(ty) => { - let (payload, results) = payload_and_results( - self.resolve, - ty, - self.csharp_gen.opts.with_wit_results, - ); - ( - if let Some(ty) = payload { - self.csharp_gen.needs_result = true; - self.type_name_with_qualifier(&ty, true) - } else { - "void".to_string() - }, - results, - ) + "" + }; + + let wasm_params: String = { + let param_list = sig + .params + .iter() + .enumerate() + .map(|(i, param)| { + let ty = crate::world_generator::wasm_type(*param); + format!("{ty} p{i}") + }) + .collect::>() + .join(", "); + + if requires_async_return_buffer_param { + if param_list.is_empty() { + "void *taskResultBuffer".to_string() + } else { + format!("{}, void *taskResultBuffer", param_list) } + } else { + param_list } }; - let wasm_params = sig - .params - .iter() - .enumerate() - .map(|(i, param)| { - let ty = crate::world_generator::wasm_type(*param); - format!("{ty} p{i}") - }) - .collect::>() - .join(", "); - let mut funcs: Vec<(String, String)> = Vec::new(); funcs.push(self.gen_import_src(func, &results, ParameterType::ABI)); @@ -251,30 +465,29 @@ impl InterfaceGenerator<'_> { funcs.push(self.gen_import_src(func, &results, ParameterType::Memory)); } - let import_name = &func.name; - - let target = if let FunctionKind::Freestanding = &func.kind { - &mut self.csharp_interop_src + let import_name = if is_async { + wasm_result_type = "uint"; + format!("[async-lower]{}", func.name) } else { - &mut self.src + func.name.to_string() }; uwrite!( - target, + self.csharp_interop_src, r#" internal static class {interop_camel_name}WasmInterop {{ [global::System.Runtime.InteropServices.DllImportAttribute("{import_module_name}", EntryPoint = "{import_name}"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute] - internal static extern {wasm_result_type} wasmImport{interop_camel_name}({wasm_params}); + internal static extern {sig_unsafe}{wasm_result_type} wasmImport{interop_camel_name}({wasm_params}); }} "# ); for (src, params) in funcs { uwrite!( - target, + self.src, r#" - {access} {extra_modifiers} {modifiers} unsafe {result_type} {camel_name}({params}) + {access} {modifiers} unsafe {result_type} {camel_name}({params}) {{ {src} }} @@ -283,6 +496,73 @@ impl InterfaceGenerator<'_> { } } + fn func_payload_and_return_type(&mut self, func: &Function) -> (String, Vec) { + let return_type = self.func_return_type(func); + let results = if let FunctionKind::Constructor(_) = &func.kind { + Vec::new() + } else { + let payload = match func.result { + None => Vec::new(), + Some(ty) => { + let (_payload, results) = payload_and_results( + self.resolve, + ty, + self.csharp_gen.opts.with_wit_results, + ); + results + } + }; + + payload + }; + + (return_type, results) + } + + fn func_return_type(&mut self, func: &Function) -> String { + let result_type = if let FunctionKind::Constructor(_) = &func.kind { + String::new() + } else { + let base_type = match func.result { + None => "void".to_string(), + Some(_ty) => { + let result_type = match func.result { + None => "void".to_string(), + Some(ty) => { + let (payload, _results) = payload_and_results( + self.resolve, + ty, + self.csharp_gen.opts.with_wit_results, + ); + if let Some(ty) = payload { + self.csharp_gen.needs_result = true; + self.type_name_with_qualifier(&ty, true) + } else { + "void".to_string() + } + } + }; + + result_type + } + }; + + let asyncified_type = match &func.kind { + FunctionKind::AsyncFreestanding + | FunctionKind::AsyncStatic(_) + | FunctionKind::AsyncMethod(_) => match func.result { + None => "Task".to_string(), + Some(_ty) => format!("Task<{}>", base_type), + }, + _ => base_type, + }; + + asyncified_type + }; + + result_type + } + fn gen_import_src( &mut self, func: &Function, @@ -306,6 +586,7 @@ impl InterfaceGenerator<'_> { .collect(), results.clone(), parameter_type, + func.result, ); abi::call( @@ -340,49 +621,24 @@ impl InterfaceGenerator<'_> { } pub(crate) fn export(&mut self, func: &Function, interface_name: Option<&WorldKey>) { - let (camel_name, modifiers) = match &func.kind { + let camel_name = match &func.kind { FunctionKind::Freestanding | FunctionKind::Static(_) | FunctionKind::AsyncFreestanding - | FunctionKind::AsyncStatic(_) => { - (func.item_name().to_upper_camel_case(), "static abstract") - } + | FunctionKind::AsyncStatic(_) => func.item_name().to_upper_camel_case(), FunctionKind::Method(_) | FunctionKind::AsyncMethod(_) => { - (func.item_name().to_upper_camel_case(), "") + func.item_name().to_upper_camel_case() + } + FunctionKind::Constructor(id) => { + self.csharp_gen.all_resources[id].name.to_upper_camel_case() } - FunctionKind::Constructor(id) => ( - self.csharp_gen.all_resources[id].name.to_upper_camel_case(), - "", - ), }; - let extra_modifiers = extra_modifiers(func, &camel_name); + let modifiers = modifiers(func, &camel_name, Direction::Export); let sig = self.resolve.wasm_signature(AbiVariant::GuestExport, func); - let (result_type, results) = if let FunctionKind::Constructor(_) = &func.kind { - (String::new(), Vec::new()) - } else { - match func.result { - None => ("void".to_owned(), Vec::new()), - Some(ty) => { - let (payload, results) = payload_and_results( - self.resolve, - ty, - self.csharp_gen.opts.with_wit_results, - ); - ( - if let Some(ty) = payload { - self.csharp_gen.needs_result = true; - self.type_name(&ty) - } else { - "void".to_string() - }, - results, - ) - } - } - }; + let (result_type, results) = self.func_payload_and_return_type(func); let mut bindgen = FunctionBindgen::new( self, @@ -391,6 +647,14 @@ impl InterfaceGenerator<'_> { (0..sig.params.len()).map(|i| format!("p{i}")).collect(), results, ParameterType::ABI, + func.result, + ); + + let async_ = matches!( + func.kind, + FunctionKind::AsyncFreestanding + | FunctionKind::AsyncStatic(_) + | FunctionKind::AsyncMethod(_) ); abi::call( @@ -399,7 +663,7 @@ impl InterfaceGenerator<'_> { LiftLower::LiftArgsLowerResults, func, &mut bindgen, - false, + async_, ); let src = bindgen.src; @@ -411,10 +675,14 @@ impl InterfaceGenerator<'_> { .collect::>() .join(";\n"); - let wasm_result_type = match &sig.results[..] { - [] => "void", - [result] => crate::world_generator::wasm_type(*result), - _ => unreachable!(), + let wasm_result_type = if async_ { + "uint" + } else { + match &sig.results[..] { + [] => "void", + [result] => crate::world_generator::wasm_type(*result), + _ => unreachable!(), + } }; let wasm_params = sig @@ -444,9 +712,17 @@ impl InterfaceGenerator<'_> { .collect::>() .join(", "); - let interop_name = format!("wasmExport{}", func.name.to_upper_camel_case()); + let wasm_func_name = func.name.clone(); + let interop_name = format!("wasmExport{}", wasm_func_name.to_upper_camel_case()); let core_module_name = interface_name.map(|s| self.resolve.name_world_key(s)); let export_name = func.legacy_core_export_name(core_module_name.as_deref()); + + let export_name = if async_ { + format!("[async-lift]{export_name}") + } else { + export_name.to_string() + }; + let access = self.csharp_gen.access_modifier(); uwrite!( @@ -479,6 +755,7 @@ impl InterfaceGenerator<'_> { (0..sig.results.len()).map(|i| format!("p{i}")).collect(), Vec::new(), ParameterType::ABI, + func.result, ); abi::post_return(bindgen.interface_gen.resolve, func, &mut bindgen); @@ -496,10 +773,52 @@ impl InterfaceGenerator<'_> { ); } + if async_ { + let import_module_name = &self.resolve.name_world_key(interface_name.unwrap()); + let (_namespace, interface_name) = + &CSharp::get_class_name_from_qualified_name(self.name); + let impl_name = format!("{}Impl", interface_name.strip_prefix("I").unwrap()); + + uwriteln!( + self.csharp_interop_src, + r#" + [global::System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute(EntryPoint = "[callback][async-lift]{import_module_name}#{wasm_func_name}")] + public static int {camel_name}Callback(uint eventRaw, uint waitable, uint code) + {{ + // TODO: decode the parameters + return {impl_name}.{camel_name}Callback(); + }} + "# + ); + + uwriteln!( + self.src, + r#" + public static abstract int {camel_name}Callback(); + "# + ); + + // TODO: The task return function can take up to 16 core parameters. + let task_return_param = match &sig.results[..] { + [] => "", + [_result] => &format!("{} result", wasm_result_type), + _ => unreachable!(), + }; + + uwriteln!( + self.csharp_interop_src, + r#" + // TODO: The task return function can take up to 16 core parameters. + [global::System.Runtime.InteropServices.DllImportAttribute("[export]{import_module_name}", EntryPoint = "[task-return]{wasm_func_name}"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute] + internal static extern void {camel_name}TaskReturn({task_return_param}); + "# + ); + } + if !matches!(&func.kind, FunctionKind::Constructor(_)) { uwrite!( self.src, - r#"{extra_modifiers} {modifiers} {result_type} {camel_name}({params}); + r#"{modifiers} {result_type} {camel_name}({params}); "# ); @@ -659,6 +978,17 @@ impl InterfaceGenerator<'_> { let (Handle::Own(id) | Handle::Borrow(id)) = handle; self.type_name_with_qualifier(&Type::Id(*id), qualifier) } + TypeDefKind::Future(ty) => { + let name = ty + .as_ref() + .map(|ty| self.type_name_with_qualifier(ty, qualifier)) + .unwrap_or_else(|| "".to_owned()); + if name.is_empty() { + return "FutureReader".to_owned(); + } else { + return format!("FutureReader<{name}>"); + } + } _ => { if let Some(name) = &ty.name { format!( @@ -883,26 +1213,7 @@ impl InterfaceGenerator<'_> { } fn sig_string(&mut self, func: &Function, qualifier: bool) -> String { - let result_type = if let FunctionKind::Constructor(_) = &func.kind { - String::new() - } else { - match func.result { - None => "void".into(), - Some(ty) => { - let (payload, _) = payload_and_results( - self.resolve, - ty, - self.csharp_gen.opts.with_wit_results, - ); - if let Some(ty) = payload { - self.csharp_gen.needs_result = true; - self.type_name_with_qualifier(&ty, qualifier) - } else { - "void".to_string() - } - } - } - }; + let result_type = self.func_return_type(&func); let params = func .params @@ -938,6 +1249,10 @@ impl InterfaceGenerator<'_> { format!("{access} {modifiers} {result_type} {camel_name}({params})") } + + pub(crate) fn add_future(&mut self, func_name: &str) { + self.futures.push(func_name.to_string()); + } } impl<'a> CoreInterfaceGenerator<'a> for InterfaceGenerator<'a> { @@ -1202,14 +1517,12 @@ impl<'a> CoreInterfaceGenerator<'a> for InterfaceGenerator<'a> { .direction = self.direction; } - fn type_future(&mut self, id: TypeId, name: &str, ty: &Option, docs: &Docs) { - _ = (id, name, ty, docs); - todo!() + fn type_future(&mut self, id: TypeId, _name: &str, _ty: &Option, _docs: &Docs) { + self.type_name(&Type::Id(id)); } - fn type_stream(&mut self, id: TypeId, name: &str, ty: &Option, docs: &Docs) { - _ = (id, name, ty, docs); - todo!() + fn type_stream(&mut self, id: TypeId, _name: &str, _ty: &Option, _docs: &Docs) { + self.type_name(&Type::Id(id)); } } @@ -1251,17 +1564,41 @@ fn payload_and_results( (payload, results) } -fn extra_modifiers(func: &Function, name: &str) -> &'static str { - if let FunctionKind::Method(_) = &func.kind { +fn modifiers(func: &Function, name: &str, direction: Direction) -> String { + let new_modifier = match &func.kind { // Avoid warnings about name clashes. // // TODO: add other `object` method names here - if name == "GetType" { - return "new"; + FunctionKind::Method(_) if name == "GetType" => " new", + _ => "", + }; + + let static_modifiers = match &func.kind { + FunctionKind::Freestanding + | FunctionKind::Static(_) + | FunctionKind::AsyncFreestanding + | FunctionKind::AsyncStatic(_) => "static", + _ => "", + }; + + let abstract_modifier = if direction == Direction::Export { + " abstract" + } else { + "" + }; + + let async_modifier = match &func.kind { + FunctionKind::AsyncMethod(_) + | FunctionKind::AsyncFreestanding + | FunctionKind::AsyncStatic(_) + if abstract_modifier == "" => + { + " async" } - } + _ => "", + }; - "" + format!("{static_modifiers}{abstract_modifier}{async_modifier}{new_modifier}") } fn int_type(int: Int) -> &'static str { diff --git a/crates/csharp/src/world_generator.rs b/crates/csharp/src/world_generator.rs index e8a31fc98..be0c4bd4a 100644 --- a/crates/csharp/src/world_generator.rs +++ b/crates/csharp/src/world_generator.rs @@ -32,6 +32,9 @@ pub struct CSharp { pub(crate) needs_export_return_area: bool, pub(crate) needs_rep_table: bool, pub(crate) needs_wit_exception: bool, + pub(crate) needs_async_support: bool, + pub(crate) needs_future_reader_support: bool, + pub(crate) needs_future_writer_support: bool, pub(crate) interface_fragments: HashMap, pub(crate) world_fragments: Vec, pub(crate) sizes: SizeAlign, @@ -70,6 +73,7 @@ impl CSharp { resolve, name, direction, + futures: Vec::new(), } } @@ -112,6 +116,7 @@ impl WorldGenerator for CSharp { old_resources.extend(new_resources.clone()); gen.csharp_gen.all_resources = old_resources; + let import_module_name = &resolve.name_world_key(key); for (resource, funcs) in by_resource( resolve.interfaces[id] .functions @@ -123,7 +128,6 @@ impl WorldGenerator for CSharp { gen.start_resource(resource, Some(key)); } - let import_module_name = &resolve.name_world_key(key); for func in funcs { gen.import(import_module_name, func); } @@ -136,6 +140,8 @@ impl WorldGenerator for CSharp { // for anonymous types gen.define_interface_types(id); + gen.add_futures(import_module_name); + gen.add_interface_fragment(false); Ok(()) @@ -214,6 +220,9 @@ impl WorldGenerator for CSharp { // for anonymous types gen.define_interface_types(id); + let import_module_name = &resolve.name_world_key(key); + gen.add_futures(&format!("[export]{import_module_name}")); + gen.add_interface_fragment(true); Ok(()) } @@ -507,6 +516,37 @@ impl WorldGenerator for CSharp { src.push_str("}\n"); } + if self.needs_async_support { + src.push_str("\n"); + src.push_str(include_str!("AsyncSupport.cs")); + } + + if (self.needs_future_reader_support || self.needs_future_writer_support) + && self.interface_fragments.len() > 0 + { + let full_name = self.interface_fragments.iter().next().unwrap().0; + + let (namespace, interface_name) = + &CSharp::get_class_name_from_qualified_name(full_name); + let base_name = interface_name.strip_prefix("I").unwrap(); + let full_name = format!("{namespace}.{base_name}Interop"); + src.push_str("\n"); + src.push_str( + &include_str!("FutureCommonSupport.cs") + .replace("{{interop_name}}", full_name.as_str()), + ); + } + + if self.needs_future_reader_support { + src.push_str("\n"); + src.push_str(include_str!("FutureReaderSupport.cs")); + } + + if self.needs_future_writer_support { + src.push_str("\n"); + src.push_str(include_str!("FutureWriterSupport.cs")); + } + src.push_str("\n"); src.push_str("}\n"); diff --git a/crates/test/src/csharp.rs b/crates/test/src/csharp.rs index 0bfeebbbc..d015c41a9 100644 --- a/crates/test/src/csharp.rs +++ b/crates/test/src/csharp.rs @@ -36,11 +36,19 @@ impl LanguageMethods for Csharp { fn should_fail_verify( &self, - _name: &str, - config: &crate::config::WitConfig, + name: &str, + _config: &crate::config::WitConfig, _args: &[String], ) -> bool { - config.async_ + // TODO: remove this exclusions as support is created + matches!( + name, + "resources-with-streams.wit" + | "resources-with-futures.wit" + | "futures.wit" + | "streams.wit" + | "error-context.wit" + ) } fn prepare(&self, runner: &mut Runner<'_>) -> Result<()> { @@ -89,6 +97,18 @@ impl LanguageMethods for Csharp { // .arg("/bl") // to diagnose dotnet build problems .arg("-o") .arg(&out_wasm); + + let os = match std::env::consts::OS { + "windows" => "win", + "linux" => std::env::consts::OS, + other => todo!("OS {} not supported", other), + }; + + // TODO: Workaround for no aarch64(arm64 in dotnet parlance) packages on Windows + if os == "win" && std::env::consts::ARCH == "aarch64" { + cmd.arg("/p:_hostArchitecture=x64"); + } + runner.run_command(&mut cmd)?; fs::copy(&wasm_filename, &compile.output)?; diff --git a/crates/test/src/lib.rs b/crates/test/src/lib.rs index 468eaa309..448cc4263 100644 --- a/crates/test/src/lib.rs +++ b/crates/test/src/lib.rs @@ -811,7 +811,12 @@ impl Runner<'_> { } wasmparser::Validator::new_with_features(wasmparser::WasmFeatures::all()) .validate_all(&wasm) - .with_context(|| format!("compiler produced invalid wasm file {output:?}"))?; + .with_context(|| { + format!( + "compiler produced invalid wasm file {output:?} for component {}", + component.name + ) + })?; Ok(output) } diff --git a/tests/codegen/futures.wit b/tests/codegen/futures.wit index e312bc2e4..392727414 100644 --- a/tests/codegen/futures.wit +++ b/tests/codegen/futures.wit @@ -3,91 +3,9 @@ package foo:foo; interface futures { - future-param: func(x: future); - future-u8-param: func(x: future); - future-u16-param: func(x: future); - future-u32-param: func(x: future); - future-u64-param: func(x: future); - future-s8-param: func(x: future); - future-s16-param: func(x: future); - future-s32-param: func(x: future); - future-s64-param: func(x: future); - future-f32-param: func(x: future); - future-f64-param: func(x: future); - - future-ret: func() -> future; - future-u8-ret: func() -> future; - future-u16-ret: func() -> future; - future-u32-ret: func() -> future; - future-u64-ret: func() -> future; - future-s8-ret: func() -> future; - future-s16-ret: func() -> future; - future-s32-ret: func() -> future; - future-s64-ret: func() -> future; - future-f32-ret: func() -> future; - future-f64-ret: func() -> future; - - future-result-list-string-ret: func() -> future>>; - future-result-list-list-u8-ret: func() -> future>>>; - future-list-list-list-u8-ret: func() -> future>>>; - - tuple-future: func(x: future>) -> future>; - string-future-arg: func(a: future); - string-future-ret: func() -> future; - tuple-string-future: func(x: future>) -> future>; - string-future: func(x: future) -> future; - - record some-record { - x: string, - y: other-record, - z: future, - c1: u32, - c2: u64, - c3: s32, - c4: s64, - } - record other-record { - a1: u32, - a2: u64, - a3: s32, - a4: s64, - b: string, - c: future, - } - record-future: func(x: future) -> future; - record-future-reverse: func(x: future) -> future; - - variant some-variant { - a(string), - b, - c(u32), - d(future), - } - variant other-variant { - a, - b(u32), - c(string), - } - variant-future: func(x: future) -> future; - - type load-store-all-sizes = future>; - load-store-everything: func(a: load-store-all-sizes) -> load-store-all-sizes; + future-param: async func(x: future); } world the-futures { import futures; - export futures; } diff --git a/tests/runtime-async/async/simple-future/runner.cs b/tests/runtime-async/async/simple-future/runner.cs new file mode 100644 index 000000000..76d0c9016 --- /dev/null +++ b/tests/runtime-async/async/simple-future/runner.cs @@ -0,0 +1,57 @@ +using System; +using System.Runtime.InteropServices; +using System.Diagnostics; +using RunnerWorld.wit.imports.my.test; +using RunnerWorld; + +public class Program +{ + public static async Task Main(string[] args) + { + { + var (reader, writer) = II.ReadFutureVoidNew(); + + var writeTask = writer.Write(); + Debug.Assert(!writeTask.IsCompleted); + + var task = II.ReadFuture(reader); + Debug.Assert(task.IsCompleted); + + var set = II.WaitableSetNew(); + II.Join(writer, set); + + var ev = new EventWaitable(); + var status = II.WaitableSetWait(set); + Debug.Assert(status.Event == EventCode.FutureWrite); + Debug.Assert(status.Waitable == writer.Handle); + Debug.Assert(status.Status.IsCompleted); + Debug.Assert(status.Status.Count == 0); + + writer.Dispose(); + set.Dispose(); + } + + { + var (reader, writer) = II.DropFutureVoidNew(); + + var writeTask = writer.Write(); + Debug.Assert(!writeTask.IsCompleted); + + var task = II.DropFuture(reader); + Debug.Assert(task.IsCompleted); + + var set = II.WaitableSetNew(); + II.Join(writer, set); + + var ev = new EventWaitable(); + var status = II.WaitableSetWait(set); + Debug.Assert(status.Event == EventCode.FutureWrite); + Debug.Assert(status.Waitable == writer.Handle); + Debug.Assert(status.Status.IsDropped); + Debug.Assert(status.Status.Count == 0); + + writer.Dispose(); + set.Dispose(); + } + } +} \ No newline at end of file diff --git a/tests/runtime-async/async/simple-future/test.cs b/tests/runtime-async/async/simple-future/test.cs new file mode 100644 index 000000000..c1d447bb2 --- /dev/null +++ b/tests/runtime-async/async/simple-future/test.cs @@ -0,0 +1,38 @@ +using System.Diagnostics; + +namespace TestWorld.wit.exports.my.test +{ + public class IImpl : II + { + public static Task ReadFuture(FutureReader reader) + { + var task = reader.Read(); + + Debug.Assert(task.IsCompleted); + // TODO: Should we check the Count? + + reader.Dispose(); + + return Task.CompletedTask; + } + + public static int ReadFutureCallback() + { + Debug.Assert(false); + return 0; + } + + public static Task DropFuture(FutureReader reader) + { + reader.Dispose(); + return Task.CompletedTask; + } + + public static int DropFutureCallback() + { + Debug.Assert(false); + return 0; + } + + } +} diff --git a/tests/runtime-async/async/simple-import-params-results/runner.cs b/tests/runtime-async/async/simple-import-params-results/runner.cs new file mode 100644 index 000000000..1098b9209 --- /dev/null +++ b/tests/runtime-async/async/simple-import-params-results/runner.cs @@ -0,0 +1,29 @@ +using System; +using System.Runtime.InteropServices; +using System.Diagnostics; +using RunnerWorld.wit.imports.a.b; +using System.Text; + +public class Program +{ + public static async Task Main(string[] args) + { + var t = II.OneArgument(1); + Debug.Assert(t.IsCompletedSuccessfully); + + var tOneResult = II.OneResult(); + Debug.Assert(tOneResult.IsCompletedSuccessfully); + Debug.Assert(tOneResult.Result == 2); + + var tOneArgumentAndResult = II.OneArgumentAndResult(3); + Debug.Assert(tOneArgumentAndResult.IsCompletedSuccessfully); + Debug.Assert(tOneArgumentAndResult.Result == 4); + + var tTwoArguments = II.TwoArguments(5, 6); + Debug.Assert(tTwoArguments.IsCompletedSuccessfully); + + var tTwoArgumentsAndResult = II.TwoArgumentsAndResult(7, 8); + Debug.Assert(tTwoArgumentsAndResult.IsCompletedSuccessfully); + Debug.Assert(tTwoArgumentsAndResult.Result == 9); + } +} diff --git a/tests/runtime-async/async/simple-import-params-results/test.cs b/tests/runtime-async/async/simple-import-params-results/test.cs new file mode 100644 index 000000000..57c0ac905 --- /dev/null +++ b/tests/runtime-async/async/simple-import-params-results/test.cs @@ -0,0 +1,37 @@ +using System.Diagnostics; +using TestWorld.wit.exports.a.b; + +namespace TestWorld.wit.exports.a.b +{ + public class IImpl : II + { + public static async Task OneArgument(uint x) + { + Debug.Assert(x == 1); + } + + public static async Task OneResult() + { + return 2; + } + + public static async Task OneArgumentAndResult(uint x) + { + Debug.Assert(x == 3); + return 4; + } + + public static async Task TwoArguments(uint x, uint y) + { + Debug.Assert(x == 5); + Debug.Assert(y == 6); + } + + public static async Task TwoArgumentsAndResult(uint x, uint y) + { + Debug.Assert(x == 7); + Debug.Assert(y == 8); + return 9; + } + } +} diff --git a/wit-bindgen.sln b/wit-bindgen.sln new file mode 100644 index 000000000..b9c5c0b3f --- /dev/null +++ b/wit-bindgen.sln @@ -0,0 +1,1268 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.2.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "target", "target", "{185866E3-F889-713C-3B9B-1F8348842EAC}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "artifacts", "artifacts", "{48E3226E-F0B1-589A-9D38-3EB18BF00425}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "csharp", "target\artifacts\csharp\csharp.csproj", "{0AFAC59C-1CDA-6784-9728-6C81ADA2728B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "codegen", "codegen", "{F513CEA4-6298-3741-5E32-50FD198C283D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "csharp", "csharp", "{F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "async-simple-params-results", "target\artifacts\codegen\csharp\async-simple-params-results\async-simple-params-results.csproj", "{1452FCAC-8669-8D5D-BFF7-F7D06CAFFADA}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "demo", "demo", "{5DF826B6-5011-1BD6-D432-CFD73200E8EE}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{4F91E8C6-5E05-70F1-0057-44E482DCFCD2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\demo\runner-csharp\bindings\RunnerWorld.csproj", "{B8CC26DE-F529-047A-1617-FDB210639EDB}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{0B10BE8E-4AAC-68DC-A33C-A33FD8B54CAB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\demo\test-csharp\bindings\TestWorld.csproj", "{20658278-75E7-34A5-EE1D-3B2D8F7E2C62}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "lists", "lists", "{C5E5B846-FB7E-E480-1348-190C699523C6}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{37CD989D-268C-3366-6ED6-17FF36EA7A8E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\lists\runner-csharp\bindings\RunnerWorld.csproj", "{B5CEEC08-74F8-A211-86C4-18BA25330D88}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{E9949D46-C35B-4ADE-1623-5D672001E7B1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\lists\test-csharp\bindings\TestWorld.csproj", "{6557A001-801A-3707-5EEA-9B9CA66CD550}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "many-arguments", "many-arguments", "{C53FD2D0-6516-1028-F65A-CA6F7DB9FCDD}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{6832EE0C-7020-6BAF-48E1-825BE910CA7A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\many-arguments\runner-csharp\bindings\RunnerWorld.csproj", "{7C0777E0-DD44-E238-508D-20657804BFEA}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{3547B974-432E-E75A-CD0C-0F25EC531C5B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\many-arguments\test-csharp\bindings\TestWorld.csproj", "{4D2A2ECD-EA66-D0D5-30C9-80DD1B11579D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "numbers", "numbers", "{CF1B9BB0-FD82-C498-09E9-48F6BE33B0F0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{E3C0F9DE-BDB7-DEE9-2DC8-AFAAF3DDC53B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\numbers\runner-csharp\bindings\RunnerWorld.csproj", "{4D226192-FB4A-E1B1-8E54-5D957108A21B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{DFB245B2-A096-09F4-FEC3-076726C1964A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\numbers\test-csharp\bindings\TestWorld.csproj", "{39791CF6-BACF-1BB1-20C2-C8FE7859FB80}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "options", "options", "{CCFCD710-F1AE-2336-17C6-1885A4846A28}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{537B66FC-4C80-5B72-82D3-D0271B7681FB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\options\runner-csharp\bindings\RunnerWorld.csproj", "{B77DB325-270C-3E9B-B273-713F4B7ABA62}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{A72EDB07-5A13-6865-B098-B843D7129D2A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\options\test-csharp\bindings\TestWorld.csproj", "{C6C7D216-C08F-7601-346E-680AB6B88ED0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "records", "records", "{E3CC08B8-CB2A-0285-BA96-9A7F96427925}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{46689DAF-9F6D-F6AA-DF85-CF8AF9F5A032}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\records\runner-csharp\bindings\RunnerWorld.csproj", "{CC1ED9EE-8069-632A-1E90-D25EED4E9F73}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{B06C4E72-13A2-45C6-5DE2-59CF7BDF69BF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\records\test-csharp\bindings\TestWorld.csproj", "{2B4F3003-741B-EC4B-1343-FF5E6B53B5B6}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource-borrow", "resource-borrow", "{FD18CEEC-B9E3-6ECD-AC0A-E560D9DA8C67}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{F7B21209-40BC-9C10-DF34-CE90400262FF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\resource-borrow\runner-csharp\bindings\RunnerWorld.csproj", "{ABCE67C3-6834-2F58-25AA-D28F5EC30D34}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{C6C7CEBE-D9F9-9D5B-FD65-D9CE988A15FA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\resource-borrow\test-csharp\bindings\TestWorld.csproj", "{E0B7A8F7-8780-380A-A67E-FD0590B53A33}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource-import-and-export", "resource-import-and-export", "{4FB9782A-9AC3-4E0A-8EF6-4D703B3D9EBA}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "intermediate-csharp", "intermediate-csharp", "{516533B9-C537-EF0C-9C1A-008493BE1F59}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IntermediateWorld", "target\artifacts\resource-import-and-export\intermediate-csharp\bindings\IntermediateWorld.csproj", "{6027281A-6F7D-98BC-FD73-B716DB28A058}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resources", "resources", "{B7BD3A75-28BA-9360-6445-996743F08807}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resources-csharp", "resources-csharp", "{7FD7BE47-F56A-6770-27CA-B2CEB3B6E9AD}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourcesWorld", "target\artifacts\resources\resources-csharp\bindings\ResourcesWorld.csproj", "{88CF06A5-4755-4AAE-B804-F069EB2C207F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource_aggregates", "resource_aggregates", "{993A09A2-77BC-827E-B3A4-02A00D8EAFE8}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{CB5FDD3E-4033-7983-A457-C2347824D55E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\resource_aggregates\runner-csharp\bindings\RunnerWorld.csproj", "{8CAFFDB0-F5F6-A37E-37AD-7E285801744A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{03CA324C-43B6-DC1E-686F-FFEC749291D7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\resource_aggregates\test-csharp\bindings\TestWorld.csproj", "{87A1703D-4CAB-B1DC-0EFE-A8CD45C8E012}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource_alias", "resource_alias", "{A224B9CE-FBB5-72AC-7B97-498F1C879F7D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{EE2192B0-2FA8-3B48-C675-2E0F3992164B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\resource_alias\test-csharp\bindings\TestWorld.csproj", "{175EA3FB-9269-34B6-D98D-1D4671CA8983}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource_alias_redux", "resource_alias_redux", "{67EB6727-0FC6-4D29-F50A-8B696F24CC01}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{5B003213-30E3-B0C1-A122-9AEFDF29FD99}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\resource_alias_redux\runner-csharp\bindings\RunnerWorld.csproj", "{4077E3FE-5D0D-36BD-2596-03F99AB0741F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource_borrow_in_record", "resource_borrow_in_record", "{BA513238-0ECB-FFB2-0AB3-09EF6B7A6A82}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{88DB711A-C3DB-1D90-691B-88A3B7453750}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\resource_borrow_in_record\runner-csharp\bindings\RunnerWorld.csproj", "{B7E0F6A7-F75C-4F42-DA63-B3BED5B843B2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{4D60FA3C-0E30-3002-DBD9-7EAB2837D08D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\resource_borrow_in_record\test-csharp\bindings\TestWorld.csproj", "{E6484D67-74DE-3A1C-937B-E3E6541AFFBB}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource_floats", "resource_floats", "{B8083C4E-1037-FEF2-EBEC-18F45F494CCE}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "intermediate-csharp", "intermediate-csharp", "{E8A621F1-E833-6F77-3DFF-2E9C778B3FDC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IntermediateWorld", "target\artifacts\resource_floats\intermediate-csharp\bindings\IntermediateWorld.csproj", "{54A653F2-4FDE-CB75-DDB2-0F24C180A199}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource_into_inner", "resource_into_inner", "{95937D52-A7DE-47D6-CA32-872410343D6C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{1AFF4A1F-9AD8-37AC-C42A-C6C7D8289BED}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\resource_into_inner\test-csharp\bindings\TestWorld.csproj", "{B0B7E960-FFA4-BC99-7B5F-2C70FDB5C889}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource_with_lists", "resource_with_lists", "{8CD8027F-092E-CCC5-7A96-910E2081B858}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource-with-lists-csharp", "resource-with-lists-csharp", "{413C0971-57F2-3652-7F76-AF206909A4B0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceWithListsWorld", "target\artifacts\resource_with_lists\resource-with-lists-csharp\bindings\ResourceWithListsWorld.csproj", "{FA8EB7A6-B199-4717-76F9-7833D7FA0587}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "results", "results", "{0E409FE4-D68C-89CD-A377-F6B94EE8A224}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "intermediate-csharp", "intermediate-csharp", "{B5B1741C-25B2-17D9-2A2F-3D87FE4C4333}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IntermediateWorld", "target\artifacts\results\intermediate-csharp\bindings\IntermediateWorld.csproj", "{4474AF4E-A61D-0869-577A-F4FB37AA3F6F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "intermediate_with_wit_results-csharp", "intermediate_with_wit_results-csharp", "{2BE3D457-3B94-5769-2A2D-F6E04E44847C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IntermediateWorld", "target\artifacts\results\intermediate_with_wit_results-csharp\bindings\IntermediateWorld.csproj", "{23296A66-B1B4-240B-5CA4-CBA1022A78C2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "simple-import-params-results", "simple-import-params-results", "{4EA8E1B8-624E-1764-418C-7BC6C74E4F7A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{33AF56CE-BD50-C6C7-4FEB-4FB93B9744E7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\simple-import-params-results\runner-csharp\bindings\RunnerWorld.csproj", "{0550CBC4-2338-9FD5-D277-1E77E9357251}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{F0427A8E-7665-54FC-6491-A740768D695D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\simple-import-params-results\test-csharp\bindings\TestWorld.csproj", "{C0FDE9DF-887C-85CA-53FE-C6B2AF02F05D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "strings", "strings", "{56243652-4302-FCBD-28A7-EB0EFD23FD8A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{6EC8D689-219C-1997-FCC3-AFDF04D8A165}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\strings\runner-csharp\bindings\RunnerWorld.csproj", "{B1CFBBE2-8D18-84A4-4AA3-C29684E291A7}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{68F3CC92-4C24-6C95-3508-B0B71230E5A7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\strings\test-csharp\bindings\TestWorld.csproj", "{04BEB0D6-D615-F29C-C040-F99E15E3DA71}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "variants", "variants", "{26CFC9B7-E4C3-D90A-CEA1-FE4153B8FABB}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{52E46177-12EB-0D51-AE15-DC0CCD1AB66B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\variants\runner-csharp\bindings\RunnerWorld.csproj", "{79339DEB-B8F1-D636-7A82-1172C24F2D16}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{35EF0797-FBCE-1217-4DAE-5FDA19476735}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\variants\test-csharp\bindings\TestWorld.csproj", "{6B628034-BA3F-15F3-562F-6498272EFFDB}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "versions", "versions", "{03C30818-63C9-AAD2-E89F-152C41A3EA26}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{12724914-055D-ABA4-526C-5CF1388E474D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\versions\runner-csharp\bindings\RunnerWorld.csproj", "{429764B7-8A13-9F9C-8328-8CF141920861}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{B2E3AF3D-8C48-D851-0C7D-F14EFCF3E33E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\versions\test-csharp\bindings\TestWorld.csproj", "{38ACA1FC-FDA0-DD71-ACA9-6A1AB2DE1B1F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "allow-unused.wit", "allow-unused.wit", "{9A761EFC-6B67-AB80-7D4B-BE1179CE2EB2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\allow-unused.wit\bindings\TheWorldWorld.csproj", "{E48C0AB8-7249-0EA9-E9E2-45108449EAF0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "async-simple-params-results.wit", "async-simple-params-results.wit", "{06C7E673-01D0-108D-2EEC-564E2CBDAB3A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\async-simple-params-results.wit\bindings\TheWorldWorld.csproj", "{68D0DEBB-6583-23EE-CB5D-569D2A52787E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "async-trait-function.wit", "async-trait-function.wit", "{00B917E0-6395-CA44-54F8-79DABCF6858D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\async-trait-function.wit\bindings\TheWorldWorld.csproj", "{A2AD4594-34F6-1B52-706A-5BD54353761D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "char.wit", "char.wit", "{8BF3F716-A3C7-7C86-33A5-825C85289EA7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\char.wit\bindings\TheWorldWorld.csproj", "{BEF44FA5-535B-6433-BF71-B950C3A4D6D9}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "conventions.wit", "conventions.wit", "{FE8D9D35-674E-3595-A130-EF91CEA4BEEF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\conventions.wit\bindings\TheWorldWorld.csproj", "{0A2C92AB-B559-0957-00B3-2988D40A8F1F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "empty.wit", "empty.wit", "{50911366-A704-B102-02F5-AE4DABCF0B5E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\empty.wit\bindings\TheWorldWorld.csproj", "{A0967937-177F-8369-8507-419559771F9D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "enum-has-go-keyword.wit", "enum-has-go-keyword.wit", "{621944B1-86A4-1D8D-2D31-FCDC28FDC3F5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\enum-has-go-keyword.wit\bindings\TheWorldWorld.csproj", "{F943C0C7-44C3-5639-0D82-284C78A67051}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "flags.wit", "flags.wit", "{64D9FD21-4441-FE73-DD57-64F7E51876BC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\flags.wit\bindings\TheWorldWorld.csproj", "{7EB2B30F-63FD-B0CC-CAD5-A7AC290CDF1B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "floats.wit", "floats.wit", "{96E34AA0-FA06-6E51-F756-4A5212F2B651}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\floats.wit\bindings\TheWorldWorld.csproj", "{4C1BA462-5134-EBEF-8485-DE6AE23AD1CE}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "fully-qualified-java-address.wit", "fully-qualified-java-address.wit", "{A8EDB1DC-4F11-B534-71AE-03A7AD3253FB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\fully-qualified-java-address.wit\bindings\TheWorldWorld.csproj", "{E4F92444-C647-963E-7CE5-B5E0732826B0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "go_params.wit", "go_params.wit", "{080D8A02-6B4E-63AE-7911-5A02303DE08E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\go_params.wit\bindings\TheWorldWorld.csproj", "{5D1950FC-C854-F35E-2B4B-C1F3F78C2978}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "guest-name.wit", "guest-name.wit", "{A24046F0-272D-7C79-38E0-E922F43C8952}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\guest-name.wit\bindings\TheWorldWorld.csproj", "{15BA5917-B8D4-3779-981C-7F859E9018C2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "import-and-export-resource-alias.wit", "import-and-export-resource-alias.wit", "{384296FA-B8C9-0E1D-60F3-AD393F3EC7F4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\import-and-export-resource-alias.wit\bindings\TheWorldWorld.csproj", "{6232E88F-6CC8-67EF-3C09-D40A1B920A63}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "import-and-export-resource.wit", "import-and-export-resource.wit", "{A443DA34-2D19-185E-A91A-35651B36A5DC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\import-and-export-resource.wit\bindings\TheWorldWorld.csproj", "{0ADE2D25-CF4E-2661-13CE-9D269739D54A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "import-export-same-func.wit", "import-export-same-func.wit", "{66D3D456-3703-C8E5-976F-EC9ACFFD5BFC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\import-export-same-func.wit\bindings\TheWorldWorld.csproj", "{865AEFC5-D0F3-D914-EB46-C97AEB5ED73D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "import-func.wit", "import-func.wit", "{FDF99FE7-B988-D3A7-4E00-EE9B2148FD9E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\import-func.wit\bindings\TheWorldWorld.csproj", "{DE4121F9-166E-C4BF-591A-8A2D1D680274}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "import_export_func.wit", "import_export_func.wit", "{2F475A77-FAA4-8DD5-3E86-CC44D5C9657C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\import_export_func.wit\bindings\TheWorldWorld.csproj", "{F616F5D4-C8FC-FABB-9E71-D4D1C05F0518}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "integers.wit", "integers.wit", "{D9BE69F2-73D0-B6FD-1AB0-4269DBE378AC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\integers.wit\bindings\TheWorldWorld.csproj", "{B67BA4A2-DFA2-1E77-13A2-A88B5C99B6A7}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "interface-has-go-keyword.wit", "interface-has-go-keyword.wit", "{86E548F1-6325-3F66-13DB-758B2141038A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\interface-has-go-keyword.wit\bindings\TheWorldWorld.csproj", "{15B30AD5-7CC9-2721-F653-40C26D54B681}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "issue544.wit", "issue544.wit", "{068AC898-B9E8-E58E-8505-827029713779}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\issue544.wit\bindings\TheWorldWorld.csproj", "{1C219E9A-75EF-F4E1-29DA-576B33D426E8}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "issue551.wit", "issue551.wit", "{00802252-8C3A-B0C5-FA15-663CDC3FE749}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\issue551.wit\bindings\TheWorldWorld.csproj", "{6357E9FD-A15A-D94A-7239-F3EC69E0B345}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "issue569", "issue569", "{59BCC06C-0962-9AB9-E639-FC3326E980E3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\issue569\bindings\TheWorldWorld.csproj", "{520320B7-7D1B-2B3D-2131-6A4496B4B75F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "issue573.wit", "issue573.wit", "{3E8E8317-A1D0-BE58-A81A-53D5C2ED44E5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\issue573.wit\bindings\TheWorldWorld.csproj", "{550DA514-46E7-C696-5AC1-CA6F1C2A7837}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "issue607.wit", "issue607.wit", "{A179CAF4-C5CE-0A49-8168-3828244BF29C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\issue607.wit\bindings\TheWorldWorld.csproj", "{13DD3E53-6DB3-ED7A-C0E5-18FBD07D2FF1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "issue668.wit", "issue668.wit", "{0CCD2D7C-72B5-B5A4-E94E-54D6D62242E0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\issue668.wit\bindings\TheWorldWorld.csproj", "{728C4883-0E02-70AB-FEAB-141DF74ECC5A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "issue929-no-export.wit", "issue929-no-export.wit", "{4C11CFFF-E4A4-FB98-6931-B42CD543742C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\issue929-no-export.wit\bindings\TheWorldWorld.csproj", "{37B7D531-5CE2-ED55-D09D-8893492A1A32}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "issue929-no-import.wit", "issue929-no-import.wit", "{9C947B34-E745-E3D9-4270-5E89E206158F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\issue929-no-import.wit\bindings\TheWorldWorld.csproj", "{BD234F55-5125-C6F6-B68D-365617B4719D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "issue929-only-methods.wit", "issue929-only-methods.wit", "{A3D9F4BF-2FE0-B008-A8D8-B0BF541C63FA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\issue929-only-methods.wit\bindings\TheWorldWorld.csproj", "{F0157B24-6924-D8D3-F3F0-BB967C4BFDE7}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "issue929.wit", "issue929.wit", "{0331D922-92E3-741B-93C2-C77FFDF6B2A5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\issue929.wit\bindings\TheWorldWorld.csproj", "{DF1B1705-2020-B3F6-6C7C-F3E0DC192671}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "just-export.wit", "just-export.wit", "{06626A3C-8C52-0254-C370-29094150F5C0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\just-export.wit\bindings\TheWorldWorld.csproj", "{79E02FE6-A032-B479-1E24-936D377C44F5}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "keywords-in-interfaces-and-worlds.wit", "keywords-in-interfaces-and-worlds.wit", "{69F84C6F-4ABE-9F2F-4DDA-47EF2ECD4188}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\keywords-in-interfaces-and-worlds.wit\bindings\TheWorldWorld.csproj", "{F17E8DF9-DD14-5D80-1880-F5BEC286459B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "keywords.wit", "keywords.wit", "{85E435B1-910C-A276-6183-46CD7FA08F56}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\keywords.wit\bindings\TheWorldWorld.csproj", "{4974120F-05A5-8DA9-018A-F0A845AE686F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "lift-lower-foreign.wit", "lift-lower-foreign.wit", "{E542F7ED-51D4-1836-7F83-14927C90CF0F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\lift-lower-foreign.wit\bindings\TheWorldWorld.csproj", "{ED97C352-F811-500A-18B3-AF55C5E7FB85}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "lists.wit", "lists.wit", "{2367D30A-842E-3B41-F549-6D596DF6C5B3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\lists.wit\bindings\TheWorldWorld.csproj", "{216733FD-26CD-6BD8-AC2E-2E639766B8D2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "many-arguments.wit", "many-arguments.wit", "{E01672ED-6A17-3E56-B917-E9CCC7CE1B5C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\many-arguments.wit\bindings\TheWorldWorld.csproj", "{DD9E2B9F-BF82-2FB6-D0E0-54E1FD8162EB}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "multi-return.wit", "multi-return.wit", "{43123BDD-F8FD-7B05-F1F0-474F6413FC10}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\multi-return.wit\bindings\TheWorldWorld.csproj", "{76409DD3-DAF5-F793-F902-C122D068EA55}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "multiversion", "multiversion", "{87073964-8AC0-1E63-99AD-E86264D0C3A8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\multiversion\bindings\TheWorldWorld.csproj", "{01BA1311-2AA0-FB0F-3B13-53A299A4BEB1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "option-result.wit", "option-result.wit", "{79FB4107-A744-DE2F-4502-551FD56625B1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\option-result.wit\bindings\TheWorldWorld.csproj", "{3F42290A-0EC6-06CB-3D0D-B313227B89CF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "record-has-go-keyword-and-used-in-fn.wit", "record-has-go-keyword-and-used-in-fn.wit", "{E8F121BD-EE0C-8C1E-4B9D-6876FDFCE8CB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\record-has-go-keyword-and-used-in-fn.wit\bindings\TheWorldWorld.csproj", "{3E115A52-44C5-D396-737C-6FC3C4403E42}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "records.wit", "records.wit", "{65C18BE2-3FA3-CB8B-D9FC-F6A368BDF925}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\records.wit\bindings\TheWorldWorld.csproj", "{02D562D0-785C-025A-4949-79F94E58E1F0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "rename-interface.wit", "rename-interface.wit", "{5D5A64EF-8F1D-4E55-296A-386F58E02FEB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\rename-interface.wit\bindings\TheWorldWorld.csproj", "{0E775E42-81FE-C541-8612-2542DFC10FFB}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource-alias.wit", "resource-alias.wit", "{FDE3A015-C286-C1DA-FCFD-43394B62093D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\resource-alias.wit\bindings\TheWorldWorld.csproj", "{CD5D106F-D570-E176-1CDC-7474CB43483C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource-borrow-in-record-export.wit", "resource-borrow-in-record-export.wit", "{1AE621B7-1C0A-568F-E94D-147092A6C16E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\resource-borrow-in-record-export.wit\bindings\TheWorldWorld.csproj", "{D044D4D4-6272-7C57-A41F-CE477835050D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource-borrow-in-record.wit", "resource-borrow-in-record.wit", "{C1390C80-CDB4-D92A-0755-FD048B00F77C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\resource-borrow-in-record.wit\bindings\TheWorldWorld.csproj", "{030E37CE-073F-949A-F61D-881B4412980D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource-local-alias-borrow-import.wit", "resource-local-alias-borrow-import.wit", "{D53B0F47-CB95-ED86-7400-3728129DC1A4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\resource-local-alias-borrow-import.wit\bindings\TheWorldWorld.csproj", "{154BC784-BB54-6164-16CB-FD9A125C3038}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource-local-alias-borrow.wit", "resource-local-alias-borrow.wit", "{88A4248A-7C05-5AFA-105E-12E5CF03EB92}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\resource-local-alias-borrow.wit\bindings\TheWorldWorld.csproj", "{B06EA13A-9504-0F8B-F771-F71D86EE15BE}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource-local-alias.wit", "resource-local-alias.wit", "{89833225-F238-2124-534C-6E4100BFCE30}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\resource-local-alias.wit\bindings\TheWorldWorld.csproj", "{566C5AC7-1AD0-6A46-BBB6-0FC28B15B034}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource-own-in-other-interface.wit", "resource-own-in-other-interface.wit", "{7F8AA199-79F9-D499-BCE5-C8608D636F52}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\resource-own-in-other-interface.wit\bindings\TheWorldWorld.csproj", "{2AE34DC1-5982-B6E5-1A66-8E773A07DFFC}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resources-in-aggregates.wit", "resources-in-aggregates.wit", "{357B9DF2-7E42-59C5-3241-D72D3F5B73CE}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\resources-in-aggregates.wit\bindings\TheWorldWorld.csproj", "{7829564F-3CB7-5E73-3905-2731D4029FF4}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resources-with-lists.wit", "resources-with-lists.wit", "{325E300C-E6A5-B30D-833E-3F5D39AC641D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\resources-with-lists.wit\bindings\TheWorldWorld.csproj", "{315CAE46-11E0-9C15-A4A6-A7191B2F4BFC}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resources.wit", "resources.wit", "{B89378DC-63A1-3DFB-90D5-6D4BBCFE5380}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\resources.wit\bindings\TheWorldWorld.csproj", "{2C051497-E6A4-83A9-8D82-464D79589C75}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "result-empty.wit", "result-empty.wit", "{C2A48819-A0D2-828C-7EBF-6544538DDE42}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\result-empty.wit\bindings\TheWorldWorld.csproj", "{3D273C0B-60F4-D20E-30B0-61244D4C5784}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ret-areas.wit", "ret-areas.wit", "{2DCD25E1-20B4-BC1C-FB0A-B63E24DCA9F4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\ret-areas.wit\bindings\TheWorldWorld.csproj", "{CA32CAC9-3748-2B74-4063-EB8C6A3A63C0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "return-resource-from-export.wit", "return-resource-from-export.wit", "{7D7566EE-AC36-04CA-FA33-2A492DD426D5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\return-resource-from-export.wit\bindings\TheWorldWorld.csproj", "{DE8662EC-F0D3-5BB1-2233-BB12DFE355C0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "same-names1.wit", "same-names1.wit", "{6E80EACB-0A12-2F7D-8C65-502D4CA5866E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\same-names1.wit\bindings\TheWorldWorld.csproj", "{09C9074A-60CB-0308-AE90-BF6C83143F48}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "same-names2.wit", "same-names2.wit", "{65B9C57E-6F0B-FF8C-A952-C0E3CD257627}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\same-names2.wit\bindings\TheWorldWorld.csproj", "{319573C5-512C-6703-33C7-F9490BEDE16B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "same-names3.wit", "same-names3.wit", "{AB4FCC4B-7E03-DBBC-E8D0-356F4ED139AB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\same-names3.wit\bindings\TheWorldWorld.csproj", "{D3AECC39-FC5A-BD34-B2DF-769B801FAD60}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "same-names4.wit", "same-names4.wit", "{4319485C-F3D4-2DAA-4D37-9C17041107D7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\same-names4.wit\bindings\TheWorldWorld.csproj", "{84C8629A-B856-B8A8-093E-D1A4C81596D9}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "same-names5.wit", "same-names5.wit", "{3A34323D-BB25-1A14-EB08-19B663AAA9DF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\same-names5.wit\bindings\TheWorldWorld.csproj", "{0D1C9FAC-345A-8A5D-ED74-D50627E73BC3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "simple-enum.wit", "simple-enum.wit", "{755FB38B-3FAF-A6FF-3771-48AD310AABE7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\simple-enum.wit\bindings\TheWorldWorld.csproj", "{09C1BD8A-3DDC-2DC7-5E79-529A4B861B33}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "simple-functions.wit", "simple-functions.wit", "{630CCDB5-DE32-79EF-13AD-984AAE3EECDE}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\simple-functions.wit\bindings\TheWorldWorld.csproj", "{C4A89DA2-F3C6-DEF5-2BB6-1470F32F8AA9}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "simple-http.wit", "simple-http.wit", "{2D05C0FE-225A-4A7C-767A-F0D8165E2019}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\simple-http.wit\bindings\TheWorldWorld.csproj", "{4AD6BA21-3B28-5119-642E-5A4AB589B716}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "simple-lists.wit", "simple-lists.wit", "{03EACC3E-D50F-C3FA-C7F6-08C16405A00B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\simple-lists.wit\bindings\TheWorldWorld.csproj", "{374920CC-E7AA-5A9C-2460-EA88950A909B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "simple-option.wit", "simple-option.wit", "{AA75A989-888D-B14D-6300-9A7E02ED2EAB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\simple-option.wit\bindings\TheWorldWorld.csproj", "{7C82CBEE-C585-C659-CA98-9E423668227C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "small-anonymous.wit", "small-anonymous.wit", "{C73472D1-CFD4-5C68-4B99-E5B4BB4630BB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\small-anonymous.wit\bindings\TheWorldWorld.csproj", "{5584D3E5-DA59-4CC3-09ED-EB30EEC88565}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "smoke-default.wit", "smoke-default.wit", "{BE9EC5B1-8A28-E14C-E4B4-F3E66C9E889A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\smoke-default.wit\bindings\TheWorldWorld.csproj", "{8F0AFB80-74D1-A528-F09C-A5C48A7DB0AE}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "smoke-export.wit", "smoke-export.wit", "{E48BE97D-2C8B-124A-A3DD-DFFD0CCAE704}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\smoke-export.wit\bindings\TheWorldWorld.csproj", "{167F0375-502C-5EE3-461A-9DC8DFBD4B56}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "smoke.wit", "smoke.wit", "{0E7A03F2-6F7F-0E27-553F-0F980A101569}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\smoke.wit\bindings\TheWorldWorld.csproj", "{FCBAA3BA-7479-30B7-EAF4-BF10EF1FC8AA}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "strings.wit", "strings.wit", "{C2689E79-4290-C79C-8876-F7CBBD8A6CB3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\strings.wit\bindings\TheWorldWorld.csproj", "{E3EE641F-7487-58CD-3456-6BA821217EEB}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "unused-import.wit", "unused-import.wit", "{7E66735A-0536-68B4-7545-56E34E920C51}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\unused-import.wit\bindings\TheWorldWorld.csproj", "{F6B2A792-42B6-FBDF-AB06-179CD19093D1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "use-across-interfaces.wit", "use-across-interfaces.wit", "{73EFD343-138B-48E0-73F1-C226E7EAF37B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\use-across-interfaces.wit\bindings\TheWorldWorld.csproj", "{1A3E63DB-75EA-6569-D917-89B4203A51D9}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "variants-unioning-types.wit", "variants-unioning-types.wit", "{0A0643BD-F61F-B8F2-C10A-D216600647FF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\variants-unioning-types.wit\bindings\TheWorldWorld.csproj", "{BEF506A7-18E9-06C3-8B60-E9C54AE3639D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "variants.wit", "variants.wit", "{8CC7DDDD-EA87-905C-099E-4353711AB883}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\variants.wit\bindings\TheWorldWorld.csproj", "{5D847496-840A-811E-C348-845823CC17FD}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wasi-cli", "wasi-cli", "{1253EC49-3F6F-DDCC-27E7-1D48F381E702}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\wasi-cli\bindings\TheWorldWorld.csproj", "{123D0FB0-42E9-4C6C-DA07-B7FC07684BD3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wasi-clocks", "wasi-clocks", "{4E118AAF-1874-8714-F42A-8BEAECE0C276}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\wasi-clocks\bindings\TheWorldWorld.csproj", "{DFCDEB8E-730E-D946-9237-97D13C0683A5}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wasi-filesystem", "wasi-filesystem", "{572A021C-D31D-7566-E6D7-0BF983FC3FD8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\wasi-filesystem\bindings\TheWorldWorld.csproj", "{3462643B-8EAF-3B61-FB2B-440E5C8F88F6}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wasi-http", "wasi-http", "{2E144F98-BF78-A3E0-F494-477CF2DDA281}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\wasi-http\bindings\TheWorldWorld.csproj", "{5B918EEB-A1F6-D8E4-32BC-9B0DF8E0A246}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wasi-io", "wasi-io", "{1B31B1CC-7C5D-6F1E-77B6-7468BB812392}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\wasi-io\bindings\TheWorldWorld.csproj", "{4943B4F5-6E6D-4A47-5483-447A518FB124}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "world-has-go-keyword.wit", "world-has-go-keyword.wit", "{FB55E063-D07B-D551-7C94-FC764C5002B2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\world-has-go-keyword.wit\bindings\TheWorldWorld.csproj", "{832C0545-F430-FBF7-E587-664F9E0EF042}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "worlds-with-types.wit", "worlds-with-types.wit", "{C6B103E3-A11C-6605-E5EB-F8BF0D5708C0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\worlds-with-types.wit\bindings\TheWorldWorld.csproj", "{3877E86E-24D8-33A3-DA46-AD1E2496D733}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "zero-size-tuple.wit", "zero-size-tuple.wit", "{53B29166-F1EB-8111-56DE-3AF18E0074DE}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\zero-size-tuple.wit\bindings\TheWorldWorld.csproj", "{6C75FA73-DEAA-686F-BD75-84B5E87C6006}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0AFAC59C-1CDA-6784-9728-6C81ADA2728B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0AFAC59C-1CDA-6784-9728-6C81ADA2728B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0AFAC59C-1CDA-6784-9728-6C81ADA2728B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0AFAC59C-1CDA-6784-9728-6C81ADA2728B}.Release|Any CPU.Build.0 = Release|Any CPU + {1452FCAC-8669-8D5D-BFF7-F7D06CAFFADA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1452FCAC-8669-8D5D-BFF7-F7D06CAFFADA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1452FCAC-8669-8D5D-BFF7-F7D06CAFFADA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1452FCAC-8669-8D5D-BFF7-F7D06CAFFADA}.Release|Any CPU.Build.0 = Release|Any CPU + {B8CC26DE-F529-047A-1617-FDB210639EDB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B8CC26DE-F529-047A-1617-FDB210639EDB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B8CC26DE-F529-047A-1617-FDB210639EDB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B8CC26DE-F529-047A-1617-FDB210639EDB}.Release|Any CPU.Build.0 = Release|Any CPU + {20658278-75E7-34A5-EE1D-3B2D8F7E2C62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {20658278-75E7-34A5-EE1D-3B2D8F7E2C62}.Debug|Any CPU.Build.0 = Debug|Any CPU + {20658278-75E7-34A5-EE1D-3B2D8F7E2C62}.Release|Any CPU.ActiveCfg = Release|Any CPU + {20658278-75E7-34A5-EE1D-3B2D8F7E2C62}.Release|Any CPU.Build.0 = Release|Any CPU + {B5CEEC08-74F8-A211-86C4-18BA25330D88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B5CEEC08-74F8-A211-86C4-18BA25330D88}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B5CEEC08-74F8-A211-86C4-18BA25330D88}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B5CEEC08-74F8-A211-86C4-18BA25330D88}.Release|Any CPU.Build.0 = Release|Any CPU + {6557A001-801A-3707-5EEA-9B9CA66CD550}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6557A001-801A-3707-5EEA-9B9CA66CD550}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6557A001-801A-3707-5EEA-9B9CA66CD550}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6557A001-801A-3707-5EEA-9B9CA66CD550}.Release|Any CPU.Build.0 = Release|Any CPU + {7C0777E0-DD44-E238-508D-20657804BFEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7C0777E0-DD44-E238-508D-20657804BFEA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7C0777E0-DD44-E238-508D-20657804BFEA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7C0777E0-DD44-E238-508D-20657804BFEA}.Release|Any CPU.Build.0 = Release|Any CPU + {4D2A2ECD-EA66-D0D5-30C9-80DD1B11579D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4D2A2ECD-EA66-D0D5-30C9-80DD1B11579D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4D2A2ECD-EA66-D0D5-30C9-80DD1B11579D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4D2A2ECD-EA66-D0D5-30C9-80DD1B11579D}.Release|Any CPU.Build.0 = Release|Any CPU + {4D226192-FB4A-E1B1-8E54-5D957108A21B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4D226192-FB4A-E1B1-8E54-5D957108A21B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4D226192-FB4A-E1B1-8E54-5D957108A21B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4D226192-FB4A-E1B1-8E54-5D957108A21B}.Release|Any CPU.Build.0 = Release|Any CPU + {39791CF6-BACF-1BB1-20C2-C8FE7859FB80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {39791CF6-BACF-1BB1-20C2-C8FE7859FB80}.Debug|Any CPU.Build.0 = Debug|Any CPU + {39791CF6-BACF-1BB1-20C2-C8FE7859FB80}.Release|Any CPU.ActiveCfg = Release|Any CPU + {39791CF6-BACF-1BB1-20C2-C8FE7859FB80}.Release|Any CPU.Build.0 = Release|Any CPU + {B77DB325-270C-3E9B-B273-713F4B7ABA62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B77DB325-270C-3E9B-B273-713F4B7ABA62}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B77DB325-270C-3E9B-B273-713F4B7ABA62}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B77DB325-270C-3E9B-B273-713F4B7ABA62}.Release|Any CPU.Build.0 = Release|Any CPU + {C6C7D216-C08F-7601-346E-680AB6B88ED0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C6C7D216-C08F-7601-346E-680AB6B88ED0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C6C7D216-C08F-7601-346E-680AB6B88ED0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C6C7D216-C08F-7601-346E-680AB6B88ED0}.Release|Any CPU.Build.0 = Release|Any CPU + {CC1ED9EE-8069-632A-1E90-D25EED4E9F73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CC1ED9EE-8069-632A-1E90-D25EED4E9F73}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CC1ED9EE-8069-632A-1E90-D25EED4E9F73}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CC1ED9EE-8069-632A-1E90-D25EED4E9F73}.Release|Any CPU.Build.0 = Release|Any CPU + {2B4F3003-741B-EC4B-1343-FF5E6B53B5B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2B4F3003-741B-EC4B-1343-FF5E6B53B5B6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2B4F3003-741B-EC4B-1343-FF5E6B53B5B6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2B4F3003-741B-EC4B-1343-FF5E6B53B5B6}.Release|Any CPU.Build.0 = Release|Any CPU + {ABCE67C3-6834-2F58-25AA-D28F5EC30D34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ABCE67C3-6834-2F58-25AA-D28F5EC30D34}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ABCE67C3-6834-2F58-25AA-D28F5EC30D34}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ABCE67C3-6834-2F58-25AA-D28F5EC30D34}.Release|Any CPU.Build.0 = Release|Any CPU + {E0B7A8F7-8780-380A-A67E-FD0590B53A33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E0B7A8F7-8780-380A-A67E-FD0590B53A33}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E0B7A8F7-8780-380A-A67E-FD0590B53A33}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E0B7A8F7-8780-380A-A67E-FD0590B53A33}.Release|Any CPU.Build.0 = Release|Any CPU + {6027281A-6F7D-98BC-FD73-B716DB28A058}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6027281A-6F7D-98BC-FD73-B716DB28A058}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6027281A-6F7D-98BC-FD73-B716DB28A058}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6027281A-6F7D-98BC-FD73-B716DB28A058}.Release|Any CPU.Build.0 = Release|Any CPU + {88CF06A5-4755-4AAE-B804-F069EB2C207F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {88CF06A5-4755-4AAE-B804-F069EB2C207F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {88CF06A5-4755-4AAE-B804-F069EB2C207F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {88CF06A5-4755-4AAE-B804-F069EB2C207F}.Release|Any CPU.Build.0 = Release|Any CPU + {8CAFFDB0-F5F6-A37E-37AD-7E285801744A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8CAFFDB0-F5F6-A37E-37AD-7E285801744A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8CAFFDB0-F5F6-A37E-37AD-7E285801744A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8CAFFDB0-F5F6-A37E-37AD-7E285801744A}.Release|Any CPU.Build.0 = Release|Any CPU + {87A1703D-4CAB-B1DC-0EFE-A8CD45C8E012}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {87A1703D-4CAB-B1DC-0EFE-A8CD45C8E012}.Debug|Any CPU.Build.0 = Debug|Any CPU + {87A1703D-4CAB-B1DC-0EFE-A8CD45C8E012}.Release|Any CPU.ActiveCfg = Release|Any CPU + {87A1703D-4CAB-B1DC-0EFE-A8CD45C8E012}.Release|Any CPU.Build.0 = Release|Any CPU + {175EA3FB-9269-34B6-D98D-1D4671CA8983}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {175EA3FB-9269-34B6-D98D-1D4671CA8983}.Debug|Any CPU.Build.0 = Debug|Any CPU + {175EA3FB-9269-34B6-D98D-1D4671CA8983}.Release|Any CPU.ActiveCfg = Release|Any CPU + {175EA3FB-9269-34B6-D98D-1D4671CA8983}.Release|Any CPU.Build.0 = Release|Any CPU + {4077E3FE-5D0D-36BD-2596-03F99AB0741F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4077E3FE-5D0D-36BD-2596-03F99AB0741F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4077E3FE-5D0D-36BD-2596-03F99AB0741F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4077E3FE-5D0D-36BD-2596-03F99AB0741F}.Release|Any CPU.Build.0 = Release|Any CPU + {B7E0F6A7-F75C-4F42-DA63-B3BED5B843B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B7E0F6A7-F75C-4F42-DA63-B3BED5B843B2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B7E0F6A7-F75C-4F42-DA63-B3BED5B843B2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B7E0F6A7-F75C-4F42-DA63-B3BED5B843B2}.Release|Any CPU.Build.0 = Release|Any CPU + {E6484D67-74DE-3A1C-937B-E3E6541AFFBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E6484D67-74DE-3A1C-937B-E3E6541AFFBB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E6484D67-74DE-3A1C-937B-E3E6541AFFBB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E6484D67-74DE-3A1C-937B-E3E6541AFFBB}.Release|Any CPU.Build.0 = Release|Any CPU + {54A653F2-4FDE-CB75-DDB2-0F24C180A199}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {54A653F2-4FDE-CB75-DDB2-0F24C180A199}.Debug|Any CPU.Build.0 = Debug|Any CPU + {54A653F2-4FDE-CB75-DDB2-0F24C180A199}.Release|Any CPU.ActiveCfg = Release|Any CPU + {54A653F2-4FDE-CB75-DDB2-0F24C180A199}.Release|Any CPU.Build.0 = Release|Any CPU + {B0B7E960-FFA4-BC99-7B5F-2C70FDB5C889}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B0B7E960-FFA4-BC99-7B5F-2C70FDB5C889}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B0B7E960-FFA4-BC99-7B5F-2C70FDB5C889}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B0B7E960-FFA4-BC99-7B5F-2C70FDB5C889}.Release|Any CPU.Build.0 = Release|Any CPU + {FA8EB7A6-B199-4717-76F9-7833D7FA0587}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FA8EB7A6-B199-4717-76F9-7833D7FA0587}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FA8EB7A6-B199-4717-76F9-7833D7FA0587}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FA8EB7A6-B199-4717-76F9-7833D7FA0587}.Release|Any CPU.Build.0 = Release|Any CPU + {4474AF4E-A61D-0869-577A-F4FB37AA3F6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4474AF4E-A61D-0869-577A-F4FB37AA3F6F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4474AF4E-A61D-0869-577A-F4FB37AA3F6F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4474AF4E-A61D-0869-577A-F4FB37AA3F6F}.Release|Any CPU.Build.0 = Release|Any CPU + {23296A66-B1B4-240B-5CA4-CBA1022A78C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {23296A66-B1B4-240B-5CA4-CBA1022A78C2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {23296A66-B1B4-240B-5CA4-CBA1022A78C2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {23296A66-B1B4-240B-5CA4-CBA1022A78C2}.Release|Any CPU.Build.0 = Release|Any CPU + {0550CBC4-2338-9FD5-D277-1E77E9357251}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0550CBC4-2338-9FD5-D277-1E77E9357251}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0550CBC4-2338-9FD5-D277-1E77E9357251}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0550CBC4-2338-9FD5-D277-1E77E9357251}.Release|Any CPU.Build.0 = Release|Any CPU + {C0FDE9DF-887C-85CA-53FE-C6B2AF02F05D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C0FDE9DF-887C-85CA-53FE-C6B2AF02F05D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C0FDE9DF-887C-85CA-53FE-C6B2AF02F05D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C0FDE9DF-887C-85CA-53FE-C6B2AF02F05D}.Release|Any CPU.Build.0 = Release|Any CPU + {B1CFBBE2-8D18-84A4-4AA3-C29684E291A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B1CFBBE2-8D18-84A4-4AA3-C29684E291A7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B1CFBBE2-8D18-84A4-4AA3-C29684E291A7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B1CFBBE2-8D18-84A4-4AA3-C29684E291A7}.Release|Any CPU.Build.0 = Release|Any CPU + {04BEB0D6-D615-F29C-C040-F99E15E3DA71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {04BEB0D6-D615-F29C-C040-F99E15E3DA71}.Debug|Any CPU.Build.0 = Debug|Any CPU + {04BEB0D6-D615-F29C-C040-F99E15E3DA71}.Release|Any CPU.ActiveCfg = Release|Any CPU + {04BEB0D6-D615-F29C-C040-F99E15E3DA71}.Release|Any CPU.Build.0 = Release|Any CPU + {79339DEB-B8F1-D636-7A82-1172C24F2D16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {79339DEB-B8F1-D636-7A82-1172C24F2D16}.Debug|Any CPU.Build.0 = Debug|Any CPU + {79339DEB-B8F1-D636-7A82-1172C24F2D16}.Release|Any CPU.ActiveCfg = Release|Any CPU + {79339DEB-B8F1-D636-7A82-1172C24F2D16}.Release|Any CPU.Build.0 = Release|Any CPU + {6B628034-BA3F-15F3-562F-6498272EFFDB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6B628034-BA3F-15F3-562F-6498272EFFDB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6B628034-BA3F-15F3-562F-6498272EFFDB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6B628034-BA3F-15F3-562F-6498272EFFDB}.Release|Any CPU.Build.0 = Release|Any CPU + {429764B7-8A13-9F9C-8328-8CF141920861}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {429764B7-8A13-9F9C-8328-8CF141920861}.Debug|Any CPU.Build.0 = Debug|Any CPU + {429764B7-8A13-9F9C-8328-8CF141920861}.Release|Any CPU.ActiveCfg = Release|Any CPU + {429764B7-8A13-9F9C-8328-8CF141920861}.Release|Any CPU.Build.0 = Release|Any CPU + {38ACA1FC-FDA0-DD71-ACA9-6A1AB2DE1B1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {38ACA1FC-FDA0-DD71-ACA9-6A1AB2DE1B1F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {38ACA1FC-FDA0-DD71-ACA9-6A1AB2DE1B1F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {38ACA1FC-FDA0-DD71-ACA9-6A1AB2DE1B1F}.Release|Any CPU.Build.0 = Release|Any CPU + {E48C0AB8-7249-0EA9-E9E2-45108449EAF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E48C0AB8-7249-0EA9-E9E2-45108449EAF0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E48C0AB8-7249-0EA9-E9E2-45108449EAF0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E48C0AB8-7249-0EA9-E9E2-45108449EAF0}.Release|Any CPU.Build.0 = Release|Any CPU + {68D0DEBB-6583-23EE-CB5D-569D2A52787E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {68D0DEBB-6583-23EE-CB5D-569D2A52787E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {68D0DEBB-6583-23EE-CB5D-569D2A52787E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {68D0DEBB-6583-23EE-CB5D-569D2A52787E}.Release|Any CPU.Build.0 = Release|Any CPU + {A2AD4594-34F6-1B52-706A-5BD54353761D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A2AD4594-34F6-1B52-706A-5BD54353761D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A2AD4594-34F6-1B52-706A-5BD54353761D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A2AD4594-34F6-1B52-706A-5BD54353761D}.Release|Any CPU.Build.0 = Release|Any CPU + {BEF44FA5-535B-6433-BF71-B950C3A4D6D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BEF44FA5-535B-6433-BF71-B950C3A4D6D9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BEF44FA5-535B-6433-BF71-B950C3A4D6D9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BEF44FA5-535B-6433-BF71-B950C3A4D6D9}.Release|Any CPU.Build.0 = Release|Any CPU + {0A2C92AB-B559-0957-00B3-2988D40A8F1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0A2C92AB-B559-0957-00B3-2988D40A8F1F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0A2C92AB-B559-0957-00B3-2988D40A8F1F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0A2C92AB-B559-0957-00B3-2988D40A8F1F}.Release|Any CPU.Build.0 = Release|Any CPU + {A0967937-177F-8369-8507-419559771F9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A0967937-177F-8369-8507-419559771F9D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A0967937-177F-8369-8507-419559771F9D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A0967937-177F-8369-8507-419559771F9D}.Release|Any CPU.Build.0 = Release|Any CPU + {F943C0C7-44C3-5639-0D82-284C78A67051}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F943C0C7-44C3-5639-0D82-284C78A67051}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F943C0C7-44C3-5639-0D82-284C78A67051}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F943C0C7-44C3-5639-0D82-284C78A67051}.Release|Any CPU.Build.0 = Release|Any CPU + {7EB2B30F-63FD-B0CC-CAD5-A7AC290CDF1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7EB2B30F-63FD-B0CC-CAD5-A7AC290CDF1B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7EB2B30F-63FD-B0CC-CAD5-A7AC290CDF1B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7EB2B30F-63FD-B0CC-CAD5-A7AC290CDF1B}.Release|Any CPU.Build.0 = Release|Any CPU + {4C1BA462-5134-EBEF-8485-DE6AE23AD1CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4C1BA462-5134-EBEF-8485-DE6AE23AD1CE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4C1BA462-5134-EBEF-8485-DE6AE23AD1CE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4C1BA462-5134-EBEF-8485-DE6AE23AD1CE}.Release|Any CPU.Build.0 = Release|Any CPU + {E4F92444-C647-963E-7CE5-B5E0732826B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E4F92444-C647-963E-7CE5-B5E0732826B0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E4F92444-C647-963E-7CE5-B5E0732826B0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E4F92444-C647-963E-7CE5-B5E0732826B0}.Release|Any CPU.Build.0 = Release|Any CPU + {5D1950FC-C854-F35E-2B4B-C1F3F78C2978}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5D1950FC-C854-F35E-2B4B-C1F3F78C2978}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5D1950FC-C854-F35E-2B4B-C1F3F78C2978}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5D1950FC-C854-F35E-2B4B-C1F3F78C2978}.Release|Any CPU.Build.0 = Release|Any CPU + {15BA5917-B8D4-3779-981C-7F859E9018C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {15BA5917-B8D4-3779-981C-7F859E9018C2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {15BA5917-B8D4-3779-981C-7F859E9018C2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {15BA5917-B8D4-3779-981C-7F859E9018C2}.Release|Any CPU.Build.0 = Release|Any CPU + {6232E88F-6CC8-67EF-3C09-D40A1B920A63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6232E88F-6CC8-67EF-3C09-D40A1B920A63}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6232E88F-6CC8-67EF-3C09-D40A1B920A63}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6232E88F-6CC8-67EF-3C09-D40A1B920A63}.Release|Any CPU.Build.0 = Release|Any CPU + {0ADE2D25-CF4E-2661-13CE-9D269739D54A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0ADE2D25-CF4E-2661-13CE-9D269739D54A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0ADE2D25-CF4E-2661-13CE-9D269739D54A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0ADE2D25-CF4E-2661-13CE-9D269739D54A}.Release|Any CPU.Build.0 = Release|Any CPU + {865AEFC5-D0F3-D914-EB46-C97AEB5ED73D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {865AEFC5-D0F3-D914-EB46-C97AEB5ED73D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {865AEFC5-D0F3-D914-EB46-C97AEB5ED73D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {865AEFC5-D0F3-D914-EB46-C97AEB5ED73D}.Release|Any CPU.Build.0 = Release|Any CPU + {DE4121F9-166E-C4BF-591A-8A2D1D680274}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DE4121F9-166E-C4BF-591A-8A2D1D680274}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DE4121F9-166E-C4BF-591A-8A2D1D680274}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DE4121F9-166E-C4BF-591A-8A2D1D680274}.Release|Any CPU.Build.0 = Release|Any CPU + {F616F5D4-C8FC-FABB-9E71-D4D1C05F0518}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F616F5D4-C8FC-FABB-9E71-D4D1C05F0518}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F616F5D4-C8FC-FABB-9E71-D4D1C05F0518}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F616F5D4-C8FC-FABB-9E71-D4D1C05F0518}.Release|Any CPU.Build.0 = Release|Any CPU + {B67BA4A2-DFA2-1E77-13A2-A88B5C99B6A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B67BA4A2-DFA2-1E77-13A2-A88B5C99B6A7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B67BA4A2-DFA2-1E77-13A2-A88B5C99B6A7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B67BA4A2-DFA2-1E77-13A2-A88B5C99B6A7}.Release|Any CPU.Build.0 = Release|Any CPU + {15B30AD5-7CC9-2721-F653-40C26D54B681}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {15B30AD5-7CC9-2721-F653-40C26D54B681}.Debug|Any CPU.Build.0 = Debug|Any CPU + {15B30AD5-7CC9-2721-F653-40C26D54B681}.Release|Any CPU.ActiveCfg = Release|Any CPU + {15B30AD5-7CC9-2721-F653-40C26D54B681}.Release|Any CPU.Build.0 = Release|Any CPU + {1C219E9A-75EF-F4E1-29DA-576B33D426E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1C219E9A-75EF-F4E1-29DA-576B33D426E8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1C219E9A-75EF-F4E1-29DA-576B33D426E8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1C219E9A-75EF-F4E1-29DA-576B33D426E8}.Release|Any CPU.Build.0 = Release|Any CPU + {6357E9FD-A15A-D94A-7239-F3EC69E0B345}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6357E9FD-A15A-D94A-7239-F3EC69E0B345}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6357E9FD-A15A-D94A-7239-F3EC69E0B345}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6357E9FD-A15A-D94A-7239-F3EC69E0B345}.Release|Any CPU.Build.0 = Release|Any CPU + {520320B7-7D1B-2B3D-2131-6A4496B4B75F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {520320B7-7D1B-2B3D-2131-6A4496B4B75F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {520320B7-7D1B-2B3D-2131-6A4496B4B75F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {520320B7-7D1B-2B3D-2131-6A4496B4B75F}.Release|Any CPU.Build.0 = Release|Any CPU + {550DA514-46E7-C696-5AC1-CA6F1C2A7837}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {550DA514-46E7-C696-5AC1-CA6F1C2A7837}.Debug|Any CPU.Build.0 = Debug|Any CPU + {550DA514-46E7-C696-5AC1-CA6F1C2A7837}.Release|Any CPU.ActiveCfg = Release|Any CPU + {550DA514-46E7-C696-5AC1-CA6F1C2A7837}.Release|Any CPU.Build.0 = Release|Any CPU + {13DD3E53-6DB3-ED7A-C0E5-18FBD07D2FF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {13DD3E53-6DB3-ED7A-C0E5-18FBD07D2FF1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {13DD3E53-6DB3-ED7A-C0E5-18FBD07D2FF1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {13DD3E53-6DB3-ED7A-C0E5-18FBD07D2FF1}.Release|Any CPU.Build.0 = Release|Any CPU + {728C4883-0E02-70AB-FEAB-141DF74ECC5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {728C4883-0E02-70AB-FEAB-141DF74ECC5A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {728C4883-0E02-70AB-FEAB-141DF74ECC5A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {728C4883-0E02-70AB-FEAB-141DF74ECC5A}.Release|Any CPU.Build.0 = Release|Any CPU + {37B7D531-5CE2-ED55-D09D-8893492A1A32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {37B7D531-5CE2-ED55-D09D-8893492A1A32}.Debug|Any CPU.Build.0 = Debug|Any CPU + {37B7D531-5CE2-ED55-D09D-8893492A1A32}.Release|Any CPU.ActiveCfg = Release|Any CPU + {37B7D531-5CE2-ED55-D09D-8893492A1A32}.Release|Any CPU.Build.0 = Release|Any CPU + {BD234F55-5125-C6F6-B68D-365617B4719D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BD234F55-5125-C6F6-B68D-365617B4719D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BD234F55-5125-C6F6-B68D-365617B4719D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BD234F55-5125-C6F6-B68D-365617B4719D}.Release|Any CPU.Build.0 = Release|Any CPU + {F0157B24-6924-D8D3-F3F0-BB967C4BFDE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F0157B24-6924-D8D3-F3F0-BB967C4BFDE7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F0157B24-6924-D8D3-F3F0-BB967C4BFDE7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F0157B24-6924-D8D3-F3F0-BB967C4BFDE7}.Release|Any CPU.Build.0 = Release|Any CPU + {DF1B1705-2020-B3F6-6C7C-F3E0DC192671}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DF1B1705-2020-B3F6-6C7C-F3E0DC192671}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DF1B1705-2020-B3F6-6C7C-F3E0DC192671}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DF1B1705-2020-B3F6-6C7C-F3E0DC192671}.Release|Any CPU.Build.0 = Release|Any CPU + {79E02FE6-A032-B479-1E24-936D377C44F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {79E02FE6-A032-B479-1E24-936D377C44F5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {79E02FE6-A032-B479-1E24-936D377C44F5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {79E02FE6-A032-B479-1E24-936D377C44F5}.Release|Any CPU.Build.0 = Release|Any CPU + {F17E8DF9-DD14-5D80-1880-F5BEC286459B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F17E8DF9-DD14-5D80-1880-F5BEC286459B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F17E8DF9-DD14-5D80-1880-F5BEC286459B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F17E8DF9-DD14-5D80-1880-F5BEC286459B}.Release|Any CPU.Build.0 = Release|Any CPU + {4974120F-05A5-8DA9-018A-F0A845AE686F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4974120F-05A5-8DA9-018A-F0A845AE686F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4974120F-05A5-8DA9-018A-F0A845AE686F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4974120F-05A5-8DA9-018A-F0A845AE686F}.Release|Any CPU.Build.0 = Release|Any CPU + {ED97C352-F811-500A-18B3-AF55C5E7FB85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ED97C352-F811-500A-18B3-AF55C5E7FB85}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ED97C352-F811-500A-18B3-AF55C5E7FB85}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ED97C352-F811-500A-18B3-AF55C5E7FB85}.Release|Any CPU.Build.0 = Release|Any CPU + {216733FD-26CD-6BD8-AC2E-2E639766B8D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {216733FD-26CD-6BD8-AC2E-2E639766B8D2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {216733FD-26CD-6BD8-AC2E-2E639766B8D2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {216733FD-26CD-6BD8-AC2E-2E639766B8D2}.Release|Any CPU.Build.0 = Release|Any CPU + {DD9E2B9F-BF82-2FB6-D0E0-54E1FD8162EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DD9E2B9F-BF82-2FB6-D0E0-54E1FD8162EB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DD9E2B9F-BF82-2FB6-D0E0-54E1FD8162EB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DD9E2B9F-BF82-2FB6-D0E0-54E1FD8162EB}.Release|Any CPU.Build.0 = Release|Any CPU + {76409DD3-DAF5-F793-F902-C122D068EA55}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {76409DD3-DAF5-F793-F902-C122D068EA55}.Debug|Any CPU.Build.0 = Debug|Any CPU + {76409DD3-DAF5-F793-F902-C122D068EA55}.Release|Any CPU.ActiveCfg = Release|Any CPU + {76409DD3-DAF5-F793-F902-C122D068EA55}.Release|Any CPU.Build.0 = Release|Any CPU + {01BA1311-2AA0-FB0F-3B13-53A299A4BEB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {01BA1311-2AA0-FB0F-3B13-53A299A4BEB1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {01BA1311-2AA0-FB0F-3B13-53A299A4BEB1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {01BA1311-2AA0-FB0F-3B13-53A299A4BEB1}.Release|Any CPU.Build.0 = Release|Any CPU + {3F42290A-0EC6-06CB-3D0D-B313227B89CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3F42290A-0EC6-06CB-3D0D-B313227B89CF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3F42290A-0EC6-06CB-3D0D-B313227B89CF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3F42290A-0EC6-06CB-3D0D-B313227B89CF}.Release|Any CPU.Build.0 = Release|Any CPU + {3E115A52-44C5-D396-737C-6FC3C4403E42}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3E115A52-44C5-D396-737C-6FC3C4403E42}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3E115A52-44C5-D396-737C-6FC3C4403E42}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3E115A52-44C5-D396-737C-6FC3C4403E42}.Release|Any CPU.Build.0 = Release|Any CPU + {02D562D0-785C-025A-4949-79F94E58E1F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {02D562D0-785C-025A-4949-79F94E58E1F0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {02D562D0-785C-025A-4949-79F94E58E1F0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {02D562D0-785C-025A-4949-79F94E58E1F0}.Release|Any CPU.Build.0 = Release|Any CPU + {0E775E42-81FE-C541-8612-2542DFC10FFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0E775E42-81FE-C541-8612-2542DFC10FFB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0E775E42-81FE-C541-8612-2542DFC10FFB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0E775E42-81FE-C541-8612-2542DFC10FFB}.Release|Any CPU.Build.0 = Release|Any CPU + {CD5D106F-D570-E176-1CDC-7474CB43483C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CD5D106F-D570-E176-1CDC-7474CB43483C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CD5D106F-D570-E176-1CDC-7474CB43483C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CD5D106F-D570-E176-1CDC-7474CB43483C}.Release|Any CPU.Build.0 = Release|Any CPU + {D044D4D4-6272-7C57-A41F-CE477835050D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D044D4D4-6272-7C57-A41F-CE477835050D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D044D4D4-6272-7C57-A41F-CE477835050D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D044D4D4-6272-7C57-A41F-CE477835050D}.Release|Any CPU.Build.0 = Release|Any CPU + {030E37CE-073F-949A-F61D-881B4412980D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {030E37CE-073F-949A-F61D-881B4412980D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {030E37CE-073F-949A-F61D-881B4412980D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {030E37CE-073F-949A-F61D-881B4412980D}.Release|Any CPU.Build.0 = Release|Any CPU + {154BC784-BB54-6164-16CB-FD9A125C3038}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {154BC784-BB54-6164-16CB-FD9A125C3038}.Debug|Any CPU.Build.0 = Debug|Any CPU + {154BC784-BB54-6164-16CB-FD9A125C3038}.Release|Any CPU.ActiveCfg = Release|Any CPU + {154BC784-BB54-6164-16CB-FD9A125C3038}.Release|Any CPU.Build.0 = Release|Any CPU + {B06EA13A-9504-0F8B-F771-F71D86EE15BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B06EA13A-9504-0F8B-F771-F71D86EE15BE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B06EA13A-9504-0F8B-F771-F71D86EE15BE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B06EA13A-9504-0F8B-F771-F71D86EE15BE}.Release|Any CPU.Build.0 = Release|Any CPU + {566C5AC7-1AD0-6A46-BBB6-0FC28B15B034}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {566C5AC7-1AD0-6A46-BBB6-0FC28B15B034}.Debug|Any CPU.Build.0 = Debug|Any CPU + {566C5AC7-1AD0-6A46-BBB6-0FC28B15B034}.Release|Any CPU.ActiveCfg = Release|Any CPU + {566C5AC7-1AD0-6A46-BBB6-0FC28B15B034}.Release|Any CPU.Build.0 = Release|Any CPU + {2AE34DC1-5982-B6E5-1A66-8E773A07DFFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2AE34DC1-5982-B6E5-1A66-8E773A07DFFC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2AE34DC1-5982-B6E5-1A66-8E773A07DFFC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2AE34DC1-5982-B6E5-1A66-8E773A07DFFC}.Release|Any CPU.Build.0 = Release|Any CPU + {7829564F-3CB7-5E73-3905-2731D4029FF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7829564F-3CB7-5E73-3905-2731D4029FF4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7829564F-3CB7-5E73-3905-2731D4029FF4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7829564F-3CB7-5E73-3905-2731D4029FF4}.Release|Any CPU.Build.0 = Release|Any CPU + {315CAE46-11E0-9C15-A4A6-A7191B2F4BFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {315CAE46-11E0-9C15-A4A6-A7191B2F4BFC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {315CAE46-11E0-9C15-A4A6-A7191B2F4BFC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {315CAE46-11E0-9C15-A4A6-A7191B2F4BFC}.Release|Any CPU.Build.0 = Release|Any CPU + {2C051497-E6A4-83A9-8D82-464D79589C75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2C051497-E6A4-83A9-8D82-464D79589C75}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2C051497-E6A4-83A9-8D82-464D79589C75}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2C051497-E6A4-83A9-8D82-464D79589C75}.Release|Any CPU.Build.0 = Release|Any CPU + {3D273C0B-60F4-D20E-30B0-61244D4C5784}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3D273C0B-60F4-D20E-30B0-61244D4C5784}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3D273C0B-60F4-D20E-30B0-61244D4C5784}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3D273C0B-60F4-D20E-30B0-61244D4C5784}.Release|Any CPU.Build.0 = Release|Any CPU + {CA32CAC9-3748-2B74-4063-EB8C6A3A63C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CA32CAC9-3748-2B74-4063-EB8C6A3A63C0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CA32CAC9-3748-2B74-4063-EB8C6A3A63C0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CA32CAC9-3748-2B74-4063-EB8C6A3A63C0}.Release|Any CPU.Build.0 = Release|Any CPU + {DE8662EC-F0D3-5BB1-2233-BB12DFE355C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DE8662EC-F0D3-5BB1-2233-BB12DFE355C0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DE8662EC-F0D3-5BB1-2233-BB12DFE355C0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DE8662EC-F0D3-5BB1-2233-BB12DFE355C0}.Release|Any CPU.Build.0 = Release|Any CPU + {09C9074A-60CB-0308-AE90-BF6C83143F48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {09C9074A-60CB-0308-AE90-BF6C83143F48}.Debug|Any CPU.Build.0 = Debug|Any CPU + {09C9074A-60CB-0308-AE90-BF6C83143F48}.Release|Any CPU.ActiveCfg = Release|Any CPU + {09C9074A-60CB-0308-AE90-BF6C83143F48}.Release|Any CPU.Build.0 = Release|Any CPU + {319573C5-512C-6703-33C7-F9490BEDE16B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {319573C5-512C-6703-33C7-F9490BEDE16B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {319573C5-512C-6703-33C7-F9490BEDE16B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {319573C5-512C-6703-33C7-F9490BEDE16B}.Release|Any CPU.Build.0 = Release|Any CPU + {D3AECC39-FC5A-BD34-B2DF-769B801FAD60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D3AECC39-FC5A-BD34-B2DF-769B801FAD60}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D3AECC39-FC5A-BD34-B2DF-769B801FAD60}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D3AECC39-FC5A-BD34-B2DF-769B801FAD60}.Release|Any CPU.Build.0 = Release|Any CPU + {84C8629A-B856-B8A8-093E-D1A4C81596D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {84C8629A-B856-B8A8-093E-D1A4C81596D9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {84C8629A-B856-B8A8-093E-D1A4C81596D9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {84C8629A-B856-B8A8-093E-D1A4C81596D9}.Release|Any CPU.Build.0 = Release|Any CPU + {0D1C9FAC-345A-8A5D-ED74-D50627E73BC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0D1C9FAC-345A-8A5D-ED74-D50627E73BC3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0D1C9FAC-345A-8A5D-ED74-D50627E73BC3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0D1C9FAC-345A-8A5D-ED74-D50627E73BC3}.Release|Any CPU.Build.0 = Release|Any CPU + {09C1BD8A-3DDC-2DC7-5E79-529A4B861B33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {09C1BD8A-3DDC-2DC7-5E79-529A4B861B33}.Debug|Any CPU.Build.0 = Debug|Any CPU + {09C1BD8A-3DDC-2DC7-5E79-529A4B861B33}.Release|Any CPU.ActiveCfg = Release|Any CPU + {09C1BD8A-3DDC-2DC7-5E79-529A4B861B33}.Release|Any CPU.Build.0 = Release|Any CPU + {C4A89DA2-F3C6-DEF5-2BB6-1470F32F8AA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C4A89DA2-F3C6-DEF5-2BB6-1470F32F8AA9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C4A89DA2-F3C6-DEF5-2BB6-1470F32F8AA9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C4A89DA2-F3C6-DEF5-2BB6-1470F32F8AA9}.Release|Any CPU.Build.0 = Release|Any CPU + {4AD6BA21-3B28-5119-642E-5A4AB589B716}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4AD6BA21-3B28-5119-642E-5A4AB589B716}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4AD6BA21-3B28-5119-642E-5A4AB589B716}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4AD6BA21-3B28-5119-642E-5A4AB589B716}.Release|Any CPU.Build.0 = Release|Any CPU + {374920CC-E7AA-5A9C-2460-EA88950A909B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {374920CC-E7AA-5A9C-2460-EA88950A909B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {374920CC-E7AA-5A9C-2460-EA88950A909B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {374920CC-E7AA-5A9C-2460-EA88950A909B}.Release|Any CPU.Build.0 = Release|Any CPU + {7C82CBEE-C585-C659-CA98-9E423668227C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7C82CBEE-C585-C659-CA98-9E423668227C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7C82CBEE-C585-C659-CA98-9E423668227C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7C82CBEE-C585-C659-CA98-9E423668227C}.Release|Any CPU.Build.0 = Release|Any CPU + {5584D3E5-DA59-4CC3-09ED-EB30EEC88565}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5584D3E5-DA59-4CC3-09ED-EB30EEC88565}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5584D3E5-DA59-4CC3-09ED-EB30EEC88565}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5584D3E5-DA59-4CC3-09ED-EB30EEC88565}.Release|Any CPU.Build.0 = Release|Any CPU + {8F0AFB80-74D1-A528-F09C-A5C48A7DB0AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8F0AFB80-74D1-A528-F09C-A5C48A7DB0AE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8F0AFB80-74D1-A528-F09C-A5C48A7DB0AE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8F0AFB80-74D1-A528-F09C-A5C48A7DB0AE}.Release|Any CPU.Build.0 = Release|Any CPU + {167F0375-502C-5EE3-461A-9DC8DFBD4B56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {167F0375-502C-5EE3-461A-9DC8DFBD4B56}.Debug|Any CPU.Build.0 = Debug|Any CPU + {167F0375-502C-5EE3-461A-9DC8DFBD4B56}.Release|Any CPU.ActiveCfg = Release|Any CPU + {167F0375-502C-5EE3-461A-9DC8DFBD4B56}.Release|Any CPU.Build.0 = Release|Any CPU + {FCBAA3BA-7479-30B7-EAF4-BF10EF1FC8AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FCBAA3BA-7479-30B7-EAF4-BF10EF1FC8AA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FCBAA3BA-7479-30B7-EAF4-BF10EF1FC8AA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FCBAA3BA-7479-30B7-EAF4-BF10EF1FC8AA}.Release|Any CPU.Build.0 = Release|Any CPU + {E3EE641F-7487-58CD-3456-6BA821217EEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E3EE641F-7487-58CD-3456-6BA821217EEB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E3EE641F-7487-58CD-3456-6BA821217EEB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E3EE641F-7487-58CD-3456-6BA821217EEB}.Release|Any CPU.Build.0 = Release|Any CPU + {F6B2A792-42B6-FBDF-AB06-179CD19093D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F6B2A792-42B6-FBDF-AB06-179CD19093D1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F6B2A792-42B6-FBDF-AB06-179CD19093D1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F6B2A792-42B6-FBDF-AB06-179CD19093D1}.Release|Any CPU.Build.0 = Release|Any CPU + {1A3E63DB-75EA-6569-D917-89B4203A51D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1A3E63DB-75EA-6569-D917-89B4203A51D9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1A3E63DB-75EA-6569-D917-89B4203A51D9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1A3E63DB-75EA-6569-D917-89B4203A51D9}.Release|Any CPU.Build.0 = Release|Any CPU + {BEF506A7-18E9-06C3-8B60-E9C54AE3639D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BEF506A7-18E9-06C3-8B60-E9C54AE3639D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BEF506A7-18E9-06C3-8B60-E9C54AE3639D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BEF506A7-18E9-06C3-8B60-E9C54AE3639D}.Release|Any CPU.Build.0 = Release|Any CPU + {5D847496-840A-811E-C348-845823CC17FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5D847496-840A-811E-C348-845823CC17FD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5D847496-840A-811E-C348-845823CC17FD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5D847496-840A-811E-C348-845823CC17FD}.Release|Any CPU.Build.0 = Release|Any CPU + {123D0FB0-42E9-4C6C-DA07-B7FC07684BD3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {123D0FB0-42E9-4C6C-DA07-B7FC07684BD3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {123D0FB0-42E9-4C6C-DA07-B7FC07684BD3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {123D0FB0-42E9-4C6C-DA07-B7FC07684BD3}.Release|Any CPU.Build.0 = Release|Any CPU + {DFCDEB8E-730E-D946-9237-97D13C0683A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DFCDEB8E-730E-D946-9237-97D13C0683A5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DFCDEB8E-730E-D946-9237-97D13C0683A5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DFCDEB8E-730E-D946-9237-97D13C0683A5}.Release|Any CPU.Build.0 = Release|Any CPU + {3462643B-8EAF-3B61-FB2B-440E5C8F88F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3462643B-8EAF-3B61-FB2B-440E5C8F88F6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3462643B-8EAF-3B61-FB2B-440E5C8F88F6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3462643B-8EAF-3B61-FB2B-440E5C8F88F6}.Release|Any CPU.Build.0 = Release|Any CPU + {5B918EEB-A1F6-D8E4-32BC-9B0DF8E0A246}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5B918EEB-A1F6-D8E4-32BC-9B0DF8E0A246}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5B918EEB-A1F6-D8E4-32BC-9B0DF8E0A246}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5B918EEB-A1F6-D8E4-32BC-9B0DF8E0A246}.Release|Any CPU.Build.0 = Release|Any CPU + {4943B4F5-6E6D-4A47-5483-447A518FB124}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4943B4F5-6E6D-4A47-5483-447A518FB124}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4943B4F5-6E6D-4A47-5483-447A518FB124}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4943B4F5-6E6D-4A47-5483-447A518FB124}.Release|Any CPU.Build.0 = Release|Any CPU + {832C0545-F430-FBF7-E587-664F9E0EF042}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {832C0545-F430-FBF7-E587-664F9E0EF042}.Debug|Any CPU.Build.0 = Debug|Any CPU + {832C0545-F430-FBF7-E587-664F9E0EF042}.Release|Any CPU.ActiveCfg = Release|Any CPU + {832C0545-F430-FBF7-E587-664F9E0EF042}.Release|Any CPU.Build.0 = Release|Any CPU + {3877E86E-24D8-33A3-DA46-AD1E2496D733}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3877E86E-24D8-33A3-DA46-AD1E2496D733}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3877E86E-24D8-33A3-DA46-AD1E2496D733}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3877E86E-24D8-33A3-DA46-AD1E2496D733}.Release|Any CPU.Build.0 = Release|Any CPU + {6C75FA73-DEAA-686F-BD75-84B5E87C6006}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6C75FA73-DEAA-686F-BD75-84B5E87C6006}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6C75FA73-DEAA-686F-BD75-84B5E87C6006}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6C75FA73-DEAA-686F-BD75-84B5E87C6006}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {48E3226E-F0B1-589A-9D38-3EB18BF00425} = {185866E3-F889-713C-3B9B-1F8348842EAC} + {0AFAC59C-1CDA-6784-9728-6C81ADA2728B} = {48E3226E-F0B1-589A-9D38-3EB18BF00425} + {F513CEA4-6298-3741-5E32-50FD198C283D} = {48E3226E-F0B1-589A-9D38-3EB18BF00425} + {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} = {F513CEA4-6298-3741-5E32-50FD198C283D} + {1452FCAC-8669-8D5D-BFF7-F7D06CAFFADA} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {5DF826B6-5011-1BD6-D432-CFD73200E8EE} = {48E3226E-F0B1-589A-9D38-3EB18BF00425} + {4F91E8C6-5E05-70F1-0057-44E482DCFCD2} = {5DF826B6-5011-1BD6-D432-CFD73200E8EE} + {B8CC26DE-F529-047A-1617-FDB210639EDB} = {4F91E8C6-5E05-70F1-0057-44E482DCFCD2} + {0B10BE8E-4AAC-68DC-A33C-A33FD8B54CAB} = {5DF826B6-5011-1BD6-D432-CFD73200E8EE} + {20658278-75E7-34A5-EE1D-3B2D8F7E2C62} = {0B10BE8E-4AAC-68DC-A33C-A33FD8B54CAB} + {C5E5B846-FB7E-E480-1348-190C699523C6} = {48E3226E-F0B1-589A-9D38-3EB18BF00425} + {37CD989D-268C-3366-6ED6-17FF36EA7A8E} = {C5E5B846-FB7E-E480-1348-190C699523C6} + {B5CEEC08-74F8-A211-86C4-18BA25330D88} = {37CD989D-268C-3366-6ED6-17FF36EA7A8E} + {E9949D46-C35B-4ADE-1623-5D672001E7B1} = {C5E5B846-FB7E-E480-1348-190C699523C6} + {6557A001-801A-3707-5EEA-9B9CA66CD550} = {E9949D46-C35B-4ADE-1623-5D672001E7B1} + {C53FD2D0-6516-1028-F65A-CA6F7DB9FCDD} = {48E3226E-F0B1-589A-9D38-3EB18BF00425} + {6832EE0C-7020-6BAF-48E1-825BE910CA7A} = {C53FD2D0-6516-1028-F65A-CA6F7DB9FCDD} + {7C0777E0-DD44-E238-508D-20657804BFEA} = {6832EE0C-7020-6BAF-48E1-825BE910CA7A} + {3547B974-432E-E75A-CD0C-0F25EC531C5B} = {C53FD2D0-6516-1028-F65A-CA6F7DB9FCDD} + {4D2A2ECD-EA66-D0D5-30C9-80DD1B11579D} = {3547B974-432E-E75A-CD0C-0F25EC531C5B} + {CF1B9BB0-FD82-C498-09E9-48F6BE33B0F0} = {48E3226E-F0B1-589A-9D38-3EB18BF00425} + {E3C0F9DE-BDB7-DEE9-2DC8-AFAAF3DDC53B} = {CF1B9BB0-FD82-C498-09E9-48F6BE33B0F0} + {4D226192-FB4A-E1B1-8E54-5D957108A21B} = {E3C0F9DE-BDB7-DEE9-2DC8-AFAAF3DDC53B} + {DFB245B2-A096-09F4-FEC3-076726C1964A} = {CF1B9BB0-FD82-C498-09E9-48F6BE33B0F0} + {39791CF6-BACF-1BB1-20C2-C8FE7859FB80} = {DFB245B2-A096-09F4-FEC3-076726C1964A} + {CCFCD710-F1AE-2336-17C6-1885A4846A28} = {48E3226E-F0B1-589A-9D38-3EB18BF00425} + {537B66FC-4C80-5B72-82D3-D0271B7681FB} = {CCFCD710-F1AE-2336-17C6-1885A4846A28} + {B77DB325-270C-3E9B-B273-713F4B7ABA62} = {537B66FC-4C80-5B72-82D3-D0271B7681FB} + {A72EDB07-5A13-6865-B098-B843D7129D2A} = {CCFCD710-F1AE-2336-17C6-1885A4846A28} + {C6C7D216-C08F-7601-346E-680AB6B88ED0} = {A72EDB07-5A13-6865-B098-B843D7129D2A} + {E3CC08B8-CB2A-0285-BA96-9A7F96427925} = {48E3226E-F0B1-589A-9D38-3EB18BF00425} + {46689DAF-9F6D-F6AA-DF85-CF8AF9F5A032} = {E3CC08B8-CB2A-0285-BA96-9A7F96427925} + {CC1ED9EE-8069-632A-1E90-D25EED4E9F73} = {46689DAF-9F6D-F6AA-DF85-CF8AF9F5A032} + {B06C4E72-13A2-45C6-5DE2-59CF7BDF69BF} = {E3CC08B8-CB2A-0285-BA96-9A7F96427925} + {2B4F3003-741B-EC4B-1343-FF5E6B53B5B6} = {B06C4E72-13A2-45C6-5DE2-59CF7BDF69BF} + {FD18CEEC-B9E3-6ECD-AC0A-E560D9DA8C67} = {48E3226E-F0B1-589A-9D38-3EB18BF00425} + {F7B21209-40BC-9C10-DF34-CE90400262FF} = {FD18CEEC-B9E3-6ECD-AC0A-E560D9DA8C67} + {ABCE67C3-6834-2F58-25AA-D28F5EC30D34} = {F7B21209-40BC-9C10-DF34-CE90400262FF} + {C6C7CEBE-D9F9-9D5B-FD65-D9CE988A15FA} = {FD18CEEC-B9E3-6ECD-AC0A-E560D9DA8C67} + {E0B7A8F7-8780-380A-A67E-FD0590B53A33} = {C6C7CEBE-D9F9-9D5B-FD65-D9CE988A15FA} + {4FB9782A-9AC3-4E0A-8EF6-4D703B3D9EBA} = {48E3226E-F0B1-589A-9D38-3EB18BF00425} + {516533B9-C537-EF0C-9C1A-008493BE1F59} = {4FB9782A-9AC3-4E0A-8EF6-4D703B3D9EBA} + {6027281A-6F7D-98BC-FD73-B716DB28A058} = {516533B9-C537-EF0C-9C1A-008493BE1F59} + {B7BD3A75-28BA-9360-6445-996743F08807} = {48E3226E-F0B1-589A-9D38-3EB18BF00425} + {7FD7BE47-F56A-6770-27CA-B2CEB3B6E9AD} = {B7BD3A75-28BA-9360-6445-996743F08807} + {88CF06A5-4755-4AAE-B804-F069EB2C207F} = {7FD7BE47-F56A-6770-27CA-B2CEB3B6E9AD} + {993A09A2-77BC-827E-B3A4-02A00D8EAFE8} = {48E3226E-F0B1-589A-9D38-3EB18BF00425} + {CB5FDD3E-4033-7983-A457-C2347824D55E} = {993A09A2-77BC-827E-B3A4-02A00D8EAFE8} + {8CAFFDB0-F5F6-A37E-37AD-7E285801744A} = {CB5FDD3E-4033-7983-A457-C2347824D55E} + {03CA324C-43B6-DC1E-686F-FFEC749291D7} = {993A09A2-77BC-827E-B3A4-02A00D8EAFE8} + {87A1703D-4CAB-B1DC-0EFE-A8CD45C8E012} = {03CA324C-43B6-DC1E-686F-FFEC749291D7} + {A224B9CE-FBB5-72AC-7B97-498F1C879F7D} = {48E3226E-F0B1-589A-9D38-3EB18BF00425} + {EE2192B0-2FA8-3B48-C675-2E0F3992164B} = {A224B9CE-FBB5-72AC-7B97-498F1C879F7D} + {175EA3FB-9269-34B6-D98D-1D4671CA8983} = {EE2192B0-2FA8-3B48-C675-2E0F3992164B} + {67EB6727-0FC6-4D29-F50A-8B696F24CC01} = {48E3226E-F0B1-589A-9D38-3EB18BF00425} + {5B003213-30E3-B0C1-A122-9AEFDF29FD99} = {67EB6727-0FC6-4D29-F50A-8B696F24CC01} + {4077E3FE-5D0D-36BD-2596-03F99AB0741F} = {5B003213-30E3-B0C1-A122-9AEFDF29FD99} + {BA513238-0ECB-FFB2-0AB3-09EF6B7A6A82} = {48E3226E-F0B1-589A-9D38-3EB18BF00425} + {88DB711A-C3DB-1D90-691B-88A3B7453750} = {BA513238-0ECB-FFB2-0AB3-09EF6B7A6A82} + {B7E0F6A7-F75C-4F42-DA63-B3BED5B843B2} = {88DB711A-C3DB-1D90-691B-88A3B7453750} + {4D60FA3C-0E30-3002-DBD9-7EAB2837D08D} = {BA513238-0ECB-FFB2-0AB3-09EF6B7A6A82} + {E6484D67-74DE-3A1C-937B-E3E6541AFFBB} = {4D60FA3C-0E30-3002-DBD9-7EAB2837D08D} + {B8083C4E-1037-FEF2-EBEC-18F45F494CCE} = {48E3226E-F0B1-589A-9D38-3EB18BF00425} + {E8A621F1-E833-6F77-3DFF-2E9C778B3FDC} = {B8083C4E-1037-FEF2-EBEC-18F45F494CCE} + {54A653F2-4FDE-CB75-DDB2-0F24C180A199} = {E8A621F1-E833-6F77-3DFF-2E9C778B3FDC} + {95937D52-A7DE-47D6-CA32-872410343D6C} = {48E3226E-F0B1-589A-9D38-3EB18BF00425} + {1AFF4A1F-9AD8-37AC-C42A-C6C7D8289BED} = {95937D52-A7DE-47D6-CA32-872410343D6C} + {B0B7E960-FFA4-BC99-7B5F-2C70FDB5C889} = {1AFF4A1F-9AD8-37AC-C42A-C6C7D8289BED} + {8CD8027F-092E-CCC5-7A96-910E2081B858} = {48E3226E-F0B1-589A-9D38-3EB18BF00425} + {413C0971-57F2-3652-7F76-AF206909A4B0} = {8CD8027F-092E-CCC5-7A96-910E2081B858} + {FA8EB7A6-B199-4717-76F9-7833D7FA0587} = {413C0971-57F2-3652-7F76-AF206909A4B0} + {0E409FE4-D68C-89CD-A377-F6B94EE8A224} = {48E3226E-F0B1-589A-9D38-3EB18BF00425} + {B5B1741C-25B2-17D9-2A2F-3D87FE4C4333} = {0E409FE4-D68C-89CD-A377-F6B94EE8A224} + {4474AF4E-A61D-0869-577A-F4FB37AA3F6F} = {B5B1741C-25B2-17D9-2A2F-3D87FE4C4333} + {2BE3D457-3B94-5769-2A2D-F6E04E44847C} = {0E409FE4-D68C-89CD-A377-F6B94EE8A224} + {23296A66-B1B4-240B-5CA4-CBA1022A78C2} = {2BE3D457-3B94-5769-2A2D-F6E04E44847C} + {4EA8E1B8-624E-1764-418C-7BC6C74E4F7A} = {48E3226E-F0B1-589A-9D38-3EB18BF00425} + {33AF56CE-BD50-C6C7-4FEB-4FB93B9744E7} = {4EA8E1B8-624E-1764-418C-7BC6C74E4F7A} + {0550CBC4-2338-9FD5-D277-1E77E9357251} = {33AF56CE-BD50-C6C7-4FEB-4FB93B9744E7} + {F0427A8E-7665-54FC-6491-A740768D695D} = {4EA8E1B8-624E-1764-418C-7BC6C74E4F7A} + {C0FDE9DF-887C-85CA-53FE-C6B2AF02F05D} = {F0427A8E-7665-54FC-6491-A740768D695D} + {56243652-4302-FCBD-28A7-EB0EFD23FD8A} = {48E3226E-F0B1-589A-9D38-3EB18BF00425} + {6EC8D689-219C-1997-FCC3-AFDF04D8A165} = {56243652-4302-FCBD-28A7-EB0EFD23FD8A} + {B1CFBBE2-8D18-84A4-4AA3-C29684E291A7} = {6EC8D689-219C-1997-FCC3-AFDF04D8A165} + {68F3CC92-4C24-6C95-3508-B0B71230E5A7} = {56243652-4302-FCBD-28A7-EB0EFD23FD8A} + {04BEB0D6-D615-F29C-C040-F99E15E3DA71} = {68F3CC92-4C24-6C95-3508-B0B71230E5A7} + {26CFC9B7-E4C3-D90A-CEA1-FE4153B8FABB} = {48E3226E-F0B1-589A-9D38-3EB18BF00425} + {52E46177-12EB-0D51-AE15-DC0CCD1AB66B} = {26CFC9B7-E4C3-D90A-CEA1-FE4153B8FABB} + {79339DEB-B8F1-D636-7A82-1172C24F2D16} = {52E46177-12EB-0D51-AE15-DC0CCD1AB66B} + {35EF0797-FBCE-1217-4DAE-5FDA19476735} = {26CFC9B7-E4C3-D90A-CEA1-FE4153B8FABB} + {6B628034-BA3F-15F3-562F-6498272EFFDB} = {35EF0797-FBCE-1217-4DAE-5FDA19476735} + {03C30818-63C9-AAD2-E89F-152C41A3EA26} = {48E3226E-F0B1-589A-9D38-3EB18BF00425} + {12724914-055D-ABA4-526C-5CF1388E474D} = {03C30818-63C9-AAD2-E89F-152C41A3EA26} + {429764B7-8A13-9F9C-8328-8CF141920861} = {12724914-055D-ABA4-526C-5CF1388E474D} + {B2E3AF3D-8C48-D851-0C7D-F14EFCF3E33E} = {03C30818-63C9-AAD2-E89F-152C41A3EA26} + {38ACA1FC-FDA0-DD71-ACA9-6A1AB2DE1B1F} = {B2E3AF3D-8C48-D851-0C7D-F14EFCF3E33E} + {9A761EFC-6B67-AB80-7D4B-BE1179CE2EB2} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {E48C0AB8-7249-0EA9-E9E2-45108449EAF0} = {9A761EFC-6B67-AB80-7D4B-BE1179CE2EB2} + {06C7E673-01D0-108D-2EEC-564E2CBDAB3A} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {68D0DEBB-6583-23EE-CB5D-569D2A52787E} = {06C7E673-01D0-108D-2EEC-564E2CBDAB3A} + {00B917E0-6395-CA44-54F8-79DABCF6858D} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {A2AD4594-34F6-1B52-706A-5BD54353761D} = {00B917E0-6395-CA44-54F8-79DABCF6858D} + {8BF3F716-A3C7-7C86-33A5-825C85289EA7} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {BEF44FA5-535B-6433-BF71-B950C3A4D6D9} = {8BF3F716-A3C7-7C86-33A5-825C85289EA7} + {FE8D9D35-674E-3595-A130-EF91CEA4BEEF} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {0A2C92AB-B559-0957-00B3-2988D40A8F1F} = {FE8D9D35-674E-3595-A130-EF91CEA4BEEF} + {50911366-A704-B102-02F5-AE4DABCF0B5E} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {A0967937-177F-8369-8507-419559771F9D} = {50911366-A704-B102-02F5-AE4DABCF0B5E} + {621944B1-86A4-1D8D-2D31-FCDC28FDC3F5} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {F943C0C7-44C3-5639-0D82-284C78A67051} = {621944B1-86A4-1D8D-2D31-FCDC28FDC3F5} + {64D9FD21-4441-FE73-DD57-64F7E51876BC} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {7EB2B30F-63FD-B0CC-CAD5-A7AC290CDF1B} = {64D9FD21-4441-FE73-DD57-64F7E51876BC} + {96E34AA0-FA06-6E51-F756-4A5212F2B651} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {4C1BA462-5134-EBEF-8485-DE6AE23AD1CE} = {96E34AA0-FA06-6E51-F756-4A5212F2B651} + {A8EDB1DC-4F11-B534-71AE-03A7AD3253FB} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {E4F92444-C647-963E-7CE5-B5E0732826B0} = {A8EDB1DC-4F11-B534-71AE-03A7AD3253FB} + {080D8A02-6B4E-63AE-7911-5A02303DE08E} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {5D1950FC-C854-F35E-2B4B-C1F3F78C2978} = {080D8A02-6B4E-63AE-7911-5A02303DE08E} + {A24046F0-272D-7C79-38E0-E922F43C8952} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {15BA5917-B8D4-3779-981C-7F859E9018C2} = {A24046F0-272D-7C79-38E0-E922F43C8952} + {384296FA-B8C9-0E1D-60F3-AD393F3EC7F4} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {6232E88F-6CC8-67EF-3C09-D40A1B920A63} = {384296FA-B8C9-0E1D-60F3-AD393F3EC7F4} + {A443DA34-2D19-185E-A91A-35651B36A5DC} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {0ADE2D25-CF4E-2661-13CE-9D269739D54A} = {A443DA34-2D19-185E-A91A-35651B36A5DC} + {66D3D456-3703-C8E5-976F-EC9ACFFD5BFC} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {865AEFC5-D0F3-D914-EB46-C97AEB5ED73D} = {66D3D456-3703-C8E5-976F-EC9ACFFD5BFC} + {FDF99FE7-B988-D3A7-4E00-EE9B2148FD9E} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {DE4121F9-166E-C4BF-591A-8A2D1D680274} = {FDF99FE7-B988-D3A7-4E00-EE9B2148FD9E} + {2F475A77-FAA4-8DD5-3E86-CC44D5C9657C} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {F616F5D4-C8FC-FABB-9E71-D4D1C05F0518} = {2F475A77-FAA4-8DD5-3E86-CC44D5C9657C} + {D9BE69F2-73D0-B6FD-1AB0-4269DBE378AC} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {B67BA4A2-DFA2-1E77-13A2-A88B5C99B6A7} = {D9BE69F2-73D0-B6FD-1AB0-4269DBE378AC} + {86E548F1-6325-3F66-13DB-758B2141038A} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {15B30AD5-7CC9-2721-F653-40C26D54B681} = {86E548F1-6325-3F66-13DB-758B2141038A} + {068AC898-B9E8-E58E-8505-827029713779} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {1C219E9A-75EF-F4E1-29DA-576B33D426E8} = {068AC898-B9E8-E58E-8505-827029713779} + {00802252-8C3A-B0C5-FA15-663CDC3FE749} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {6357E9FD-A15A-D94A-7239-F3EC69E0B345} = {00802252-8C3A-B0C5-FA15-663CDC3FE749} + {59BCC06C-0962-9AB9-E639-FC3326E980E3} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {520320B7-7D1B-2B3D-2131-6A4496B4B75F} = {59BCC06C-0962-9AB9-E639-FC3326E980E3} + {3E8E8317-A1D0-BE58-A81A-53D5C2ED44E5} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {550DA514-46E7-C696-5AC1-CA6F1C2A7837} = {3E8E8317-A1D0-BE58-A81A-53D5C2ED44E5} + {A179CAF4-C5CE-0A49-8168-3828244BF29C} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {13DD3E53-6DB3-ED7A-C0E5-18FBD07D2FF1} = {A179CAF4-C5CE-0A49-8168-3828244BF29C} + {0CCD2D7C-72B5-B5A4-E94E-54D6D62242E0} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {728C4883-0E02-70AB-FEAB-141DF74ECC5A} = {0CCD2D7C-72B5-B5A4-E94E-54D6D62242E0} + {4C11CFFF-E4A4-FB98-6931-B42CD543742C} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {37B7D531-5CE2-ED55-D09D-8893492A1A32} = {4C11CFFF-E4A4-FB98-6931-B42CD543742C} + {9C947B34-E745-E3D9-4270-5E89E206158F} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {BD234F55-5125-C6F6-B68D-365617B4719D} = {9C947B34-E745-E3D9-4270-5E89E206158F} + {A3D9F4BF-2FE0-B008-A8D8-B0BF541C63FA} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {F0157B24-6924-D8D3-F3F0-BB967C4BFDE7} = {A3D9F4BF-2FE0-B008-A8D8-B0BF541C63FA} + {0331D922-92E3-741B-93C2-C77FFDF6B2A5} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {DF1B1705-2020-B3F6-6C7C-F3E0DC192671} = {0331D922-92E3-741B-93C2-C77FFDF6B2A5} + {06626A3C-8C52-0254-C370-29094150F5C0} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {79E02FE6-A032-B479-1E24-936D377C44F5} = {06626A3C-8C52-0254-C370-29094150F5C0} + {69F84C6F-4ABE-9F2F-4DDA-47EF2ECD4188} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {F17E8DF9-DD14-5D80-1880-F5BEC286459B} = {69F84C6F-4ABE-9F2F-4DDA-47EF2ECD4188} + {85E435B1-910C-A276-6183-46CD7FA08F56} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {4974120F-05A5-8DA9-018A-F0A845AE686F} = {85E435B1-910C-A276-6183-46CD7FA08F56} + {E542F7ED-51D4-1836-7F83-14927C90CF0F} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {ED97C352-F811-500A-18B3-AF55C5E7FB85} = {E542F7ED-51D4-1836-7F83-14927C90CF0F} + {2367D30A-842E-3B41-F549-6D596DF6C5B3} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {216733FD-26CD-6BD8-AC2E-2E639766B8D2} = {2367D30A-842E-3B41-F549-6D596DF6C5B3} + {E01672ED-6A17-3E56-B917-E9CCC7CE1B5C} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {DD9E2B9F-BF82-2FB6-D0E0-54E1FD8162EB} = {E01672ED-6A17-3E56-B917-E9CCC7CE1B5C} + {43123BDD-F8FD-7B05-F1F0-474F6413FC10} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {76409DD3-DAF5-F793-F902-C122D068EA55} = {43123BDD-F8FD-7B05-F1F0-474F6413FC10} + {87073964-8AC0-1E63-99AD-E86264D0C3A8} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {01BA1311-2AA0-FB0F-3B13-53A299A4BEB1} = {87073964-8AC0-1E63-99AD-E86264D0C3A8} + {79FB4107-A744-DE2F-4502-551FD56625B1} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {3F42290A-0EC6-06CB-3D0D-B313227B89CF} = {79FB4107-A744-DE2F-4502-551FD56625B1} + {E8F121BD-EE0C-8C1E-4B9D-6876FDFCE8CB} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {3E115A52-44C5-D396-737C-6FC3C4403E42} = {E8F121BD-EE0C-8C1E-4B9D-6876FDFCE8CB} + {65C18BE2-3FA3-CB8B-D9FC-F6A368BDF925} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {02D562D0-785C-025A-4949-79F94E58E1F0} = {65C18BE2-3FA3-CB8B-D9FC-F6A368BDF925} + {5D5A64EF-8F1D-4E55-296A-386F58E02FEB} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {0E775E42-81FE-C541-8612-2542DFC10FFB} = {5D5A64EF-8F1D-4E55-296A-386F58E02FEB} + {FDE3A015-C286-C1DA-FCFD-43394B62093D} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {CD5D106F-D570-E176-1CDC-7474CB43483C} = {FDE3A015-C286-C1DA-FCFD-43394B62093D} + {1AE621B7-1C0A-568F-E94D-147092A6C16E} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {D044D4D4-6272-7C57-A41F-CE477835050D} = {1AE621B7-1C0A-568F-E94D-147092A6C16E} + {C1390C80-CDB4-D92A-0755-FD048B00F77C} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {030E37CE-073F-949A-F61D-881B4412980D} = {C1390C80-CDB4-D92A-0755-FD048B00F77C} + {D53B0F47-CB95-ED86-7400-3728129DC1A4} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {154BC784-BB54-6164-16CB-FD9A125C3038} = {D53B0F47-CB95-ED86-7400-3728129DC1A4} + {88A4248A-7C05-5AFA-105E-12E5CF03EB92} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {B06EA13A-9504-0F8B-F771-F71D86EE15BE} = {88A4248A-7C05-5AFA-105E-12E5CF03EB92} + {89833225-F238-2124-534C-6E4100BFCE30} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {566C5AC7-1AD0-6A46-BBB6-0FC28B15B034} = {89833225-F238-2124-534C-6E4100BFCE30} + {7F8AA199-79F9-D499-BCE5-C8608D636F52} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {2AE34DC1-5982-B6E5-1A66-8E773A07DFFC} = {7F8AA199-79F9-D499-BCE5-C8608D636F52} + {357B9DF2-7E42-59C5-3241-D72D3F5B73CE} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {7829564F-3CB7-5E73-3905-2731D4029FF4} = {357B9DF2-7E42-59C5-3241-D72D3F5B73CE} + {325E300C-E6A5-B30D-833E-3F5D39AC641D} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {315CAE46-11E0-9C15-A4A6-A7191B2F4BFC} = {325E300C-E6A5-B30D-833E-3F5D39AC641D} + {B89378DC-63A1-3DFB-90D5-6D4BBCFE5380} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {2C051497-E6A4-83A9-8D82-464D79589C75} = {B89378DC-63A1-3DFB-90D5-6D4BBCFE5380} + {C2A48819-A0D2-828C-7EBF-6544538DDE42} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {3D273C0B-60F4-D20E-30B0-61244D4C5784} = {C2A48819-A0D2-828C-7EBF-6544538DDE42} + {2DCD25E1-20B4-BC1C-FB0A-B63E24DCA9F4} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {CA32CAC9-3748-2B74-4063-EB8C6A3A63C0} = {2DCD25E1-20B4-BC1C-FB0A-B63E24DCA9F4} + {7D7566EE-AC36-04CA-FA33-2A492DD426D5} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {DE8662EC-F0D3-5BB1-2233-BB12DFE355C0} = {7D7566EE-AC36-04CA-FA33-2A492DD426D5} + {6E80EACB-0A12-2F7D-8C65-502D4CA5866E} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {09C9074A-60CB-0308-AE90-BF6C83143F48} = {6E80EACB-0A12-2F7D-8C65-502D4CA5866E} + {65B9C57E-6F0B-FF8C-A952-C0E3CD257627} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {319573C5-512C-6703-33C7-F9490BEDE16B} = {65B9C57E-6F0B-FF8C-A952-C0E3CD257627} + {AB4FCC4B-7E03-DBBC-E8D0-356F4ED139AB} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {D3AECC39-FC5A-BD34-B2DF-769B801FAD60} = {AB4FCC4B-7E03-DBBC-E8D0-356F4ED139AB} + {4319485C-F3D4-2DAA-4D37-9C17041107D7} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {84C8629A-B856-B8A8-093E-D1A4C81596D9} = {4319485C-F3D4-2DAA-4D37-9C17041107D7} + {3A34323D-BB25-1A14-EB08-19B663AAA9DF} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {0D1C9FAC-345A-8A5D-ED74-D50627E73BC3} = {3A34323D-BB25-1A14-EB08-19B663AAA9DF} + {755FB38B-3FAF-A6FF-3771-48AD310AABE7} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {09C1BD8A-3DDC-2DC7-5E79-529A4B861B33} = {755FB38B-3FAF-A6FF-3771-48AD310AABE7} + {630CCDB5-DE32-79EF-13AD-984AAE3EECDE} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {C4A89DA2-F3C6-DEF5-2BB6-1470F32F8AA9} = {630CCDB5-DE32-79EF-13AD-984AAE3EECDE} + {2D05C0FE-225A-4A7C-767A-F0D8165E2019} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {4AD6BA21-3B28-5119-642E-5A4AB589B716} = {2D05C0FE-225A-4A7C-767A-F0D8165E2019} + {03EACC3E-D50F-C3FA-C7F6-08C16405A00B} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {374920CC-E7AA-5A9C-2460-EA88950A909B} = {03EACC3E-D50F-C3FA-C7F6-08C16405A00B} + {AA75A989-888D-B14D-6300-9A7E02ED2EAB} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {7C82CBEE-C585-C659-CA98-9E423668227C} = {AA75A989-888D-B14D-6300-9A7E02ED2EAB} + {C73472D1-CFD4-5C68-4B99-E5B4BB4630BB} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {5584D3E5-DA59-4CC3-09ED-EB30EEC88565} = {C73472D1-CFD4-5C68-4B99-E5B4BB4630BB} + {BE9EC5B1-8A28-E14C-E4B4-F3E66C9E889A} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {8F0AFB80-74D1-A528-F09C-A5C48A7DB0AE} = {BE9EC5B1-8A28-E14C-E4B4-F3E66C9E889A} + {E48BE97D-2C8B-124A-A3DD-DFFD0CCAE704} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {167F0375-502C-5EE3-461A-9DC8DFBD4B56} = {E48BE97D-2C8B-124A-A3DD-DFFD0CCAE704} + {0E7A03F2-6F7F-0E27-553F-0F980A101569} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {FCBAA3BA-7479-30B7-EAF4-BF10EF1FC8AA} = {0E7A03F2-6F7F-0E27-553F-0F980A101569} + {C2689E79-4290-C79C-8876-F7CBBD8A6CB3} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {E3EE641F-7487-58CD-3456-6BA821217EEB} = {C2689E79-4290-C79C-8876-F7CBBD8A6CB3} + {7E66735A-0536-68B4-7545-56E34E920C51} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {F6B2A792-42B6-FBDF-AB06-179CD19093D1} = {7E66735A-0536-68B4-7545-56E34E920C51} + {73EFD343-138B-48E0-73F1-C226E7EAF37B} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {1A3E63DB-75EA-6569-D917-89B4203A51D9} = {73EFD343-138B-48E0-73F1-C226E7EAF37B} + {0A0643BD-F61F-B8F2-C10A-D216600647FF} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {BEF506A7-18E9-06C3-8B60-E9C54AE3639D} = {0A0643BD-F61F-B8F2-C10A-D216600647FF} + {8CC7DDDD-EA87-905C-099E-4353711AB883} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {5D847496-840A-811E-C348-845823CC17FD} = {8CC7DDDD-EA87-905C-099E-4353711AB883} + {1253EC49-3F6F-DDCC-27E7-1D48F381E702} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {123D0FB0-42E9-4C6C-DA07-B7FC07684BD3} = {1253EC49-3F6F-DDCC-27E7-1D48F381E702} + {4E118AAF-1874-8714-F42A-8BEAECE0C276} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {DFCDEB8E-730E-D946-9237-97D13C0683A5} = {4E118AAF-1874-8714-F42A-8BEAECE0C276} + {572A021C-D31D-7566-E6D7-0BF983FC3FD8} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {3462643B-8EAF-3B61-FB2B-440E5C8F88F6} = {572A021C-D31D-7566-E6D7-0BF983FC3FD8} + {2E144F98-BF78-A3E0-F494-477CF2DDA281} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {5B918EEB-A1F6-D8E4-32BC-9B0DF8E0A246} = {2E144F98-BF78-A3E0-F494-477CF2DDA281} + {1B31B1CC-7C5D-6F1E-77B6-7468BB812392} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {4943B4F5-6E6D-4A47-5483-447A518FB124} = {1B31B1CC-7C5D-6F1E-77B6-7468BB812392} + {FB55E063-D07B-D551-7C94-FC764C5002B2} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {832C0545-F430-FBF7-E587-664F9E0EF042} = {FB55E063-D07B-D551-7C94-FC764C5002B2} + {C6B103E3-A11C-6605-E5EB-F8BF0D5708C0} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {3877E86E-24D8-33A3-DA46-AD1E2496D733} = {C6B103E3-A11C-6605-E5EB-F8BF0D5708C0} + {53B29166-F1EB-8111-56DE-3AF18E0074DE} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} + {6C75FA73-DEAA-686F-BD75-84B5E87C6006} = {53B29166-F1EB-8111-56DE-3AF18E0074DE} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {5A6F0801-E8E0-4C56-B741-425C2846CBF3} + EndGlobalSection +EndGlobal