diff --git a/Cargo.lock b/Cargo.lock index db8f85691..4293de0d5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2717,6 +2717,7 @@ dependencies = [ "anyhow", "cranelift-entity", "derive_more", + "indexmap 2.1.0", "intrusive-collections", "inventory", "lalrpop", @@ -2804,6 +2805,7 @@ version = "0.1.0" dependencies = [ "cargo_metadata", "concat-idents", + "derive_more", "expect-test", "miden-assembly", "miden-codegen-masm", @@ -2818,6 +2820,7 @@ dependencies = [ "midenc-session", "proptest", "rustc-demangle", + "rustc-hash", "sha2", "wasmprinter", ] diff --git a/Cargo.toml b/Cargo.toml index 214c17701..e326e075c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -62,6 +62,7 @@ smallstr = { version = "0.3", features = ["union"] } thiserror = "1.0" toml = { version = "0.5", features = ["preserve_order"] } derive_more = "0.99" +indexmap = "2.1" # 211152c631d16a943aae503466b198b93c61150f is latest (as of Jan 25th) commit in the next branch miden-assembly = { git = "https://github.com/0xPolygonMiden/miden-vm", rev = "211152c631d16a943aae503466b198b93c61150f"} miden-core = { git = "https://github.com/0xPolygonMiden/miden-vm", rev = "211152c631d16a943aae503466b198b93c61150f" } diff --git a/frontend-wasm/Cargo.toml b/frontend-wasm/Cargo.toml index e9c77c574..4d021f1cd 100644 --- a/frontend-wasm/Cargo.toml +++ b/frontend-wasm/Cargo.toml @@ -22,7 +22,7 @@ log.workspace = true anyhow.workspace = true wasmparser = "0.118.1" derive_more.workspace = true -indexmap = "2.1" +indexmap.workspace = true gimli = { version = "0.28.0", default-features = false, features = ['read', 'std'] } rustc-hash.workspace = true diff --git a/frontend-wasm/src/code_translator/mod.rs b/frontend-wasm/src/code_translator/mod.rs index 73e0e1808..ec2594f6d 100644 --- a/frontend-wasm/src/code_translator/mod.rs +++ b/frontend-wasm/src/code_translator/mod.rs @@ -17,6 +17,7 @@ use std::collections::hash_map; use std::u64; use crate::error::{WasmError, WasmResult}; +use crate::module::func_env::FuncEnvironment; use crate::module::func_translation_state::{ControlStackFrame, ElseData, FuncTranslationState}; use crate::module::function_builder_ext::FunctionBuilderExt; use crate::module::types::{ir_type, BlockType, FuncIndex, GlobalIndex, ModuleTypes}; @@ -44,6 +45,7 @@ pub fn translate_operator( state: &mut FuncTranslationState, module: &Module, mod_types: &ModuleTypes, + func_env: &FuncEnvironment, diagnostics: &DiagnosticsHandler, span: SourceSpan, ) -> WasmResult<()> { @@ -121,12 +123,18 @@ pub fn translate_operator( state, builder, FuncIndex::from_u32(*function_index), - module, - mod_types, + func_env, span, diagnostics, )?; } + Operator::CallIndirect { + type_index: _, + table_index: _, + table_byte: _, + } => { + // TODO: implement call_indirect + } /******************************* Memory management *********************************/ Operator::MemoryGrow { .. } => { let arg = state.pop1_casted(U32, builder, span); @@ -633,16 +641,14 @@ fn translate_call( state: &mut FuncTranslationState, builder: &mut FunctionBuilderExt, function_index: FuncIndex, - module: &Module, - mod_types: &ModuleTypes, + func_env: &FuncEnvironment, span: SourceSpan, diagnostics: &DiagnosticsHandler, ) -> WasmResult<()> { let (fident, num_args) = state.get_direct_func( builder.data_flow_graph_mut(), function_index, - module, - mod_types, + func_env, diagnostics, )?; let args = state.peekn_mut(num_args); diff --git a/frontend-wasm/src/code_translator/tests.rs b/frontend-wasm/src/code_translator/tests.rs index c4e46fe8b..69c690d78 100644 --- a/frontend-wasm/src/code_translator/tests.rs +++ b/frontend-wasm/src/code_translator/tests.rs @@ -58,15 +58,16 @@ fn module() { ) "#, expect![[r#" - module noname + module noname { - pub fn main() { - block0: - v0 = const.i32 0 : i32; - br block1; + pub fn main() { + block0: + v0 = const.i32 0 : i32; + br block1; - block1: - ret; + block1: + ret; + } } "#]], ); @@ -86,16 +87,17 @@ fn locals() { ) "#, expect![[r#" - module noname + module noname { - pub fn main() { - block0: - v0 = const.i32 0 : i32; - v1 = const.i32 1 : i32; - br block1; + pub fn main() { + block0: + v0 = const.i32 0 : i32; + v1 = const.i32 1 : i32; + br block1; - block1: - ret; + block1: + ret; + } } "#]], ); @@ -124,26 +126,27 @@ fn locals_inter_block() { ) "#, expect![[r#" - module noname + module noname { - pub fn main() -> i32 { - block0: - v1 = const.i32 0 : i32; - v2 = const.i32 3 : i32; - br block2; + pub fn main() -> i32 { + block0: + v1 = const.i32 0 : i32; + v2 = const.i32 3 : i32; + br block2; - block1(v0: i32): - ret v0; + block1(v0: i32): + ret v0; - block2: - v3 = const.i32 5 : i32; - v4 = add.wrapping v2, v3 : i32; - br block3; + block2: + v3 = const.i32 5 : i32; + v4 = add.wrapping v2, v3 : i32; + br block3; - block3: - v5 = const.i32 7 : i32; - v6 = add.wrapping v5, v4 : i32; - br block1(v6); + block3: + v5 = const.i32 7 : i32; + v6 = add.wrapping v5, v4 : i32; + br block1(v6); + } } "#]], ); @@ -167,26 +170,27 @@ fn func_call() { ) "#, expect![[r#" - module noname + module noname { - pub fn add(i32, i32) -> i32 { - block0(v0: i32, v1: i32): - v3 = add.wrapping v0, v1 : i32; - br block1(v3); + pub fn add(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = add.wrapping v0, v1 : i32; + br block1(v3); - block1(v2: i32): - ret v2; - } + block1(v2: i32): + ret v2; + } - pub fn main() -> i32 { - block0: - v1 = const.i32 3 : i32; - v2 = const.i32 5 : i32; - v3 = call noname::add(v1, v2) : i32; - br block1(v3); + pub fn main() -> i32 { + block0: + v1 = const.i32 3 : i32; + v2 = const.i32 5 : i32; + v3 = call noname::add(v1, v2) : i32; + br block1(v3); - block1(v0: i32): - ret v0; + block1(v0: i32): + ret v0; + } } "#]], ); @@ -208,19 +212,20 @@ fn br() { ) "#, expect![[r#" - module noname + module noname { - pub fn main() -> i32 { - block0: - v1 = const.i32 0 : i32; - v2 = const.i32 3 : i32; - br block2; + pub fn main() -> i32 { + block0: + v1 = const.i32 0 : i32; + v2 = const.i32 3 : i32; + br block2; - block1(v0: i32): - ret v0; + block1(v0: i32): + ret v0; - block2: - br block1(v2); + block2: + br block1(v2); + } } "#]], ); @@ -251,29 +256,30 @@ fn loop_br_if() { ) "#, expect![[r#" - module noname + module noname { - pub fn main() -> i32 { - block0: - v1 = const.i32 0 : i32; - v2 = const.i32 2 : i32; - br block2(v2, v1); + pub fn main() -> i32 { + block0: + v1 = const.i32 0 : i32; + v2 = const.i32 2 : i32; + br block2(v2, v1); - block1(v0: i32): - ret v0; + block1(v0: i32): + ret v0; - block2(v3: i32, v4: i32): - v5 = add.wrapping v3, v4 : i32; - v6 = const.i32 1 : i32; - v7 = sub.wrapping v3, v6 : i32; - v8 = neq v7, 0 : i1; - condbr v8, block2(v7, v5), block4; + block2(v3: i32, v4: i32): + v5 = add.wrapping v3, v4 : i32; + v6 = const.i32 1 : i32; + v7 = sub.wrapping v3, v6 : i32; + v8 = neq v7, 0 : i1; + condbr v8, block2(v7, v5), block4; - block3: - br block1(v5); + block3: + br block1(v5); - block4: - br block3; + block4: + br block3; + } } "#]], ); @@ -295,27 +301,28 @@ fn if_then_else() { ) "#, expect![[r#" - module noname + module noname { - pub fn main() -> i32 { - block0: - v1 = const.i32 2 : i32; - v2 = neq v1, 0 : i1; - condbr v2, block2, block4; + pub fn main() -> i32 { + block0: + v1 = const.i32 2 : i32; + v2 = neq v1, 0 : i1; + condbr v2, block2, block4; - block1(v0: i32): - ret v0; + block1(v0: i32): + ret v0; - block2: - v4 = const.i32 3 : i32; - br block3(v4); + block2: + v4 = const.i32 3 : i32; + br block3(v4); - block3(v3: i32): - br block1(v3); + block3(v3: i32): + br block1(v3); - block4: - v5 = const.i32 5 : i32; - br block3(v5); + block4: + v5 = const.i32 5 : i32; + br block3(v5); + } } "#]], ); @@ -336,23 +343,24 @@ fn global_var() { ) "#, expect![[r#" - module noname + module noname { - const $0 = 0x0000002a; + const $0 = 0x0000002a; - global external @MyGlobalVal : i32 = $0 { id = 0 }; + global external @MyGlobalVal : i32 = $0 { id = 0 }; - pub fn main() { - block0: - v0 = global.load (@MyGlobalVal) as *mut i8 : i32; - v1 = const.i32 9 : i32; - v2 = add.wrapping v0, v1 : i32; - v3 = global.symbol @MyGlobalVal : *mut i32; - store v3, v2; - br block1; + pub fn main() { + block0: + v0 = global.load (@MyGlobalVal) as *mut i8 : i32; + v1 = const.i32 9 : i32; + v2 = add.wrapping v0, v1 : i32; + v3 = global.symbol @MyGlobalVal : *mut i32; + store v3, v2; + br block1; - block1: - ret; + block1: + ret; + } } "#]], ); diff --git a/frontend-wasm/src/code_translator/tests_unsupported.rs b/frontend-wasm/src/code_translator/tests_unsupported.rs index 25d0dd937..fbc59722b 100644 --- a/frontend-wasm/src/code_translator/tests_unsupported.rs +++ b/frontend-wasm/src/code_translator/tests_unsupported.rs @@ -8,6 +8,7 @@ use wasmparser::MemArg; use wasmparser::Operator; use wasmparser::Operator::*; +use crate::module::func_env::FuncEnvironment; use crate::module::func_translation_state::FuncTranslationState; use crate::module::function_builder_ext::FunctionBuilderContext; use crate::module::function_builder_ext::FunctionBuilderExt; @@ -29,15 +30,17 @@ fn check_unsupported(op: &Operator) { }; let mut module_func_builder = module_builder.function("func_name", sig.clone()).unwrap(); let mut fb_ctx = FunctionBuilderContext::new(); + let mod_types = Default::default(); + let func_env = FuncEnvironment::new(&module_info, &mod_types, vec![]); let mut state = FuncTranslationState::new(); let mut builder_ext = FunctionBuilderExt::new(&mut module_func_builder, &mut fb_ctx); - let mod_types = Default::default(); let result = translate_operator( op, &mut builder_ext, &mut state, &module_info, &mod_types, + &func_env, &diagnostics, SourceSpan::default(), ); @@ -58,11 +61,6 @@ fn check_unsupported(op: &Operator) { // Wasm Spec v1.0 const UNSUPPORTED_WASM_V1_OPS: &[Operator] = &[ - CallIndirect { - type_index: 0, - table_index: 0, - table_byte: 0, - }, /****************************** Memory Operators ************************************/ F32Load { memarg: MemArg { diff --git a/frontend-wasm/src/component/build_ir.rs b/frontend-wasm/src/component/build_ir.rs index aca4f84d4..ac2f5cb0e 100644 --- a/frontend-wasm/src/component/build_ir.rs +++ b/frontend-wasm/src/component/build_ir.rs @@ -1,24 +1,12 @@ use miden_diagnostics::DiagnosticsHandler; -use miden_hir::{ - cranelift_entity::PrimaryMap, FunctionIdent, Ident, InterfaceFunctionIdent, InterfaceIdent, - Symbol, -}; -use miden_hir_type::LiftedFunctionType; + use wasmparser::WasmFeatures; -use crate::{ - component::{ComponentParser, StringEncoding}, - error::WasmResult, - module::{build_ir::build_ir_module, module_env::ParsedModule, types::EntityIndex}, - WasmError, WasmTranslationConfig, -}; +use crate::{component::ComponentParser, error::WasmResult, WasmTranslationConfig}; use super::{ - inline, - instance::{ComponentImport, ComponentInstance, ComponentInstanceBuilder}, - interface_type_to_ir, CanonicalOptions, ComponentTypes, ComponentTypesBuilder, CoreDef, Export, - ExportItem, LinearComponent, LinearComponentTranslation, ParsedRootComponent, - StaticModuleIndex, TypeFuncIndex, + inline, translator::ComponentTranslator, ComponentTypesBuilder, LinearComponentTranslation, + ParsedRootComponent, }; /// Translate a Wasm component binary into Miden IR component @@ -30,13 +18,9 @@ pub fn translate_component( let (mut component_types_builder, parsed_component) = parse(config, wasm, diagnostics)?; let linearized_component_translation = inline(&mut component_types_builder, &parsed_component)?; let component_types = component_types_builder.finish(); - build_ir( - linearized_component_translation, - component_types, - parsed_component.static_modules, - config, - diagnostics, - ) + let parsed_modules = parsed_component.static_modules; + let translator = ComponentTranslator::new(component_types, parsed_modules, config, diagnostics); + translator.translate(linearized_component_translation) } fn parse<'data>( @@ -77,236 +61,15 @@ fn inline( Ok(component_dfg.finish()) } -fn build_ir<'data>( - linear_component_translation: LinearComponentTranslation, - component_types: ComponentTypes, - modules: PrimaryMap>, - config: &WasmTranslationConfig, - diagnostics: &DiagnosticsHandler, -) -> WasmResult { - let mut cb = miden_hir::ComponentBuilder::new(diagnostics); - - let component_instance_builder = - ComponentInstanceBuilder::new(linear_component_translation, component_types, modules); - let mut component_instance = component_instance_builder.build()?; - - component_instance.ensure_module_names(); - - // build exports - for (name, export) in &component_instance.component.exports { - build_export(export, &component_instance, name, &mut cb, config)?; - } - - for (static_module_idx, parsed_module) in component_instance.modules { - let component = &component_instance.component; - build_import( - &component_instance.imports[&static_module_idx], - &component_instance.component_types, - component, - &parsed_module, - &mut cb, - config, - )?; - - let module = build_ir_module( - parsed_module, - component_instance.component_types.module_types(), - config, - diagnostics, - )?; - cb.add_module(module.into()) - .expect("module is already added"); - } - - Ok(cb.build()) -} - -fn build_import( - component_imports: &[ComponentImport], - component_types: &ComponentTypes, - component: &LinearComponent, - parsed_module: &ParsedModule<'_>, - cb: &mut miden_hir::ComponentBuilder<'_>, - config: &WasmTranslationConfig, -) -> WasmResult<()> { - for import in component_imports { - let (import_idx, import_names) = &component.imports[import.runtime_import_index]; - if import_names.len() != 1 { - return Err(crate::WasmError::Unsupported( - "multi-name imports not supported".to_string(), - )); - } - let import_func_name = import_names.first().unwrap(); - let (full_interface_name, _) = component.import_types[*import_idx].clone(); - let interface_function = InterfaceFunctionIdent { - interface: InterfaceIdent::from_full_ident(full_interface_name.clone()), - function: Symbol::intern(import_func_name), - }; - let Some(import_metadata) = config.import_metadata.get(&interface_function) else { - return Err(crate::WasmError::MissingImportMetadata(format!( - "Import metadata for interface function {:?} not found", - &interface_function, - ))); - }; - let lifted_func_ty = convert_lifted_func_ty(&import.signature, component_types); - - let component_import = miden_hir::ComponentImport { - function_ty: lifted_func_ty, - interface_function, - invoke_method: import_metadata.invoke_method, - digest: import_metadata.digest.clone(), - }; - let function_id = - find_module_import_function(parsed_module, full_interface_name, import_func_name)?; - cb.add_import(function_id, component_import); - } - Ok(()) -} - -fn find_module_import_function( - parsed_module: &ParsedModule, - full_interface_name: String, - import_func_name: &String, -) -> WasmResult { - for import in &parsed_module.module.imports { - if import.module == full_interface_name && &import.field == import_func_name { - let func_idx = import.index.unwrap_func(); - let func_name = parsed_module.module.func_name(func_idx); - let module_instance_name = parsed_module.module.name(); - return Ok(FunctionIdent { - module: Ident::with_empty_span(Symbol::intern(module_instance_name)), - function: Ident::with_empty_span(Symbol::intern(func_name)), - }); - } - } - Err(WasmError::Unexpected(format!( - "failed to find module import for interface {} and function {}", - full_interface_name, import_func_name - ))) -} - -fn build_export( - export: &Export, - component_instance: &ComponentInstance<'_>, - name: &String, - cb: &mut miden_hir::ComponentBuilder<'_>, - config: &WasmTranslationConfig, -) -> WasmResult<()> { - match export { - Export::LiftedFunction { ty, func, options } => { - build_export_function(component_instance, name, func, ty, options, cb, config) - } - Export::Instance(exports) => { - // Flatten any(nested) interface instance exports into the IR `Component` exports - for (name, export) in exports { - build_export(export, component_instance, name, cb, config)?; - } - Ok(()) - } - Export::ModuleStatic(_) => todo!(), - Export::ModuleImport(_) => todo!(), - Export::Type(_) => todo!(), - } -} - -fn build_export_function( - component_instance: &ComponentInstance<'_>, - name: &String, - func: &CoreDef, - ty: &TypeFuncIndex, - options: &CanonicalOptions, - cb: &mut miden_hir::ComponentBuilder<'_>, - config: &WasmTranslationConfig, -) -> WasmResult<()> { - assert_empty_canonical_options(options); - let func_ident = match func { - CoreDef::Export(core_export) => { - let parsed_module = component_instance.module(core_export.instance); - let module_name = parsed_module.module.name(); - let module_ident = miden_hir::Ident::with_empty_span(Symbol::intern(module_name)); - let func_name = match core_export.item { - ExportItem::Index(idx) => match idx { - EntityIndex::Function(func_idx) => parsed_module.module.func_name(func_idx), - EntityIndex::Table(_) => todo!(), - EntityIndex::Memory(_) => todo!(), - EntityIndex::Global(_) => todo!(), - }, - ExportItem::Name(_) => todo!(), - }; - let func_ident = miden_hir::FunctionIdent { - module: module_ident, - function: miden_hir::Ident::with_empty_span(Symbol::intern(func_name)), - }; - func_ident - } - CoreDef::InstanceFlags(_) => todo!(), - CoreDef::Trampoline(_) => todo!(), - }; - let lifted_func_ty = convert_lifted_func_ty(ty, &component_instance.component_types); - let export_name = Symbol::intern(name).into(); - let Some(export_metadata) = config.export_metadata.get(&export_name) else { - return Err(WasmError::MissingExportMetadata(format!( - "Export metadata for interface function {:?} not found", - &export_name, - ))); - }; - let export = miden_hir::ComponentExport { - function: func_ident, - function_ty: lifted_func_ty, - invoke_method: export_metadata.invoke_method, - }; - cb.add_export(export_name, export); - Ok(()) -} - -fn convert_lifted_func_ty( - ty: &TypeFuncIndex, - component_types: &ComponentTypes, -) -> LiftedFunctionType { - let type_func = component_types[*ty].clone(); - let params_types = component_types[type_func.params].clone().types; - let results_types = component_types[type_func.results].clone().types; - let params = params_types - .into_iter() - .map(|ty| interface_type_to_ir(ty, component_types)) - .collect(); - let results = results_types - .into_iter() - .map(|ty| interface_type_to_ir(ty, component_types)) - .collect(); - LiftedFunctionType { params, results } -} - -fn assert_empty_canonical_options(options: &CanonicalOptions) { - assert_eq!( - options.string_encoding, - StringEncoding::Utf8, - "UTF-8 is expected in CanonicalOptions, string transcoding is not yet supported" - ); - assert!( - options.realloc.is_none(), - "realloc in CanonicalOptions is not yet supported" - ); - assert!( - options.post_return.is_none(), - "post_return in CanonicalOptions is not yet supported" - ); - assert!( - options.memory.is_none(), - "memory in CanonicalOptions is not yet supported" - ); -} - #[cfg(test)] mod tests { use miden_core::crypto::hash::RpoDigest; + use miden_hir::{InterfaceFunctionIdent, InterfaceIdent, LiftedFunctionType, Symbol}; use miden_hir_type::Type; use crate::{ - component::StaticModuleIndex, - config::{ExportMetadata, ImportMetadata}, - test_utils::test_diagnostics, + component::StaticModuleIndex, config::ImportMetadata, test_utils::test_diagnostics, }; use super::*; @@ -340,18 +103,7 @@ mod tests { ); let wasm = wat::parse_str(wat).unwrap(); let diagnostics = test_diagnostics(); - let export_metadata = [( - Symbol::intern("add").into(), - ExportMetadata { - invoke_method: miden_hir::FunctionInvocationMethod::Call, - }, - )] - .into_iter() - .collect(); - let config = WasmTranslationConfig { - export_metadata, - ..Default::default() - }; + let config = Default::default(); let (mut component_types_builder, parsed_component) = parse(&config, &wasm, &diagnostics).unwrap(); let component_translation = @@ -368,14 +120,14 @@ mod tests { // dbg!(&component_translation.component.exports); assert_eq!(component_translation.component.exports.len(), 1); let component_types = component_types_builder.finish(); - let ir = build_ir( - component_translation, + let translator = ComponentTranslator::new( component_types, parsed_component.static_modules, &config, &diagnostics, - ) - .unwrap(); + ); + let ir = translator.translate(component_translation).unwrap(); + // dbg!(&ir.exports()); assert!(!ir.modules().is_empty()); assert!(!ir.exports().is_empty()); @@ -443,22 +195,13 @@ mod tests { interface_function_ident.clone(), ImportMetadata { digest: RpoDigest::default(), - invoke_method: miden_hir::FunctionInvocationMethod::Call, - }, - )] - .into_iter() - .collect(); - let export_metadata = [( - Symbol::intern("inc").into(), - ExportMetadata { - invoke_method: miden_hir::FunctionInvocationMethod::Call, }, )] .into_iter() .collect(); + let config = WasmTranslationConfig { import_metadata, - export_metadata, ..Default::default() }; let (mut component_types_builder, parsed_component) = @@ -487,14 +230,14 @@ mod tests { let component_types = component_types_builder.finish(); - let ir = build_ir( - component_translation, + let translator = ComponentTranslator::new( component_types, parsed_component.static_modules, &config, &diagnostics, - ) - .unwrap(); + ); + let ir = translator.translate(component_translation).unwrap(); + // dbg!(&ir.exports()); assert!(!ir.modules().is_empty()); assert!(!ir.exports().is_empty()); @@ -507,7 +250,7 @@ mod tests { results: vec![Type::U32], }; assert_eq!(export.function_ty, expected_export_func_ty); - let module = ir.modules().front().get().unwrap(); + let module = ir.modules().first().unwrap().1; // dbg!(&module.imports()); let import_info = module.imports(); let function_id = import_info diff --git a/frontend-wasm/src/component/instance.rs b/frontend-wasm/src/component/instance.rs deleted file mode 100644 index 38dd49bb9..000000000 --- a/frontend-wasm/src/component/instance.rs +++ /dev/null @@ -1,137 +0,0 @@ -use miden_hir::cranelift_entity::PrimaryMap; -use rustc_hash::FxHashMap; - -use crate::{ - component::Trampoline, error::WasmResult, module::module_env::ParsedModule, WasmError, -}; - -use super::{ - ComponentTypes, CoreDef, GlobalInitializer, InstantiateModule, LinearComponent, - LinearComponentTranslation, LoweredIndex, RuntimeImportIndex, RuntimeInstanceIndex, - StaticModuleIndex, TypeFuncIndex, -}; - -/// A component import -#[derive(Debug)] -pub struct ComponentImport { - pub runtime_import_index: RuntimeImportIndex, - pub signature: TypeFuncIndex, -} - -pub struct ComponentInstance<'data> { - pub modules: PrimaryMap>, - pub module_instances: PrimaryMap, - pub component: LinearComponent, - pub component_types: ComponentTypes, - pub imports: FxHashMap>, -} - -impl<'data> ComponentInstance<'data> { - pub fn ensure_module_names(&mut self) { - for (idx, parsed_module) in self.modules.iter_mut() { - parsed_module - .module - .set_name_fallback(format!("module{}", idx.as_u32())); - } - } - - pub fn module(&self, idx: RuntimeInstanceIndex) -> &ParsedModule<'data> { - &self.modules[self.module_instances[idx]] - } -} - -pub struct ComponentInstanceBuilder<'data> { - linear_component_translation: LinearComponentTranslation, - component_types: ComponentTypes, - modules: PrimaryMap>, -} - -impl<'data> ComponentInstanceBuilder<'data> { - pub fn new( - linear_component_translation: LinearComponentTranslation, - component_types: ComponentTypes, - modules: PrimaryMap>, - ) -> Self { - Self { - linear_component_translation, - component_types, - modules, - } - } - - pub fn build(self) -> WasmResult> { - let mut module_instances: PrimaryMap = - PrimaryMap::new(); - let mut lower_imports: FxHashMap = FxHashMap::default(); - let mut imports: FxHashMap> = FxHashMap::default(); - let component = &self.linear_component_translation.component; - for initializer in &component.initializers { - match initializer { - GlobalInitializer::InstantiateModule(m) => { - match m { - InstantiateModule::Static(static_module_idx, args) => { - if module_instances - .values() - .find(|idx| **idx == *static_module_idx) - .is_some() - { - return Err(WasmError::Unsupported(format!( - "A module with a static index {} is already instantiated. We don't support multiple instantiations of the same module.", - static_module_idx.as_u32() - ))); - } - - module_instances.push(*static_module_idx); - let mut module_args: Vec = Vec::new(); - for arg in args.iter() { - match arg { - CoreDef::Export(_) => todo!(), - CoreDef::InstanceFlags(_) => todo!(), - CoreDef::Trampoline(trampoline_idx) => { - let trampoline = &self - .linear_component_translation - .trampolines[*trampoline_idx]; - match trampoline { - Trampoline::LowerImport { - index, - lower_ty, - options: _, - } => { - let import = lower_imports[index]; - let import = ComponentImport { - runtime_import_index: import, - signature: *lower_ty, - }; - module_args.push(import); - } - _ => unreachable!(), - } - } - } - } - imports.insert(*static_module_idx, module_args); - } - InstantiateModule::Import(_, _) => todo!(), - }; - } - GlobalInitializer::LowerImport { - index: init_lowered_idx, - import, - } => { - lower_imports.insert(*init_lowered_idx, *import); - } - GlobalInitializer::ExtractMemory(_) => todo!(), - GlobalInitializer::ExtractRealloc(_) => todo!(), - GlobalInitializer::ExtractPostReturn(_) => todo!(), - GlobalInitializer::Resource(_) => todo!(), - } - } - Ok(ComponentInstance { - modules: self.modules, - module_instances, - component: self.linear_component_translation.component, - component_types: self.component_types, - imports, - }) - } -} diff --git a/frontend-wasm/src/component/mod.rs b/frontend-wasm/src/component/mod.rs index 4e8e9b331..13eec880d 100644 --- a/frontend-wasm/src/component/mod.rs +++ b/frontend-wasm/src/component/mod.rs @@ -7,8 +7,8 @@ pub mod build_ir; mod dfg; pub mod info; mod inline; -mod instance; mod parser; +mod translator; mod types; pub use self::info::*; diff --git a/frontend-wasm/src/component/parser.rs b/frontend-wasm/src/component/parser.rs index 830036ea7..97a22d901 100644 --- a/frontend-wasm/src/component/parser.rs +++ b/frontend-wasm/src/component/parser.rs @@ -546,6 +546,13 @@ impl<'a, 'data> ComponentParser<'a, 'data> { self.result .initializers .push(LocalInitializer::ModuleStatic(static_idx)); + // Set a fallback name for the newly added parsed module to be used if + // the name section does not define a name for the module. + self.static_modules + .get_mut(static_idx) + .unwrap() + .module + .set_name_fallback(format!("module{}", static_idx.as_u32())); Ok(()) } diff --git a/frontend-wasm/src/component/translator.rs b/frontend-wasm/src/component/translator.rs new file mode 100644 index 000000000..ed192a65a --- /dev/null +++ b/frontend-wasm/src/component/translator.rs @@ -0,0 +1,429 @@ +use miden_diagnostics::DiagnosticsHandler; +use rustc_hash::FxHashMap; + +use miden_hir::{ + cranelift_entity::PrimaryMap, ComponentBuilder, ComponentExport, FunctionIdent, Ident, + InterfaceFunctionIdent, InterfaceIdent, Symbol, +}; +use miden_hir_type::LiftedFunctionType; + +use crate::{ + component::StringEncoding, + error::WasmResult, + module::{ + build_ir::build_ir_module, + func_env::FuncEnvironment, + instance::ModuleArgument, + module_env::ParsedModule, + types::{EntityIndex, FuncIndex}, + Module, ModuleImport, + }, + WasmError, WasmTranslationConfig, +}; + +use super::{ + interface_type_to_ir, CanonicalOptions, ComponentTypes, CoreDef, CoreExport, Export, + ExportItem, GlobalInitializer, InstantiateModule, LinearComponent, LinearComponentTranslation, + LoweredIndex, RuntimeImportIndex, RuntimeInstanceIndex, StaticModuleIndex, Trampoline, + TypeFuncIndex, +}; + +/// A translator from the linearized Wasm component model to the Miden IR component +pub struct ComponentTranslator<'a, 'data> { + /// The Wasm component types + component_types: ComponentTypes, + /// The parsed static modules of the Wasm component + parsed_modules: PrimaryMap>, + /// The translation configuration + config: &'a WasmTranslationConfig, + /// The runtime module instances index mapped to the static module index + module_instances_source: PrimaryMap, + /// The lower imports index mapped to the runtime import index + lower_imports: FxHashMap, + diagnostics: &'a DiagnosticsHandler, +} + +impl<'a, 'data> ComponentTranslator<'a, 'data> { + pub fn new( + component_types: ComponentTypes, + parsed_modules: PrimaryMap>, + config: &'a WasmTranslationConfig, + diagnostics: &'a DiagnosticsHandler, + ) -> Self { + Self { + component_types, + parsed_modules, + config, + diagnostics, + module_instances_source: PrimaryMap::new(), + lower_imports: FxHashMap::default(), + } + } + + /// Translate the given linearized Wasm component to the Miden IR component + pub fn translate( + mut self, + wasm_translation: LinearComponentTranslation, + ) -> WasmResult { + let mut component_builder: miden_hir::ComponentBuilder<'a> = + miden_hir::ComponentBuilder::new(self.diagnostics); + for initializer in &wasm_translation.component.initializers { + match initializer { + GlobalInitializer::InstantiateModule(instantiate_module) => { + self.translate_module_instance( + instantiate_module, + &mut component_builder, + &wasm_translation, + )?; + } + GlobalInitializer::LowerImport { + index: init_lowered_idx, + import, + } => { + self.lower_imports.insert(*init_lowered_idx, *import); + } + GlobalInitializer::ExtractMemory(_) => { + // Do nothing, there is only one memory address space in Miden IR + } + GlobalInitializer::ExtractRealloc(_) => { + return Err(WasmError::Unsupported( + "Realloc function pointer global initializer is not yet supported" + .to_string(), + )) + } + GlobalInitializer::ExtractPostReturn(_) => { + return Err(WasmError::Unsupported( + "Post return function pointer global initializer is not yet supported" + .to_string(), + )) + } + GlobalInitializer::Resource(_) => { + return Err(WasmError::Unsupported( + "Resource global initializers are not yet supported".to_string(), + )) + } + } + } + for (name, export) in &wasm_translation.component.exports { + self.build_export(export, name, &mut component_builder)?; + } + Ok(component_builder.build()) + } + + /// Translate the given Wasm core module instantiotion to the Miden IR component + fn translate_module_instance( + &mut self, + instantiate_module: &InstantiateModule, + component_builder: &mut ComponentBuilder<'_>, + wasm_translation: &LinearComponentTranslation, + ) -> Result<(), WasmError> { + match instantiate_module { + InstantiateModule::Static(static_module_idx, args) => { + if self + .module_instances_source + .values() + .find(|idx| **idx == *static_module_idx) + .is_some() + { + return Err(WasmError::Unsupported(format!( + "A module with a static index {} is already instantiated. We don't support multiple instantiations of the same module.", + static_module_idx.as_u32() + ))); + } + self.module_instances_source.push(*static_module_idx); + // TODO: create and init module instance tables + // see https://github.com/0xPolygonMiden/compiler/issues/133 + let module = &self.parsed_modules[*static_module_idx].module; + let mut module_args: Vec = Vec::new(); + for (idx, arg) in args.iter().enumerate() { + match arg { + CoreDef::Export(export) => { + module_args.push(self.module_arg_from_export(export)?); + } + CoreDef::InstanceFlags(_) => { + return Err(WasmError::Unsupported( + "Wasm component instance flags are not supported".to_string(), + )) + } + CoreDef::Trampoline(trampoline_idx) => { + let trampoline = &wasm_translation.trampolines[*trampoline_idx]; + let arg = self.module_arg_from_trampoline( + trampoline, + module, + idx, + &wasm_translation.component, + component_builder, + )?; + module_args.push(arg); + } + } + } + let module_types = self.component_types.module_types(); + let func_env = FuncEnvironment::new(module, module_types, module_args); + let ir_module = build_ir_module( + self.parsed_modules.get_mut(*static_module_idx).unwrap(), + module_types, + func_env, + self.config, + self.diagnostics, + )?; + component_builder + .add_module(ir_module.into()) + .expect("module is already added"); + } + InstantiateModule::Import(_, _) => { + return Err(WasmError::Unsupported( + "Imported Wasm core module instantiation is not supported".to_string(), + )) + } + }; + Ok(()) + } + + /// Build a Wasm core module argument from the given trampoline (component import) + fn module_arg_from_trampoline( + &self, + trampoline: &Trampoline, + module: &Module, + idx: usize, + wasm_component: &LinearComponent, + component_builder: &mut ComponentBuilder<'_>, + ) -> Result { + match trampoline { + Trampoline::LowerImport { + index, + lower_ty, + options: _, + } => { + let module_import = module.imports.get(idx).expect("module import not found"); + let runtime_import_idx = self.lower_imports[index]; + let function_id = function_id_from_import(module, module_import); + let component_import = + self.translate_import(runtime_import_idx, *lower_ty, wasm_component)?; + component_builder.add_import(function_id, component_import.clone()); + Ok(ModuleArgument::ComponentImport(component_import)) + } + _ => Err(WasmError::Unsupported(format!( + "Not yet implemented trampoline type {trampoline:?}" + ))), + } + } + + /// Build a module argument from the given module export + fn module_arg_from_export( + &self, + export: &CoreExport, + ) -> WasmResult { + match export.item { + ExportItem::Index(entity_idx) => match entity_idx { + EntityIndex::Function(func_idx) => { + let exporting_module_id = self.module_instances_source[export.instance]; + let function_id = function_id_from_export( + &self.parsed_modules[exporting_module_id].module, + func_idx, + ); + Ok(ModuleArgument::Function(function_id)) + } + EntityIndex::Table(_idx) => { + // TODO: init the exported table with this module's table initialization values + // see https://github.com/0xPolygonMiden/compiler/issues/133 + Ok(ModuleArgument::Table) + } + EntityIndex::Memory(_) => { + unreachable!("Attempt to export memory from a module instance. ") + } + EntityIndex::Global(_) => Err(WasmError::Unsupported( + "Exporting of core module globals are not yet supported".to_string(), + )), + }, + ExportItem::Name(_) => Err(WasmError::Unsupported( + "Named core module exports are not yet supported".to_string(), + )), + } + } + + /// Translate the given runtime import to the Miden IR component import + fn translate_import( + &self, + runtime_import_index: RuntimeImportIndex, + signature: TypeFuncIndex, + wasm_component: &LinearComponent, + ) -> WasmResult { + let (import_idx, import_names) = &wasm_component.imports[runtime_import_index]; + if import_names.len() != 1 { + return Err(crate::WasmError::Unsupported( + "multi-name imports not supported".to_string(), + )); + } + let import_func_name = import_names.first().unwrap(); + let (full_interface_name, _) = wasm_component.import_types[*import_idx].clone(); + let interface_function = InterfaceFunctionIdent { + interface: InterfaceIdent::from_full_ident(full_interface_name.clone()), + function: Symbol::intern(import_func_name), + }; + let Some(import_metadata) = self.config.import_metadata.get(&interface_function) else { + return Err(crate::WasmError::MissingImportMetadata(format!( + "Import metadata for interface function {:?} not found", + &interface_function, + ))); + }; + let lifted_func_ty = convert_lifted_func_ty(&signature, &self.component_types); + + let component_import = miden_hir::ComponentImport { + function_ty: lifted_func_ty, + interface_function, + digest: import_metadata.digest.clone(), + }; + Ok(component_import) + } + + /// Build an IR Component export from the given Wasm component export + fn build_export( + &self, + export: &Export, + name: &String, + component_builder: &mut ComponentBuilder, + ) -> WasmResult<()> { + match export { + Export::LiftedFunction { ty, func, options } => { + let export_name = Symbol::intern(name).into(); + let export = self.build_export_lifted_function(func, ty, options)?; + component_builder.add_export(export_name, export); + Ok(()) + } + Export::Instance(exports) => { + // Flatten any(nested) interface instance exports into the IR `Component` exports + for (name, export) in exports { + self.build_export(export, name, component_builder)?; + } + Ok(()) + } + Export::ModuleStatic(_) => Err(WasmError::Unsupported( + "Static module exports are not supported".to_string(), + )), + Export::ModuleImport(_) => Err(WasmError::Unsupported( + "Exporting of an imported module is not supported".to_string(), + )), + Export::Type(_) => { + // Besides the function exports the individual type are also exported from the component + // We can ignore them for now + Ok(()) + } + } + } + + /// Build an IR Component export from the given lifted Wasm core module function export + fn build_export_lifted_function( + &self, + func: &CoreDef, + ty: &TypeFuncIndex, + options: &CanonicalOptions, + ) -> WasmResult { + assert_empty_canonical_options(options); + let func_ident = match func { + CoreDef::Export(core_export) => { + let module = + &self.parsed_modules[self.module_instances_source[core_export.instance]].module; + let module_name = module.name(); + let module_ident = miden_hir::Ident::with_empty_span(Symbol::intern(module_name)); + let func_name = match core_export.item { + ExportItem::Index(idx) => match idx { + EntityIndex::Function(func_idx) => module.func_name(func_idx), + EntityIndex::Table(_) | EntityIndex::Memory(_) | EntityIndex::Global(_) => { + return Err(WasmError::Unsupported(format!( + "Exporting of non-function entity {core_export:?} is not supported" + ))); + } + }, + ExportItem::Name(_) => { + return Err(WasmError::Unsupported( + "Named exports are not yet supported".to_string(), + )) + } + }; + let func_ident = miden_hir::FunctionIdent { + module: module_ident, + function: miden_hir::Ident::with_empty_span(Symbol::intern(func_name)), + }; + func_ident + } + CoreDef::InstanceFlags(_) => { + return Err(WasmError::Unsupported( + "Component instance flags exports are not supported".to_string(), + )) + } + CoreDef::Trampoline(_) => { + return Err(WasmError::Unsupported( + "Trampoline core module exports are not supported".to_string(), + )) + } + }; + let lifted_func_ty = convert_lifted_func_ty(ty, &self.component_types); + let export = miden_hir::ComponentExport { + function: func_ident, + function_ty: lifted_func_ty, + }; + Ok(export) + } +} + +/// Get the function id from the given Wasm core module import +fn function_id_from_import(module: &Module, module_import: &ModuleImport) -> FunctionIdent { + let func_name = module.func_name(module_import.index.unwrap_func()); + let module_name = module.name(); + let function_id = FunctionIdent { + module: Ident::with_empty_span(Symbol::intern(module_name)), + function: Ident::with_empty_span(Symbol::intern(func_name)), + }; + function_id +} + +/// Get the function id from the given Wasm func_idx in the given Wasm core exporting_module +fn function_id_from_export(exporting_module: &Module, func_idx: FuncIndex) -> FunctionIdent { + let func_name = exporting_module.func_name(func_idx); + let module_name = exporting_module.name(); + let function_id = FunctionIdent { + module: Ident::with_empty_span(Symbol::intern(module_name)), + function: Ident::with_empty_span(Symbol::intern(func_name)), + }; + function_id +} + +/// Convert the given Wasm component function type to the Miden IR lifted function type +fn convert_lifted_func_ty( + ty: &TypeFuncIndex, + component_types: &ComponentTypes, +) -> LiftedFunctionType { + let type_func = component_types[*ty].clone(); + let params_types = component_types[type_func.params].clone().types; + let results_types = component_types[type_func.results].clone().types; + let params = params_types + .into_iter() + .map(|ty| interface_type_to_ir(ty, component_types)) + .collect(); + let results = results_types + .into_iter() + .map(|ty| interface_type_to_ir(ty, component_types)) + .collect(); + LiftedFunctionType { params, results } +} + +fn assert_empty_canonical_options(options: &CanonicalOptions) { + assert_eq!( + options.string_encoding, + StringEncoding::Utf8, + "UTF-8 is expected in CanonicalOptions, string transcoding is not yet supported" + ); + assert!( + options.realloc.is_none(), + "realloc in CanonicalOptions is not yet supported" + ); + assert!( + options.post_return.is_none(), + "post_return in CanonicalOptions is not yet supported" + ); + assert!( + options.memory.is_none(), + "memory in CanonicalOptions is not yet supported" + ); +} diff --git a/frontend-wasm/src/component/types/mod.rs b/frontend-wasm/src/component/types/mod.rs index 827ed0fc5..29be4cf97 100644 --- a/frontend-wasm/src/component/types/mod.rs +++ b/frontend-wasm/src/component/types/mod.rs @@ -2,7 +2,6 @@ // Based on wasmtime v16.0 Wasm component translation -// TODO: remove this once Wasm CM support is complete #![allow(dead_code)] pub mod resources; @@ -1746,7 +1745,7 @@ impl TypeInformation { pub fn interface_type_to_ir( ty: &InterfaceType, - _component_types: &ComponentTypes, + component_types: &ComponentTypes, ) -> miden_hir_type::Type { match ty { InterfaceType::Bool => miden_hir_type::Type::I1, @@ -1762,10 +1761,25 @@ pub fn interface_type_to_ir( InterfaceType::Float64 => todo!(), InterfaceType::Char => todo!(), InterfaceType::String => todo!(), - InterfaceType::Record(_) => todo!(), + InterfaceType::Record(idx) => { + let fields: Vec = component_types.records[*idx] + .fields + .iter() + .map(|f| (interface_type_to_ir(&f.ty, component_types))) + .collect(); + let st = miden_hir_type::StructType::new(fields); + miden_hir_type::Type::Struct(st) + } InterfaceType::Variant(_) => todo!(), InterfaceType::List(_) => todo!(), - InterfaceType::Tuple(_) => todo!(), + InterfaceType::Tuple(tuple_idx) => { + let tys = component_types.tuples[*tuple_idx] + .types + .iter() + .map(|t| interface_type_to_ir(t, component_types)) + .collect(); + miden_hir_type::Type::Tuple(tys) + } InterfaceType::Flags(_) => todo!(), InterfaceType::Enum(_) => todo!(), InterfaceType::Option(_) => todo!(), diff --git a/frontend-wasm/src/config.rs b/frontend-wasm/src/config.rs index 6401700bc..0ea1dbaa7 100644 --- a/frontend-wasm/src/config.rs +++ b/frontend-wasm/src/config.rs @@ -1,5 +1,5 @@ use miden_core::crypto::hash::RpoDigest; -use miden_hir::{FunctionExportName, FunctionInvocationMethod, InterfaceFunctionIdent}; +use miden_hir::InterfaceFunctionIdent; use rustc_hash::FxHashMap; /// Represents Miden VM codegen metadata for a function import. @@ -9,15 +9,6 @@ use rustc_hash::FxHashMap; pub struct ImportMetadata { /// The MAST root hash of the function to be used in codegen pub digest: RpoDigest, - /// The method of calling the function - pub invoke_method: FunctionInvocationMethod, -} - -/// Represents function export metadata -#[derive(Debug, Clone)] -pub struct ExportMetadata { - /// The method of calling the function - pub invoke_method: FunctionInvocationMethod, } /// Configuration for the WASM translation. @@ -37,9 +28,6 @@ pub struct WasmTranslationConfig { /// each imported function. Having it here might be a temporary solution, /// later we might want to move it to Wasm custom section. pub import_metadata: FxHashMap, - - /// Export metadata for calling convention, etc. - pub export_metadata: FxHashMap, } impl Default for WasmTranslationConfig { @@ -49,7 +37,6 @@ impl Default for WasmTranslationConfig { generate_native_debuginfo: false, parse_wasm_debuginfo: false, import_metadata: Default::default(), - export_metadata: Default::default(), } } } diff --git a/frontend-wasm/src/module/build_ir.rs b/frontend-wasm/src/module/build_ir.rs index 5c44afc36..6d3f88124 100644 --- a/frontend-wasm/src/module/build_ir.rs +++ b/frontend-wasm/src/module/build_ir.rs @@ -1,16 +1,20 @@ +use std::mem; + use miden_diagnostics::{DiagnosticsHandler, SourceSpan}; -use miden_hir::{CallConv, ConstantData, FunctionIdent, Ident, Linkage, ModuleBuilder, Symbol}; +use miden_hir::{CallConv, ConstantData, Linkage, ModuleBuilder}; use wasmparser::{Validator, WasmFeatures}; use crate::{ error::WasmResult, - module::func_translator::FuncTranslator, - module::module_env::{FunctionBodyData, ModuleEnvironment, ParsedModule}, - module::types::{ir_func_sig, ir_func_type, ir_type, ModuleTypes}, + module::{ + func_translator::FuncTranslator, + module_env::{FunctionBodyData, ModuleEnvironment, ParsedModule}, + types::{ir_func_sig, ir_func_type, ir_type, ModuleTypes}, + }, WasmError, WasmTranslationConfig, }; -use super::Module; +use super::{func_env::FuncEnvironment, Module}; /// Translate a valid Wasm core module binary into Miden IR module pub fn translate_module( @@ -32,42 +36,37 @@ pub fn translate_module( .module .set_name_fallback(config.source_name.clone()); let module_types = module_types_builder.finish(); - build_ir_module(parsed_module, &module_types, config, diagnostics) + + let func_env = FuncEnvironment::new(&parsed_module.module, &module_types, vec![]); + build_ir_module( + &mut parsed_module, + &module_types, + func_env, + config, + diagnostics, + ) } pub fn build_ir_module( - mut parsed_module: ParsedModule, + parsed_module: &mut ParsedModule, module_types: &ModuleTypes, + func_env: FuncEnvironment, _config: &WasmTranslationConfig, diagnostics: &DiagnosticsHandler, ) -> WasmResult { let name = parsed_module.module.name(); let mut module_builder = ModuleBuilder::new(name.clone().as_str()); - for import in parsed_module.module.imports.clone() { - let func_idx = import.index.unwrap_func(); - let func_name = parsed_module.module.func_name(func_idx); - let sig_idx = parsed_module.module.type_of(import.index).unwrap_func(); - let func = &module_types[sig_idx]; - let func_type = ir_func_type(&func)?; - let sig = ir_func_sig(&func_type, CallConv::SystemV, Linkage::External); - - let function_id: FunctionIdent = FunctionIdent { - module: module_builder.name(), - function: Ident::with_empty_span(Symbol::intern(func_name)), - }; - - parsed_module - .module - .translated_function_imports - .insert(func_idx, (function_id, sig)); - } build_globals(&parsed_module.module, &mut module_builder, diagnostics)?; - build_data_segments(&parsed_module, &mut module_builder, diagnostics)?; + build_data_segments(parsed_module, &mut module_builder, diagnostics)?; let mut func_translator = FuncTranslator::new(); - for (defined_func_idx, body_data) in parsed_module.function_body_inputs { - let func_index = parsed_module.module.func_index(defined_func_idx); - let func_type = parsed_module.module.functions[func_index]; - let func_name = parsed_module.module.func_name(func_index); + // Although this renders this parsed module invalid(without functiong + // bodies), we don't support multiple module instances. Thus, this + // ParseModule will not be used again to make another module instance. + let func_body_inputs = mem::take(&mut parsed_module.function_body_inputs); + for (defined_func_idx, body_data) in func_body_inputs { + let func_index = &parsed_module.module.func_index(defined_func_idx); + let func_type = &parsed_module.module.functions[*func_index]; + let func_name = &parsed_module.module.func_name(*func_index); let wasm_func_type = module_types[func_type.signature].clone(); let ir_func_type = ir_func_type(&wasm_func_type)?; let sig = ir_func_sig(&ir_func_type, CallConv::SystemV, Linkage::External); @@ -79,6 +78,7 @@ pub fn build_ir_module( &mut module_func_builder, &parsed_module.module, &module_types, + &func_env, diagnostics, &mut func_validator, )?; diff --git a/frontend-wasm/src/module/func_env.rs b/frontend-wasm/src/module/func_env.rs new file mode 100644 index 000000000..c26174988 --- /dev/null +++ b/frontend-wasm/src/module/func_env.rs @@ -0,0 +1,75 @@ +use miden_hir::{CallConv, FunctionIdent, Ident, Linkage, Signature, Symbol}; +use rustc_hash::FxHashMap; + +use crate::{module::EntityIndex, translation_utils::sig_from_funct_type}; + +use super::{instance::ModuleArgument, ir_func_type, FuncIndex, Module, ModuleTypes}; + +/// Represents a function environment that is used in function call translation. +pub struct FuncEnvironment { + /// A translated IR function ids indexed by the Wasm function index. + function_ids: FxHashMap, + /// A translated IR function signatures, indexed by the Wasm function index. + signatures: FxHashMap, +} + +impl FuncEnvironment { + pub fn new(module: &Module, mod_types: &ModuleTypes, module_args: Vec) -> Self { + assert_eq!( + module.imports.len(), + module_args.len(), + "Mismatched module imports and arguments" + ); + let mut function_import_subst = FxHashMap::default(); + for (import, arg) in module.imports.iter().zip(module_args) { + match (import.index, arg) { + (EntityIndex::Function(func_idx), ModuleArgument::Function(func_id)) => { + // Substitutes the function import with concrete function exported from another module + function_import_subst.insert(func_idx, func_id); + } + (EntityIndex::Function(_), ModuleArgument::ComponentImport(_)) => { + // Do nothing, the local function id will be used + () + } + (EntityIndex::Function(_), module_arg) => { + panic!( + "Unexpected {module_arg:?} module argument for function import {import:?}" + ) + } + (_, _) => (), // Do nothing, we interested only in function imports + } + } + let mut function_ids = FxHashMap::default(); + let mut signatures = FxHashMap::default(); + for (index, func_type) in &module.functions { + let wasm_func_type = mod_types[func_type.signature].clone(); + let ir_func_type = ir_func_type(&wasm_func_type).unwrap(); + let sig = sig_from_funct_type(&ir_func_type, CallConv::SystemV, Linkage::External); + signatures.insert(index, sig); + if let Some(subst) = function_import_subst.get(&index) { + function_ids.insert(index, subst.clone()); + } else { + let func_name = module.func_name(index); + let func_id = FunctionIdent { + module: Ident::with_empty_span(Symbol::intern(module.name())), + function: Ident::with_empty_span(Symbol::intern(func_name)), + }; + function_ids.insert(index, func_id); + }; + } + Self { + function_ids, + signatures, + } + } + + /// Returns a function id for the given function index. + pub fn function_id(&self, function_idx: FuncIndex) -> &FunctionIdent { + &self.function_ids[&function_idx] + } + + /// Returns a function signature for the given function index. + pub fn signature(&self, function_idx: FuncIndex) -> &Signature { + &self.signatures[&function_idx] + } +} diff --git a/frontend-wasm/src/module/func_translation_state.rs b/frontend-wasm/src/module/func_translation_state.rs index b04c9c78a..49b8635f0 100644 --- a/frontend-wasm/src/module/func_translation_state.rs +++ b/frontend-wasm/src/module/func_translation_state.rs @@ -7,13 +7,10 @@ use crate::{ error::{WasmError, WasmResult}, - module::types::{ir_func_type, BlockType, FuncIndex, ModuleTypes}, - translation_utils::sig_from_funct_type, + module::types::{BlockType, FuncIndex}, }; use miden_diagnostics::{DiagnosticsHandler, SourceSpan}; -use miden_hir::{ - Block, CallConv, DataFlowGraph, FunctionIdent, Inst, InstBuilder, Linkage, Signature, Value, -}; +use miden_hir::{Block, DataFlowGraph, FunctionIdent, Inst, InstBuilder, Signature, Value}; use miden_hir_type::Type; use rustc_hash::FxHashMap; use std::{ @@ -21,7 +18,7 @@ use std::{ vec::Vec, }; -use super::{function_builder_ext::FunctionBuilderExt, Module}; +use super::{func_env::FuncEnvironment, function_builder_ext::FunctionBuilderExt}; /// Information about the presence of an associated `else` for an `if`, or the /// lack thereof. @@ -453,37 +450,18 @@ impl FuncTranslationState { &mut self, dfg: &mut DataFlowGraph, index: FuncIndex, - module: &Module, - mod_types: &ModuleTypes, + func_env: &FuncEnvironment, diagnostics: &DiagnosticsHandler, ) -> WasmResult<(FunctionIdent, usize)> { Ok(match self.functions.entry(index) { Occupied(entry) => *entry.get(), Vacant(entry) => { - let (module_id, func_name_id, sig) = if let Some((func_id, sig)) = - module.translated_function_imports.get(&index) - { - // This is an imported function - ( - func_id.module.clone(), - func_id.function.clone(), - sig.clone(), - ) - } else { - // This is a local function so use the current module name - let func_type_idx = module.functions[index].clone(); - let func_type = mod_types[func_type_idx.signature].clone(); - let func_name = module.func_name(index); - let mod_name = module.name(); - let mod_ident = mod_name.as_str().into(); - let func_name_id = func_name.as_str().into(); - let ir_func_type = ir_func_type(&func_type)?; - let sig = - sig_from_funct_type(&ir_func_type, CallConv::SystemV, Linkage::External); - (mod_ident, func_name_id, sig.clone()) - }; - let Ok(func_id) = dfg.import_function(module_id, func_name_id, sig.clone()) else { - let message = format!("Function with name {} in module {} with signature {sig:?} is already imported (function call) with a different signature", func_name_id, module_id); + let function_id = func_env.function_id(index); + let sig = func_env.signature(index); + let Ok(func_id) = + dfg.import_function(function_id.module, function_id.function, sig.clone()) + else { + let message = format!("Function with name {} in module {} with signature {sig:?} is already imported (function call) with a different signature", function_id.function, function_id.module); diagnostics .diagnostic(miden_diagnostics::Severity::Error) .with_message(message.clone()) diff --git a/frontend-wasm/src/module/func_translator.rs b/frontend-wasm/src/module/func_translator.rs index 084573201..8107ea9ea 100644 --- a/frontend-wasm/src/module/func_translator.rs +++ b/frontend-wasm/src/module/func_translator.rs @@ -18,6 +18,7 @@ use miden_hir::cranelift_entity::EntityRef; use miden_hir::{Block, InstBuilder, ModuleFunctionBuilder}; use wasmparser::{BinaryReader, FuncValidator, FunctionBody, WasmModuleResources}; +use super::func_env::FuncEnvironment; use super::Module; /// WebAssembly to Miden IR function translator. @@ -46,6 +47,7 @@ impl FuncTranslator { mod_func_builder: &mut ModuleFunctionBuilder, module: &Module, mod_types: &ModuleTypes, + func_env: &FuncEnvironment, diagnostics: &DiagnosticsHandler, func_validator: &mut FuncValidator, ) -> WasmResult<()> { @@ -70,6 +72,7 @@ impl FuncTranslator { &mut self.state, module, mod_types, + func_env, diagnostics, func_validator, )?; @@ -151,6 +154,7 @@ fn parse_function_body( state: &mut FuncTranslationState, module: &Module, mod_types: &ModuleTypes, + func_env: &FuncEnvironment, diagnostics: &DiagnosticsHandler, func_validator: &mut FuncValidator, ) -> WasmResult<()> { @@ -167,6 +171,7 @@ fn parse_function_body( state, module, mod_types, + func_env, diagnostics, SourceSpan::default(), )?; diff --git a/frontend-wasm/src/module/instance.rs b/frontend-wasm/src/module/instance.rs new file mode 100644 index 000000000..f0217a129 --- /dev/null +++ b/frontend-wasm/src/module/instance.rs @@ -0,0 +1,12 @@ +use miden_hir::{ComponentImport, FunctionIdent}; + +/// Represents module argument that is used to instantiate a module. +#[derive(Debug, Clone)] +pub enum ModuleArgument { + /// Represents function that is exported from another module. + Function(FunctionIdent), + /// Represents component import that is lowered to a module import. + ComponentImport(ComponentImport), + /// Represents table exported from another module. + Table, +} diff --git a/frontend-wasm/src/module/mod.rs b/frontend-wasm/src/module/mod.rs index 4a0bed71f..7d4acafb0 100644 --- a/frontend-wasm/src/module/mod.rs +++ b/frontend-wasm/src/module/mod.rs @@ -13,16 +13,17 @@ use indexmap::IndexMap; use miden_diagnostics::DiagnosticsHandler; use miden_hir::cranelift_entity::packed_option::ReservedValue; use miden_hir::cranelift_entity::{EntityRef, PrimaryMap}; -use miden_hir::{FunctionIdent, Signature}; use rustc_hash::FxHashMap; use std::collections::BTreeMap; use std::ops::Range; pub mod build_ir; +pub mod func_env; pub mod func_translation_state; pub mod func_translator; pub mod function_builder_ext; +pub mod instance; pub mod module_env; pub mod types; @@ -101,9 +102,6 @@ pub struct Module { /// All import records, in the order they are declared in the module. pub imports: Vec, - /// A translated function imports, indexed by the function index. - pub translated_function_imports: FxHashMap, - /// Exported entities. pub exports: IndexMap, diff --git a/frontend-wasm/src/module/types.rs b/frontend-wasm/src/module/types.rs index a2a90ee56..435460081 100644 --- a/frontend-wasm/src/module/types.rs +++ b/frontend-wasm/src/module/types.rs @@ -236,7 +236,7 @@ impl EntityIndex { pub fn unwrap_func(&self) -> FuncIndex { match self { EntityIndex::Function(f) => *f, - _ => panic!("not a func"), + entity_idx => panic!("not a func, but {:?}", entity_idx), } } } diff --git a/frontend-wasm/src/translation_utils.rs b/frontend-wasm/src/translation_utils.rs index f703f173b..a308a28b0 100644 --- a/frontend-wasm/src/translation_utils.rs +++ b/frontend-wasm/src/translation_utils.rs @@ -119,6 +119,7 @@ pub fn emit_zero(ty: &Type, builder: &mut FunctionBuilderExt) -> WasmResult { diff --git a/frontend-wasm/tests/expected/add.hir b/frontend-wasm/tests/expected/add.hir index 062e509cd..1bf1a7e8f 100644 --- a/frontend-wasm/tests/expected/add.hir +++ b/frontend-wasm/tests/expected/add.hir @@ -1,21 +1,22 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn __main() -> i32 { -block0: - v1 = const.i32 1 : i32; - v2 = const.i32 2 : i32; - v3 = call noname::add(v1, v2) : i32; - ret v3; -} + pub fn __main() -> i32 { + block0: + v1 = const.i32 1 : i32; + v2 = const.i32 2 : i32; + v3 = call noname::add(v1, v2) : i32; + ret v3; + } -pub fn add(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = add.wrapping v1, v0 : i32; - ret v3; + pub fn add(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = add.wrapping v1, v0 : i32; + ret v3; + } } diff --git a/frontend-wasm/tests/expected/array.hir b/frontend-wasm/tests/expected/array.hir index ea3d04799..e844b8073 100644 --- a/frontend-wasm/tests/expected/array.hir +++ b/frontend-wasm/tests/expected/array.hir @@ -1,55 +1,56 @@ -module noname - -const $0 = 0x00100000; -const $1 = 0x00100028; -const $2 = 0x00100030; - -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $1 { id = 1 }; -global external @gv2 : i32 = $2 { id = 2 }; - -pub fn __main() -> i32 { -block0: - v1 = const.i32 1048576 : i32; - v2 = const.i32 5 : i32; - v3 = call noname::sum_arr(v1, v2) : i32; - v4 = const.i32 1048596 : i32; - v5 = const.i32 5 : i32; - v6 = call noname::sum_arr(v4, v5) : i32; - v7 = add.wrapping v3, v6 : i32; - ret v7; -} - -pub fn sum_arr(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = const.i32 0 : i32; - v4 = const.i32 0 : i32; - v5 = eq v1, 0 : i1; - v6 = cast v5 : i32; - v7 = neq v6, 0 : i1; - condbr v7, block7, block3; - -block7: - ret v4; - -block3: - br block4(v0, v4, v1); - -block4(v8: i32, v12: i32, v16: i32): - v9 = cast v8 : u32; - v10 = inttoptr v9 : *mut i32; - v11 = load v10 : i32; - v13 = add.wrapping v11, v12 : i32; - v14 = const.i32 4 : i32; - v15 = add.wrapping v8, v14 : i32; - v17 = const.i32 -1 : i32; - v18 = add.wrapping v16, v17 : i32; - v19 = neq v18, 0 : i1; - condbr v19, block8, block6; - -block8: - br block4(v15, v13, v18); - -block6: - ret v13; +module noname { + + const $0 = 0x00100000; + const $1 = 0x00100028; + const $2 = 0x00100030; + + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $1 { id = 1 }; + global external @gv2 : i32 = $2 { id = 2 }; + + pub fn __main() -> i32 { + block0: + v1 = const.i32 1048576 : i32; + v2 = const.i32 5 : i32; + v3 = call noname::sum_arr(v1, v2) : i32; + v4 = const.i32 1048596 : i32; + v5 = const.i32 5 : i32; + v6 = call noname::sum_arr(v4, v5) : i32; + v7 = add.wrapping v3, v6 : i32; + ret v7; + } + + pub fn sum_arr(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = const.i32 0 : i32; + v4 = const.i32 0 : i32; + v5 = eq v1, 0 : i1; + v6 = cast v5 : i32; + v7 = neq v6, 0 : i1; + condbr v7, block7, block3; + + block7: + ret v4; + + block3: + br block4(v0, v4, v1); + + block4(v8: i32, v12: i32, v16: i32): + v9 = cast v8 : u32; + v10 = inttoptr v9 : *mut i32; + v11 = load v10 : i32; + v13 = add.wrapping v11, v12 : i32; + v14 = const.i32 4 : i32; + v15 = add.wrapping v8, v14 : i32; + v17 = const.i32 -1 : i32; + v18 = add.wrapping v16, v17 : i32; + v19 = neq v18, 0 : i1; + condbr v19, block8, block6; + + block8: + br block4(v15, v13, v18); + + block6: + ret v13; + } } diff --git a/frontend-wasm/tests/expected/enum.hir b/frontend-wasm/tests/expected/enum.hir index 7d2c901d9..46eb69b8e 100644 --- a/frontend-wasm/tests/expected/enum.hir +++ b/frontend-wasm/tests/expected/enum.hir @@ -1,51 +1,52 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn __main() -> i32 { -block0: - v1 = const.i32 3 : i32; - v2 = const.i32 5 : i32; - v3 = const.i32 0 : i32; - v4 = call noname::match_enum(v1, v2, v3) : i32; - v5 = const.i32 3 : i32; - v6 = const.i32 5 : i32; - v7 = const.i32 1 : i32; - v8 = call noname::match_enum(v5, v6, v7) : i32; - v9 = add.wrapping v4, v8 : i32; - v10 = const.i32 3 : i32; - v11 = const.i32 5 : i32; - v12 = const.i32 2 : i32; - v13 = call noname::match_enum(v10, v11, v12) : i32; - v14 = add.wrapping v9, v13 : i32; - ret v14; -} + pub fn __main() -> i32 { + block0: + v1 = const.i32 3 : i32; + v2 = const.i32 5 : i32; + v3 = const.i32 0 : i32; + v4 = call noname::match_enum(v1, v2, v3) : i32; + v5 = const.i32 3 : i32; + v6 = const.i32 5 : i32; + v7 = const.i32 1 : i32; + v8 = call noname::match_enum(v5, v6, v7) : i32; + v9 = add.wrapping v4, v8 : i32; + v10 = const.i32 3 : i32; + v11 = const.i32 5 : i32; + v12 = const.i32 2 : i32; + v13 = call noname::match_enum(v10, v11, v12) : i32; + v14 = add.wrapping v9, v13 : i32; + ret v14; + } -pub fn match_enum(i32, i32, i32) -> i32 { -block0(v0: i32, v1: i32, v2: i32): - v4 = const.i32 255 : i32; - v5 = band v2, v4 : i32; - v6 = cast v5 : u32; - switch v6 { - 0 => block4, - 1 => block3, - 2 => block2, - _ => block4 - }; + pub fn match_enum(i32, i32, i32) -> i32 { + block0(v0: i32, v1: i32, v2: i32): + v4 = const.i32 255 : i32; + v5 = band v2, v4 : i32; + v6 = cast v5 : u32; + switch v6 { + 0 => block4, + 1 => block3, + 2 => block2, + _ => block4 + }; -block2: - v9 = mul.wrapping v1, v0 : i32; - ret v9; + block2: + v9 = mul.wrapping v1, v0 : i32; + ret v9; -block3: - v8 = sub.wrapping v0, v1 : i32; - ret v8; + block3: + v8 = sub.wrapping v0, v1 : i32; + ret v8; -block4: - v7 = add.wrapping v1, v0 : i32; - ret v7; + block4: + v7 = add.wrapping v1, v0 : i32; + ret v7; + } } diff --git a/frontend-wasm/tests/expected/fib.hir b/frontend-wasm/tests/expected/fib.hir index ac0404dd6..22bf0fee4 100644 --- a/frontend-wasm/tests/expected/fib.hir +++ b/frontend-wasm/tests/expected/fib.hir @@ -1,39 +1,40 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn __main() -> i32 { -block0: - v1 = const.i32 25 : i32; - v2 = call noname::fib(v1) : i32; - ret v2; -} + pub fn __main() -> i32 { + block0: + v1 = const.i32 25 : i32; + v2 = call noname::fib(v1) : i32; + ret v2; + } -pub fn fib(i32) -> i32 { -block0(v0: i32): - v2 = const.i32 0 : i32; - v3 = const.i32 0 : i32; - v4 = const.i32 1 : i32; - br block2(v4, v0, v3); + pub fn fib(i32) -> i32 { + block0(v0: i32): + v2 = const.i32 0 : i32; + v3 = const.i32 0 : i32; + v4 = const.i32 1 : i32; + br block2(v4, v0, v3); -block1(v1: i32): + block1(v1: i32): -block2(v6: i32, v7: i32, v9: i32): - v8 = neq v7, 0 : i1; - condbr v8, block4, block5; + block2(v6: i32, v7: i32, v9: i32): + v8 = neq v7, 0 : i1; + condbr v8, block4, block5; -block3(v5: i32): + block3(v5: i32): -block4: - v10 = const.i32 -1 : i32; - v11 = add.wrapping v7, v10 : i32; - v12 = add.wrapping v9, v6 : i32; - br block2(v12, v11, v6); + block4: + v10 = const.i32 -1 : i32; + v11 = add.wrapping v7, v10 : i32; + v12 = add.wrapping v9, v6 : i32; + br block2(v12, v11, v6); -block5: - ret v9; + block5: + ret v9; + } } diff --git a/frontend-wasm/tests/expected/static_mut.hir b/frontend-wasm/tests/expected/static_mut.hir index cd2e84063..304f5f5a7 100644 --- a/frontend-wasm/tests/expected/static_mut.hir +++ b/frontend-wasm/tests/expected/static_mut.hir @@ -1,58 +1,59 @@ -module noname +module noname { -const $0 = 0x00100000; -const $1 = 0x00100009; -const $2 = 0x00100010; + const $0 = 0x00100000; + const $1 = 0x00100009; + const $2 = 0x00100010; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $1 { id = 1 }; -global external @gv2 : i32 = $2 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $1 { id = 1 }; + global external @gv2 : i32 = $2 { id = 2 }; -pub fn __main() -> i32 { -block0: - v1 = const.i32 0 : i32; - call noname::global_var_update(); - v2 = const.i32 0 : i32; - v3 = const.i32 -9 : i32; - br block2(v3, v2); + pub fn __main() -> i32 { + block0: + v1 = const.i32 0 : i32; + call noname::global_var_update(); + v2 = const.i32 0 : i32; + v3 = const.i32 -9 : i32; + br block2(v3, v2); -block2(v4: i32, v11: i32): - v5 = const.i32 1048585 : i32; - v6 = add.wrapping v4, v5 : i32; - v7 = cast v6 : u32; - v8 = inttoptr v7 : *mut u8; - v9 = load v8 : u8; - v10 = zext v9 : i32; - v12 = add.wrapping v10, v11 : i32; - v13 = const.i32 1 : i32; - v14 = add.wrapping v4, v13 : i32; - v15 = neq v14, 0 : i1; - condbr v15, block5, block4; + block2(v4: i32, v11: i32): + v5 = const.i32 1048585 : i32; + v6 = add.wrapping v4, v5 : i32; + v7 = cast v6 : u32; + v8 = inttoptr v7 : *mut u8; + v9 = load v8 : u8; + v10 = zext v9 : i32; + v12 = add.wrapping v10, v11 : i32; + v13 = const.i32 1 : i32; + v14 = add.wrapping v4, v13 : i32; + v15 = neq v14, 0 : i1; + condbr v15, block5, block4; -block5: - br block2(v14, v12); + block5: + br block2(v14, v12); -block4: - v16 = const.i32 255 : i32; - v17 = band v12, v16 : i32; - ret v17; -} + block4: + v16 = const.i32 255 : i32; + v17 = band v12, v16 : i32; + ret v17; + } -pub fn global_var_update() { -block0: - v0 = const.i32 0 : i32; - v1 = const.i32 0 : i32; - v2 = cast v1 : u32; - v3 = add.checked v2, 1048577 : u32; - v4 = inttoptr v3 : *mut u8; - v5 = load v4 : u8; - v6 = zext v5 : i32; - v7 = const.i32 1 : i32; - v8 = add.wrapping v6, v7 : i32; - v9 = trunc v8 : u8; - v10 = cast v0 : u32; - v11 = add.checked v10, 1048576 : u32; - v12 = inttoptr v11 : *mut u8; - store v12, v9; - ret; + pub fn global_var_update() { + block0: + v0 = const.i32 0 : i32; + v1 = const.i32 0 : i32; + v2 = cast v1 : u32; + v3 = add.checked v2, 1048577 : u32; + v4 = inttoptr v3 : *mut u8; + v5 = load v4 : u8; + v6 = zext v5 : i32; + v7 = const.i32 1 : i32; + v8 = add.wrapping v6, v7 : i32; + v9 = trunc v8 : u8; + v10 = cast v0 : u32; + v11 = add.checked v10, 1048576 : u32; + v12 = inttoptr v11 : *mut u8; + store v12, v9; + ret; + } } diff --git a/frontend-wasm/tests/rust_source/add.rs b/frontend-wasm/tests/rust_source/add.rs index ea10f38ee..385d18e04 100644 --- a/frontend-wasm/tests/rust_source/add.rs +++ b/frontend-wasm/tests/rust_source/add.rs @@ -1,9 +1,14 @@ #![no_std] #![no_main] +// This allows us to abort if the panic handler is invoked, but +// it is gated behind a perma-unstable nightly feature +#![feature(core_intrinsics)] +// Disable the warning triggered by the use of the `core_intrinsics` feature +#![allow(internal_features)] #[panic_handler] fn my_panic(_info: &core::panic::PanicInfo) -> ! { - loop {} + core::intrinsics::abort() } #[inline(never)] diff --git a/frontend-wasm/tests/rust_source/array.rs b/frontend-wasm/tests/rust_source/array.rs index 8dab20c15..935df84f3 100644 --- a/frontend-wasm/tests/rust_source/array.rs +++ b/frontend-wasm/tests/rust_source/array.rs @@ -1,9 +1,14 @@ #![no_std] #![no_main] +// This allows us to abort if the panic handler is invoked, but +// it is gated behind a perma-unstable nightly feature +#![feature(core_intrinsics)] +// Disable the warning triggered by the use of the `core_intrinsics` feature +#![allow(internal_features)] #[panic_handler] fn my_panic(_info: &core::panic::PanicInfo) -> ! { - loop {} + core::intrinsics::abort() } #[inline(never)] diff --git a/frontend-wasm/tests/rust_source/enum.rs b/frontend-wasm/tests/rust_source/enum.rs index 566f493fa..f1180942b 100644 --- a/frontend-wasm/tests/rust_source/enum.rs +++ b/frontend-wasm/tests/rust_source/enum.rs @@ -1,9 +1,14 @@ #![no_std] #![no_main] +// This allows us to abort if the panic handler is invoked, but +// it is gated behind a perma-unstable nightly feature +#![feature(core_intrinsics)] +// Disable the warning triggered by the use of the `core_intrinsics` feature +#![allow(internal_features)] #[panic_handler] fn my_panic(_info: &core::panic::PanicInfo) -> ! { - loop {} + core::intrinsics::abort() } enum Op { diff --git a/frontend-wasm/tests/rust_source/fib.rs b/frontend-wasm/tests/rust_source/fib.rs index 8c7b9b987..8b565c5de 100644 --- a/frontend-wasm/tests/rust_source/fib.rs +++ b/frontend-wasm/tests/rust_source/fib.rs @@ -1,9 +1,14 @@ #![no_std] #![no_main] +// This allows us to abort if the panic handler is invoked, but +// it is gated behind a perma-unstable nightly feature +#![feature(core_intrinsics)] +// Disable the warning triggered by the use of the `core_intrinsics` feature +#![allow(internal_features)] #[panic_handler] fn my_panic(_info: &core::panic::PanicInfo) -> ! { - loop {} + core::intrinsics::abort() } #[inline(never)] diff --git a/frontend-wasm/tests/rust_source/signed_arith.rs b/frontend-wasm/tests/rust_source/signed_arith.rs index 14c4330e5..f15c51a1f 100644 --- a/frontend-wasm/tests/rust_source/signed_arith.rs +++ b/frontend-wasm/tests/rust_source/signed_arith.rs @@ -1,9 +1,14 @@ #![no_std] #![no_main] +// This allows us to abort if the panic handler is invoked, but +// it is gated behind a perma-unstable nightly feature +#![feature(core_intrinsics)] +// Disable the warning triggered by the use of the `core_intrinsics` feature +#![allow(internal_features)] #[panic_handler] fn my_panic(_info: &core::panic::PanicInfo) -> ! { - loop {} + core::intrinsics::abort() } #[inline(never)] @@ -44,6 +49,8 @@ fn shr_u(a: u32, b: u32) -> u32 { #[no_mangle] pub extern "C" fn __main() -> i32 { - div_s(-8, -4) + rem_s(-8, -3) + shr_s(-16, 2) - + (div_u(8, 4) + rem_u(8, 3) + shr_u(16, 2)) as i32 + div_s(-8, -4) + + rem_s(-8, -3) + + shr_s(-16, 2) + + (div_u(8, 4) + rem_u(8, 3) + shr_u(16, 2)) as i32 } diff --git a/frontend-wasm/tests/rust_source/static_mut.rs b/frontend-wasm/tests/rust_source/static_mut.rs index 2d82148f2..1cb447c9c 100644 --- a/frontend-wasm/tests/rust_source/static_mut.rs +++ b/frontend-wasm/tests/rust_source/static_mut.rs @@ -1,9 +1,14 @@ #![no_std] #![no_main] +// This allows us to abort if the panic handler is invoked, but +// it is gated behind a perma-unstable nightly feature +#![feature(core_intrinsics)] +// Disable the warning triggered by the use of the `core_intrinsics` feature +#![allow(internal_features)] #[panic_handler] fn my_panic(_info: &core::panic::PanicInfo) -> ! { - loop {} + core::intrinsics::abort() } static mut G1: [u8; 9] = [1, 2, 3, 4, 5, 6, 7, 8, 9]; diff --git a/frontend-wasm/tests/test_rust_comp.rs b/frontend-wasm/tests/test_rust_comp.rs index cfb5b6b96..789550cd2 100644 --- a/frontend-wasm/tests/test_rust_comp.rs +++ b/frontend-wasm/tests/test_rust_comp.rs @@ -28,7 +28,13 @@ fn rust_array() { test.expect_wasm(expect_file!["./expected/array.wat"]); test.expect_ir(expect_file!["./expected/array.hir"]); assert!( - test.hir.unwrap().segments().last().unwrap().is_readonly(), + test.hir + .unwrap() + .unwrap_program() + .segments() + .last() + .unwrap() + .is_readonly(), "data segment should be readonly" ); } @@ -39,7 +45,14 @@ fn rust_static_mut() { test.expect_wasm(expect_file!["./expected/static_mut.wat"]); test.expect_ir(expect_file!["./expected/static_mut.hir"]); assert!( - !test.hir.unwrap().segments().last().unwrap().is_readonly(), + !test + .hir + .unwrap() + .unwrap_program() + .segments() + .last() + .unwrap() + .is_readonly(), "data segment should be mutable" ); } diff --git a/hir-type/src/layout.rs b/hir-type/src/layout.rs index a09f093d1..08f8a87e1 100644 --- a/hir-type/src/layout.rs +++ b/hir-type/src/layout.rs @@ -384,6 +384,7 @@ impl Type { _ => (split, Some(remaining.into())), } } + Type::Tuple(_) => todo!("Type::split for Tuple is not yet implemented"), // These types either have no size, or are 1 byte in size, so must have // been handled above when checking if the size of the type is <= the // requested split size @@ -414,6 +415,7 @@ impl Type { Self::Struct(ref struct_ty) => struct_ty.min_alignment(), // Arrays use the minimum alignment of their element type Self::Array(ref element_ty, _) => element_ty.min_alignment(), + Self::Tuple(elems) => elems.iter().map(|ty| ty.min_alignment()).max().unwrap_or(1), } } @@ -453,6 +455,13 @@ impl Type { let padded_element_size = element_size.align_up(min_align); element_size + (padded_element_size * (n - 1)) } + Type::Tuple(tys) => { + let mut size = 0; + for ty in tys { + size += ty.size_in_bits(); + } + size + } } } diff --git a/hir-type/src/lib.rs b/hir-type/src/lib.rs index 9d611d43e..15560867a 100644 --- a/hir-type/src/lib.rs +++ b/hir-type/src/lib.rs @@ -65,6 +65,8 @@ pub enum Type { Struct(StructType), /// A vector of fixed size Array(Box, usize), + /// A tuple of values of the given types + Tuple(Vec), } impl Type { /// Returns true if this type is a zero-sized type, which includes: @@ -95,7 +97,8 @@ impl Type { | Self::F64 | Self::Felt | Self::Ptr(_) - | Self::NativePtr(_, _) => false, + | Self::NativePtr(_, _) + | Self::Tuple(_) => false, } } @@ -319,6 +322,17 @@ impl fmt::Display for Type { } Self::Struct(sty) => write!(f, "{sty}"), Self::Array(element_ty, arity) => write!(f, "[{}; {}]", &element_ty, arity), + Self::Tuple(tys) => { + f.write_char('(')?; + for (i, ty) in tys.iter().enumerate() { + if i > 0 { + write!(f, ", {}", ty)?; + } else { + write!(f, "{}", ty)?; + } + } + f.write_char(')') + } } } } @@ -638,6 +652,29 @@ pub struct LiftedFunctionType { pub results: Vec, } +impl fmt::Display for LiftedFunctionType { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "fn(")?; + for (i, param) in self.params.iter().enumerate() { + if i > 0 { + write!(f, ", ")?; + } + write!(f, "{}", param)?; + } + write!(f, ")")?; + if !self.results.is_empty() { + write!(f, " -> ")?; + for (i, result) in self.results.iter().enumerate() { + if i > 0 { + write!(f, ", ")?; + } + write!(f, "{}", result)?; + } + } + Ok(()) + } +} + /// This error is raised when parsing an [AddressSpace] #[derive(Debug)] pub enum InvalidAddressSpaceError { diff --git a/hir/Cargo.toml b/hir/Cargo.toml index e8cc8685d..e5e4fd499 100644 --- a/hir/Cargo.toml +++ b/hir/Cargo.toml @@ -37,6 +37,7 @@ thiserror.workspace = true typed-arena = "2.0" winter-math = { version = "0.7", default-features = false } derive_more.workspace = true +indexmap.workspace = true [dev-dependencies] pretty_assertions = "1.0" diff --git a/hir/src/component/interface.rs b/hir/src/component/interface.rs index 34d6ada61..9b6cdf27d 100644 --- a/hir/src/component/interface.rs +++ b/hir/src/component/interface.rs @@ -35,3 +35,9 @@ impl InterfaceFunctionIdent { } } } + +impl std::fmt::Display for InterfaceFunctionIdent { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}::{}", self.interface.full_name, self.function) + } +} diff --git a/hir/src/component/mod.rs b/hir/src/component/mod.rs index 20e60994a..a2fdc8462 100644 --- a/hir/src/component/mod.rs +++ b/hir/src/component/mod.rs @@ -2,7 +2,7 @@ use core::{ convert::{AsMut, AsRef}, ops::{Deref, DerefMut}, }; -use intrusive_collections::RBTree; +use indexmap::IndexMap; use miden_core::crypto::hash::RpoDigest; use std::collections::BTreeMap; @@ -22,21 +22,40 @@ pub enum FunctionInvocationMethod { Exec, } +impl fmt::Display for FunctionInvocationMethod { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + FunctionInvocationMethod::Call => write!(f, "\"call\""), + FunctionInvocationMethod::Exec => write!(f, "\"exec\""), + } + } +} + /// A component import -#[derive(Debug)] +#[derive(Debug, Clone)] pub struct ComponentImport { /// The interfact function name that is being imported pub interface_function: InterfaceFunctionIdent, /// The component(lifted) type of the imported function pub function_ty: LiftedFunctionType, - /// The method of calling the function - pub invoke_method: FunctionInvocationMethod, /// The MAST root hash of the function to be used in codegen pub digest: RpoDigest, } +impl fmt::Display for ComponentImport { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!( + f, + "{} {} mast#{}", + self.interface_function, self.function_ty, self.digest + ) + } +} + /// The name of a exported function -#[derive(Debug, Ord, PartialEq, PartialOrd, Eq, Hash, derive_more::From, derive_more::Into)] +#[derive( + Debug, Clone, Ord, PartialEq, PartialOrd, Eq, Hash, derive_more::From, derive_more::Into, +)] pub struct FunctionExportName(Symbol); /// A component export @@ -46,15 +65,14 @@ pub struct ComponentExport { pub function: FunctionIdent, /// The component(lifted) type of the exported function pub function_ty: LiftedFunctionType, - /// The method of calling the function - pub invoke_method: FunctionInvocationMethod, } /// A [Component] is a collection of [Module]s that are being compiled together as a package and have exports/imports. #[derive(Default)] pub struct Component { - /// This tree stores all of the modules - modules: RBTree, + /// This tree stores all of the modules. + /// The modules should be stored in a topological order + modules: IndexMap>, /// A list of this component's imports, indexed by function identifier imports: BTreeMap, @@ -71,23 +89,23 @@ impl Component { } /// Return a reference to the module table for this program - pub fn modules(&self) -> &RBTree { + pub fn modules(&self) -> &IndexMap> { &self.modules } /// Return a mutable reference to the module table for this program - pub fn modules_mut(&mut self) -> &mut RBTree { + pub fn modules_mut(&mut self) -> &mut IndexMap> { &mut self.modules } /// Returns true if `name` is defined in this program. pub fn contains(&self, name: Ident) -> bool { - !self.modules.find(&name).is_null() + !self.modules.contains_key(&name) } /// Look up the signature of a function in this program by `id` pub fn signature(&self, id: &FunctionIdent) -> Option<&Signature> { - let module = self.modules.find(&id.module).get()?; + let module = self.modules.get(&id.module)?; module.function(id.function).map(|f| &f.signature) } @@ -100,11 +118,26 @@ impl Component { } } +impl fmt::Display for Component { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + writeln!(f, "component")?; + writeln!(f, "")?; + for (function_id, import) in self.imports.iter() { + writeln!(f, "import {import} lower {function_id}",)?; + } + writeln!(f, "")?; + for (_ident, module) in self.modules.iter() { + writeln!(f, "{}", module)?; + } + Ok(()) + } +} + /// This struct provides an ergonomic way to construct a [Component] in an imperative fashion. /// /// Simply create the builder, add/build one or more modules, then call `link` to obtain a [Component]. pub struct ComponentBuilder<'a> { - modules: BTreeMap>, + modules: IndexMap>, imports: BTreeMap, exports: BTreeMap, entry: Option, @@ -178,9 +211,7 @@ impl<'a> ComponentBuilder<'a> { pub fn build(self) -> Component { let mut c = Component::default(); - for module in self.modules.into_values() { - c.modules.insert(module); - } + c.modules = self.modules; c.exports = self.exports; c.imports = self.imports; c diff --git a/hir/src/function.rs b/hir/src/function.rs index 040e3e016..98bab47a2 100644 --- a/hir/src/function.rs +++ b/hir/src/function.rs @@ -411,7 +411,7 @@ impl fmt::Debug for Function { } impl fmt::Display for Function { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - crate::write_function(f, self) + crate::write_function(f, self, 0) } } impl Eq for Function {} diff --git a/hir/src/module.rs b/hir/src/module.rs index 1aed37cad..7b32c7d80 100644 --- a/hir/src/module.rs +++ b/hir/src/module.rs @@ -8,6 +8,8 @@ use intrusive_collections::{ use miden_diagnostics::{DiagnosticsHandler, Severity, Spanned}; use rustc_hash::FxHashSet; +use crate::write::{write_indent, INDENT}; + use super::{pass::AnalysisKey, *}; /// This error is raised when two modules conflict with the same symbol name @@ -69,18 +71,21 @@ impl fmt::Display for Module { use std::fmt::Write; if self.is_kernel { - writeln!(f, "kernel {}\n", DisplayIdent(&self.name))?; + writeln!(f, "kernel {} {{\n", DisplayIdent(&self.name))?; } else { - writeln!(f, "module {}\n", DisplayIdent(&self.name))?; + writeln!(f, "module {} {{\n", DisplayIdent(&self.name))?; } + let indent = INDENT; let has_segments = !self.segments.is_empty(); let has_globals = !self.globals.is_empty(); let has_constants = self.globals.has_constants(); if has_segments { + write_indent(f, indent)?; f.write_str("memory {\n")?; for segment in self.segments.iter() { + write_indent(f, indent)?; writeln!( f, " segment @{:#x} x {} = {};", @@ -89,6 +94,7 @@ impl fmt::Display for Module { segment.init(), )?; } + write_indent(f, indent)?; f.write_str("}\n")?; } @@ -99,6 +105,7 @@ impl fmt::Display for Module { } for (constant, constant_data) in self.globals.constants() { let id = constant.as_u32(); + write_indent(f, indent)?; writeln!(f, "const ${id} = {constant_data};")?; } @@ -106,6 +113,7 @@ impl fmt::Display for Module { } for global in self.globals.iter() { + write_indent(f, indent)?; write!( f, "global {} @{} : {}", @@ -144,7 +152,7 @@ impl fmt::Display for Module { if i > 0 { writeln!(f)?; } - write_function(f, function)?; + write_function(f, function, indent)?; } if !external_functions.is_empty() { @@ -155,8 +163,7 @@ impl fmt::Display for Module { write_external_function(f, id, sig)?; } } - - Ok(()) + writeln!(f, "}}") } } impl fmt::Debug for Module { diff --git a/hir/src/write.rs b/hir/src/write.rs index f4a8feb3b..7101d2db9 100644 --- a/hir/src/write.rs +++ b/hir/src/write.rs @@ -2,22 +2,28 @@ use std::fmt::{self, Write}; use super::{display::DisplayValues, *}; -pub fn write_function(w: &mut dyn Write, func: &Function) -> fmt::Result { +pub const INDENT: usize = 4; + +pub fn write_function(w: &mut dyn Write, func: &Function, indent: usize) -> fmt::Result { for attr in func.dfg.attrs.iter() { + write_indent(w, indent)?; writeln!(w, "{attr}")?; } + write_indent(w, indent)?; write_signature(w, None, func.id.function, &func.signature)?; + write_indent(w, indent)?; writeln!(w, " {{")?; for (i, (block, block_data)) in func.dfg.blocks().enumerate() { if i > 0 { writeln!(w)?; } - write_block_header(w, func, block, 4)?; + write_block_header(w, func, block, indent + INDENT)?; for inst in block_data.insts() { - write_instruction(w, func, inst, 4)?; + write_instruction(w, func, inst, indent + INDENT)?; } } + write_indent(w, indent)?; writeln!(w, "}}") } @@ -99,8 +105,8 @@ pub fn write_block_header( block: Block, indent: usize, ) -> fmt::Result { - // The indent is for instructions, block header is 4 spaces outdented - write!(w, "{1:0$}{2}", indent - 4, "", block)?; + // The indent is for instructions, block header is INDENT spaces outdented + write!(w, "{1:0$}{2}", indent - INDENT, "", block)?; let mut args = func.dfg.block_params(block).iter().cloned(); match args.next() { @@ -257,10 +263,10 @@ fn write_operands( }) => { writeln!(w, " {} {{", arg)?; for (value, dest) in arms.iter() { - write_indent(w, indent + 4)?; + write_indent(w, indent + INDENT)?; writeln!(w, "{} => {},", value, dest)?; } - write_indent(w, indent + 4)?; + write_indent(w, indent + INDENT)?; writeln!(w, "_ => {}", default)?; write_indent(w, indent)?; w.write_char('}') @@ -361,7 +367,7 @@ fn write_block_args(w: &mut dyn Write, args: &[Value]) -> fmt::Result { } #[inline(always)] -fn write_indent(w: &mut dyn Write, indent: usize) -> fmt::Result { +pub fn write_indent(w: &mut dyn Write, indent: usize) -> fmt::Result { write!(w, "{1:0$}", indent, "") } diff --git a/tests/integration/Cargo.toml b/tests/integration/Cargo.toml index 0c492060c..3193d4024 100644 --- a/tests/integration/Cargo.toml +++ b/tests/integration/Cargo.toml @@ -27,8 +27,10 @@ wasmprinter = "0.2.63" sha2 = "0.10" rustc-demangle = {version = "0.1.19", features = ["std"]} cargo_metadata = "0.18" +derive_more.workspace = true [dev-dependencies] miden-core.workspace = true proptest.workspace = true concat-idents = "1.1" +rustc-hash.workspace = true diff --git a/tests/integration/expected/add_i16.hir b/tests/integration/expected/add_i16.hir index 156040083..7bd5291ad 100644 --- a/tests/integration/expected/add_i16.hir +++ b/tests/integration/expected/add_i16.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = add.wrapping v1, v0 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = add.wrapping v1, v0 : i32; + ret v3; + } } diff --git a/tests/integration/expected/add_i32.hir b/tests/integration/expected/add_i32.hir index 156040083..7bd5291ad 100644 --- a/tests/integration/expected/add_i32.hir +++ b/tests/integration/expected/add_i32.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = add.wrapping v1, v0 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = add.wrapping v1, v0 : i32; + ret v3; + } } diff --git a/tests/integration/expected/add_i8.hir b/tests/integration/expected/add_i8.hir index 156040083..7bd5291ad 100644 --- a/tests/integration/expected/add_i8.hir +++ b/tests/integration/expected/add_i8.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = add.wrapping v1, v0 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = add.wrapping v1, v0 : i32; + ret v3; + } } diff --git a/tests/integration/expected/add_u16.hir b/tests/integration/expected/add_u16.hir index 8182fd2f4..cc75f4af8 100644 --- a/tests/integration/expected/add_u16.hir +++ b/tests/integration/expected/add_u16.hir @@ -1,15 +1,16 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = add.wrapping v1, v0 : i32; - v4 = const.i32 65535 : i32; - v5 = band v3, v4 : i32; - ret v5; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = add.wrapping v1, v0 : i32; + v4 = const.i32 65535 : i32; + v5 = band v3, v4 : i32; + ret v5; + } } diff --git a/tests/integration/expected/add_u32.hir b/tests/integration/expected/add_u32.hir index 156040083..7bd5291ad 100644 --- a/tests/integration/expected/add_u32.hir +++ b/tests/integration/expected/add_u32.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = add.wrapping v1, v0 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = add.wrapping v1, v0 : i32; + ret v3; + } } diff --git a/tests/integration/expected/add_u8.hir b/tests/integration/expected/add_u8.hir index 6d98f4ab0..a5b1aded9 100644 --- a/tests/integration/expected/add_u8.hir +++ b/tests/integration/expected/add_u8.hir @@ -1,15 +1,16 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = add.wrapping v1, v0 : i32; - v4 = const.i32 255 : i32; - v5 = band v3, v4 : i32; - ret v5; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = add.wrapping v1, v0 : i32; + v4 = const.i32 255 : i32; + v5 = band v3, v4 : i32; + ret v5; + } } diff --git a/tests/integration/expected/and_bool.hir b/tests/integration/expected/and_bool.hir index 566332bcd..69c5228f6 100644 --- a/tests/integration/expected/and_bool.hir +++ b/tests/integration/expected/and_bool.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = band v0, v1 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = band v0, v1 : i32; + ret v3; + } } diff --git a/tests/integration/expected/and_i16.hir b/tests/integration/expected/and_i16.hir index 109333667..e4d16131d 100644 --- a/tests/integration/expected/and_i16.hir +++ b/tests/integration/expected/and_i16.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = band v1, v0 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = band v1, v0 : i32; + ret v3; + } } diff --git a/tests/integration/expected/and_i32.hir b/tests/integration/expected/and_i32.hir index 109333667..e4d16131d 100644 --- a/tests/integration/expected/and_i32.hir +++ b/tests/integration/expected/and_i32.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = band v1, v0 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = band v1, v0 : i32; + ret v3; + } } diff --git a/tests/integration/expected/and_i8.hir b/tests/integration/expected/and_i8.hir index 109333667..e4d16131d 100644 --- a/tests/integration/expected/and_i8.hir +++ b/tests/integration/expected/and_i8.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = band v1, v0 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = band v1, v0 : i32; + ret v3; + } } diff --git a/tests/integration/expected/and_u16.hir b/tests/integration/expected/and_u16.hir index 109333667..e4d16131d 100644 --- a/tests/integration/expected/and_u16.hir +++ b/tests/integration/expected/and_u16.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = band v1, v0 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = band v1, v0 : i32; + ret v3; + } } diff --git a/tests/integration/expected/and_u32.hir b/tests/integration/expected/and_u32.hir index 109333667..e4d16131d 100644 --- a/tests/integration/expected/and_u32.hir +++ b/tests/integration/expected/and_u32.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = band v1, v0 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = band v1, v0 : i32; + ret v3; + } } diff --git a/tests/integration/expected/and_u8.hir b/tests/integration/expected/and_u8.hir index 109333667..e4d16131d 100644 --- a/tests/integration/expected/and_u8.hir +++ b/tests/integration/expected/and_u8.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = band v1, v0 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = band v1, v0 : i32; + ret v3; + } } diff --git a/tests/integration/expected/components/add_wasm_component.hir b/tests/integration/expected/components/add_wasm_component.hir new file mode 100644 index 000000000..f6e4718b9 --- /dev/null +++ b/tests/integration/expected/components/add_wasm_component.hir @@ -0,0 +1,836 @@ +component + + +module module0 { + + const $0 = 0x00100000; + + global external @__stack_pointer : i32 = $0 { id = 0 }; + + pub fn __wasm_call_ctors() { + block0: + br block1; + + block1: + ret; + } + + pub fn miden:add-package/add-interface@1.0.0#add(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + call module0::wit_bindgen::rt::run_ctors_once(); + v3 = add.wrapping v1, v0 : i32; + br block1(v3); + + block1(v2: i32): + ret v2; + } + + pub fn __rust_alloc(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = const.i32 1048576 : i32; + v4 = call module0::::alloc(v3, v1, v0) : i32; + br block1(v4); + + block1(v2: i32): + ret v2; + } + + pub fn __rust_realloc(i32, i32, i32, i32) -> i32 { + block0(v0: i32, v1: i32, v2: i32, v3: i32): + v5 = const.i32 0 : i32; + v6 = const.i32 1048576 : i32; + v7 = call module0::::alloc(v6, v2, v3) : i32; + v8 = eq v7, 0 : i1; + v9 = cast v8 : i32; + v10 = neq v9, 0 : i1; + condbr v10, block2(v7), block3; + + block1(v4: i32): + ret v4; + + block2(v22: i32): + br block1(v22); + + block3: + v11 = cast v1 : u32; + v12 = cast v3 : u32; + v13 = lt v11, v12 : i1; + v14 = cast v13 : i32; + v15 = neq v14, 0 : i1; + v16 = select v15, v1, v3 : i32; + v17 = cast v7 : u32; + v18 = inttoptr v17 : *mut u8; + v19 = cast v0 : u32; + v20 = inttoptr v19 : *mut u8; + memcpy v20, v18, v16; + v21 = const.i32 1048576 : i32; + call module0::::dealloc(v21, v0, v2, v1); + br block2(v7); + } + + pub fn wee_alloc::alloc_first_fit(i32, i32, i32) -> i32 { + block0(v0: i32, v1: i32, v2: i32): + v4 = const.i32 0 : i32; + v5 = cast v2 : u32; + v6 = inttoptr v5 : *mut i32; + v7 = load v6 : i32; + v8 = neq v7, 0 : i1; + condbr v8, block2, block3; + + block1(v3: i32): + ret v3; + + block2: + v10 = const.i32 -1 : i32; + v11 = add.wrapping v1, v10 : i32; + v12 = const.i32 0 : i32; + v13 = sub.wrapping v12, v1 : i32; + v14 = const.i32 2 : i32; + v15 = shl.wrapping v0, v14 : i32; + br block4(v7, v2, v15, v13, v11); + + block3: + v9 = const.i32 0 : i32; + ret v9; + + block4(v16: i32, v147: i32, v158: i32, v173: i32, v186: i32): + v17 = cast v16 : u32; + v18 = add.checked v17, 8 : u32; + v19 = inttoptr v18 : *mut i32; + v20 = load v19 : i32; + v21 = const.i32 1 : i32; + v22 = band v20, v21 : i32; + v23 = neq v22, 0 : i1; + condbr v23, block7, block8; + + block5: + v305 = const.i32 0 : i32; + br block1(v305); + + block6(v148: i32, v157: i32, v172: i32, v185: i32, v194: i32, v298: i32): + v149 = cast v148 : u32; + v150 = inttoptr v149 : *mut i32; + v151 = load v150 : i32; + v152 = const.i32 -4 : i32; + v153 = band v151, v152 : i32; + v154 = const.i32 8 : i32; + v155 = add.wrapping v148, v154 : i32; + v156 = sub.wrapping v153, v155 : i32; + v164 = cast v156 : u32; + v165 = cast v157 : u32; + v166 = lt v164, v165 : i1; + v167 = cast v166 : i32; + v168 = neq v167, 0 : i1; + condbr v168, block22(v194, v298, v157, v172, v185), block23; + + block7: + br block9(v16, v20, v147, v158, v173, v186); + + block8: + br block6(v16, v158, v173, v186, v147, v20); + + block9(v24: i32, v25: i32, v136: i32, v163: i32, v178: i32, v191: i32): + v26 = const.i32 -2 : i32; + v27 = band v25, v26 : i32; + v28 = cast v24 : u32; + v29 = add.checked v28, 8 : u32; + v30 = inttoptr v29 : *mut i32; + store v30, v27; + v31 = cast v24 : u32; + v32 = add.checked v31, 4 : u32; + v33 = inttoptr v32 : *mut i32; + v34 = load v33 : i32; + v35 = const.i32 -4 : i32; + v36 = band v34, v35 : i32; + v37 = neq v36, 0 : i1; + condbr v37, block12, block13; + + block10: + br block6(v137, v159, v174, v187, v132, v143); + + block11(v48: i32, v66: i32, v106: i32, v124: i32, v135: i32, v162: i32, v177: i32, v190: i32): + v49 = cast v48 : u32; + v50 = inttoptr v49 : *mut i32; + v51 = load v50 : i32; + v52 = const.i32 -4 : i32; + v53 = band v51, v52 : i32; + v54 = eq v53, 0 : i1; + v55 = cast v54 : i32; + v56 = neq v55, 0 : i1; + condbr v56, block14(v66, v51, v48, v106, v124, v135, v162, v177, v190), block15; + + block12: + v39 = const.i32 0 : i32; + v40 = cast v36 : u32; + v41 = inttoptr v40 : *mut u8; + v42 = load v41 : u8; + v43 = zext v42 : i32; + v44 = const.i32 1 : i32; + v45 = band v43, v44 : i32; + v46 = neq v45, 0 : i1; + v47 = select v46, v39, v36 : i32; + br block11(v24, v36, v34, v47, v136, v163, v178, v191); + + block13: + v38 = const.i32 0 : i32; + br block11(v24, v36, v34, v38, v136, v163, v178, v191); + + block14(v80: i32, v89: i32, v95: i32, v105: i32, v123: i32, v134: i32, v161: i32, v176: i32, v189: i32): + v81 = eq v80, 0 : i1; + v82 = cast v81 : i32; + v83 = neq v82, 0 : i1; + condbr v83, block17(v95, v105, v89, v123, v134, v161, v176, v189), block18; + + block15: + v57 = const.i32 2 : i32; + v58 = band v51, v57 : i32; + v59 = neq v58, 0 : i1; + condbr v59, block14(v66, v51, v48, v106, v124, v135, v162, v177, v190), block16; + + block16: + v60 = cast v53 : u32; + v61 = add.checked v60, 4 : u32; + v62 = inttoptr v61 : *mut i32; + v63 = load v62 : i32; + v64 = const.i32 3 : i32; + v65 = band v63, v64 : i32; + v67 = bor v65, v66 : i32; + v68 = cast v53 : u32; + v69 = add.checked v68, 4 : u32; + v70 = inttoptr v69 : *mut i32; + store v70, v67; + v71 = cast v48 : u32; + v72 = add.checked v71, 4 : u32; + v73 = inttoptr v72 : *mut i32; + v74 = load v73 : i32; + v75 = const.i32 -4 : i32; + v76 = band v74, v75 : i32; + v77 = cast v48 : u32; + v78 = inttoptr v77 : *mut i32; + v79 = load v78 : i32; + br block14(v76, v79, v48, v74, v124, v135, v162, v177, v190); + + block17(v103: i32, v104: i32, v112: i32, v122: i32, v133: i32, v160: i32, v175: i32, v188: i32): + v107 = const.i32 3 : i32; + v108 = band v104, v107 : i32; + v109 = cast v103 : u32; + v110 = add.checked v109, 4 : u32; + v111 = inttoptr v110 : *mut i32; + store v111, v108; + v113 = const.i32 3 : i32; + v114 = band v112, v113 : i32; + v115 = cast v103 : u32; + v116 = inttoptr v115 : *mut i32; + store v116, v114; + v117 = const.i32 2 : i32; + v118 = band v112, v117 : i32; + v119 = eq v118, 0 : i1; + v120 = cast v119 : i32; + v121 = neq v120, 0 : i1; + condbr v121, block19(v133, v122, v160, v175, v188), block20; + + block18: + v84 = cast v80 : u32; + v85 = inttoptr v84 : *mut i32; + v86 = load v85 : i32; + v87 = const.i32 3 : i32; + v88 = band v86, v87 : i32; + v90 = const.i32 -4 : i32; + v91 = band v89, v90 : i32; + v92 = bor v88, v91 : i32; + v93 = cast v80 : u32; + v94 = inttoptr v93 : *mut i32; + store v94, v92; + v96 = cast v95 : u32; + v97 = add.checked v96, 4 : u32; + v98 = inttoptr v97 : *mut i32; + v99 = load v98 : i32; + v100 = cast v95 : u32; + v101 = inttoptr v100 : *mut i32; + v102 = load v101 : i32; + br block17(v95, v99, v102, v123, v134, v161, v176, v189); + + block19(v132: i32, v137: i32, v159: i32, v174: i32, v187: i32): + v138 = cast v132 : u32; + v139 = inttoptr v138 : *mut i32; + store v139, v137; + v140 = cast v137 : u32; + v141 = add.checked v140, 8 : u32; + v142 = inttoptr v141 : *mut i32; + v143 = load v142 : i32; + v144 = const.i32 1 : i32; + v145 = band v143, v144 : i32; + v146 = neq v145, 0 : i1; + condbr v146, block9(v137, v143, v132, v159, v174, v187), block21; + + block20: + v125 = cast v122 : u32; + v126 = inttoptr v125 : *mut i32; + v127 = load v126 : i32; + v128 = const.i32 2 : i32; + v129 = bor v127, v128 : i32; + v130 = cast v122 : u32; + v131 = inttoptr v130 : *mut i32; + store v131, v129; + br block19(v133, v122, v160, v175, v188); + + block21: + br block10; + + block22(v296: i32, v297: i32, v302: i32, v303: i32, v304: i32): + v299 = cast v296 : u32; + v300 = inttoptr v299 : *mut i32; + store v300, v297; + v301 = neq v297, 0 : i1; + condbr v301, block4(v297, v296, v302, v303, v304), block33; + + block23: + v169 = const.i32 72 : i32; + v170 = add.wrapping v155, v169 : i32; + v171 = sub.wrapping v153, v157 : i32; + v179 = band v171, v172 : i32; + v180 = cast v170 : u32; + v181 = cast v179 : u32; + v182 = lte v180, v181 : i1; + v183 = cast v182 : i32; + v184 = neq v183, 0 : i1; + condbr v184, block25, block26; + + block24(v288: i32, v289: i32): + v290 = const.i32 1 : i32; + v291 = bor v289, v290 : i32; + v292 = cast v288 : u32; + v293 = inttoptr v292 : *mut i32; + store v293, v291; + v294 = const.i32 8 : i32; + v295 = add.wrapping v288, v294 : i32; + ret v295; + + block25: + v206 = const.i32 0 : i32; + v207 = const.i32 0 : i32; + v208 = cast v179 : u32; + v209 = inttoptr v208 : *mut i32; + store v209, v207; + v210 = const.i32 -8 : i32; + v211 = add.wrapping v179, v210 : i32; + v212 = const.i64 0 : i64; + v213 = cast v211 : u32; + v214 = inttoptr v213 : *mut i64; + store v214, v212; + v215 = cast v148 : u32; + v216 = inttoptr v215 : *mut i32; + v217 = load v216 : i32; + v218 = const.i32 -4 : i32; + v219 = band v217, v218 : i32; + v220 = cast v211 : u32; + v221 = inttoptr v220 : *mut i32; + store v221, v219; + v222 = cast v148 : u32; + v223 = inttoptr v222 : *mut i32; + v224 = load v223 : i32; + v225 = const.i32 -4 : i32; + v226 = band v224, v225 : i32; + v227 = eq v226, 0 : i1; + v228 = cast v227 : i32; + v229 = neq v228, 0 : i1; + condbr v229, block28(v211, v206, v148), block29; + + block26: + v192 = band v185, v155 : i32; + v193 = neq v192, 0 : i1; + condbr v193, block22(v194, v298, v157, v172, v185), block27; + + block27: + v195 = cast v148 : u32; + v196 = add.checked v195, 8 : u32; + v197 = inttoptr v196 : *mut i32; + v198 = load v197 : i32; + v199 = const.i32 -4 : i32; + v200 = band v198, v199 : i32; + v201 = cast v194 : u32; + v202 = inttoptr v201 : *mut i32; + store v202, v200; + v203 = cast v148 : u32; + v204 = inttoptr v203 : *mut i32; + v205 = load v204 : i32; + br block24(v148, v205); + + block28(v249: i32, v250: i32, v251: i32): + v252 = bor v250, v251 : i32; + v253 = cast v249 : u32; + v254 = add.checked v253, 4 : u32; + v255 = inttoptr v254 : *mut i32; + store v255, v252; + v256 = cast v251 : u32; + v257 = add.checked v256, 8 : u32; + v258 = inttoptr v257 : *mut i32; + v259 = load v258 : i32; + v260 = const.i32 -2 : i32; + v261 = band v259, v260 : i32; + v262 = cast v251 : u32; + v263 = add.checked v262, 8 : u32; + v264 = inttoptr v263 : *mut i32; + store v264, v261; + v265 = cast v251 : u32; + v266 = inttoptr v265 : *mut i32; + v267 = load v266 : i32; + v268 = const.i32 3 : i32; + v269 = band v267, v268 : i32; + v270 = bor v269, v249 : i32; + v271 = cast v251 : u32; + v272 = inttoptr v271 : *mut i32; + store v272, v270; + v273 = const.i32 2 : i32; + v274 = band v267, v273 : i32; + v275 = neq v274, 0 : i1; + condbr v275, block31, block32; + + block29: + v230 = const.i32 2 : i32; + v231 = band v224, v230 : i32; + v232 = neq v231, 0 : i1; + condbr v232, block28(v211, v206, v148), block30; + + block30: + v233 = cast v226 : u32; + v234 = add.checked v233, 4 : u32; + v235 = inttoptr v234 : *mut i32; + v236 = load v235 : i32; + v237 = const.i32 3 : i32; + v238 = band v236, v237 : i32; + v239 = bor v238, v211 : i32; + v240 = cast v226 : u32; + v241 = add.checked v240, 4 : u32; + v242 = inttoptr v241 : *mut i32; + store v242, v239; + v243 = cast v211 : u32; + v244 = add.checked v243, 4 : u32; + v245 = inttoptr v244 : *mut i32; + v246 = load v245 : i32; + v247 = const.i32 3 : i32; + v248 = band v246, v247 : i32; + br block28(v211, v248, v148); + + block31: + v279 = const.i32 -3 : i32; + v280 = band v270, v279 : i32; + v281 = cast v251 : u32; + v282 = inttoptr v281 : *mut i32; + store v282, v280; + v283 = cast v249 : u32; + v284 = inttoptr v283 : *mut i32; + v285 = load v284 : i32; + v286 = const.i32 2 : i32; + v287 = bor v285, v286 : i32; + br block24(v249, v287); + + block32: + v276 = cast v249 : u32; + v277 = inttoptr v276 : *mut i32; + v278 = load v277 : i32; + br block24(v249, v278); + + block33: + br block5; + } + + pub fn ::alloc(i32, i32, i32) -> i32 { + block0(v0: i32, v1: i32, v2: i32): + v4 = const.i32 0 : i32; + v5 = global.load (@__stack_pointer) as *mut i8 : i32; + v6 = const.i32 16 : i32; + v7 = sub.wrapping v5, v6 : i32; + v8 = global.symbol @__stack_pointer : *mut i32; + store v8, v7; + v9 = neq v2, 0 : i1; + condbr v9, block3, block4; + + block1(v3: i32): + ret v3; + + block2(v87: i32, v91: i32): + v88 = const.i32 16 : i32; + v89 = add.wrapping v87, v88 : i32; + v90 = global.symbol @__stack_pointer : *mut i32; + store v90, v89; + br block1(v91); + + block3: + v10 = cast v0 : u32; + v11 = inttoptr v10 : *mut i32; + v12 = load v11 : i32; + v13 = cast v7 : u32; + v14 = add.checked v13, 12 : u32; + v15 = inttoptr v14 : *mut i32; + store v15, v12; + v16 = const.i32 3 : i32; + v17 = add.wrapping v2, v16 : i32; + v18 = const.i32 2 : i32; + v19 = cast v17 : u32; + v20 = cast v18 : u32; + v21 = shr.wrapping v19, v20 : u32; + v22 = cast v21 : i32; + v23 = const.i32 12 : i32; + v24 = add.wrapping v7, v23 : i32; + v25 = call module0::wee_alloc::alloc_first_fit(v22, v1, v24) : i32; + v26 = neq v25, 0 : i1; + condbr v26, block5(v0, v7, v25), block6; + + block4: + br block2(v7, v1); + + block5(v79: i32, v80: i32, v92: i32): + v81 = cast v80 : u32; + v82 = add.checked v81, 12 : u32; + v83 = inttoptr v82 : *mut i32; + v84 = load v83 : i32; + v85 = cast v79 : u32; + v86 = inttoptr v85 : *mut i32; + store v86, v84; + br block2(v80, v92); + + block6: + v27 = const.i32 -4 : i32; + v28 = band v17, v27 : i32; + v29 = const.i32 3 : i32; + v30 = shl.wrapping v1, v29 : i32; + v31 = const.i32 512 : i32; + v32 = add.wrapping v30, v31 : i32; + v33 = cast v28 : u32; + v34 = cast v32 : u32; + v35 = gt v33, v34 : i1; + v36 = cast v35 : i32; + v37 = neq v36, 0 : i1; + v38 = select v37, v28, v32 : i32; + v39 = const.i32 65543 : i32; + v40 = add.wrapping v38, v39 : i32; + v41 = const.i32 16 : i32; + v42 = cast v40 : u32; + v43 = cast v41 : u32; + v44 = shr.wrapping v42, v43 : u32; + v45 = cast v44 : i32; + v46 = cast v45 : u32; + v47 = memory.grow v46 : i32; + v48 = const.i32 -1 : i32; + v49 = neq v47, v48 : i1; + v50 = cast v49 : i32; + v51 = neq v50, 0 : i1; + condbr v51, block7, block8; + + block7: + v53 = const.i32 16 : i32; + v54 = shl.wrapping v47, v53 : i32; + v55 = const.i32 0 : i32; + v56 = cast v54 : u32; + v57 = add.checked v56, 4 : u32; + v58 = inttoptr v57 : *mut i32; + store v58, v55; + v59 = cast v7 : u32; + v60 = add.checked v59, 12 : u32; + v61 = inttoptr v60 : *mut i32; + v62 = load v61 : i32; + v63 = cast v54 : u32; + v64 = add.checked v63, 8 : u32; + v65 = inttoptr v64 : *mut i32; + store v65, v62; + v66 = const.i32 -65536 : i32; + v67 = band v40, v66 : i32; + v68 = add.wrapping v54, v67 : i32; + v69 = const.i32 2 : i32; + v70 = bor v68, v69 : i32; + v71 = cast v54 : u32; + v72 = inttoptr v71 : *mut i32; + store v72, v70; + v73 = cast v7 : u32; + v74 = add.checked v73, 12 : u32; + v75 = inttoptr v74 : *mut i32; + store v75, v54; + v76 = const.i32 12 : i32; + v77 = add.wrapping v7, v76 : i32; + v78 = call module0::wee_alloc::alloc_first_fit(v22, v1, v77) : i32; + br block5(v0, v7, v78); + + block8: + v52 = const.i32 0 : i32; + br block5(v0, v7, v52); + } + + pub fn ::dealloc(i32, i32, i32, i32) { + block0(v0: i32, v1: i32, v2: i32, v3: i32): + v4 = const.i32 0 : i32; + v5 = eq v1, 0 : i1; + v6 = cast v5 : i32; + v7 = neq v6, 0 : i1; + condbr v7, block2, block3; + + block1: + ret; + + block2: + br block1; + + block3: + v8 = eq v3, 0 : i1; + v9 = cast v8 : i32; + v10 = neq v9, 0 : i1; + condbr v10, block2, block4; + + block4: + v11 = cast v0 : u32; + v12 = inttoptr v11 : *mut i32; + v13 = load v12 : i32; + v14 = const.i32 0 : i32; + v15 = cast v1 : u32; + v16 = inttoptr v15 : *mut i32; + store v16, v14; + v17 = const.i32 -8 : i32; + v18 = add.wrapping v1, v17 : i32; + v19 = cast v18 : u32; + v20 = inttoptr v19 : *mut i32; + v21 = load v20 : i32; + v22 = const.i32 -2 : i32; + v23 = band v21, v22 : i32; + v24 = cast v18 : u32; + v25 = inttoptr v24 : *mut i32; + store v25, v23; + v26 = const.i32 4 : i32; + v27 = add.wrapping v18, v26 : i32; + v28 = cast v27 : u32; + v29 = inttoptr v28 : *mut i32; + v30 = load v29 : i32; + v31 = const.i32 -4 : i32; + v32 = band v30, v31 : i32; + v33 = eq v32, 0 : i1; + v34 = cast v33 : i32; + v35 = neq v34, 0 : i1; + condbr v35, block8(v21, v1, v18, v13, v0), block9; + + block5(v155: i32, v161: i32): + v163 = cast v155 : u32; + v164 = inttoptr v163 : *mut i32; + store v164, v161; + br block2; + + block6(v151: i32, v152: i32, v160: i32, v162: i32): + v153 = cast v151 : u32; + v154 = inttoptr v153 : *mut i32; + store v154, v152; + br block5(v160, v162); + + block7(v147: i32, v156: i32): + br block5(v156, v147); + + block8(v116: i32, v132: i32, v141: i32, v150: i32, v159: i32): + v117 = const.i32 -4 : i32; + v118 = band v116, v117 : i32; + v119 = eq v118, 0 : i1; + v120 = cast v119 : i32; + v121 = neq v120, 0 : i1; + condbr v121, block6(v132, v150, v159, v141), block18; + + block9: + v36 = cast v32 : u32; + v37 = inttoptr v36 : *mut i32; + v38 = load v37 : i32; + v39 = const.i32 1 : i32; + v40 = band v38, v39 : i32; + v41 = neq v40, 0 : i1; + condbr v41, block8(v21, v1, v18, v13, v0), block10; + + block10: + v42 = const.i32 -4 : i32; + v43 = band v21, v42 : i32; + v44 = neq v43, 0 : i1; + condbr v44, block13, block14; + + block11(v90: i32, v91: i32, v96: i32, v97: i32, v107: i32, v148: i32, v157: i32): + v92 = const.i32 3 : i32; + v93 = band v91, v92 : i32; + v94 = cast v90 : u32; + v95 = inttoptr v94 : *mut i32; + store v95, v93; + v98 = const.i32 3 : i32; + v99 = band v97, v98 : i32; + v100 = cast v96 : u32; + v101 = inttoptr v100 : *mut i32; + store v101, v99; + v102 = const.i32 2 : i32; + v103 = band v97, v102 : i32; + v104 = eq v103, 0 : i1; + v105 = cast v104 : i32; + v106 = neq v105, 0 : i1; + condbr v106, block7(v148, v157), block17; + + block12(v72: i32, v73: i32, v76: i32, v82: i32, v86: i32, v108: i32, v149: i32, v158: i32): + v74 = const.i32 -4 : i32; + v75 = band v73, v74 : i32; + v77 = const.i32 3 : i32; + v78 = band v76, v77 : i32; + v79 = bor v75, v78 : i32; + v80 = cast v72 : u32; + v81 = inttoptr v80 : *mut i32; + store v81, v79; + v83 = cast v82 : u32; + v84 = inttoptr v83 : *mut i32; + v85 = load v84 : i32; + v87 = cast v86 : u32; + v88 = inttoptr v87 : *mut i32; + v89 = load v88 : i32; + br block11(v82, v85, v86, v89, v108, v149, v158); + + block13: + v45 = const.i32 2 : i32; + v46 = band v21, v45 : i32; + v47 = neq v46, 0 : i1; + condbr v47, block12(v32, v23, v38, v27, v18, v32, v13, v0), block15; + + block14: + br block12(v32, v23, v38, v27, v18, v32, v13, v0); + + block15: + v48 = cast v43 : u32; + v49 = add.checked v48, 4 : u32; + v50 = inttoptr v49 : *mut i32; + v51 = load v50 : i32; + v52 = const.i32 3 : i32; + v53 = band v51, v52 : i32; + v54 = bor v53, v32 : i32; + v55 = cast v43 : u32; + v56 = add.checked v55, 4 : u32; + v57 = inttoptr v56 : *mut i32; + store v57, v54; + v58 = cast v18 : u32; + v59 = inttoptr v58 : *mut i32; + v60 = load v59 : i32; + v61 = cast v27 : u32; + v62 = inttoptr v61 : *mut i32; + v63 = load v62 : i32; + v64 = const.i32 -4 : i32; + v65 = band v63, v64 : i32; + v66 = eq v65, 0 : i1; + v67 = cast v66 : i32; + v68 = neq v67, 0 : i1; + condbr v68, block11(v27, v63, v18, v60, v32, v13, v0), block16; + + block16: + v69 = cast v65 : u32; + v70 = inttoptr v69 : *mut i32; + v71 = load v70 : i32; + br block12(v65, v60, v71, v27, v18, v32, v13, v0); + + block17: + v109 = cast v107 : u32; + v110 = inttoptr v109 : *mut i32; + v111 = load v110 : i32; + v112 = const.i32 2 : i32; + v113 = bor v111, v112 : i32; + v114 = cast v107 : u32; + v115 = inttoptr v114 : *mut i32; + store v115, v113; + br block7(v148, v157); + + block18: + v122 = const.i32 2 : i32; + v123 = band v116, v122 : i32; + v124 = neq v123, 0 : i1; + condbr v124, block6(v132, v150, v159, v141), block19; + + block19: + v125 = cast v118 : u32; + v126 = inttoptr v125 : *mut u8; + v127 = load v126 : u8; + v128 = zext v127 : i32; + v129 = const.i32 1 : i32; + v130 = band v128, v129 : i32; + v131 = neq v130, 0 : i1; + condbr v131, block6(v132, v150, v159, v141), block20; + + block20: + v133 = cast v118 : u32; + v134 = add.checked v133, 8 : u32; + v135 = inttoptr v134 : *mut i32; + v136 = load v135 : i32; + v137 = const.i32 -4 : i32; + v138 = band v136, v137 : i32; + v139 = cast v132 : u32; + v140 = inttoptr v139 : *mut i32; + store v140, v138; + v142 = const.i32 1 : i32; + v143 = bor v141, v142 : i32; + v144 = cast v118 : u32; + v145 = add.checked v144, 8 : u32; + v146 = inttoptr v145 : *mut i32; + store v146, v143; + br block7(v150, v159); + } + + pub fn wit_bindgen::rt::run_ctors_once() { + block0: + v0 = const.i32 0 : i32; + v1 = cast v0 : u32; + v2 = add.checked v1, 1048581 : u32; + v3 = inttoptr v2 : *mut u8; + v4 = load v3 : u8; + v5 = zext v4 : i32; + v6 = neq v5, 0 : i1; + condbr v6, block2, block3; + + block1: + ret; + + block2: + br block1; + + block3: + call module0::__wasm_call_ctors(); + v7 = const.i32 0 : i32; + v8 = const.i32 1 : i32; + v9 = trunc v8 : u8; + v10 = cast v7 : u32; + v11 = add.checked v10, 1048581 : u32; + v12 = inttoptr v11 : *mut u8; + store v12, v9; + br block2; + } + + pub fn cabi_realloc(i32, i32, i32, i32) -> i32 { + block0(v0: i32, v1: i32, v2: i32, v3: i32): + v5 = neq v1, 0 : i1; + condbr v5, block4, block5; + + block1(v4: i32): + ret v4; + + block2(v19: i32): + br block1(v19); + + block3(v17: i32): + v18 = neq v17, 0 : i1; + condbr v18, block2(v17), block7; + + block4: + v16 = call module0::__rust_realloc(v0, v1, v2, v3) : i32; + br block3(v16); + + block5: + v6 = eq v3, 0 : i1; + v7 = cast v6 : i32; + v8 = neq v7, 0 : i1; + condbr v8, block2(v2), block6; + + block6: + v9 = const.i32 0 : i32; + v10 = cast v9 : u32; + v11 = add.checked v10, 1048580 : u32; + v12 = inttoptr v11 : *mut u8; + v13 = load v12 : u8; + v14 = zext v13 : i32; + v15 = call module0::__rust_alloc(v3, v2) : i32; + br block3(v15); + + block7: + unreachable ; + } +} + diff --git a/tests/integration/expected/components/add_wasm_component.wat b/tests/integration/expected/components/add_wasm_component.wat index c1837acca..c63212e00 100644 --- a/tests/integration/expected/components/add_wasm_component.wat +++ b/tests/integration/expected/components/add_wasm_component.wat @@ -6,7 +6,7 @@ (type (;3;) (func (param i32 i32 i32) (result i32))) (type (;4;) (func (param i32 i32 i32 i32))) (func $__wasm_call_ctors (;0;) (type 0)) - (func $miden:add/add@1.0.0#add (;1;) (type 1) (param i32 i32) (result i32) + (func $miden:add-package/add-interface@1.0.0#add (;1;) (type 1) (param i32 i32) (result i32) call $wit_bindgen::rt::run_ctors_once local.get 1 local.get 0 @@ -663,14 +663,14 @@ (memory (;0;) 17) (global $__stack_pointer (;0;) (mut i32) i32.const 1048576) (export "memory" (memory 0)) - (export "miden:add/add@1.0.0#add" (func $miden:add/add@1.0.0#add)) + (export "miden:add-package/add-interface@1.0.0#add" (func $miden:add-package/add-interface@1.0.0#add)) (export "cabi_realloc" (func $cabi_realloc)) ) (core instance (;0;) (instantiate 0)) (alias core export 0 "memory" (core memory (;0;))) (alias core export 0 "cabi_realloc" (core func (;0;))) (type (;0;) (func (param "a" u32) (param "b" u32) (result u32))) - (alias core export 0 "miden:add/add@1.0.0#add" (core func (;1;))) + (alias core export 0 "miden:add-package/add-interface@1.0.0#add" (core func (;1;))) (func (;0;) (type 0) (canon lift (core func 1))) (component (;0;) (type (;0;) (func (param "a" u32) (param "b" u32) (result u32))) @@ -682,5 +682,5 @@ (with "import-func-add" (func 0)) ) ) - (export (;1;) "miden:add/add@1.0.0" (instance 0)) + (export (;1;) "miden:add-package/add-interface@1.0.0" (instance 0)) ) \ No newline at end of file diff --git a/tests/integration/expected/components/inc_wasm_component.hir b/tests/integration/expected/components/inc_wasm_component.hir new file mode 100644 index 000000000..2fc4a2289 --- /dev/null +++ b/tests/integration/expected/components/inc_wasm_component.hir @@ -0,0 +1,838 @@ +component + +import miden:add-package/add-interface@1.0.0::add fn(u32, u32) -> u32 mast#0x0000000000000000000000000000000000000000000000000000000000000000 lower module0::inc_wasm_component::bindings::miden::add_package::add_interface::add::wit_import + +module module0 { + + const $0 = 0x00100000; + + global external @__stack_pointer : i32 = $0 { id = 0 }; + + pub fn __wasm_call_ctors() { + block0: + br block1; + + block1: + ret; + } + + pub fn inc(i32) -> i32 { + block0(v0: i32): + call module0::wit_bindgen::rt::run_ctors_once(); + v2 = const.i32 1 : i32; + v3 = call module0::inc_wasm_component::bindings::miden::add_package::add_interface::add::wit_import(v0, v2) : i32; + br block1(v3); + + block1(v1: i32): + ret v1; + } + + pub fn __rust_alloc(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = const.i32 1048576 : i32; + v4 = call module0::::alloc(v3, v1, v0) : i32; + br block1(v4); + + block1(v2: i32): + ret v2; + } + + pub fn __rust_realloc(i32, i32, i32, i32) -> i32 { + block0(v0: i32, v1: i32, v2: i32, v3: i32): + v5 = const.i32 0 : i32; + v6 = const.i32 1048576 : i32; + v7 = call module0::::alloc(v6, v2, v3) : i32; + v8 = eq v7, 0 : i1; + v9 = cast v8 : i32; + v10 = neq v9, 0 : i1; + condbr v10, block2(v7), block3; + + block1(v4: i32): + ret v4; + + block2(v22: i32): + br block1(v22); + + block3: + v11 = cast v1 : u32; + v12 = cast v3 : u32; + v13 = lt v11, v12 : i1; + v14 = cast v13 : i32; + v15 = neq v14, 0 : i1; + v16 = select v15, v1, v3 : i32; + v17 = cast v7 : u32; + v18 = inttoptr v17 : *mut u8; + v19 = cast v0 : u32; + v20 = inttoptr v19 : *mut u8; + memcpy v20, v18, v16; + v21 = const.i32 1048576 : i32; + call module0::::dealloc(v21, v0, v2, v1); + br block2(v7); + } + + pub fn wee_alloc::alloc_first_fit(i32, i32, i32) -> i32 { + block0(v0: i32, v1: i32, v2: i32): + v4 = const.i32 0 : i32; + v5 = cast v2 : u32; + v6 = inttoptr v5 : *mut i32; + v7 = load v6 : i32; + v8 = neq v7, 0 : i1; + condbr v8, block2, block3; + + block1(v3: i32): + ret v3; + + block2: + v10 = const.i32 -1 : i32; + v11 = add.wrapping v1, v10 : i32; + v12 = const.i32 0 : i32; + v13 = sub.wrapping v12, v1 : i32; + v14 = const.i32 2 : i32; + v15 = shl.wrapping v0, v14 : i32; + br block4(v7, v2, v15, v13, v11); + + block3: + v9 = const.i32 0 : i32; + ret v9; + + block4(v16: i32, v147: i32, v158: i32, v173: i32, v186: i32): + v17 = cast v16 : u32; + v18 = add.checked v17, 8 : u32; + v19 = inttoptr v18 : *mut i32; + v20 = load v19 : i32; + v21 = const.i32 1 : i32; + v22 = band v20, v21 : i32; + v23 = neq v22, 0 : i1; + condbr v23, block7, block8; + + block5: + v305 = const.i32 0 : i32; + br block1(v305); + + block6(v148: i32, v157: i32, v172: i32, v185: i32, v194: i32, v298: i32): + v149 = cast v148 : u32; + v150 = inttoptr v149 : *mut i32; + v151 = load v150 : i32; + v152 = const.i32 -4 : i32; + v153 = band v151, v152 : i32; + v154 = const.i32 8 : i32; + v155 = add.wrapping v148, v154 : i32; + v156 = sub.wrapping v153, v155 : i32; + v164 = cast v156 : u32; + v165 = cast v157 : u32; + v166 = lt v164, v165 : i1; + v167 = cast v166 : i32; + v168 = neq v167, 0 : i1; + condbr v168, block22(v194, v298, v157, v172, v185), block23; + + block7: + br block9(v16, v20, v147, v158, v173, v186); + + block8: + br block6(v16, v158, v173, v186, v147, v20); + + block9(v24: i32, v25: i32, v136: i32, v163: i32, v178: i32, v191: i32): + v26 = const.i32 -2 : i32; + v27 = band v25, v26 : i32; + v28 = cast v24 : u32; + v29 = add.checked v28, 8 : u32; + v30 = inttoptr v29 : *mut i32; + store v30, v27; + v31 = cast v24 : u32; + v32 = add.checked v31, 4 : u32; + v33 = inttoptr v32 : *mut i32; + v34 = load v33 : i32; + v35 = const.i32 -4 : i32; + v36 = band v34, v35 : i32; + v37 = neq v36, 0 : i1; + condbr v37, block12, block13; + + block10: + br block6(v137, v159, v174, v187, v132, v143); + + block11(v48: i32, v66: i32, v106: i32, v124: i32, v135: i32, v162: i32, v177: i32, v190: i32): + v49 = cast v48 : u32; + v50 = inttoptr v49 : *mut i32; + v51 = load v50 : i32; + v52 = const.i32 -4 : i32; + v53 = band v51, v52 : i32; + v54 = eq v53, 0 : i1; + v55 = cast v54 : i32; + v56 = neq v55, 0 : i1; + condbr v56, block14(v66, v51, v48, v106, v124, v135, v162, v177, v190), block15; + + block12: + v39 = const.i32 0 : i32; + v40 = cast v36 : u32; + v41 = inttoptr v40 : *mut u8; + v42 = load v41 : u8; + v43 = zext v42 : i32; + v44 = const.i32 1 : i32; + v45 = band v43, v44 : i32; + v46 = neq v45, 0 : i1; + v47 = select v46, v39, v36 : i32; + br block11(v24, v36, v34, v47, v136, v163, v178, v191); + + block13: + v38 = const.i32 0 : i32; + br block11(v24, v36, v34, v38, v136, v163, v178, v191); + + block14(v80: i32, v89: i32, v95: i32, v105: i32, v123: i32, v134: i32, v161: i32, v176: i32, v189: i32): + v81 = eq v80, 0 : i1; + v82 = cast v81 : i32; + v83 = neq v82, 0 : i1; + condbr v83, block17(v95, v105, v89, v123, v134, v161, v176, v189), block18; + + block15: + v57 = const.i32 2 : i32; + v58 = band v51, v57 : i32; + v59 = neq v58, 0 : i1; + condbr v59, block14(v66, v51, v48, v106, v124, v135, v162, v177, v190), block16; + + block16: + v60 = cast v53 : u32; + v61 = add.checked v60, 4 : u32; + v62 = inttoptr v61 : *mut i32; + v63 = load v62 : i32; + v64 = const.i32 3 : i32; + v65 = band v63, v64 : i32; + v67 = bor v65, v66 : i32; + v68 = cast v53 : u32; + v69 = add.checked v68, 4 : u32; + v70 = inttoptr v69 : *mut i32; + store v70, v67; + v71 = cast v48 : u32; + v72 = add.checked v71, 4 : u32; + v73 = inttoptr v72 : *mut i32; + v74 = load v73 : i32; + v75 = const.i32 -4 : i32; + v76 = band v74, v75 : i32; + v77 = cast v48 : u32; + v78 = inttoptr v77 : *mut i32; + v79 = load v78 : i32; + br block14(v76, v79, v48, v74, v124, v135, v162, v177, v190); + + block17(v103: i32, v104: i32, v112: i32, v122: i32, v133: i32, v160: i32, v175: i32, v188: i32): + v107 = const.i32 3 : i32; + v108 = band v104, v107 : i32; + v109 = cast v103 : u32; + v110 = add.checked v109, 4 : u32; + v111 = inttoptr v110 : *mut i32; + store v111, v108; + v113 = const.i32 3 : i32; + v114 = band v112, v113 : i32; + v115 = cast v103 : u32; + v116 = inttoptr v115 : *mut i32; + store v116, v114; + v117 = const.i32 2 : i32; + v118 = band v112, v117 : i32; + v119 = eq v118, 0 : i1; + v120 = cast v119 : i32; + v121 = neq v120, 0 : i1; + condbr v121, block19(v133, v122, v160, v175, v188), block20; + + block18: + v84 = cast v80 : u32; + v85 = inttoptr v84 : *mut i32; + v86 = load v85 : i32; + v87 = const.i32 3 : i32; + v88 = band v86, v87 : i32; + v90 = const.i32 -4 : i32; + v91 = band v89, v90 : i32; + v92 = bor v88, v91 : i32; + v93 = cast v80 : u32; + v94 = inttoptr v93 : *mut i32; + store v94, v92; + v96 = cast v95 : u32; + v97 = add.checked v96, 4 : u32; + v98 = inttoptr v97 : *mut i32; + v99 = load v98 : i32; + v100 = cast v95 : u32; + v101 = inttoptr v100 : *mut i32; + v102 = load v101 : i32; + br block17(v95, v99, v102, v123, v134, v161, v176, v189); + + block19(v132: i32, v137: i32, v159: i32, v174: i32, v187: i32): + v138 = cast v132 : u32; + v139 = inttoptr v138 : *mut i32; + store v139, v137; + v140 = cast v137 : u32; + v141 = add.checked v140, 8 : u32; + v142 = inttoptr v141 : *mut i32; + v143 = load v142 : i32; + v144 = const.i32 1 : i32; + v145 = band v143, v144 : i32; + v146 = neq v145, 0 : i1; + condbr v146, block9(v137, v143, v132, v159, v174, v187), block21; + + block20: + v125 = cast v122 : u32; + v126 = inttoptr v125 : *mut i32; + v127 = load v126 : i32; + v128 = const.i32 2 : i32; + v129 = bor v127, v128 : i32; + v130 = cast v122 : u32; + v131 = inttoptr v130 : *mut i32; + store v131, v129; + br block19(v133, v122, v160, v175, v188); + + block21: + br block10; + + block22(v296: i32, v297: i32, v302: i32, v303: i32, v304: i32): + v299 = cast v296 : u32; + v300 = inttoptr v299 : *mut i32; + store v300, v297; + v301 = neq v297, 0 : i1; + condbr v301, block4(v297, v296, v302, v303, v304), block33; + + block23: + v169 = const.i32 72 : i32; + v170 = add.wrapping v155, v169 : i32; + v171 = sub.wrapping v153, v157 : i32; + v179 = band v171, v172 : i32; + v180 = cast v170 : u32; + v181 = cast v179 : u32; + v182 = lte v180, v181 : i1; + v183 = cast v182 : i32; + v184 = neq v183, 0 : i1; + condbr v184, block25, block26; + + block24(v288: i32, v289: i32): + v290 = const.i32 1 : i32; + v291 = bor v289, v290 : i32; + v292 = cast v288 : u32; + v293 = inttoptr v292 : *mut i32; + store v293, v291; + v294 = const.i32 8 : i32; + v295 = add.wrapping v288, v294 : i32; + ret v295; + + block25: + v206 = const.i32 0 : i32; + v207 = const.i32 0 : i32; + v208 = cast v179 : u32; + v209 = inttoptr v208 : *mut i32; + store v209, v207; + v210 = const.i32 -8 : i32; + v211 = add.wrapping v179, v210 : i32; + v212 = const.i64 0 : i64; + v213 = cast v211 : u32; + v214 = inttoptr v213 : *mut i64; + store v214, v212; + v215 = cast v148 : u32; + v216 = inttoptr v215 : *mut i32; + v217 = load v216 : i32; + v218 = const.i32 -4 : i32; + v219 = band v217, v218 : i32; + v220 = cast v211 : u32; + v221 = inttoptr v220 : *mut i32; + store v221, v219; + v222 = cast v148 : u32; + v223 = inttoptr v222 : *mut i32; + v224 = load v223 : i32; + v225 = const.i32 -4 : i32; + v226 = band v224, v225 : i32; + v227 = eq v226, 0 : i1; + v228 = cast v227 : i32; + v229 = neq v228, 0 : i1; + condbr v229, block28(v211, v206, v148), block29; + + block26: + v192 = band v185, v155 : i32; + v193 = neq v192, 0 : i1; + condbr v193, block22(v194, v298, v157, v172, v185), block27; + + block27: + v195 = cast v148 : u32; + v196 = add.checked v195, 8 : u32; + v197 = inttoptr v196 : *mut i32; + v198 = load v197 : i32; + v199 = const.i32 -4 : i32; + v200 = band v198, v199 : i32; + v201 = cast v194 : u32; + v202 = inttoptr v201 : *mut i32; + store v202, v200; + v203 = cast v148 : u32; + v204 = inttoptr v203 : *mut i32; + v205 = load v204 : i32; + br block24(v148, v205); + + block28(v249: i32, v250: i32, v251: i32): + v252 = bor v250, v251 : i32; + v253 = cast v249 : u32; + v254 = add.checked v253, 4 : u32; + v255 = inttoptr v254 : *mut i32; + store v255, v252; + v256 = cast v251 : u32; + v257 = add.checked v256, 8 : u32; + v258 = inttoptr v257 : *mut i32; + v259 = load v258 : i32; + v260 = const.i32 -2 : i32; + v261 = band v259, v260 : i32; + v262 = cast v251 : u32; + v263 = add.checked v262, 8 : u32; + v264 = inttoptr v263 : *mut i32; + store v264, v261; + v265 = cast v251 : u32; + v266 = inttoptr v265 : *mut i32; + v267 = load v266 : i32; + v268 = const.i32 3 : i32; + v269 = band v267, v268 : i32; + v270 = bor v269, v249 : i32; + v271 = cast v251 : u32; + v272 = inttoptr v271 : *mut i32; + store v272, v270; + v273 = const.i32 2 : i32; + v274 = band v267, v273 : i32; + v275 = neq v274, 0 : i1; + condbr v275, block31, block32; + + block29: + v230 = const.i32 2 : i32; + v231 = band v224, v230 : i32; + v232 = neq v231, 0 : i1; + condbr v232, block28(v211, v206, v148), block30; + + block30: + v233 = cast v226 : u32; + v234 = add.checked v233, 4 : u32; + v235 = inttoptr v234 : *mut i32; + v236 = load v235 : i32; + v237 = const.i32 3 : i32; + v238 = band v236, v237 : i32; + v239 = bor v238, v211 : i32; + v240 = cast v226 : u32; + v241 = add.checked v240, 4 : u32; + v242 = inttoptr v241 : *mut i32; + store v242, v239; + v243 = cast v211 : u32; + v244 = add.checked v243, 4 : u32; + v245 = inttoptr v244 : *mut i32; + v246 = load v245 : i32; + v247 = const.i32 3 : i32; + v248 = band v246, v247 : i32; + br block28(v211, v248, v148); + + block31: + v279 = const.i32 -3 : i32; + v280 = band v270, v279 : i32; + v281 = cast v251 : u32; + v282 = inttoptr v281 : *mut i32; + store v282, v280; + v283 = cast v249 : u32; + v284 = inttoptr v283 : *mut i32; + v285 = load v284 : i32; + v286 = const.i32 2 : i32; + v287 = bor v285, v286 : i32; + br block24(v249, v287); + + block32: + v276 = cast v249 : u32; + v277 = inttoptr v276 : *mut i32; + v278 = load v277 : i32; + br block24(v249, v278); + + block33: + br block5; + } + + pub fn ::alloc(i32, i32, i32) -> i32 { + block0(v0: i32, v1: i32, v2: i32): + v4 = const.i32 0 : i32; + v5 = global.load (@__stack_pointer) as *mut i8 : i32; + v6 = const.i32 16 : i32; + v7 = sub.wrapping v5, v6 : i32; + v8 = global.symbol @__stack_pointer : *mut i32; + store v8, v7; + v9 = neq v2, 0 : i1; + condbr v9, block3, block4; + + block1(v3: i32): + ret v3; + + block2(v87: i32, v91: i32): + v88 = const.i32 16 : i32; + v89 = add.wrapping v87, v88 : i32; + v90 = global.symbol @__stack_pointer : *mut i32; + store v90, v89; + br block1(v91); + + block3: + v10 = cast v0 : u32; + v11 = inttoptr v10 : *mut i32; + v12 = load v11 : i32; + v13 = cast v7 : u32; + v14 = add.checked v13, 12 : u32; + v15 = inttoptr v14 : *mut i32; + store v15, v12; + v16 = const.i32 3 : i32; + v17 = add.wrapping v2, v16 : i32; + v18 = const.i32 2 : i32; + v19 = cast v17 : u32; + v20 = cast v18 : u32; + v21 = shr.wrapping v19, v20 : u32; + v22 = cast v21 : i32; + v23 = const.i32 12 : i32; + v24 = add.wrapping v7, v23 : i32; + v25 = call module0::wee_alloc::alloc_first_fit(v22, v1, v24) : i32; + v26 = neq v25, 0 : i1; + condbr v26, block5(v0, v7, v25), block6; + + block4: + br block2(v7, v1); + + block5(v79: i32, v80: i32, v92: i32): + v81 = cast v80 : u32; + v82 = add.checked v81, 12 : u32; + v83 = inttoptr v82 : *mut i32; + v84 = load v83 : i32; + v85 = cast v79 : u32; + v86 = inttoptr v85 : *mut i32; + store v86, v84; + br block2(v80, v92); + + block6: + v27 = const.i32 -4 : i32; + v28 = band v17, v27 : i32; + v29 = const.i32 3 : i32; + v30 = shl.wrapping v1, v29 : i32; + v31 = const.i32 512 : i32; + v32 = add.wrapping v30, v31 : i32; + v33 = cast v28 : u32; + v34 = cast v32 : u32; + v35 = gt v33, v34 : i1; + v36 = cast v35 : i32; + v37 = neq v36, 0 : i1; + v38 = select v37, v28, v32 : i32; + v39 = const.i32 65543 : i32; + v40 = add.wrapping v38, v39 : i32; + v41 = const.i32 16 : i32; + v42 = cast v40 : u32; + v43 = cast v41 : u32; + v44 = shr.wrapping v42, v43 : u32; + v45 = cast v44 : i32; + v46 = cast v45 : u32; + v47 = memory.grow v46 : i32; + v48 = const.i32 -1 : i32; + v49 = neq v47, v48 : i1; + v50 = cast v49 : i32; + v51 = neq v50, 0 : i1; + condbr v51, block7, block8; + + block7: + v53 = const.i32 16 : i32; + v54 = shl.wrapping v47, v53 : i32; + v55 = const.i32 0 : i32; + v56 = cast v54 : u32; + v57 = add.checked v56, 4 : u32; + v58 = inttoptr v57 : *mut i32; + store v58, v55; + v59 = cast v7 : u32; + v60 = add.checked v59, 12 : u32; + v61 = inttoptr v60 : *mut i32; + v62 = load v61 : i32; + v63 = cast v54 : u32; + v64 = add.checked v63, 8 : u32; + v65 = inttoptr v64 : *mut i32; + store v65, v62; + v66 = const.i32 -65536 : i32; + v67 = band v40, v66 : i32; + v68 = add.wrapping v54, v67 : i32; + v69 = const.i32 2 : i32; + v70 = bor v68, v69 : i32; + v71 = cast v54 : u32; + v72 = inttoptr v71 : *mut i32; + store v72, v70; + v73 = cast v7 : u32; + v74 = add.checked v73, 12 : u32; + v75 = inttoptr v74 : *mut i32; + store v75, v54; + v76 = const.i32 12 : i32; + v77 = add.wrapping v7, v76 : i32; + v78 = call module0::wee_alloc::alloc_first_fit(v22, v1, v77) : i32; + br block5(v0, v7, v78); + + block8: + v52 = const.i32 0 : i32; + br block5(v0, v7, v52); + } + + pub fn ::dealloc(i32, i32, i32, i32) { + block0(v0: i32, v1: i32, v2: i32, v3: i32): + v4 = const.i32 0 : i32; + v5 = eq v1, 0 : i1; + v6 = cast v5 : i32; + v7 = neq v6, 0 : i1; + condbr v7, block2, block3; + + block1: + ret; + + block2: + br block1; + + block3: + v8 = eq v3, 0 : i1; + v9 = cast v8 : i32; + v10 = neq v9, 0 : i1; + condbr v10, block2, block4; + + block4: + v11 = cast v0 : u32; + v12 = inttoptr v11 : *mut i32; + v13 = load v12 : i32; + v14 = const.i32 0 : i32; + v15 = cast v1 : u32; + v16 = inttoptr v15 : *mut i32; + store v16, v14; + v17 = const.i32 -8 : i32; + v18 = add.wrapping v1, v17 : i32; + v19 = cast v18 : u32; + v20 = inttoptr v19 : *mut i32; + v21 = load v20 : i32; + v22 = const.i32 -2 : i32; + v23 = band v21, v22 : i32; + v24 = cast v18 : u32; + v25 = inttoptr v24 : *mut i32; + store v25, v23; + v26 = const.i32 4 : i32; + v27 = add.wrapping v18, v26 : i32; + v28 = cast v27 : u32; + v29 = inttoptr v28 : *mut i32; + v30 = load v29 : i32; + v31 = const.i32 -4 : i32; + v32 = band v30, v31 : i32; + v33 = eq v32, 0 : i1; + v34 = cast v33 : i32; + v35 = neq v34, 0 : i1; + condbr v35, block8(v21, v1, v18, v13, v0), block9; + + block5(v155: i32, v161: i32): + v163 = cast v155 : u32; + v164 = inttoptr v163 : *mut i32; + store v164, v161; + br block2; + + block6(v151: i32, v152: i32, v160: i32, v162: i32): + v153 = cast v151 : u32; + v154 = inttoptr v153 : *mut i32; + store v154, v152; + br block5(v160, v162); + + block7(v147: i32, v156: i32): + br block5(v156, v147); + + block8(v116: i32, v132: i32, v141: i32, v150: i32, v159: i32): + v117 = const.i32 -4 : i32; + v118 = band v116, v117 : i32; + v119 = eq v118, 0 : i1; + v120 = cast v119 : i32; + v121 = neq v120, 0 : i1; + condbr v121, block6(v132, v150, v159, v141), block18; + + block9: + v36 = cast v32 : u32; + v37 = inttoptr v36 : *mut i32; + v38 = load v37 : i32; + v39 = const.i32 1 : i32; + v40 = band v38, v39 : i32; + v41 = neq v40, 0 : i1; + condbr v41, block8(v21, v1, v18, v13, v0), block10; + + block10: + v42 = const.i32 -4 : i32; + v43 = band v21, v42 : i32; + v44 = neq v43, 0 : i1; + condbr v44, block13, block14; + + block11(v90: i32, v91: i32, v96: i32, v97: i32, v107: i32, v148: i32, v157: i32): + v92 = const.i32 3 : i32; + v93 = band v91, v92 : i32; + v94 = cast v90 : u32; + v95 = inttoptr v94 : *mut i32; + store v95, v93; + v98 = const.i32 3 : i32; + v99 = band v97, v98 : i32; + v100 = cast v96 : u32; + v101 = inttoptr v100 : *mut i32; + store v101, v99; + v102 = const.i32 2 : i32; + v103 = band v97, v102 : i32; + v104 = eq v103, 0 : i1; + v105 = cast v104 : i32; + v106 = neq v105, 0 : i1; + condbr v106, block7(v148, v157), block17; + + block12(v72: i32, v73: i32, v76: i32, v82: i32, v86: i32, v108: i32, v149: i32, v158: i32): + v74 = const.i32 -4 : i32; + v75 = band v73, v74 : i32; + v77 = const.i32 3 : i32; + v78 = band v76, v77 : i32; + v79 = bor v75, v78 : i32; + v80 = cast v72 : u32; + v81 = inttoptr v80 : *mut i32; + store v81, v79; + v83 = cast v82 : u32; + v84 = inttoptr v83 : *mut i32; + v85 = load v84 : i32; + v87 = cast v86 : u32; + v88 = inttoptr v87 : *mut i32; + v89 = load v88 : i32; + br block11(v82, v85, v86, v89, v108, v149, v158); + + block13: + v45 = const.i32 2 : i32; + v46 = band v21, v45 : i32; + v47 = neq v46, 0 : i1; + condbr v47, block12(v32, v23, v38, v27, v18, v32, v13, v0), block15; + + block14: + br block12(v32, v23, v38, v27, v18, v32, v13, v0); + + block15: + v48 = cast v43 : u32; + v49 = add.checked v48, 4 : u32; + v50 = inttoptr v49 : *mut i32; + v51 = load v50 : i32; + v52 = const.i32 3 : i32; + v53 = band v51, v52 : i32; + v54 = bor v53, v32 : i32; + v55 = cast v43 : u32; + v56 = add.checked v55, 4 : u32; + v57 = inttoptr v56 : *mut i32; + store v57, v54; + v58 = cast v18 : u32; + v59 = inttoptr v58 : *mut i32; + v60 = load v59 : i32; + v61 = cast v27 : u32; + v62 = inttoptr v61 : *mut i32; + v63 = load v62 : i32; + v64 = const.i32 -4 : i32; + v65 = band v63, v64 : i32; + v66 = eq v65, 0 : i1; + v67 = cast v66 : i32; + v68 = neq v67, 0 : i1; + condbr v68, block11(v27, v63, v18, v60, v32, v13, v0), block16; + + block16: + v69 = cast v65 : u32; + v70 = inttoptr v69 : *mut i32; + v71 = load v70 : i32; + br block12(v65, v60, v71, v27, v18, v32, v13, v0); + + block17: + v109 = cast v107 : u32; + v110 = inttoptr v109 : *mut i32; + v111 = load v110 : i32; + v112 = const.i32 2 : i32; + v113 = bor v111, v112 : i32; + v114 = cast v107 : u32; + v115 = inttoptr v114 : *mut i32; + store v115, v113; + br block7(v148, v157); + + block18: + v122 = const.i32 2 : i32; + v123 = band v116, v122 : i32; + v124 = neq v123, 0 : i1; + condbr v124, block6(v132, v150, v159, v141), block19; + + block19: + v125 = cast v118 : u32; + v126 = inttoptr v125 : *mut u8; + v127 = load v126 : u8; + v128 = zext v127 : i32; + v129 = const.i32 1 : i32; + v130 = band v128, v129 : i32; + v131 = neq v130, 0 : i1; + condbr v131, block6(v132, v150, v159, v141), block20; + + block20: + v133 = cast v118 : u32; + v134 = add.checked v133, 8 : u32; + v135 = inttoptr v134 : *mut i32; + v136 = load v135 : i32; + v137 = const.i32 -4 : i32; + v138 = band v136, v137 : i32; + v139 = cast v132 : u32; + v140 = inttoptr v139 : *mut i32; + store v140, v138; + v142 = const.i32 1 : i32; + v143 = bor v141, v142 : i32; + v144 = cast v118 : u32; + v145 = add.checked v144, 8 : u32; + v146 = inttoptr v145 : *mut i32; + store v146, v143; + br block7(v150, v159); + } + + pub fn wit_bindgen::rt::run_ctors_once() { + block0: + v0 = const.i32 0 : i32; + v1 = cast v0 : u32; + v2 = add.checked v1, 1048581 : u32; + v3 = inttoptr v2 : *mut u8; + v4 = load v3 : u8; + v5 = zext v4 : i32; + v6 = neq v5, 0 : i1; + condbr v6, block2, block3; + + block1: + ret; + + block2: + br block1; + + block3: + call module0::__wasm_call_ctors(); + v7 = const.i32 0 : i32; + v8 = const.i32 1 : i32; + v9 = trunc v8 : u8; + v10 = cast v7 : u32; + v11 = add.checked v10, 1048581 : u32; + v12 = inttoptr v11 : *mut u8; + store v12, v9; + br block2; + } + + pub fn cabi_realloc(i32, i32, i32, i32) -> i32 { + block0(v0: i32, v1: i32, v2: i32, v3: i32): + v5 = neq v1, 0 : i1; + condbr v5, block4, block5; + + block1(v4: i32): + ret v4; + + block2(v19: i32): + br block1(v19); + + block3(v17: i32): + v18 = neq v17, 0 : i1; + condbr v18, block2(v17), block7; + + block4: + v16 = call module0::__rust_realloc(v0, v1, v2, v3) : i32; + br block3(v16); + + block5: + v6 = eq v3, 0 : i1; + v7 = cast v6 : i32; + v8 = neq v7, 0 : i1; + condbr v8, block2(v2), block6; + + block6: + v9 = const.i32 0 : i32; + v10 = cast v9 : u32; + v11 = add.checked v10, 1048580 : u32; + v12 = inttoptr v11 : *mut u8; + v13 = load v12 : u8; + v14 = zext v13 : i32; + v15 = call module0::__rust_alloc(v3, v2) : i32; + br block3(v15); + + block7: + unreachable ; + } +} + diff --git a/tests/integration/expected/components/inc_wasm_component.wat b/tests/integration/expected/components/inc_wasm_component.wat index 8a6d76a60..c73ae8aba 100644 --- a/tests/integration/expected/components/inc_wasm_component.wat +++ b/tests/integration/expected/components/inc_wasm_component.wat @@ -5,7 +5,7 @@ (export (;0;) "add" (func (type 0))) ) ) - (import "miden:add/add@1.0.0" (instance (;0;) (type 0))) + (import "miden:add-package/add-interface@1.0.0" (instance (;0;) (type 0))) (core module (;0;) (type (;0;) (func (param i32 i32) (result i32))) (type (;1;) (func)) @@ -13,13 +13,13 @@ (type (;3;) (func (param i32 i32 i32 i32) (result i32))) (type (;4;) (func (param i32 i32 i32) (result i32))) (type (;5;) (func (param i32 i32 i32 i32))) - (import "miden:add/add@1.0.0" "add" (func $inc_wasm_component::bindings::miden::add::add::add::wit_import (;0;) (type 0))) + (import "miden:add-package/add-interface@1.0.0" "add" (func $inc_wasm_component::bindings::miden::add_package::add_interface::add::wit_import (;0;) (type 0))) (func $__wasm_call_ctors (;1;) (type 1)) (func $inc (;2;) (type 2) (param i32) (result i32) call $wit_bindgen::rt::run_ctors_once local.get 0 i32.const 1 - call $inc_wasm_component::bindings::miden::add::add::add::wit_import + call $inc_wasm_component::bindings::miden::add_package::add_interface::add::wit_import ) (func $__rust_alloc (;3;) (type 0) (param i32 i32) (result i32) i32.const 1048576 @@ -681,7 +681,7 @@ (export "add" (func 0)) ) (core instance (;1;) (instantiate 0 - (with "miden:add/add@1.0.0" (instance 0)) + (with "miden:add-package/add-interface@1.0.0" (instance 0)) ) ) (alias core export 1 "memory" (core memory (;0;))) diff --git a/tests/integration/expected/eq_i16.hir b/tests/integration/expected/eq_i16.hir index a4feb9b29..dac6470b8 100644 --- a/tests/integration/expected/eq_i16.hir +++ b/tests/integration/expected/eq_i16.hir @@ -1,14 +1,15 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = eq v0, v1 : i1; - v4 = cast v3 : i32; - ret v4; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = eq v0, v1 : i1; + v4 = cast v3 : i32; + ret v4; + } } diff --git a/tests/integration/expected/eq_i32.hir b/tests/integration/expected/eq_i32.hir index a4feb9b29..dac6470b8 100644 --- a/tests/integration/expected/eq_i32.hir +++ b/tests/integration/expected/eq_i32.hir @@ -1,14 +1,15 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = eq v0, v1 : i1; - v4 = cast v3 : i32; - ret v4; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = eq v0, v1 : i1; + v4 = cast v3 : i32; + ret v4; + } } diff --git a/tests/integration/expected/eq_i64.hir b/tests/integration/expected/eq_i64.hir index f45d72a9e..8ffeb57c4 100644 --- a/tests/integration/expected/eq_i64.hir +++ b/tests/integration/expected/eq_i64.hir @@ -1,14 +1,15 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i64, i64) -> i32 { -block0(v0: i64, v1: i64): - v3 = eq v0, v1 : i1; - v4 = cast v3 : i32; - ret v4; + pub fn entrypoint(i64, i64) -> i32 { + block0(v0: i64, v1: i64): + v3 = eq v0, v1 : i1; + v4 = cast v3 : i32; + ret v4; + } } diff --git a/tests/integration/expected/eq_i8.hir b/tests/integration/expected/eq_i8.hir index a4feb9b29..dac6470b8 100644 --- a/tests/integration/expected/eq_i8.hir +++ b/tests/integration/expected/eq_i8.hir @@ -1,14 +1,15 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = eq v0, v1 : i1; - v4 = cast v3 : i32; - ret v4; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = eq v0, v1 : i1; + v4 = cast v3 : i32; + ret v4; + } } diff --git a/tests/integration/expected/eq_u16.hir b/tests/integration/expected/eq_u16.hir index a4feb9b29..dac6470b8 100644 --- a/tests/integration/expected/eq_u16.hir +++ b/tests/integration/expected/eq_u16.hir @@ -1,14 +1,15 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = eq v0, v1 : i1; - v4 = cast v3 : i32; - ret v4; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = eq v0, v1 : i1; + v4 = cast v3 : i32; + ret v4; + } } diff --git a/tests/integration/expected/eq_u32.hir b/tests/integration/expected/eq_u32.hir index a4feb9b29..dac6470b8 100644 --- a/tests/integration/expected/eq_u32.hir +++ b/tests/integration/expected/eq_u32.hir @@ -1,14 +1,15 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = eq v0, v1 : i1; - v4 = cast v3 : i32; - ret v4; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = eq v0, v1 : i1; + v4 = cast v3 : i32; + ret v4; + } } diff --git a/tests/integration/expected/eq_u64.hir b/tests/integration/expected/eq_u64.hir index f45d72a9e..8ffeb57c4 100644 --- a/tests/integration/expected/eq_u64.hir +++ b/tests/integration/expected/eq_u64.hir @@ -1,14 +1,15 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i64, i64) -> i32 { -block0(v0: i64, v1: i64): - v3 = eq v0, v1 : i1; - v4 = cast v3 : i32; - ret v4; + pub fn entrypoint(i64, i64) -> i32 { + block0(v0: i64, v1: i64): + v3 = eq v0, v1 : i1; + v4 = cast v3 : i32; + ret v4; + } } diff --git a/tests/integration/expected/eq_u8.hir b/tests/integration/expected/eq_u8.hir index a4feb9b29..dac6470b8 100644 --- a/tests/integration/expected/eq_u8.hir +++ b/tests/integration/expected/eq_u8.hir @@ -1,14 +1,15 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = eq v0, v1 : i1; - v4 = cast v3 : i32; - ret v4; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = eq v0, v1 : i1; + v4 = cast v3 : i32; + ret v4; + } } diff --git a/tests/integration/expected/fib.hir b/tests/integration/expected/fib.hir index 5d2d588c0..e80b85248 100644 --- a/tests/integration/expected/fib.hir +++ b/tests/integration/expected/fib.hir @@ -1,32 +1,33 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn fib(i32) -> i32 { -block0(v0: i32): - v2 = const.i32 0 : i32; - v3 = const.i32 0 : i32; - v4 = const.i32 1 : i32; - br block2(v4, v0, v3); + pub fn fib(i32) -> i32 { + block0(v0: i32): + v2 = const.i32 0 : i32; + v3 = const.i32 0 : i32; + v4 = const.i32 1 : i32; + br block2(v4, v0, v3); -block1(v1: i32): + block1(v1: i32): -block2(v6: i32, v7: i32, v9: i32): - v8 = neq v7, 0 : i1; - condbr v8, block4, block5; + block2(v6: i32, v7: i32, v9: i32): + v8 = neq v7, 0 : i1; + condbr v8, block4, block5; -block3(v5: i32): + block3(v5: i32): -block4: - v10 = const.i32 -1 : i32; - v11 = add.wrapping v7, v10 : i32; - v12 = add.wrapping v9, v6 : i32; - br block2(v12, v11, v6); + block4: + v10 = const.i32 -1 : i32; + v11 = add.wrapping v7, v10 : i32; + v12 = add.wrapping v9, v6 : i32; + br block2(v12, v11, v6); -block5: - ret v9; + block5: + ret v9; + } } diff --git a/tests/integration/expected/fib.wat b/tests/integration/expected/fib.wat index 11827bcfb..28ddc5769 100644 --- a/tests/integration/expected/fib.wat +++ b/tests/integration/expected/fib.wat @@ -28,7 +28,6 @@ br 0 (;@1;) end ) - (table (;0;) 1 1 funcref) (memory (;0;) 16) (global $__stack_pointer (;0;) (mut i32) i32.const 1048576) (global (;1;) i32 i32.const 1048576) diff --git a/tests/integration/expected/ge_u16.hir b/tests/integration/expected/ge_u16.hir index 410a5624c..21061dca7 100644 --- a/tests/integration/expected/ge_u16.hir +++ b/tests/integration/expected/ge_u16.hir @@ -1,16 +1,17 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = cast v0 : u32; - v4 = cast v1 : u32; - v5 = gte v3, v4 : i1; - v6 = cast v5 : i32; - ret v6; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = cast v0 : u32; + v4 = cast v1 : u32; + v5 = gte v3, v4 : i1; + v6 = cast v5 : i32; + ret v6; + } } diff --git a/tests/integration/expected/ge_u32.hir b/tests/integration/expected/ge_u32.hir index 410a5624c..21061dca7 100644 --- a/tests/integration/expected/ge_u32.hir +++ b/tests/integration/expected/ge_u32.hir @@ -1,16 +1,17 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = cast v0 : u32; - v4 = cast v1 : u32; - v5 = gte v3, v4 : i1; - v6 = cast v5 : i32; - ret v6; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = cast v0 : u32; + v4 = cast v1 : u32; + v5 = gte v3, v4 : i1; + v6 = cast v5 : i32; + ret v6; + } } diff --git a/tests/integration/expected/ge_u8.hir b/tests/integration/expected/ge_u8.hir index 410a5624c..21061dca7 100644 --- a/tests/integration/expected/ge_u8.hir +++ b/tests/integration/expected/ge_u8.hir @@ -1,16 +1,17 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = cast v0 : u32; - v4 = cast v1 : u32; - v5 = gte v3, v4 : i1; - v6 = cast v5 : i32; - ret v6; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = cast v0 : u32; + v4 = cast v1 : u32; + v5 = gte v3, v4 : i1; + v6 = cast v5 : i32; + ret v6; + } } diff --git a/tests/integration/expected/gt_u16.hir b/tests/integration/expected/gt_u16.hir index 0da10188c..a6b70eb2a 100644 --- a/tests/integration/expected/gt_u16.hir +++ b/tests/integration/expected/gt_u16.hir @@ -1,16 +1,17 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = cast v0 : u32; - v4 = cast v1 : u32; - v5 = gt v3, v4 : i1; - v6 = cast v5 : i32; - ret v6; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = cast v0 : u32; + v4 = cast v1 : u32; + v5 = gt v3, v4 : i1; + v6 = cast v5 : i32; + ret v6; + } } diff --git a/tests/integration/expected/gt_u32.hir b/tests/integration/expected/gt_u32.hir index 0da10188c..a6b70eb2a 100644 --- a/tests/integration/expected/gt_u32.hir +++ b/tests/integration/expected/gt_u32.hir @@ -1,16 +1,17 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = cast v0 : u32; - v4 = cast v1 : u32; - v5 = gt v3, v4 : i1; - v6 = cast v5 : i32; - ret v6; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = cast v0 : u32; + v4 = cast v1 : u32; + v5 = gt v3, v4 : i1; + v6 = cast v5 : i32; + ret v6; + } } diff --git a/tests/integration/expected/gt_u8.hir b/tests/integration/expected/gt_u8.hir index 0da10188c..a6b70eb2a 100644 --- a/tests/integration/expected/gt_u8.hir +++ b/tests/integration/expected/gt_u8.hir @@ -1,16 +1,17 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = cast v0 : u32; - v4 = cast v1 : u32; - v5 = gt v3, v4 : i1; - v6 = cast v5 : i32; - ret v6; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = cast v0 : u32; + v4 = cast v1 : u32; + v5 = gt v3, v4 : i1; + v6 = cast v5 : i32; + ret v6; + } } diff --git a/tests/integration/expected/le_u16.hir b/tests/integration/expected/le_u16.hir index a2572b375..8f3a12a60 100644 --- a/tests/integration/expected/le_u16.hir +++ b/tests/integration/expected/le_u16.hir @@ -1,16 +1,17 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = cast v0 : u32; - v4 = cast v1 : u32; - v5 = lte v3, v4 : i1; - v6 = cast v5 : i32; - ret v6; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = cast v0 : u32; + v4 = cast v1 : u32; + v5 = lte v3, v4 : i1; + v6 = cast v5 : i32; + ret v6; + } } diff --git a/tests/integration/expected/le_u32.hir b/tests/integration/expected/le_u32.hir index a2572b375..8f3a12a60 100644 --- a/tests/integration/expected/le_u32.hir +++ b/tests/integration/expected/le_u32.hir @@ -1,16 +1,17 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = cast v0 : u32; - v4 = cast v1 : u32; - v5 = lte v3, v4 : i1; - v6 = cast v5 : i32; - ret v6; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = cast v0 : u32; + v4 = cast v1 : u32; + v5 = lte v3, v4 : i1; + v6 = cast v5 : i32; + ret v6; + } } diff --git a/tests/integration/expected/le_u8.hir b/tests/integration/expected/le_u8.hir index a2572b375..8f3a12a60 100644 --- a/tests/integration/expected/le_u8.hir +++ b/tests/integration/expected/le_u8.hir @@ -1,16 +1,17 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = cast v0 : u32; - v4 = cast v1 : u32; - v5 = lte v3, v4 : i1; - v6 = cast v5 : i32; - ret v6; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = cast v0 : u32; + v4 = cast v1 : u32; + v5 = lte v3, v4 : i1; + v6 = cast v5 : i32; + ret v6; + } } diff --git a/tests/integration/expected/lt_u16.hir b/tests/integration/expected/lt_u16.hir index 7759d7a78..a1d5b2e0e 100644 --- a/tests/integration/expected/lt_u16.hir +++ b/tests/integration/expected/lt_u16.hir @@ -1,16 +1,17 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = cast v0 : u32; - v4 = cast v1 : u32; - v5 = lt v3, v4 : i1; - v6 = cast v5 : i32; - ret v6; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = cast v0 : u32; + v4 = cast v1 : u32; + v5 = lt v3, v4 : i1; + v6 = cast v5 : i32; + ret v6; + } } diff --git a/tests/integration/expected/lt_u32.hir b/tests/integration/expected/lt_u32.hir index 7759d7a78..a1d5b2e0e 100644 --- a/tests/integration/expected/lt_u32.hir +++ b/tests/integration/expected/lt_u32.hir @@ -1,16 +1,17 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = cast v0 : u32; - v4 = cast v1 : u32; - v5 = lt v3, v4 : i1; - v6 = cast v5 : i32; - ret v6; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = cast v0 : u32; + v4 = cast v1 : u32; + v5 = lt v3, v4 : i1; + v6 = cast v5 : i32; + ret v6; + } } diff --git a/tests/integration/expected/lt_u8.hir b/tests/integration/expected/lt_u8.hir index 7759d7a78..a1d5b2e0e 100644 --- a/tests/integration/expected/lt_u8.hir +++ b/tests/integration/expected/lt_u8.hir @@ -1,16 +1,17 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = cast v0 : u32; - v4 = cast v1 : u32; - v5 = lt v3, v4 : i1; - v6 = cast v5 : i32; - ret v6; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = cast v0 : u32; + v4 = cast v1 : u32; + v5 = lt v3, v4 : i1; + v6 = cast v5 : i32; + ret v6; + } } diff --git a/tests/integration/expected/neg_i16.hir b/tests/integration/expected/neg_i16.hir index d5701cc7e..e40bf436d 100644 --- a/tests/integration/expected/neg_i16.hir +++ b/tests/integration/expected/neg_i16.hir @@ -1,14 +1,15 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32) -> i32 { -block0(v0: i32): - v2 = const.i32 0 : i32; - v3 = sub.wrapping v2, v0 : i32; - ret v3; + pub fn entrypoint(i32) -> i32 { + block0(v0: i32): + v2 = const.i32 0 : i32; + v3 = sub.wrapping v2, v0 : i32; + ret v3; + } } diff --git a/tests/integration/expected/neg_i32.hir b/tests/integration/expected/neg_i32.hir index d5701cc7e..e40bf436d 100644 --- a/tests/integration/expected/neg_i32.hir +++ b/tests/integration/expected/neg_i32.hir @@ -1,14 +1,15 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32) -> i32 { -block0(v0: i32): - v2 = const.i32 0 : i32; - v3 = sub.wrapping v2, v0 : i32; - ret v3; + pub fn entrypoint(i32) -> i32 { + block0(v0: i32): + v2 = const.i32 0 : i32; + v3 = sub.wrapping v2, v0 : i32; + ret v3; + } } diff --git a/tests/integration/expected/neg_i8.hir b/tests/integration/expected/neg_i8.hir index d5701cc7e..e40bf436d 100644 --- a/tests/integration/expected/neg_i8.hir +++ b/tests/integration/expected/neg_i8.hir @@ -1,14 +1,15 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32) -> i32 { -block0(v0: i32): - v2 = const.i32 0 : i32; - v3 = sub.wrapping v2, v0 : i32; - ret v3; + pub fn entrypoint(i32) -> i32 { + block0(v0: i32): + v2 = const.i32 0 : i32; + v3 = sub.wrapping v2, v0 : i32; + ret v3; + } } diff --git a/tests/integration/expected/not_bool.hir b/tests/integration/expected/not_bool.hir index 2ac9fc746..036ebb3ae 100644 --- a/tests/integration/expected/not_bool.hir +++ b/tests/integration/expected/not_bool.hir @@ -1,14 +1,15 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32) -> i32 { -block0(v0: i32): - v2 = const.i32 1 : i32; - v3 = bxor v0, v2 : i32; - ret v3; + pub fn entrypoint(i32) -> i32 { + block0(v0: i32): + v2 = const.i32 1 : i32; + v3 = bxor v0, v2 : i32; + ret v3; + } } diff --git a/tests/integration/expected/not_i16.hir b/tests/integration/expected/not_i16.hir index 986470bfe..690e41cf5 100644 --- a/tests/integration/expected/not_i16.hir +++ b/tests/integration/expected/not_i16.hir @@ -1,14 +1,15 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32) -> i32 { -block0(v0: i32): - v2 = const.i32 -1 : i32; - v3 = bxor v0, v2 : i32; - ret v3; + pub fn entrypoint(i32) -> i32 { + block0(v0: i32): + v2 = const.i32 -1 : i32; + v3 = bxor v0, v2 : i32; + ret v3; + } } diff --git a/tests/integration/expected/not_i32.hir b/tests/integration/expected/not_i32.hir index 986470bfe..690e41cf5 100644 --- a/tests/integration/expected/not_i32.hir +++ b/tests/integration/expected/not_i32.hir @@ -1,14 +1,15 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32) -> i32 { -block0(v0: i32): - v2 = const.i32 -1 : i32; - v3 = bxor v0, v2 : i32; - ret v3; + pub fn entrypoint(i32) -> i32 { + block0(v0: i32): + v2 = const.i32 -1 : i32; + v3 = bxor v0, v2 : i32; + ret v3; + } } diff --git a/tests/integration/expected/not_i8.hir b/tests/integration/expected/not_i8.hir index 986470bfe..690e41cf5 100644 --- a/tests/integration/expected/not_i8.hir +++ b/tests/integration/expected/not_i8.hir @@ -1,14 +1,15 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32) -> i32 { -block0(v0: i32): - v2 = const.i32 -1 : i32; - v3 = bxor v0, v2 : i32; - ret v3; + pub fn entrypoint(i32) -> i32 { + block0(v0: i32): + v2 = const.i32 -1 : i32; + v3 = bxor v0, v2 : i32; + ret v3; + } } diff --git a/tests/integration/expected/not_u16.hir b/tests/integration/expected/not_u16.hir index 448366f74..92d2b810f 100644 --- a/tests/integration/expected/not_u16.hir +++ b/tests/integration/expected/not_u16.hir @@ -1,14 +1,15 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32) -> i32 { -block0(v0: i32): - v2 = const.i32 65535 : i32; - v3 = bxor v0, v2 : i32; - ret v3; + pub fn entrypoint(i32) -> i32 { + block0(v0: i32): + v2 = const.i32 65535 : i32; + v3 = bxor v0, v2 : i32; + ret v3; + } } diff --git a/tests/integration/expected/not_u32.hir b/tests/integration/expected/not_u32.hir index 986470bfe..690e41cf5 100644 --- a/tests/integration/expected/not_u32.hir +++ b/tests/integration/expected/not_u32.hir @@ -1,14 +1,15 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32) -> i32 { -block0(v0: i32): - v2 = const.i32 -1 : i32; - v3 = bxor v0, v2 : i32; - ret v3; + pub fn entrypoint(i32) -> i32 { + block0(v0: i32): + v2 = const.i32 -1 : i32; + v3 = bxor v0, v2 : i32; + ret v3; + } } diff --git a/tests/integration/expected/not_u8.hir b/tests/integration/expected/not_u8.hir index 216b9bb2e..ed17fb883 100644 --- a/tests/integration/expected/not_u8.hir +++ b/tests/integration/expected/not_u8.hir @@ -1,14 +1,15 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32) -> i32 { -block0(v0: i32): - v2 = const.i32 255 : i32; - v3 = bxor v0, v2 : i32; - ret v3; + pub fn entrypoint(i32) -> i32 { + block0(v0: i32): + v2 = const.i32 255 : i32; + v3 = bxor v0, v2 : i32; + ret v3; + } } diff --git a/tests/integration/expected/or_bool.hir b/tests/integration/expected/or_bool.hir index 9f538b178..d668a442c 100644 --- a/tests/integration/expected/or_bool.hir +++ b/tests/integration/expected/or_bool.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = bor v0, v1 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = bor v0, v1 : i32; + ret v3; + } } diff --git a/tests/integration/expected/or_i16.hir b/tests/integration/expected/or_i16.hir index b419e3a57..4895f9e93 100644 --- a/tests/integration/expected/or_i16.hir +++ b/tests/integration/expected/or_i16.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = bor v1, v0 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = bor v1, v0 : i32; + ret v3; + } } diff --git a/tests/integration/expected/or_i32.hir b/tests/integration/expected/or_i32.hir index b419e3a57..4895f9e93 100644 --- a/tests/integration/expected/or_i32.hir +++ b/tests/integration/expected/or_i32.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = bor v1, v0 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = bor v1, v0 : i32; + ret v3; + } } diff --git a/tests/integration/expected/or_i8.hir b/tests/integration/expected/or_i8.hir index b419e3a57..4895f9e93 100644 --- a/tests/integration/expected/or_i8.hir +++ b/tests/integration/expected/or_i8.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = bor v1, v0 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = bor v1, v0 : i32; + ret v3; + } } diff --git a/tests/integration/expected/or_u16.hir b/tests/integration/expected/or_u16.hir index b419e3a57..4895f9e93 100644 --- a/tests/integration/expected/or_u16.hir +++ b/tests/integration/expected/or_u16.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = bor v1, v0 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = bor v1, v0 : i32; + ret v3; + } } diff --git a/tests/integration/expected/or_u32.hir b/tests/integration/expected/or_u32.hir index b419e3a57..4895f9e93 100644 --- a/tests/integration/expected/or_u32.hir +++ b/tests/integration/expected/or_u32.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = bor v1, v0 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = bor v1, v0 : i32; + ret v3; + } } diff --git a/tests/integration/expected/or_u8.hir b/tests/integration/expected/or_u8.hir index b419e3a57..4895f9e93 100644 --- a/tests/integration/expected/or_u8.hir +++ b/tests/integration/expected/or_u8.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = bor v1, v0 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = bor v1, v0 : i32; + ret v3; + } } diff --git a/tests/integration/expected/sdk_basic_wallet/basic_wallet.hir b/tests/integration/expected/sdk_basic_wallet/basic_wallet.hir new file mode 100644 index 000000000..6d2409472 --- /dev/null +++ b/tests/integration/expected/sdk_basic_wallet/basic_wallet.hir @@ -0,0 +1,918 @@ +component + +import miden:base/tx@1.0.0::create-note fn(struct {(struct {u64}, struct {u64}, struct {u64}, struct {u64})}, struct {struct {u64}}, struct {(struct {u64}, struct {u64}, struct {u64}, struct {u64})}) -> struct {struct {u64}} mast#0x0000000000000000000000000000000000000000000000000000000000000000 lower module0::basic_wallet::bindings::miden::base::tx::create_note::wit_import +import miden:base/account@1.0.0::add-asset fn(struct {(struct {u64}, struct {u64}, struct {u64}, struct {u64})}) -> struct {(struct {u64}, struct {u64}, struct {u64}, struct {u64})} mast#0x0000000000000000000000000000000000000000000000000000000000000000 lower wit-component:fixups::func0 +import miden:base/account@1.0.0::remove-asset fn(struct {(struct {u64}, struct {u64}, struct {u64}, struct {u64})}) -> struct {(struct {u64}, struct {u64}, struct {u64}, struct {u64})} mast#0x0000000000000000000000000000000000000000000000000000000000000000 lower wit-component:fixups::func1 + +module wit-component:shim { + + pub fn indirect-miden:base/account@1.0.0-add-asset(i64, i64, i64, i64, i32) { + block0(v0: i64, v1: i64, v2: i64, v3: i64, v4: i32): + v5 = const.i32 0 : i32; + br block1; + + block1: + ret; + } + + pub fn indirect-miden:base/account@1.0.0-remove-asset(i64, i64, i64, i64, i32) { + block0(v0: i64, v1: i64, v2: i64, v3: i64, v4: i32): + v5 = const.i32 1 : i32; + br block1; + + block1: + ret; + } +} + +module module0 { + + const $0 = 0x00100000; + + global external @__stack_pointer : i32 = $0 { id = 0 }; + + pub fn __wasm_call_ctors() { + block0: + br block1; + + block1: + ret; + } + + pub fn miden:basic-wallet/basic-wallet@1.0.0#receive-asset(i64, i64, i64, i64) { + block0(v0: i64, v1: i64, v2: i64, v3: i64): + v4 = const.i32 0 : i32; + v5 = global.load (@__stack_pointer) as *mut i8 : i32; + v6 = const.i32 32 : i32; + v7 = sub.wrapping v5, v6 : i32; + v8 = global.symbol @__stack_pointer : *mut i32; + store v8, v7; + call module0::wit_bindgen::rt::run_ctors_once(); + call wit-component:shim::indirect-miden:base/account@1.0.0-add-asset(v0, v1, v2, v3, v7); + v9 = const.i32 32 : i32; + v10 = add.wrapping v7, v9 : i32; + v11 = global.symbol @__stack_pointer : *mut i32; + store v11, v10; + br block1; + + block1: + ret; + } + + pub fn miden:basic-wallet/basic-wallet@1.0.0#send-asset(i64, i64, i64, i64, i64, i64, i64, i64, i64) { + block0(v0: i64, v1: i64, v2: i64, v3: i64, v4: i64, v5: i64, v6: i64, v7: i64, v8: i64): + v9 = const.i32 0 : i32; + v10 = global.load (@__stack_pointer) as *mut i8 : i32; + v11 = const.i32 32 : i32; + v12 = sub.wrapping v10, v11 : i32; + v13 = global.symbol @__stack_pointer : *mut i32; + store v13, v12; + call module0::wit_bindgen::rt::run_ctors_once(); + call wit-component:shim::indirect-miden:base/account@1.0.0-remove-asset(v0, v1, v2, v3, v12); + v14 = cast v12 : u32; + v15 = inttoptr v14 : *mut i64; + v16 = load v15 : i64; + v17 = const.i32 8 : i32; + v18 = add.wrapping v12, v17 : i32; + v19 = cast v18 : u32; + v20 = inttoptr v19 : *mut i64; + v21 = load v20 : i64; + v22 = const.i32 16 : i32; + v23 = add.wrapping v12, v22 : i32; + v24 = cast v23 : u32; + v25 = inttoptr v24 : *mut i64; + v26 = load v25 : i64; + v27 = const.i32 24 : i32; + v28 = add.wrapping v12, v27 : i32; + v29 = cast v28 : u32; + v30 = inttoptr v29 : *mut i64; + v31 = load v30 : i64; + v32 = call module0::basic_wallet::bindings::miden::base::tx::create_note::wit_import(v16, v21, v26, v31, v4, v5, v6, v7, v8) : i64; + v33 = const.i32 32 : i32; + v34 = add.wrapping v12, v33 : i32; + v35 = global.symbol @__stack_pointer : *mut i32; + store v35, v34; + br block1; + + block1: + ret; + } + + pub fn __rust_alloc(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = const.i32 1048576 : i32; + v4 = call module0::::alloc(v3, v1, v0) : i32; + br block1(v4); + + block1(v2: i32): + ret v2; + } + + pub fn __rust_realloc(i32, i32, i32, i32) -> i32 { + block0(v0: i32, v1: i32, v2: i32, v3: i32): + v5 = const.i32 0 : i32; + v6 = const.i32 1048576 : i32; + v7 = call module0::::alloc(v6, v2, v3) : i32; + v8 = eq v7, 0 : i1; + v9 = cast v8 : i32; + v10 = neq v9, 0 : i1; + condbr v10, block2(v7), block3; + + block1(v4: i32): + ret v4; + + block2(v22: i32): + br block1(v22); + + block3: + v11 = cast v1 : u32; + v12 = cast v3 : u32; + v13 = lt v11, v12 : i1; + v14 = cast v13 : i32; + v15 = neq v14, 0 : i1; + v16 = select v15, v1, v3 : i32; + v17 = cast v7 : u32; + v18 = inttoptr v17 : *mut u8; + v19 = cast v0 : u32; + v20 = inttoptr v19 : *mut u8; + memcpy v20, v18, v16; + v21 = const.i32 1048576 : i32; + call module0::::dealloc(v21, v0, v2, v1); + br block2(v7); + } + + pub fn wee_alloc::alloc_first_fit(i32, i32, i32) -> i32 { + block0(v0: i32, v1: i32, v2: i32): + v4 = const.i32 0 : i32; + v5 = cast v2 : u32; + v6 = inttoptr v5 : *mut i32; + v7 = load v6 : i32; + v8 = neq v7, 0 : i1; + condbr v8, block2, block3; + + block1(v3: i32): + ret v3; + + block2: + v10 = const.i32 -1 : i32; + v11 = add.wrapping v1, v10 : i32; + v12 = const.i32 0 : i32; + v13 = sub.wrapping v12, v1 : i32; + v14 = const.i32 2 : i32; + v15 = shl.wrapping v0, v14 : i32; + br block4(v7, v2, v15, v13, v11); + + block3: + v9 = const.i32 0 : i32; + ret v9; + + block4(v16: i32, v147: i32, v158: i32, v173: i32, v186: i32): + v17 = cast v16 : u32; + v18 = add.checked v17, 8 : u32; + v19 = inttoptr v18 : *mut i32; + v20 = load v19 : i32; + v21 = const.i32 1 : i32; + v22 = band v20, v21 : i32; + v23 = neq v22, 0 : i1; + condbr v23, block7, block8; + + block5: + v305 = const.i32 0 : i32; + br block1(v305); + + block6(v148: i32, v157: i32, v172: i32, v185: i32, v194: i32, v298: i32): + v149 = cast v148 : u32; + v150 = inttoptr v149 : *mut i32; + v151 = load v150 : i32; + v152 = const.i32 -4 : i32; + v153 = band v151, v152 : i32; + v154 = const.i32 8 : i32; + v155 = add.wrapping v148, v154 : i32; + v156 = sub.wrapping v153, v155 : i32; + v164 = cast v156 : u32; + v165 = cast v157 : u32; + v166 = lt v164, v165 : i1; + v167 = cast v166 : i32; + v168 = neq v167, 0 : i1; + condbr v168, block22(v194, v298, v157, v172, v185), block23; + + block7: + br block9(v16, v20, v147, v158, v173, v186); + + block8: + br block6(v16, v158, v173, v186, v147, v20); + + block9(v24: i32, v25: i32, v136: i32, v163: i32, v178: i32, v191: i32): + v26 = const.i32 -2 : i32; + v27 = band v25, v26 : i32; + v28 = cast v24 : u32; + v29 = add.checked v28, 8 : u32; + v30 = inttoptr v29 : *mut i32; + store v30, v27; + v31 = cast v24 : u32; + v32 = add.checked v31, 4 : u32; + v33 = inttoptr v32 : *mut i32; + v34 = load v33 : i32; + v35 = const.i32 -4 : i32; + v36 = band v34, v35 : i32; + v37 = neq v36, 0 : i1; + condbr v37, block12, block13; + + block10: + br block6(v137, v159, v174, v187, v132, v143); + + block11(v48: i32, v66: i32, v106: i32, v124: i32, v135: i32, v162: i32, v177: i32, v190: i32): + v49 = cast v48 : u32; + v50 = inttoptr v49 : *mut i32; + v51 = load v50 : i32; + v52 = const.i32 -4 : i32; + v53 = band v51, v52 : i32; + v54 = eq v53, 0 : i1; + v55 = cast v54 : i32; + v56 = neq v55, 0 : i1; + condbr v56, block14(v66, v51, v48, v106, v124, v135, v162, v177, v190), block15; + + block12: + v39 = const.i32 0 : i32; + v40 = cast v36 : u32; + v41 = inttoptr v40 : *mut u8; + v42 = load v41 : u8; + v43 = zext v42 : i32; + v44 = const.i32 1 : i32; + v45 = band v43, v44 : i32; + v46 = neq v45, 0 : i1; + v47 = select v46, v39, v36 : i32; + br block11(v24, v36, v34, v47, v136, v163, v178, v191); + + block13: + v38 = const.i32 0 : i32; + br block11(v24, v36, v34, v38, v136, v163, v178, v191); + + block14(v80: i32, v89: i32, v95: i32, v105: i32, v123: i32, v134: i32, v161: i32, v176: i32, v189: i32): + v81 = eq v80, 0 : i1; + v82 = cast v81 : i32; + v83 = neq v82, 0 : i1; + condbr v83, block17(v95, v105, v89, v123, v134, v161, v176, v189), block18; + + block15: + v57 = const.i32 2 : i32; + v58 = band v51, v57 : i32; + v59 = neq v58, 0 : i1; + condbr v59, block14(v66, v51, v48, v106, v124, v135, v162, v177, v190), block16; + + block16: + v60 = cast v53 : u32; + v61 = add.checked v60, 4 : u32; + v62 = inttoptr v61 : *mut i32; + v63 = load v62 : i32; + v64 = const.i32 3 : i32; + v65 = band v63, v64 : i32; + v67 = bor v65, v66 : i32; + v68 = cast v53 : u32; + v69 = add.checked v68, 4 : u32; + v70 = inttoptr v69 : *mut i32; + store v70, v67; + v71 = cast v48 : u32; + v72 = add.checked v71, 4 : u32; + v73 = inttoptr v72 : *mut i32; + v74 = load v73 : i32; + v75 = const.i32 -4 : i32; + v76 = band v74, v75 : i32; + v77 = cast v48 : u32; + v78 = inttoptr v77 : *mut i32; + v79 = load v78 : i32; + br block14(v76, v79, v48, v74, v124, v135, v162, v177, v190); + + block17(v103: i32, v104: i32, v112: i32, v122: i32, v133: i32, v160: i32, v175: i32, v188: i32): + v107 = const.i32 3 : i32; + v108 = band v104, v107 : i32; + v109 = cast v103 : u32; + v110 = add.checked v109, 4 : u32; + v111 = inttoptr v110 : *mut i32; + store v111, v108; + v113 = const.i32 3 : i32; + v114 = band v112, v113 : i32; + v115 = cast v103 : u32; + v116 = inttoptr v115 : *mut i32; + store v116, v114; + v117 = const.i32 2 : i32; + v118 = band v112, v117 : i32; + v119 = eq v118, 0 : i1; + v120 = cast v119 : i32; + v121 = neq v120, 0 : i1; + condbr v121, block19(v133, v122, v160, v175, v188), block20; + + block18: + v84 = cast v80 : u32; + v85 = inttoptr v84 : *mut i32; + v86 = load v85 : i32; + v87 = const.i32 3 : i32; + v88 = band v86, v87 : i32; + v90 = const.i32 -4 : i32; + v91 = band v89, v90 : i32; + v92 = bor v88, v91 : i32; + v93 = cast v80 : u32; + v94 = inttoptr v93 : *mut i32; + store v94, v92; + v96 = cast v95 : u32; + v97 = add.checked v96, 4 : u32; + v98 = inttoptr v97 : *mut i32; + v99 = load v98 : i32; + v100 = cast v95 : u32; + v101 = inttoptr v100 : *mut i32; + v102 = load v101 : i32; + br block17(v95, v99, v102, v123, v134, v161, v176, v189); + + block19(v132: i32, v137: i32, v159: i32, v174: i32, v187: i32): + v138 = cast v132 : u32; + v139 = inttoptr v138 : *mut i32; + store v139, v137; + v140 = cast v137 : u32; + v141 = add.checked v140, 8 : u32; + v142 = inttoptr v141 : *mut i32; + v143 = load v142 : i32; + v144 = const.i32 1 : i32; + v145 = band v143, v144 : i32; + v146 = neq v145, 0 : i1; + condbr v146, block9(v137, v143, v132, v159, v174, v187), block21; + + block20: + v125 = cast v122 : u32; + v126 = inttoptr v125 : *mut i32; + v127 = load v126 : i32; + v128 = const.i32 2 : i32; + v129 = bor v127, v128 : i32; + v130 = cast v122 : u32; + v131 = inttoptr v130 : *mut i32; + store v131, v129; + br block19(v133, v122, v160, v175, v188); + + block21: + br block10; + + block22(v296: i32, v297: i32, v302: i32, v303: i32, v304: i32): + v299 = cast v296 : u32; + v300 = inttoptr v299 : *mut i32; + store v300, v297; + v301 = neq v297, 0 : i1; + condbr v301, block4(v297, v296, v302, v303, v304), block33; + + block23: + v169 = const.i32 72 : i32; + v170 = add.wrapping v155, v169 : i32; + v171 = sub.wrapping v153, v157 : i32; + v179 = band v171, v172 : i32; + v180 = cast v170 : u32; + v181 = cast v179 : u32; + v182 = lte v180, v181 : i1; + v183 = cast v182 : i32; + v184 = neq v183, 0 : i1; + condbr v184, block25, block26; + + block24(v288: i32, v289: i32): + v290 = const.i32 1 : i32; + v291 = bor v289, v290 : i32; + v292 = cast v288 : u32; + v293 = inttoptr v292 : *mut i32; + store v293, v291; + v294 = const.i32 8 : i32; + v295 = add.wrapping v288, v294 : i32; + ret v295; + + block25: + v206 = const.i32 0 : i32; + v207 = const.i32 0 : i32; + v208 = cast v179 : u32; + v209 = inttoptr v208 : *mut i32; + store v209, v207; + v210 = const.i32 -8 : i32; + v211 = add.wrapping v179, v210 : i32; + v212 = const.i64 0 : i64; + v213 = cast v211 : u32; + v214 = inttoptr v213 : *mut i64; + store v214, v212; + v215 = cast v148 : u32; + v216 = inttoptr v215 : *mut i32; + v217 = load v216 : i32; + v218 = const.i32 -4 : i32; + v219 = band v217, v218 : i32; + v220 = cast v211 : u32; + v221 = inttoptr v220 : *mut i32; + store v221, v219; + v222 = cast v148 : u32; + v223 = inttoptr v222 : *mut i32; + v224 = load v223 : i32; + v225 = const.i32 -4 : i32; + v226 = band v224, v225 : i32; + v227 = eq v226, 0 : i1; + v228 = cast v227 : i32; + v229 = neq v228, 0 : i1; + condbr v229, block28(v211, v206, v148), block29; + + block26: + v192 = band v185, v155 : i32; + v193 = neq v192, 0 : i1; + condbr v193, block22(v194, v298, v157, v172, v185), block27; + + block27: + v195 = cast v148 : u32; + v196 = add.checked v195, 8 : u32; + v197 = inttoptr v196 : *mut i32; + v198 = load v197 : i32; + v199 = const.i32 -4 : i32; + v200 = band v198, v199 : i32; + v201 = cast v194 : u32; + v202 = inttoptr v201 : *mut i32; + store v202, v200; + v203 = cast v148 : u32; + v204 = inttoptr v203 : *mut i32; + v205 = load v204 : i32; + br block24(v148, v205); + + block28(v249: i32, v250: i32, v251: i32): + v252 = bor v250, v251 : i32; + v253 = cast v249 : u32; + v254 = add.checked v253, 4 : u32; + v255 = inttoptr v254 : *mut i32; + store v255, v252; + v256 = cast v251 : u32; + v257 = add.checked v256, 8 : u32; + v258 = inttoptr v257 : *mut i32; + v259 = load v258 : i32; + v260 = const.i32 -2 : i32; + v261 = band v259, v260 : i32; + v262 = cast v251 : u32; + v263 = add.checked v262, 8 : u32; + v264 = inttoptr v263 : *mut i32; + store v264, v261; + v265 = cast v251 : u32; + v266 = inttoptr v265 : *mut i32; + v267 = load v266 : i32; + v268 = const.i32 3 : i32; + v269 = band v267, v268 : i32; + v270 = bor v269, v249 : i32; + v271 = cast v251 : u32; + v272 = inttoptr v271 : *mut i32; + store v272, v270; + v273 = const.i32 2 : i32; + v274 = band v267, v273 : i32; + v275 = neq v274, 0 : i1; + condbr v275, block31, block32; + + block29: + v230 = const.i32 2 : i32; + v231 = band v224, v230 : i32; + v232 = neq v231, 0 : i1; + condbr v232, block28(v211, v206, v148), block30; + + block30: + v233 = cast v226 : u32; + v234 = add.checked v233, 4 : u32; + v235 = inttoptr v234 : *mut i32; + v236 = load v235 : i32; + v237 = const.i32 3 : i32; + v238 = band v236, v237 : i32; + v239 = bor v238, v211 : i32; + v240 = cast v226 : u32; + v241 = add.checked v240, 4 : u32; + v242 = inttoptr v241 : *mut i32; + store v242, v239; + v243 = cast v211 : u32; + v244 = add.checked v243, 4 : u32; + v245 = inttoptr v244 : *mut i32; + v246 = load v245 : i32; + v247 = const.i32 3 : i32; + v248 = band v246, v247 : i32; + br block28(v211, v248, v148); + + block31: + v279 = const.i32 -3 : i32; + v280 = band v270, v279 : i32; + v281 = cast v251 : u32; + v282 = inttoptr v281 : *mut i32; + store v282, v280; + v283 = cast v249 : u32; + v284 = inttoptr v283 : *mut i32; + v285 = load v284 : i32; + v286 = const.i32 2 : i32; + v287 = bor v285, v286 : i32; + br block24(v249, v287); + + block32: + v276 = cast v249 : u32; + v277 = inttoptr v276 : *mut i32; + v278 = load v277 : i32; + br block24(v249, v278); + + block33: + br block5; + } + + pub fn ::alloc(i32, i32, i32) -> i32 { + block0(v0: i32, v1: i32, v2: i32): + v4 = const.i32 0 : i32; + v5 = global.load (@__stack_pointer) as *mut i8 : i32; + v6 = const.i32 16 : i32; + v7 = sub.wrapping v5, v6 : i32; + v8 = global.symbol @__stack_pointer : *mut i32; + store v8, v7; + v9 = neq v2, 0 : i1; + condbr v9, block3, block4; + + block1(v3: i32): + ret v3; + + block2(v87: i32, v91: i32): + v88 = const.i32 16 : i32; + v89 = add.wrapping v87, v88 : i32; + v90 = global.symbol @__stack_pointer : *mut i32; + store v90, v89; + br block1(v91); + + block3: + v10 = cast v0 : u32; + v11 = inttoptr v10 : *mut i32; + v12 = load v11 : i32; + v13 = cast v7 : u32; + v14 = add.checked v13, 12 : u32; + v15 = inttoptr v14 : *mut i32; + store v15, v12; + v16 = const.i32 3 : i32; + v17 = add.wrapping v2, v16 : i32; + v18 = const.i32 2 : i32; + v19 = cast v17 : u32; + v20 = cast v18 : u32; + v21 = shr.wrapping v19, v20 : u32; + v22 = cast v21 : i32; + v23 = const.i32 12 : i32; + v24 = add.wrapping v7, v23 : i32; + v25 = call module0::wee_alloc::alloc_first_fit(v22, v1, v24) : i32; + v26 = neq v25, 0 : i1; + condbr v26, block5(v0, v7, v25), block6; + + block4: + br block2(v7, v1); + + block5(v79: i32, v80: i32, v92: i32): + v81 = cast v80 : u32; + v82 = add.checked v81, 12 : u32; + v83 = inttoptr v82 : *mut i32; + v84 = load v83 : i32; + v85 = cast v79 : u32; + v86 = inttoptr v85 : *mut i32; + store v86, v84; + br block2(v80, v92); + + block6: + v27 = const.i32 -4 : i32; + v28 = band v17, v27 : i32; + v29 = const.i32 3 : i32; + v30 = shl.wrapping v1, v29 : i32; + v31 = const.i32 512 : i32; + v32 = add.wrapping v30, v31 : i32; + v33 = cast v28 : u32; + v34 = cast v32 : u32; + v35 = gt v33, v34 : i1; + v36 = cast v35 : i32; + v37 = neq v36, 0 : i1; + v38 = select v37, v28, v32 : i32; + v39 = const.i32 65543 : i32; + v40 = add.wrapping v38, v39 : i32; + v41 = const.i32 16 : i32; + v42 = cast v40 : u32; + v43 = cast v41 : u32; + v44 = shr.wrapping v42, v43 : u32; + v45 = cast v44 : i32; + v46 = cast v45 : u32; + v47 = memory.grow v46 : i32; + v48 = const.i32 -1 : i32; + v49 = neq v47, v48 : i1; + v50 = cast v49 : i32; + v51 = neq v50, 0 : i1; + condbr v51, block7, block8; + + block7: + v53 = const.i32 16 : i32; + v54 = shl.wrapping v47, v53 : i32; + v55 = const.i32 0 : i32; + v56 = cast v54 : u32; + v57 = add.checked v56, 4 : u32; + v58 = inttoptr v57 : *mut i32; + store v58, v55; + v59 = cast v7 : u32; + v60 = add.checked v59, 12 : u32; + v61 = inttoptr v60 : *mut i32; + v62 = load v61 : i32; + v63 = cast v54 : u32; + v64 = add.checked v63, 8 : u32; + v65 = inttoptr v64 : *mut i32; + store v65, v62; + v66 = const.i32 -65536 : i32; + v67 = band v40, v66 : i32; + v68 = add.wrapping v54, v67 : i32; + v69 = const.i32 2 : i32; + v70 = bor v68, v69 : i32; + v71 = cast v54 : u32; + v72 = inttoptr v71 : *mut i32; + store v72, v70; + v73 = cast v7 : u32; + v74 = add.checked v73, 12 : u32; + v75 = inttoptr v74 : *mut i32; + store v75, v54; + v76 = const.i32 12 : i32; + v77 = add.wrapping v7, v76 : i32; + v78 = call module0::wee_alloc::alloc_first_fit(v22, v1, v77) : i32; + br block5(v0, v7, v78); + + block8: + v52 = const.i32 0 : i32; + br block5(v0, v7, v52); + } + + pub fn ::dealloc(i32, i32, i32, i32) { + block0(v0: i32, v1: i32, v2: i32, v3: i32): + v4 = const.i32 0 : i32; + v5 = eq v1, 0 : i1; + v6 = cast v5 : i32; + v7 = neq v6, 0 : i1; + condbr v7, block2, block3; + + block1: + ret; + + block2: + br block1; + + block3: + v8 = eq v3, 0 : i1; + v9 = cast v8 : i32; + v10 = neq v9, 0 : i1; + condbr v10, block2, block4; + + block4: + v11 = cast v0 : u32; + v12 = inttoptr v11 : *mut i32; + v13 = load v12 : i32; + v14 = const.i32 0 : i32; + v15 = cast v1 : u32; + v16 = inttoptr v15 : *mut i32; + store v16, v14; + v17 = const.i32 -8 : i32; + v18 = add.wrapping v1, v17 : i32; + v19 = cast v18 : u32; + v20 = inttoptr v19 : *mut i32; + v21 = load v20 : i32; + v22 = const.i32 -2 : i32; + v23 = band v21, v22 : i32; + v24 = cast v18 : u32; + v25 = inttoptr v24 : *mut i32; + store v25, v23; + v26 = const.i32 4 : i32; + v27 = add.wrapping v18, v26 : i32; + v28 = cast v27 : u32; + v29 = inttoptr v28 : *mut i32; + v30 = load v29 : i32; + v31 = const.i32 -4 : i32; + v32 = band v30, v31 : i32; + v33 = eq v32, 0 : i1; + v34 = cast v33 : i32; + v35 = neq v34, 0 : i1; + condbr v35, block8(v21, v1, v18, v13, v0), block9; + + block5(v155: i32, v161: i32): + v163 = cast v155 : u32; + v164 = inttoptr v163 : *mut i32; + store v164, v161; + br block2; + + block6(v151: i32, v152: i32, v160: i32, v162: i32): + v153 = cast v151 : u32; + v154 = inttoptr v153 : *mut i32; + store v154, v152; + br block5(v160, v162); + + block7(v147: i32, v156: i32): + br block5(v156, v147); + + block8(v116: i32, v132: i32, v141: i32, v150: i32, v159: i32): + v117 = const.i32 -4 : i32; + v118 = band v116, v117 : i32; + v119 = eq v118, 0 : i1; + v120 = cast v119 : i32; + v121 = neq v120, 0 : i1; + condbr v121, block6(v132, v150, v159, v141), block18; + + block9: + v36 = cast v32 : u32; + v37 = inttoptr v36 : *mut i32; + v38 = load v37 : i32; + v39 = const.i32 1 : i32; + v40 = band v38, v39 : i32; + v41 = neq v40, 0 : i1; + condbr v41, block8(v21, v1, v18, v13, v0), block10; + + block10: + v42 = const.i32 -4 : i32; + v43 = band v21, v42 : i32; + v44 = neq v43, 0 : i1; + condbr v44, block13, block14; + + block11(v90: i32, v91: i32, v96: i32, v97: i32, v107: i32, v148: i32, v157: i32): + v92 = const.i32 3 : i32; + v93 = band v91, v92 : i32; + v94 = cast v90 : u32; + v95 = inttoptr v94 : *mut i32; + store v95, v93; + v98 = const.i32 3 : i32; + v99 = band v97, v98 : i32; + v100 = cast v96 : u32; + v101 = inttoptr v100 : *mut i32; + store v101, v99; + v102 = const.i32 2 : i32; + v103 = band v97, v102 : i32; + v104 = eq v103, 0 : i1; + v105 = cast v104 : i32; + v106 = neq v105, 0 : i1; + condbr v106, block7(v148, v157), block17; + + block12(v72: i32, v73: i32, v76: i32, v82: i32, v86: i32, v108: i32, v149: i32, v158: i32): + v74 = const.i32 -4 : i32; + v75 = band v73, v74 : i32; + v77 = const.i32 3 : i32; + v78 = band v76, v77 : i32; + v79 = bor v75, v78 : i32; + v80 = cast v72 : u32; + v81 = inttoptr v80 : *mut i32; + store v81, v79; + v83 = cast v82 : u32; + v84 = inttoptr v83 : *mut i32; + v85 = load v84 : i32; + v87 = cast v86 : u32; + v88 = inttoptr v87 : *mut i32; + v89 = load v88 : i32; + br block11(v82, v85, v86, v89, v108, v149, v158); + + block13: + v45 = const.i32 2 : i32; + v46 = band v21, v45 : i32; + v47 = neq v46, 0 : i1; + condbr v47, block12(v32, v23, v38, v27, v18, v32, v13, v0), block15; + + block14: + br block12(v32, v23, v38, v27, v18, v32, v13, v0); + + block15: + v48 = cast v43 : u32; + v49 = add.checked v48, 4 : u32; + v50 = inttoptr v49 : *mut i32; + v51 = load v50 : i32; + v52 = const.i32 3 : i32; + v53 = band v51, v52 : i32; + v54 = bor v53, v32 : i32; + v55 = cast v43 : u32; + v56 = add.checked v55, 4 : u32; + v57 = inttoptr v56 : *mut i32; + store v57, v54; + v58 = cast v18 : u32; + v59 = inttoptr v58 : *mut i32; + v60 = load v59 : i32; + v61 = cast v27 : u32; + v62 = inttoptr v61 : *mut i32; + v63 = load v62 : i32; + v64 = const.i32 -4 : i32; + v65 = band v63, v64 : i32; + v66 = eq v65, 0 : i1; + v67 = cast v66 : i32; + v68 = neq v67, 0 : i1; + condbr v68, block11(v27, v63, v18, v60, v32, v13, v0), block16; + + block16: + v69 = cast v65 : u32; + v70 = inttoptr v69 : *mut i32; + v71 = load v70 : i32; + br block12(v65, v60, v71, v27, v18, v32, v13, v0); + + block17: + v109 = cast v107 : u32; + v110 = inttoptr v109 : *mut i32; + v111 = load v110 : i32; + v112 = const.i32 2 : i32; + v113 = bor v111, v112 : i32; + v114 = cast v107 : u32; + v115 = inttoptr v114 : *mut i32; + store v115, v113; + br block7(v148, v157); + + block18: + v122 = const.i32 2 : i32; + v123 = band v116, v122 : i32; + v124 = neq v123, 0 : i1; + condbr v124, block6(v132, v150, v159, v141), block19; + + block19: + v125 = cast v118 : u32; + v126 = inttoptr v125 : *mut u8; + v127 = load v126 : u8; + v128 = zext v127 : i32; + v129 = const.i32 1 : i32; + v130 = band v128, v129 : i32; + v131 = neq v130, 0 : i1; + condbr v131, block6(v132, v150, v159, v141), block20; + + block20: + v133 = cast v118 : u32; + v134 = add.checked v133, 8 : u32; + v135 = inttoptr v134 : *mut i32; + v136 = load v135 : i32; + v137 = const.i32 -4 : i32; + v138 = band v136, v137 : i32; + v139 = cast v132 : u32; + v140 = inttoptr v139 : *mut i32; + store v140, v138; + v142 = const.i32 1 : i32; + v143 = bor v141, v142 : i32; + v144 = cast v118 : u32; + v145 = add.checked v144, 8 : u32; + v146 = inttoptr v145 : *mut i32; + store v146, v143; + br block7(v150, v159); + } + + pub fn wit_bindgen::rt::run_ctors_once() { + block0: + v0 = const.i32 0 : i32; + v1 = cast v0 : u32; + v2 = add.checked v1, 1048581 : u32; + v3 = inttoptr v2 : *mut u8; + v4 = load v3 : u8; + v5 = zext v4 : i32; + v6 = neq v5, 0 : i1; + condbr v6, block2, block3; + + block1: + ret; + + block2: + br block1; + + block3: + call module0::__wasm_call_ctors(); + v7 = const.i32 0 : i32; + v8 = const.i32 1 : i32; + v9 = trunc v8 : u8; + v10 = cast v7 : u32; + v11 = add.checked v10, 1048581 : u32; + v12 = inttoptr v11 : *mut u8; + store v12, v9; + br block2; + } + + pub fn cabi_realloc(i32, i32, i32, i32) -> i32 { + block0(v0: i32, v1: i32, v2: i32, v3: i32): + v5 = neq v1, 0 : i1; + condbr v5, block4, block5; + + block1(v4: i32): + ret v4; + + block2(v19: i32): + br block1(v19); + + block3(v17: i32): + v18 = neq v17, 0 : i1; + condbr v18, block2(v17), block7; + + block4: + v16 = call module0::__rust_realloc(v0, v1, v2, v3) : i32; + br block3(v16); + + block5: + v6 = eq v3, 0 : i1; + v7 = cast v6 : i32; + v8 = neq v7, 0 : i1; + condbr v8, block2(v2), block6; + + block6: + v9 = const.i32 0 : i32; + v10 = cast v9 : u32; + v11 = add.checked v10, 1048580 : u32; + v12 = inttoptr v11 : *mut u8; + v13 = load v12 : u8; + v14 = zext v13 : i32; + v15 = call module0::__rust_alloc(v3, v2) : i32; + br block3(v15); + + block7: + unreachable ; + } + + +pub fn wit-component:shim::indirect-miden:base/account@1.0.0-add-asset(i64, i64, i64, i64, i32); + +pub fn wit-component:shim::indirect-miden:base/account@1.0.0-remove-asset(i64, i64, i64, i64, i32); +} + +module wit-component:fixups { + +} + diff --git a/tests/integration/expected/sdk_basic_wallet/basic_wallet.wat b/tests/integration/expected/sdk_basic_wallet/basic_wallet.wat index 2b1ecc2bc..a5977e4f4 100644 --- a/tests/integration/expected/sdk_basic_wallet/basic_wallet.wat +++ b/tests/integration/expected/sdk_basic_wallet/basic_wallet.wat @@ -1,7 +1,7 @@ (component (type (;0;) (instance - (type (;0;) (record (field "inner" float64))) + (type (;0;) (record (field "inner" u64))) (export (;1;) "felt" (type (eq 0))) (type (;2;) (tuple 1 1 1 1)) (export (;3;) "word" (type (eq 2))) @@ -47,11 +47,11 @@ ) (import "miden:base/tx@1.0.0" (instance (;2;) (type 7))) (core module (;0;) - (type (;0;) (func (param f64 f64 f64 f64 i32))) - (type (;1;) (func (param f64 f64 f64 f64 f64 f64 f64 f64 f64) (result f64))) + (type (;0;) (func (param i64 i64 i64 i64 i32))) + (type (;1;) (func (param i64 i64 i64 i64 i64 i64 i64 i64 i64) (result i64))) (type (;2;) (func)) - (type (;3;) (func (param f64 f64 f64 f64))) - (type (;4;) (func (param f64 f64 f64 f64 f64 f64 f64 f64 f64))) + (type (;3;) (func (param i64 i64 i64 i64))) + (type (;4;) (func (param i64 i64 i64 i64 i64 i64 i64 i64 i64))) (type (;5;) (func (param i32 i32) (result i32))) (type (;6;) (func (param i32 i32 i32 i32) (result i32))) (type (;7;) (func (param i32 i32 i32) (result i32))) @@ -60,7 +60,7 @@ (import "miden:base/account@1.0.0" "remove-asset" (func $basic_wallet::bindings::miden::base::account::remove_asset::wit_import (;1;) (type 0))) (import "miden:base/tx@1.0.0" "create-note" (func $basic_wallet::bindings::miden::base::tx::create_note::wit_import (;2;) (type 1))) (func $__wasm_call_ctors (;3;) (type 2)) - (func $miden:basic-wallet/basic-wallet@1.0.0#receive-asset (;4;) (type 3) (param f64 f64 f64 f64) + (func $miden:basic-wallet/basic-wallet@1.0.0#receive-asset (;4;) (type 3) (param i64 i64 i64 i64) (local i32) global.get $__stack_pointer i32.const 32 @@ -79,7 +79,7 @@ i32.add global.set $__stack_pointer ) - (func $miden:basic-wallet/basic-wallet@1.0.0#send-asset (;5;) (type 4) (param f64 f64 f64 f64 f64 f64 f64 f64 f64) + (func $miden:basic-wallet/basic-wallet@1.0.0#send-asset (;5;) (type 4) (param i64 i64 i64 i64 i64 i64 i64 i64 i64) (local i32) global.get $__stack_pointer i32.const 32 @@ -94,19 +94,19 @@ local.get 9 call $basic_wallet::bindings::miden::base::account::remove_asset::wit_import local.get 9 - f64.load + i64.load local.get 9 i32.const 8 i32.add - f64.load + i64.load local.get 9 i32.const 16 i32.add - f64.load + i64.load local.get 9 i32.const 24 i32.add - f64.load + i64.load local.get 4 local.get 5 local.get 6 @@ -775,8 +775,8 @@ (export "cabi_realloc" (func $cabi_realloc)) ) (core module (;1;) - (type (;0;) (func (param f64 f64 f64 f64 i32))) - (func $indirect-miden:base/account@1.0.0-add-asset (;0;) (type 0) (param f64 f64 f64 f64 i32) + (type (;0;) (func (param i64 i64 i64 i64 i32))) + (func $indirect-miden:base/account@1.0.0-add-asset (;0;) (type 0) (param i64 i64 i64 i64 i32) local.get 0 local.get 1 local.get 2 @@ -785,7 +785,7 @@ i32.const 0 call_indirect (type 0) ) - (func $indirect-miden:base/account@1.0.0-remove-asset (;1;) (type 0) (param f64 f64 f64 f64 i32) + (func $indirect-miden:base/account@1.0.0-remove-asset (;1;) (type 0) (param i64 i64 i64 i64 i32) local.get 0 local.get 1 local.get 2 @@ -800,7 +800,7 @@ (export "$imports" (table 0)) ) (core module (;2;) - (type (;0;) (func (param f64 f64 f64 f64 i32))) + (type (;0;) (func (param i64 i64 i64 i64 i32))) (import "" "0" (func (;0;) (type 0))) (import "" "1" (func (;1;) (type 0))) (import "" "$imports" (table (;0;) 2 2 funcref)) @@ -854,7 +854,7 @@ (alias export 0 "tag" (type (;16;))) (alias export 0 "recipient" (type (;17;))) (component (;0;) - (type (;0;) (record (field "inner" float64))) + (type (;0;) (record (field "inner" u64))) (import "import-type-felt" (type (;1;) (eq 0))) (type (;2;) (tuple 1 1 1 1)) (import "import-type-word" (type (;3;) (eq 2))) diff --git a/tests/integration/expected/sdk_basic_wallet/basic_wallet_p2id_note.wat b/tests/integration/expected/sdk_basic_wallet/basic_wallet_p2id_note.wat index d0ac6630d..8b594d364 100644 --- a/tests/integration/expected/sdk_basic_wallet/basic_wallet_p2id_note.wat +++ b/tests/integration/expected/sdk_basic_wallet/basic_wallet_p2id_note.wat @@ -1,7 +1,7 @@ (component (type (;0;) (instance - (type (;0;) (record (field "inner" float64))) + (type (;0;) (record (field "inner" u64))) (export (;1;) "felt" (type (eq 0))) (type (;2;) (record (field "inner" 1))) (export (;3;) "account-id" (type (eq 2))) @@ -52,22 +52,49 @@ ) (import "miden:basic-wallet/basic-wallet@1.0.0" (instance (;3;) (type 7))) (core module (;0;) - (type (;0;) (func (param i32))) - (type (;1;) (func (param f64) (result f64))) - (type (;2;) (func (result f64))) - (type (;3;) (func (param f64 f64 f64 f64))) - (type (;4;) (func)) - (type (;5;) (func (param i32 i32) (result i32))) - (type (;6;) (func (param i32 i32 i32 i32) (result i32))) - (type (;7;) (func (param i32 i32 i32) (result i32))) - (type (;8;) (func (param i32 i32 i32 i32))) - (import "miden:base/note@1.0.0" "get-inputs" (func $basic_wallet_p2id_note::bindings::miden::base::note::get_inputs::wit_import (;0;) (type 0))) - (import "miden:base/core-types@1.0.0" "account-id-from-felt" (func $basic_wallet_p2id_note::bindings::miden::base::core_types::account_id_from_felt::wit_import (;1;) (type 1))) - (import "miden:base/account@1.0.0" "get-id" (func $basic_wallet_p2id_note::bindings::miden::base::account::get_id::wit_import (;2;) (type 2))) - (import "miden:base/note@1.0.0" "get-assets" (func $basic_wallet_p2id_note::bindings::miden::base::note::get_assets::wit_import (;3;) (type 0))) - (import "miden:basic-wallet/basic-wallet@1.0.0" "receive-asset" (func $basic_wallet_p2id_note::bindings::miden::basic_wallet::basic_wallet::receive_asset::wit_import (;4;) (type 3))) - (func $__wasm_call_ctors (;5;) (type 4)) - (func $miden:base/note-script@1.0.0#note-script (;6;) (type 4) + (type (;0;) (func (param i32 i32 i32) (result i32))) + (type (;1;) (func (param i32 i32) (result i32))) + (type (;2;) (func (param i32))) + (type (;3;) (func (param i64) (result i64))) + (type (;4;) (func (result i64))) + (type (;5;) (func (param i64 i64 i64 i64))) + (type (;6;) (func)) + (type (;7;) (func (param i32 i32))) + (type (;8;) (func (param i32 i32 i32))) + (type (;9;) (func (param i32 i32 i32 i32) (result i32))) + (type (;10;) (func (param i32 i32 i32 i32))) + (type (;11;) (func (param i32 i32 i32 i32 i32 i32) (result i32))) + (type (;12;) (func (param i32 i32 i32 i32 i32) (result i32))) + (type (;13;) (func (param i64 i32 i32) (result i32))) + (import "miden:base/note@1.0.0" "get-inputs" (func $basic_wallet_p2id_note::bindings::miden::base::note::get_inputs::wit_import (;0;) (type 2))) + (import "miden:base/core-types@1.0.0" "account-id-from-felt" (func $basic_wallet_p2id_note::bindings::miden::base::core_types::account_id_from_felt::wit_import (;1;) (type 3))) + (import "miden:base/account@1.0.0" "get-id" (func $basic_wallet_p2id_note::bindings::miden::base::account::get_id::wit_import (;2;) (type 4))) + (import "miden:base/note@1.0.0" "get-assets" (func $basic_wallet_p2id_note::bindings::miden::base::note::get_assets::wit_import (;3;) (type 2))) + (import "miden:basic-wallet/basic-wallet@1.0.0" "receive-asset" (func $basic_wallet_p2id_note::bindings::miden::basic_wallet::basic_wallet::receive_asset::wit_import (;4;) (type 5))) + (func $__wasm_call_ctors (;5;) (type 6)) + (func $::deallocate (;6;) (type 7) (param i32 i32) + block ;; label = @1 + local.get 1 + i32.eqz + br_if 0 (;@1;) + local.get 0 + local.get 1 + i32.const 8 + call $__rust_dealloc + end + ) + (func $__rust_dealloc (;7;) (type 8) (param i32 i32 i32) + i32.const 1048888 + local.get 0 + local.get 2 + local.get 1 + call $::dealloc + ) + (func $rust_begin_unwind (;8;) (type 2) (param i32) + unreachable + unreachable + ) + (func $miden:base/note-script@1.0.0#note-script (;9;) (type 6) (local i32 i32 i32 i32 i32 i32 i32) global.get $__stack_pointer i32.const 16 @@ -83,92 +110,94 @@ local.get 0 i32.const 12 i32.add - i32.load local.tee 1 + i32.load + local.tee 2 i32.eqz br_if 0 (;@1;) local.get 0 i32.load offset=8 - local.tee 2 - f64.load + local.tee 3 + i64.load call $basic_wallet_p2id_note::bindings::miden::base::core_types::account_id_from_felt::wit_import + drop call $basic_wallet_p2id_note::bindings::miden::base::account::get_id::wit_import - f64.ne - br_if 0 (;@1;) + drop local.get 0 i32.const 8 i32.add call $basic_wallet_p2id_note::bindings::miden::base::note::get_assets::wit_import - block ;; label = @2 - local.get 0 - i32.const 12 - i32.add - i32.load - local.tee 3 - i32.eqz - br_if 0 (;@2;) - local.get 0 - i32.load offset=8 - local.tee 4 - local.get 3 - i32.const 5 - i32.shl - i32.add - local.set 5 - local.get 4 - local.set 6 - loop ;; label = @3 - local.get 6 - f64.load - local.get 6 - f64.load offset=8 - local.get 6 - f64.load offset=16 - local.get 6 - f64.load offset=24 - call $basic_wallet_p2id_note::bindings::miden::basic_wallet::basic_wallet::receive_asset::wit_import - local.get 6 - i32.const 32 - i32.add - local.tee 6 + local.get 1 + i32.load + local.tee 4 + i32.const 5 + i32.shl + local.set 5 + local.get 0 + i32.load offset=8 + local.tee 6 + local.set 1 + loop ;; label = @2 + block ;; label = @3 local.get 5 - i32.ne br_if 0 (;@3;) + block ;; label = @4 + local.get 4 + i32.eqz + br_if 0 (;@4;) + local.get 6 + local.get 4 + i32.const 5 + i32.shl + call $::deallocate + end + local.get 3 + local.get 2 + i32.const 3 + i32.shl + call $::deallocate + local.get 0 + i32.const 16 + i32.add + global.set $__stack_pointer + return end - i32.const 1048576 - local.get 4 - i32.const 8 - local.get 3 - i32.const 5 - i32.shl - call $::dealloc + local.get 1 + i64.load + local.get 1 + i64.load offset=8 + local.get 1 + i64.load offset=16 + local.get 1 + i64.load offset=24 + call $basic_wallet_p2id_note::bindings::miden::basic_wallet::basic_wallet::receive_asset::wit_import + local.get 5 + i32.const -32 + i32.add + local.set 5 + local.get 1 + i32.const 32 + i32.add + local.set 1 + br 0 (;@2;) end - i32.const 1048576 - local.get 2 - i32.const 8 - local.get 1 - i32.const 3 - i32.shl - call $::dealloc - local.get 0 - i32.const 16 - i32.add - global.set $__stack_pointer - return end - unreachable + i32.const 0 + i32.const 0 + i32.const 1048588 + call $core::panicking::panic_bounds_check unreachable ) - (func $__rust_alloc (;7;) (type 5) (param i32 i32) (result i32) - i32.const 1048576 + (func $__rust_alloc (;10;) (type 1) (param i32 i32) (result i32) + i32.const 1048888 local.get 1 local.get 0 call $::alloc ) - (func $__rust_realloc (;8;) (type 6) (param i32 i32 i32 i32) (result i32) + (func $__rust_realloc (;11;) (type 9) (param i32 i32 i32 i32) (result i32) (local i32) block ;; label = @1 - i32.const 1048576 + i32.const 1048888 local.get 2 local.get 3 call $::alloc @@ -184,7 +213,7 @@ i32.lt_u select memory.copy - i32.const 1048576 + i32.const 1048888 local.get 0 local.get 2 local.get 1 @@ -192,19 +221,143 @@ end local.get 4 ) - (func $wee_alloc::alloc_first_fit (;9;) (type 7) (param i32 i32 i32) (result i32) - (local i32 i32 i32 i32 i32 i32 i32) + (func $wee_alloc::neighbors::Neighbors::remove (;12;) (type 2) (param i32) + (local i32 i32 i32) block ;; label = @1 + local.get 0 + i32.load + local.tee 1 + i32.const -4 + i32.and + local.tee 2 + i32.eqz + br_if 0 (;@1;) + i32.const 0 + local.get 2 + local.get 1 + i32.const 2 + i32.and + select + local.tee 2 + i32.eqz + br_if 0 (;@1;) local.get 2 + local.get 2 + i32.load offset=4 + i32.const 3 + i32.and + local.get 0 + i32.load offset=4 + i32.const -4 + i32.and + i32.or + i32.store offset=4 + local.get 0 i32.load + local.set 1 + end + block ;; label = @1 + local.get 0 + i32.load offset=4 + local.tee 2 + i32.const -4 + i32.and local.tee 3 + i32.eqz br_if 0 (;@1;) + local.get 3 + local.get 3 + i32.load + i32.const 3 + i32.and + local.get 1 + i32.const -4 + i32.and + i32.or + i32.store + local.get 0 + i32.load offset=4 + local.set 2 + local.get 0 + i32.load + local.set 1 + end + local.get 0 + local.get 2 + i32.const 3 + i32.and + i32.store offset=4 + local.get 0 + local.get 1 + i32.const 3 + i32.and + i32.store + ) + (func $::new_cell_for_free_list (;13;) (type 10) (param i32 i32 i32 i32) + block ;; label = @1 + block ;; label = @2 + local.get 2 + i32.const 2 + i32.shl + local.tee 2 + local.get 3 + i32.const 3 + i32.shl + i32.const 512 + i32.add + local.tee 3 + local.get 2 + local.get 3 + i32.gt_u + select + i32.const 65543 + i32.add + local.tee 3 + i32.const 16 + i32.shr_u + memory.grow + local.tee 2 + i32.const -1 + i32.ne + br_if 0 (;@2;) + i32.const 1 + local.set 3 + i32.const 0 + local.set 2 + br 1 (;@1;) + end + local.get 2 + i32.const 16 + i32.shl + local.tee 2 + i64.const 0 + i64.store offset=4 align=4 + local.get 2 + local.get 2 + local.get 3 + i32.const -65536 + i32.and + i32.add + i32.const 2 + i32.or + i32.store i32.const 0 - return + local.set 3 end + local.get 0 + local.get 2 + i32.store offset=4 + local.get 0 + local.get 3 + i32.store + ) + (func $wee_alloc::alloc_first_fit (;14;) (type 0) (param i32 i32 i32) (result i32) + (local i32 i32 i32 i32 i32 i32) local.get 1 i32.const -1 i32.add + local.set 3 + i32.const 0 local.set 4 i32.const 0 local.get 1 @@ -214,287 +367,229 @@ i32.const 2 i32.shl local.set 6 - loop ;; label = @1 + local.get 2 + i32.load + local.set 0 + loop (result i32) ;; label = @1 block ;; label = @2 block ;; label = @3 - local.get 3 - i32.load offset=8 - local.tee 1 - i32.const 1 - i32.and + local.get 0 + i32.eqz br_if 0 (;@3;) - local.get 3 - local.set 7 - br 1 (;@2;) - end - loop ;; label = @3 - local.get 3 - local.get 1 - i32.const -2 - i32.and - i32.store offset=8 + local.get 0 + local.set 1 block ;; label = @4 block ;; label = @5 - local.get 3 - i32.load offset=4 - local.tee 8 - i32.const -4 - i32.and - local.tee 1 - br_if 0 (;@5;) - i32.const 0 - local.set 7 - br 1 (;@4;) - end - i32.const 0 - local.get 1 - local.get 1 - i32.load8_u - i32.const 1 - i32.and - select - local.set 7 - end - block ;; label = @4 - local.get 3 - i32.load - local.tee 0 - i32.const -4 - i32.and - local.tee 9 - i32.eqz - br_if 0 (;@4;) - local.get 0 - i32.const 2 - i32.and - br_if 0 (;@4;) - local.get 9 - local.get 9 - i32.load offset=4 - i32.const 3 - i32.and - local.get 1 - i32.or - i32.store offset=4 - local.get 3 - i32.load offset=4 - local.tee 8 - i32.const -4 - i32.and - local.set 1 - local.get 3 - i32.load - local.set 0 - end - block ;; label = @4 - local.get 1 - i32.eqz - br_if 0 (;@4;) - local.get 1 - local.get 1 - i32.load - i32.const 3 - i32.and - local.get 0 - i32.const -4 - i32.and - i32.or - i32.store - local.get 3 - i32.load offset=4 - local.set 8 - local.get 3 - i32.load - local.set 0 - end - local.get 3 - local.get 8 - i32.const 3 - i32.and - i32.store offset=4 - local.get 3 - local.get 0 - i32.const 3 - i32.and - i32.store - block ;; label = @4 - local.get 0 - i32.const 2 + loop ;; label = @6 + block ;; label = @7 + local.get 1 + i32.load offset=8 + local.tee 0 + i32.const 1 + i32.and + br_if 0 (;@7;) + local.get 1 + i32.load + i32.const -4 + i32.and + local.tee 7 + local.get 1 + i32.const 8 + i32.add + local.tee 8 + i32.sub + local.get 6 + i32.lt_u + br_if 5 (;@2;) + block ;; label = @8 + local.get 8 + i32.const 72 + i32.add + local.get 7 + local.get 6 + i32.sub + local.get 5 + i32.and + local.tee 7 + i32.le_u + br_if 0 (;@8;) + local.get 3 + local.get 8 + i32.and + br_if 6 (;@2;) + local.get 2 + local.get 0 + i32.const -4 + i32.and + i32.store + local.get 1 + i32.load + local.set 2 + local.get 1 + local.set 0 + br 4 (;@4;) + end + i32.const 0 + local.set 2 + local.get 7 + i32.const 0 + i32.store + local.get 7 + i32.const -8 + i32.add + local.tee 0 + i64.const 0 + i64.store align=4 + local.get 0 + local.get 1 + i32.load + i32.const -4 + i32.and + i32.store + block ;; label = @8 + local.get 1 + i32.load + local.tee 8 + i32.const -4 + i32.and + local.tee 6 + i32.eqz + br_if 0 (;@8;) + i32.const 0 + local.get 6 + local.get 8 + i32.const 2 + i32.and + select + local.tee 8 + i32.eqz + br_if 0 (;@8;) + local.get 8 + local.get 8 + i32.load offset=4 + i32.const 3 + i32.and + local.get 0 + i32.or + i32.store offset=4 + local.get 0 + i32.load offset=4 + i32.const 3 + i32.and + local.set 2 + end + local.get 0 + local.get 2 + local.get 1 + i32.or + i32.store offset=4 + local.get 1 + local.get 1 + i32.load offset=8 + i32.const -2 + i32.and + i32.store offset=8 + local.get 1 + local.get 1 + i32.load + local.tee 2 + i32.const 3 + i32.and + local.get 0 + i32.or + local.tee 8 + i32.store + local.get 2 + i32.const 2 + i32.and + br_if 2 (;@5;) + local.get 0 + i32.load + local.set 2 + br 3 (;@4;) + end + local.get 1 + local.get 0 + i32.const -2 + i32.and + i32.store offset=8 + block ;; label = @7 + block ;; label = @8 + local.get 1 + i32.load offset=4 + i32.const -4 + i32.and + local.tee 0 + br_if 0 (;@8;) + i32.const 0 + local.set 0 + br 1 (;@7;) + end + i32.const 0 + local.get 0 + local.get 0 + i32.load8_u + i32.const 1 + i32.and + select + local.set 0 + end + local.get 1 + call $wee_alloc::neighbors::Neighbors::remove + block ;; label = @7 + local.get 1 + i32.load8_u + i32.const 2 + i32.and + i32.eqz + br_if 0 (;@7;) + local.get 0 + local.get 0 + i32.load + i32.const 2 + i32.or + i32.store + end + local.get 2 + local.get 0 + i32.store + local.get 0 + local.set 1 + br 0 (;@6;) + end + end + local.get 1 + local.get 8 + i32.const -3 i32.and - i32.eqz - br_if 0 (;@4;) - local.get 7 - local.get 7 - i32.load - i32.const 2 - i32.or i32.store - end - local.get 2 - local.get 7 - i32.store - local.get 7 - local.set 3 - local.get 7 - i32.load offset=8 - local.tee 1 - i32.const 1 - i32.and - br_if 0 (;@3;) - end - end - block ;; label = @2 - local.get 7 - i32.load - i32.const -4 - i32.and - local.tee 0 - local.get 7 - i32.const 8 - i32.add - local.tee 3 - i32.sub - local.get 6 - i32.lt_u - br_if 0 (;@2;) - block ;; label = @3 - block ;; label = @4 - local.get 3 - i32.const 72 - i32.add local.get 0 - local.get 6 - i32.sub - local.get 5 - i32.and - local.tee 0 - i32.le_u - br_if 0 (;@4;) - local.get 4 - local.get 3 - i32.and - br_if 2 (;@2;) - local.get 2 - local.get 7 - i32.load offset=8 - i32.const -4 - i32.and - i32.store - local.get 7 - i32.load - local.set 1 - local.get 7 - local.set 3 - br 1 (;@3;) - end - i32.const 0 - local.set 1 - local.get 0 - i32.const 0 - i32.store - local.get 0 - i32.const -8 - i32.add - local.tee 3 - i64.const 0 - i64.store align=4 - local.get 3 - local.get 7 - i32.load - i32.const -4 - i32.and - i32.store - block ;; label = @4 - local.get 7 i32.load - local.tee 8 - i32.const -4 - i32.and - local.tee 0 - i32.eqz - br_if 0 (;@4;) - local.get 8 i32.const 2 - i32.and - br_if 0 (;@4;) - local.get 0 - local.get 0 - i32.load offset=4 - i32.const 3 - i32.and - local.get 3 i32.or - i32.store offset=4 - local.get 3 - i32.load offset=4 - i32.const 3 - i32.and - local.set 1 + local.set 2 end - local.get 3 - local.get 1 - local.get 7 - i32.or - i32.store offset=4 - local.get 7 - local.get 7 - i32.load offset=8 - i32.const -2 - i32.and - i32.store offset=8 - local.get 7 - local.get 7 - i32.load - local.tee 1 - i32.const 3 - i32.and - local.get 3 + local.get 0 + local.get 2 + i32.const 1 i32.or - local.tee 0 i32.store - block ;; label = @4 - local.get 1 - i32.const 2 - i32.and - br_if 0 (;@4;) - local.get 3 - i32.load - local.set 1 - br 1 (;@3;) - end - local.get 7 local.get 0 - i32.const -3 - i32.and - i32.store - local.get 3 - i32.load - i32.const 2 - i32.or - local.set 1 + i32.const 8 + i32.add + local.set 4 end - local.get 3 - local.get 1 - i32.const 1 - i32.or - i32.store - local.get 3 - i32.const 8 - i32.add + local.get 4 return end local.get 2 - local.get 1 + local.get 0 i32.store - local.get 1 - local.set 3 - local.get 1 - br_if 0 (;@1;) + br 0 (;@1;) end - i32.const 0 ) - (func $::alloc (;10;) (type 7) (param i32 i32 i32) (result i32) - (local i32 i32 i32) + (func $::alloc (;15;) (type 0) (param i32 i32 i32) (result i32) + (local i32 i32) global.get $__stack_pointer i32.const 16 i32.sub @@ -516,10 +611,9 @@ local.get 2 i32.const 3 i32.add - local.tee 4 i32.const 2 i32.shr_u - local.tee 5 + local.tee 4 local.get 1 local.get 3 i32.const 12 @@ -527,58 +621,26 @@ call $wee_alloc::alloc_first_fit local.tee 2 br_if 0 (;@2;) - block ;; label = @3 - local.get 4 - i32.const -4 - i32.and - local.tee 2 - local.get 1 - i32.const 3 - i32.shl - i32.const 512 - i32.add - local.tee 4 - local.get 2 - local.get 4 - i32.gt_u - select - i32.const 65543 - i32.add - local.tee 4 - i32.const 16 - i32.shr_u - memory.grow - local.tee 2 - i32.const -1 - i32.ne - br_if 0 (;@3;) - i32.const 0 - local.set 2 - br 1 (;@2;) - end - local.get 2 - i32.const 16 - i32.shl - local.tee 2 + local.get 3 + local.get 3 + local.get 4 + local.get 1 + call $::new_cell_for_free_list i32.const 0 - i32.store offset=4 - local.get 2 + local.set 2 + local.get 3 + i32.load + br_if 0 (;@2;) + local.get 3 + i32.load offset=4 + local.tee 2 local.get 3 i32.load offset=12 i32.store offset=8 - local.get 2 - local.get 2 - local.get 4 - i32.const -65536 - i32.and - i32.add - i32.const 2 - i32.or - i32.store local.get 3 local.get 2 i32.store offset=12 - local.get 5 + local.get 4 local.get 1 local.get 3 i32.const 12 @@ -597,8 +659,8 @@ global.set $__stack_pointer local.get 2 ) - (func $::dealloc (;11;) (type 8) (param i32 i32 i32 i32) - (local i32 i32 i32 i32 i32 i32 i32) + (func $::dealloc (;16;) (type 10) (param i32 i32 i32 i32) + (local i32 i32 i32) block ;; label = @1 local.get 1 i32.eqz @@ -606,9 +668,6 @@ local.get 3 i32.eqz br_if 0 (;@1;) - local.get 0 - i32.load - local.set 4 local.get 1 i32.const 0 i32.store @@ -618,163 +677,107 @@ local.tee 3 local.get 3 i32.load - local.tee 5 + local.tee 4 i32.const -2 i32.and - local.tee 6 i32.store + local.get 0 + i32.load + local.set 5 block ;; label = @2 block ;; label = @3 + block ;; label = @4 + local.get 3 + i32.const 4 + i32.add + i32.load + i32.const -4 + i32.and + local.tee 6 + i32.eqz + br_if 0 (;@4;) + local.get 6 + i32.load8_u + i32.const 1 + i32.and + br_if 0 (;@4;) + local.get 3 + call $wee_alloc::neighbors::Neighbors::remove + local.get 3 + i32.load8_u + i32.const 2 + i32.and + i32.eqz + br_if 1 (;@3;) + local.get 6 + local.get 6 + i32.load + i32.const 2 + i32.or + i32.store + br 1 (;@3;) + end block ;; label = @4 block ;; label = @5 - local.get 3 - i32.const 4 - i32.add - local.tee 7 - i32.load + local.get 4 i32.const -4 i32.and - local.tee 8 + local.tee 6 i32.eqz br_if 0 (;@5;) - local.get 8 - i32.load - local.tee 9 - i32.const 1 - i32.and - br_if 0 (;@5;) - block ;; label = @6 - block ;; label = @7 - block ;; label = @8 - local.get 5 - i32.const -4 - i32.and - local.tee 10 - br_if 0 (;@8;) - local.get 8 - local.set 1 - br 1 (;@7;) - end - local.get 8 - local.set 1 - local.get 5 - i32.const 2 - i32.and - br_if 0 (;@7;) - local.get 10 - local.get 10 - i32.load offset=4 - i32.const 3 - i32.and - local.get 8 - i32.or - i32.store offset=4 - local.get 3 - i32.load - local.set 6 - local.get 7 - i32.load - local.tee 5 - i32.const -4 - i32.and - local.tee 1 - i32.eqz - br_if 1 (;@6;) - local.get 1 - i32.load - local.set 9 - end - local.get 1 - local.get 6 - i32.const -4 - i32.and - local.get 9 - i32.const 3 - i32.and - i32.or - i32.store - local.get 7 - i32.load - local.set 5 - local.get 3 - i32.load - local.set 6 - end - local.get 7 - local.get 5 - i32.const 3 - i32.and - i32.store - local.get 3 - local.get 6 - i32.const 3 - i32.and - i32.store + i32.const 0 local.get 6 + local.get 4 i32.const 2 i32.and + select + local.tee 4 + i32.eqz + br_if 0 (;@5;) + local.get 4 + i32.load8_u + i32.const 1 + i32.and i32.eqz br_if 1 (;@4;) - local.get 8 - local.get 8 - i32.load - i32.const 2 - i32.or - i32.store - br 1 (;@4;) end - local.get 5 - i32.const -4 - i32.and - local.tee 8 - i32.eqz - br_if 1 (;@3;) - local.get 5 - i32.const 2 - i32.and - br_if 1 (;@3;) - local.get 8 - i32.load8_u - i32.const 1 - i32.and - br_if 1 (;@3;) local.get 1 - local.get 8 - i32.load offset=8 - i32.const -4 - i32.and + local.get 5 i32.store - local.get 8 - local.get 3 - i32.const 1 - i32.or - i32.store offset=8 + br 2 (;@2;) end + local.get 1 local.get 4 - local.set 3 - br 1 (;@2;) + i32.load offset=8 + i32.const -4 + i32.and + i32.store + local.get 4 + local.get 3 + i32.const 1 + i32.or + i32.store offset=8 end - local.get 1 - local.get 4 - i32.store + local.get 5 + local.set 3 end local.get 0 local.get 3 i32.store end ) - (func $wit_bindgen::rt::run_ctors_once (;12;) (type 4) + (func $wit_bindgen::rt::run_ctors_once (;17;) (type 6) block ;; label = @1 i32.const 0 - i32.load8_u offset=1048581 + i32.load8_u offset=1048893 br_if 0 (;@1;) call $__wasm_call_ctors i32.const 0 i32.const 1 - i32.store8 offset=1048581 + i32.store8 offset=1048893 end ) - (func $cabi_realloc (;13;) (type 6) (param i32 i32 i32 i32) (result i32) + (func $cabi_realloc (;18;) (type 9) (param i32 i32 i32 i32) (result i32) block ;; label = @1 block ;; label = @2 block ;; label = @3 @@ -784,7 +787,7 @@ i32.eqz br_if 2 (;@1;) i32.const 0 - i32.load8_u offset=1048580 + i32.load8_u offset=1048892 drop local.get 3 local.get 2 @@ -806,12 +809,1209 @@ end local.get 2 ) - (table (;0;) 1 1 funcref) + (func $core::ptr::drop_in_place (;19;) (type 2) (param i32)) + (func $core::panicking::panic_fmt (;20;) (type 7) (param i32 i32) + (local i32) + global.get $__stack_pointer + i32.const 32 + i32.sub + local.tee 2 + global.set $__stack_pointer + local.get 2 + i32.const 1 + i32.store16 offset=28 + local.get 2 + local.get 1 + i32.store offset=24 + local.get 2 + local.get 0 + i32.store offset=20 + local.get 2 + i32.const 1048604 + i32.store offset=16 + local.get 2 + i32.const 1048604 + i32.store offset=12 + local.get 2 + i32.const 12 + i32.add + call $rust_begin_unwind + unreachable + ) + (func $core::panicking::panic_bounds_check (;21;) (type 8) (param i32 i32 i32) + (local i32) + global.get $__stack_pointer + i32.const 48 + i32.sub + local.tee 3 + global.set $__stack_pointer + local.get 3 + local.get 1 + i32.store offset=4 + local.get 3 + local.get 0 + i32.store + local.get 3 + i32.const 8 + i32.add + i32.const 12 + i32.add + i64.const 2 + i64.store align=4 + local.get 3 + i32.const 32 + i32.add + i32.const 12 + i32.add + i32.const 1 + i32.store + local.get 3 + i32.const 2 + i32.store offset=12 + local.get 3 + i32.const 1048672 + i32.store offset=8 + local.get 3 + i32.const 1 + i32.store offset=36 + local.get 3 + local.get 3 + i32.const 32 + i32.add + i32.store offset=16 + local.get 3 + local.get 3 + i32.store offset=40 + local.get 3 + local.get 3 + i32.const 4 + i32.add + i32.store offset=32 + local.get 3 + i32.const 8 + i32.add + local.get 2 + call $core::panicking::panic_fmt + unreachable + ) + (func $core::fmt::num::imp::::fmt (;22;) (type 1) (param i32 i32) (result i32) + local.get 0 + i64.load32_u + i32.const 1 + local.get 1 + call $core::fmt::num::imp::fmt_u64 + ) + (func $::type_id (;23;) (type 7) (param i32 i32) + local.get 0 + i64.const -832627268303839913 + i64.store offset=8 + local.get 0 + i64.const -2179734974050036201 + i64.store + ) + (func $core::fmt::Formatter::pad_integral (;24;) (type 11) (param i32 i32 i32 i32 i32 i32) (result i32) + (local i32 i32 i32 i32 i32 i32 i32) + block ;; label = @1 + block ;; label = @2 + local.get 1 + br_if 0 (;@2;) + local.get 5 + i32.const 1 + i32.add + local.set 6 + local.get 0 + i32.load offset=28 + local.set 7 + i32.const 45 + local.set 8 + br 1 (;@1;) + end + i32.const 43 + i32.const 1114112 + local.get 0 + i32.load offset=28 + local.tee 7 + i32.const 1 + i32.and + local.tee 1 + select + local.set 8 + local.get 1 + local.get 5 + i32.add + local.set 6 + end + block ;; label = @1 + block ;; label = @2 + local.get 7 + i32.const 4 + i32.and + br_if 0 (;@2;) + i32.const 0 + local.set 2 + br 1 (;@1;) + end + block ;; label = @2 + block ;; label = @3 + local.get 3 + i32.const 16 + i32.lt_u + br_if 0 (;@3;) + local.get 2 + local.get 3 + call $core::str::count::do_count_chars + local.set 1 + br 1 (;@2;) + end + block ;; label = @3 + local.get 3 + br_if 0 (;@3;) + i32.const 0 + local.set 1 + br 1 (;@2;) + end + local.get 3 + i32.const 3 + i32.and + local.set 9 + block ;; label = @3 + block ;; label = @4 + local.get 3 + i32.const 4 + i32.ge_u + br_if 0 (;@4;) + i32.const 0 + local.set 1 + i32.const 0 + local.set 10 + br 1 (;@3;) + end + local.get 3 + i32.const -4 + i32.and + local.set 11 + i32.const 0 + local.set 1 + i32.const 0 + local.set 10 + loop ;; label = @4 + local.get 1 + local.get 2 + local.get 10 + i32.add + local.tee 12 + i32.load8_s + i32.const -65 + i32.gt_s + i32.add + local.get 12 + i32.const 1 + i32.add + i32.load8_s + i32.const -65 + i32.gt_s + i32.add + local.get 12 + i32.const 2 + i32.add + i32.load8_s + i32.const -65 + i32.gt_s + i32.add + local.get 12 + i32.const 3 + i32.add + i32.load8_s + i32.const -65 + i32.gt_s + i32.add + local.set 1 + local.get 11 + local.get 10 + i32.const 4 + i32.add + local.tee 10 + i32.ne + br_if 0 (;@4;) + end + end + local.get 9 + i32.eqz + br_if 0 (;@2;) + local.get 2 + local.get 10 + i32.add + local.set 12 + loop ;; label = @3 + local.get 1 + local.get 12 + i32.load8_s + i32.const -65 + i32.gt_s + i32.add + local.set 1 + local.get 12 + i32.const 1 + i32.add + local.set 12 + local.get 9 + i32.const -1 + i32.add + local.tee 9 + br_if 0 (;@3;) + end + end + local.get 1 + local.get 6 + i32.add + local.set 6 + end + block ;; label = @1 + block ;; label = @2 + local.get 0 + i32.load + br_if 0 (;@2;) + i32.const 1 + local.set 1 + local.get 0 + i32.load offset=20 + local.tee 12 + local.get 0 + i32.load offset=24 + local.tee 10 + local.get 8 + local.get 2 + local.get 3 + call $core::fmt::Formatter::pad_integral::write_prefix + br_if 1 (;@1;) + local.get 12 + local.get 4 + local.get 5 + local.get 10 + i32.load offset=12 + call_indirect (type 0) + return + end + block ;; label = @2 + local.get 0 + i32.load offset=4 + local.tee 9 + local.get 6 + i32.gt_u + br_if 0 (;@2;) + i32.const 1 + local.set 1 + local.get 0 + i32.load offset=20 + local.tee 12 + local.get 0 + i32.load offset=24 + local.tee 10 + local.get 8 + local.get 2 + local.get 3 + call $core::fmt::Formatter::pad_integral::write_prefix + br_if 1 (;@1;) + local.get 12 + local.get 4 + local.get 5 + local.get 10 + i32.load offset=12 + call_indirect (type 0) + return + end + block ;; label = @2 + local.get 7 + i32.const 8 + i32.and + i32.eqz + br_if 0 (;@2;) + local.get 0 + i32.load offset=16 + local.set 11 + local.get 0 + i32.const 48 + i32.store offset=16 + local.get 0 + i32.load8_u offset=32 + local.set 7 + i32.const 1 + local.set 1 + local.get 0 + i32.const 1 + i32.store8 offset=32 + local.get 0 + i32.load offset=20 + local.tee 12 + local.get 0 + i32.load offset=24 + local.tee 10 + local.get 8 + local.get 2 + local.get 3 + call $core::fmt::Formatter::pad_integral::write_prefix + br_if 1 (;@1;) + local.get 9 + local.get 6 + i32.sub + i32.const 1 + i32.add + local.set 1 + block ;; label = @3 + loop ;; label = @4 + local.get 1 + i32.const -1 + i32.add + local.tee 1 + i32.eqz + br_if 1 (;@3;) + local.get 12 + i32.const 48 + local.get 10 + i32.load offset=16 + call_indirect (type 1) + i32.eqz + br_if 0 (;@4;) + end + i32.const 1 + return + end + i32.const 1 + local.set 1 + local.get 12 + local.get 4 + local.get 5 + local.get 10 + i32.load offset=12 + call_indirect (type 0) + br_if 1 (;@1;) + local.get 0 + local.get 7 + i32.store8 offset=32 + local.get 0 + local.get 11 + i32.store offset=16 + i32.const 0 + local.set 1 + br 1 (;@1;) + end + local.get 9 + local.get 6 + i32.sub + local.set 6 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + local.get 0 + i32.load8_u offset=32 + local.tee 1 + br_table 2 (;@2;) 0 (;@4;) 1 (;@3;) 0 (;@4;) 2 (;@2;) + end + local.get 6 + local.set 1 + i32.const 0 + local.set 6 + br 1 (;@2;) + end + local.get 6 + i32.const 1 + i32.shr_u + local.set 1 + local.get 6 + i32.const 1 + i32.add + i32.const 1 + i32.shr_u + local.set 6 + end + local.get 1 + i32.const 1 + i32.add + local.set 1 + local.get 0 + i32.const 24 + i32.add + i32.load + local.set 12 + local.get 0 + i32.load offset=16 + local.set 9 + local.get 0 + i32.load offset=20 + local.set 10 + block ;; label = @2 + loop ;; label = @3 + local.get 1 + i32.const -1 + i32.add + local.tee 1 + i32.eqz + br_if 1 (;@2;) + local.get 10 + local.get 9 + local.get 12 + i32.load offset=16 + call_indirect (type 1) + i32.eqz + br_if 0 (;@3;) + end + i32.const 1 + return + end + i32.const 1 + local.set 1 + local.get 10 + local.get 12 + local.get 8 + local.get 2 + local.get 3 + call $core::fmt::Formatter::pad_integral::write_prefix + br_if 0 (;@1;) + local.get 10 + local.get 4 + local.get 5 + local.get 12 + i32.load offset=12 + call_indirect (type 0) + br_if 0 (;@1;) + i32.const 0 + local.set 1 + loop ;; label = @2 + block ;; label = @3 + local.get 6 + local.get 1 + i32.ne + br_if 0 (;@3;) + local.get 6 + local.get 6 + i32.lt_u + return + end + local.get 1 + i32.const 1 + i32.add + local.set 1 + local.get 10 + local.get 9 + local.get 12 + i32.load offset=16 + call_indirect (type 1) + i32.eqz + br_if 0 (;@2;) + end + local.get 1 + i32.const -1 + i32.add + local.get 6 + i32.lt_u + return + end + local.get 1 + ) + (func $core::str::count::do_count_chars (;25;) (type 1) (param i32 i32) (result i32) + (local i32 i32 i32 i32 i32 i32 i32 i32) + block ;; label = @1 + block ;; label = @2 + local.get 1 + local.get 0 + i32.const 3 + i32.add + i32.const -4 + i32.and + local.tee 2 + local.get 0 + i32.sub + local.tee 3 + i32.lt_u + br_if 0 (;@2;) + local.get 1 + local.get 3 + i32.sub + local.tee 4 + i32.const 4 + i32.lt_u + br_if 0 (;@2;) + local.get 4 + i32.const 3 + i32.and + local.set 5 + i32.const 0 + local.set 6 + i32.const 0 + local.set 1 + block ;; label = @3 + local.get 2 + local.get 0 + i32.eq + local.tee 7 + br_if 0 (;@3;) + i32.const 0 + local.set 1 + block ;; label = @4 + block ;; label = @5 + local.get 2 + local.get 0 + i32.const -1 + i32.xor + i32.add + i32.const 3 + i32.ge_u + br_if 0 (;@5;) + i32.const 0 + local.set 8 + br 1 (;@4;) + end + i32.const 0 + local.set 8 + loop ;; label = @5 + local.get 1 + local.get 0 + local.get 8 + i32.add + local.tee 9 + i32.load8_s + i32.const -65 + i32.gt_s + i32.add + local.get 9 + i32.const 1 + i32.add + i32.load8_s + i32.const -65 + i32.gt_s + i32.add + local.get 9 + i32.const 2 + i32.add + i32.load8_s + i32.const -65 + i32.gt_s + i32.add + local.get 9 + i32.const 3 + i32.add + i32.load8_s + i32.const -65 + i32.gt_s + i32.add + local.set 1 + local.get 8 + i32.const 4 + i32.add + local.tee 8 + br_if 0 (;@5;) + end + end + local.get 7 + br_if 0 (;@3;) + local.get 0 + local.get 2 + i32.sub + local.set 2 + local.get 0 + local.get 8 + i32.add + local.set 9 + loop ;; label = @4 + local.get 1 + local.get 9 + i32.load8_s + i32.const -65 + i32.gt_s + i32.add + local.set 1 + local.get 9 + i32.const 1 + i32.add + local.set 9 + local.get 2 + i32.const 1 + i32.add + local.tee 2 + br_if 0 (;@4;) + end + end + local.get 0 + local.get 3 + i32.add + local.set 8 + block ;; label = @3 + local.get 5 + i32.eqz + br_if 0 (;@3;) + local.get 8 + local.get 4 + i32.const -4 + i32.and + i32.add + local.tee 9 + i32.load8_s + i32.const -65 + i32.gt_s + local.set 6 + local.get 5 + i32.const 1 + i32.eq + br_if 0 (;@3;) + local.get 6 + local.get 9 + i32.load8_s offset=1 + i32.const -65 + i32.gt_s + i32.add + local.set 6 + local.get 5 + i32.const 2 + i32.eq + br_if 0 (;@3;) + local.get 6 + local.get 9 + i32.load8_s offset=2 + i32.const -65 + i32.gt_s + i32.add + local.set 6 + end + local.get 4 + i32.const 2 + i32.shr_u + local.set 3 + local.get 6 + local.get 1 + i32.add + local.set 2 + loop ;; label = @3 + local.get 8 + local.set 6 + local.get 3 + i32.eqz + br_if 2 (;@1;) + local.get 3 + i32.const 192 + local.get 3 + i32.const 192 + i32.lt_u + select + local.tee 4 + i32.const 3 + i32.and + local.set 7 + local.get 4 + i32.const 2 + i32.shl + local.set 5 + i32.const 0 + local.set 9 + block ;; label = @4 + local.get 4 + i32.const 4 + i32.lt_u + br_if 0 (;@4;) + local.get 6 + local.get 5 + i32.const 1008 + i32.and + i32.add + local.set 0 + i32.const 0 + local.set 9 + local.get 6 + local.set 1 + loop ;; label = @5 + local.get 1 + i32.const 12 + i32.add + i32.load + local.tee 8 + i32.const -1 + i32.xor + i32.const 7 + i32.shr_u + local.get 8 + i32.const 6 + i32.shr_u + i32.or + i32.const 16843009 + i32.and + local.get 1 + i32.const 8 + i32.add + i32.load + local.tee 8 + i32.const -1 + i32.xor + i32.const 7 + i32.shr_u + local.get 8 + i32.const 6 + i32.shr_u + i32.or + i32.const 16843009 + i32.and + local.get 1 + i32.const 4 + i32.add + i32.load + local.tee 8 + i32.const -1 + i32.xor + i32.const 7 + i32.shr_u + local.get 8 + i32.const 6 + i32.shr_u + i32.or + i32.const 16843009 + i32.and + local.get 1 + i32.load + local.tee 8 + i32.const -1 + i32.xor + i32.const 7 + i32.shr_u + local.get 8 + i32.const 6 + i32.shr_u + i32.or + i32.const 16843009 + i32.and + local.get 9 + i32.add + i32.add + i32.add + i32.add + local.set 9 + local.get 1 + i32.const 16 + i32.add + local.tee 1 + local.get 0 + i32.ne + br_if 0 (;@5;) + end + end + local.get 3 + local.get 4 + i32.sub + local.set 3 + local.get 6 + local.get 5 + i32.add + local.set 8 + local.get 9 + i32.const 8 + i32.shr_u + i32.const 16711935 + i32.and + local.get 9 + i32.const 16711935 + i32.and + i32.add + i32.const 65537 + i32.mul + i32.const 16 + i32.shr_u + local.get 2 + i32.add + local.set 2 + local.get 7 + i32.eqz + br_if 0 (;@3;) + end + local.get 6 + local.get 4 + i32.const 252 + i32.and + i32.const 2 + i32.shl + i32.add + local.tee 9 + i32.load + local.tee 1 + i32.const -1 + i32.xor + i32.const 7 + i32.shr_u + local.get 1 + i32.const 6 + i32.shr_u + i32.or + i32.const 16843009 + i32.and + local.set 1 + block ;; label = @3 + local.get 7 + i32.const 1 + i32.eq + br_if 0 (;@3;) + local.get 9 + i32.load offset=4 + local.tee 8 + i32.const -1 + i32.xor + i32.const 7 + i32.shr_u + local.get 8 + i32.const 6 + i32.shr_u + i32.or + i32.const 16843009 + i32.and + local.get 1 + i32.add + local.set 1 + local.get 7 + i32.const 2 + i32.eq + br_if 0 (;@3;) + local.get 9 + i32.load offset=8 + local.tee 9 + i32.const -1 + i32.xor + i32.const 7 + i32.shr_u + local.get 9 + i32.const 6 + i32.shr_u + i32.or + i32.const 16843009 + i32.and + local.get 1 + i32.add + local.set 1 + end + local.get 1 + i32.const 8 + i32.shr_u + i32.const 459007 + i32.and + local.get 1 + i32.const 16711935 + i32.and + i32.add + i32.const 65537 + i32.mul + i32.const 16 + i32.shr_u + local.get 2 + i32.add + return + end + block ;; label = @2 + local.get 1 + br_if 0 (;@2;) + i32.const 0 + return + end + local.get 1 + i32.const 3 + i32.and + local.set 8 + block ;; label = @2 + block ;; label = @3 + local.get 1 + i32.const 4 + i32.ge_u + br_if 0 (;@3;) + i32.const 0 + local.set 2 + i32.const 0 + local.set 9 + br 1 (;@2;) + end + local.get 1 + i32.const -4 + i32.and + local.set 3 + i32.const 0 + local.set 2 + i32.const 0 + local.set 9 + loop ;; label = @3 + local.get 2 + local.get 0 + local.get 9 + i32.add + local.tee 1 + i32.load8_s + i32.const -65 + i32.gt_s + i32.add + local.get 1 + i32.const 1 + i32.add + i32.load8_s + i32.const -65 + i32.gt_s + i32.add + local.get 1 + i32.const 2 + i32.add + i32.load8_s + i32.const -65 + i32.gt_s + i32.add + local.get 1 + i32.const 3 + i32.add + i32.load8_s + i32.const -65 + i32.gt_s + i32.add + local.set 2 + local.get 3 + local.get 9 + i32.const 4 + i32.add + local.tee 9 + i32.ne + br_if 0 (;@3;) + end + end + local.get 8 + i32.eqz + br_if 0 (;@1;) + local.get 0 + local.get 9 + i32.add + local.set 1 + loop ;; label = @2 + local.get 2 + local.get 1 + i32.load8_s + i32.const -65 + i32.gt_s + i32.add + local.set 2 + local.get 1 + i32.const 1 + i32.add + local.set 1 + local.get 8 + i32.const -1 + i32.add + local.tee 8 + br_if 0 (;@2;) + end + end + local.get 2 + ) + (func $core::fmt::Formatter::pad_integral::write_prefix (;26;) (type 12) (param i32 i32 i32 i32 i32) (result i32) + (local i32) + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + local.get 2 + i32.const 1114112 + i32.eq + br_if 0 (;@3;) + i32.const 1 + local.set 5 + local.get 0 + local.get 2 + local.get 1 + i32.load offset=16 + call_indirect (type 1) + br_if 1 (;@2;) + end + local.get 3 + br_if 1 (;@1;) + i32.const 0 + local.set 5 + end + local.get 5 + return + end + local.get 0 + local.get 3 + local.get 4 + local.get 1 + i32.load offset=12 + call_indirect (type 0) + ) + (func $core::fmt::num::imp::fmt_u64 (;27;) (type 13) (param i64 i32 i32) (result i32) + (local i32 i32 i64 i32 i32 i32) + global.get $__stack_pointer + i32.const 48 + i32.sub + local.tee 3 + global.set $__stack_pointer + i32.const 39 + local.set 4 + block ;; label = @1 + block ;; label = @2 + local.get 0 + i64.const 10000 + i64.ge_u + br_if 0 (;@2;) + local.get 0 + local.set 5 + br 1 (;@1;) + end + i32.const 39 + local.set 4 + loop ;; label = @2 + local.get 3 + i32.const 9 + i32.add + local.get 4 + i32.add + local.tee 6 + i32.const -4 + i32.add + local.get 0 + local.get 0 + i64.const 10000 + i64.div_u + local.tee 5 + i64.const 10000 + i64.mul + i64.sub + i32.wrap_i64 + local.tee 7 + i32.const 65535 + i32.and + i32.const 100 + i32.div_u + local.tee 8 + i32.const 1 + i32.shl + i32.const 1048688 + i32.add + i32.load16_u align=1 + i32.store16 align=1 + local.get 6 + i32.const -2 + i32.add + local.get 7 + local.get 8 + i32.const 100 + i32.mul + i32.sub + i32.const 65535 + i32.and + i32.const 1 + i32.shl + i32.const 1048688 + i32.add + i32.load16_u align=1 + i32.store16 align=1 + local.get 4 + i32.const -4 + i32.add + local.set 4 + local.get 0 + i64.const 99999999 + i64.gt_u + local.set 6 + local.get 5 + local.set 0 + local.get 6 + br_if 0 (;@2;) + end + end + block ;; label = @1 + local.get 5 + i32.wrap_i64 + local.tee 6 + i32.const 99 + i32.le_u + br_if 0 (;@1;) + local.get 3 + i32.const 9 + i32.add + local.get 4 + i32.const -2 + i32.add + local.tee 4 + i32.add + local.get 5 + i32.wrap_i64 + local.tee 6 + local.get 6 + i32.const 65535 + i32.and + i32.const 100 + i32.div_u + local.tee 6 + i32.const 100 + i32.mul + i32.sub + i32.const 65535 + i32.and + i32.const 1 + i32.shl + i32.const 1048688 + i32.add + i32.load16_u align=1 + i32.store16 align=1 + end + block ;; label = @1 + block ;; label = @2 + local.get 6 + i32.const 10 + i32.lt_u + br_if 0 (;@2;) + local.get 3 + i32.const 9 + i32.add + local.get 4 + i32.const -2 + i32.add + local.tee 4 + i32.add + local.get 6 + i32.const 1 + i32.shl + i32.const 1048688 + i32.add + i32.load16_u align=1 + i32.store16 align=1 + br 1 (;@1;) + end + local.get 3 + i32.const 9 + i32.add + local.get 4 + i32.const -1 + i32.add + local.tee 4 + i32.add + local.get 6 + i32.const 48 + i32.add + i32.store8 + end + local.get 2 + local.get 1 + i32.const 1048604 + i32.const 0 + local.get 3 + i32.const 9 + i32.add + local.get 4 + i32.add + i32.const 39 + local.get 4 + i32.sub + call $core::fmt::Formatter::pad_integral + local.set 4 + local.get 3 + i32.const 48 + i32.add + global.set $__stack_pointer + local.get 4 + ) + (table (;0;) 4 4 funcref) (memory (;0;) 17) (global $__stack_pointer (;0;) (mut i32) i32.const 1048576) (export "memory" (memory 0)) (export "miden:base/note-script@1.0.0#note-script" (func $miden:base/note-script@1.0.0#note-script)) (export "cabi_realloc" (func $cabi_realloc)) + (elem (;0;) (i32.const 1) func $core::fmt::num::imp::::fmt $core::ptr::drop_in_place $::type_id) + (data $.rodata (;0;) (i32.const 1048576) "src/lib.rs\00\00\00\00\10\00\0a\00\00\00\1f\00\00\00,\00\00\00\02\00\00\00\00\00\00\00\01\00\00\00\03\00\00\00index out of bounds: the len is but the index is \00\00,\00\10\00 \00\00\00L\00\10\00\12\00\00\0000010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899") ) (core module (;1;) (type (;0;) (func (param i32))) diff --git a/tests/integration/expected/sdk_basic_wallet/miden_sdk.wat b/tests/integration/expected/sdk_basic_wallet/miden_sdk.wat index cc75b296e..74f7ea538 100644 --- a/tests/integration/expected/sdk_basic_wallet/miden_sdk.wat +++ b/tests/integration/expected/sdk_basic_wallet/miden_sdk.wat @@ -1,30 +1,49 @@ (component (core module (;0;) (type (;0;) (func)) - (type (;1;) (func (param f64) (result f64))) - (type (;2;) (func (param f64 f64 f64 f64) (result i32))) - (type (;3;) (func (param i32 f64 i64 f64 f64) (result i32))) + (type (;1;) (func (param i64) (result i64))) + (type (;2;) (func (param i64 i64 i64 i64) (result i32))) + (type (;3;) (func (param i32 i64 i64 i64 i64) (result i32))) (type (;4;) (func (param i32 i32) (result i32))) (type (;5;) (func (param i32 i32 i32 i32) (result i32))) (type (;6;) (func (param i32 i32 i32) (result i32))) (type (;7;) (func (param i32 i32 i32 i32))) (func $__wasm_call_ctors (;0;) (type 0)) - (func $miden:base/core-types@1.0.0#account-id-from-felt (;1;) (type 1) (param f64) (result f64) + (func $miden:base/core-types@1.0.0#account-id-from-felt (;1;) (type 1) (param i64) (result i64) call $wit_bindgen::rt::run_ctors_once local.get 0 ) - (func $miden:base/types@1.0.0#from-core-asset (;2;) (type 2) (param f64 f64 f64 f64) (result i32) + (func $miden:base/types@1.0.0#from-core-asset (;2;) (type 2) (param i64 i64 i64 i64) (result i32) call $wit_bindgen::rt::run_ctors_once - unreachable - unreachable + i32.const 0 + i64.const 0 + i64.store offset=1048592 + i32.const 0 + local.get 0 + i64.store offset=1048584 + i32.const 0 + i32.const 0 + i32.store8 offset=1048576 + i32.const 1048576 ) - (func $miden:base/types@1.0.0#to-core-asset (;3;) (type 3) (param i32 f64 i64 f64 f64) (result i32) + (func $miden:base/types@1.0.0#to-core-asset (;3;) (type 3) (param i32 i64 i64 i64 i64) (result i32) call $wit_bindgen::rt::run_ctors_once - unreachable - unreachable + i32.const 0 + i64.const 0 + i64.store offset=1048600 + i32.const 0 + i64.const 0 + i64.store offset=1048592 + i32.const 0 + i64.const 0 + i64.store offset=1048584 + i32.const 0 + i64.const 0 + i64.store offset=1048576 + i32.const 1048576 ) (func $__rust_alloc (;4;) (type 4) (param i32 i32) (result i32) - i32.const 1048576 + i32.const 1048616 local.get 1 local.get 0 call $::alloc @@ -32,7 +51,7 @@ (func $__rust_realloc (;5;) (type 5) (param i32 i32 i32 i32) (result i32) (local i32) block ;; label = @1 - i32.const 1048576 + i32.const 1048616 local.get 2 local.get 3 call $::alloc @@ -48,7 +67,7 @@ i32.lt_u select memory.copy - i32.const 1048576 + i32.const 1048616 local.get 0 local.get 2 local.get 1 @@ -630,12 +649,12 @@ (func $wit_bindgen::rt::run_ctors_once (;9;) (type 0) block ;; label = @1 i32.const 0 - i32.load8_u offset=1048581 + i32.load8_u offset=1048621 br_if 0 (;@1;) call $__wasm_call_ctors i32.const 0 i32.const 1 - i32.store8 offset=1048581 + i32.store8 offset=1048621 end ) (func $cabi_realloc (;10;) (type 5) (param i32 i32 i32 i32) (result i32) @@ -648,7 +667,7 @@ i32.eqz br_if 2 (;@1;) i32.const 0 - i32.load8_u offset=1048580 + i32.load8_u offset=1048620 drop local.get 3 local.get 2 @@ -682,19 +701,19 @@ (core instance (;0;) (instantiate 0)) (alias core export 0 "memory" (core memory (;0;))) (alias core export 0 "cabi_realloc" (core func (;0;))) - (type (;0;) (record (field "inner" float64))) + (type (;0;) (record (field "inner" u64))) (type (;1;) (record (field "inner" 0))) (type (;2;) (func (param "felt" 0) (result 1))) (alias core export 0 "miden:base/core-types@1.0.0#account-id-from-felt" (core func (;1;))) (func (;0;) (type 2) (canon lift (core func 1))) (component (;0;) - (type (;0;) (record (field "inner" float64))) + (type (;0;) (record (field "inner" u64))) (import "import-type-felt" (type (;1;) (eq 0))) (type (;2;) (record (field "inner" 1))) (import "import-type-account-id" (type (;3;) (eq 2))) (type (;4;) (func (param "felt" 1) (result 3))) (import "import-func-account-id-from-felt" (func (;0;) (type 4))) - (type (;5;) (record (field "inner" float64))) + (type (;5;) (record (field "inner" u64))) (export (;6;) "felt" (type 5)) (type (;7;) (tuple 6 6 6 6)) (export (;8;) "word" (type 7)) @@ -746,7 +765,7 @@ (func (;2;) (type 10) (canon lift (core func 3) (memory 0))) (alias export 1 "felt" (type (;11;))) (component (;1;) - (type (;0;) (record (field "inner" float64))) + (type (;0;) (record (field "inner" u64))) (import "import-type-felt" (type (;1;) (eq 0))) (type (;2;) (record (field "inner" 1))) (import "import-type-account-id" (type (;3;) (eq 2))) diff --git a/tests/integration/expected/shl_i16.hir b/tests/integration/expected/shl_i16.hir index 8fe4b0353..f0e4f4882 100644 --- a/tests/integration/expected/shl_i16.hir +++ b/tests/integration/expected/shl_i16.hir @@ -1,15 +1,16 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = const.i32 15 : i32; - v4 = band v1, v3 : i32; - v5 = shl.wrapping v0, v4 : i32; - ret v5; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = const.i32 15 : i32; + v4 = band v1, v3 : i32; + v5 = shl.wrapping v0, v4 : i32; + ret v5; + } } diff --git a/tests/integration/expected/shl_i32.hir b/tests/integration/expected/shl_i32.hir index cc2a16672..cdc4cffab 100644 --- a/tests/integration/expected/shl_i32.hir +++ b/tests/integration/expected/shl_i32.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = shl.wrapping v0, v1 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = shl.wrapping v0, v1 : i32; + ret v3; + } } diff --git a/tests/integration/expected/shl_i8.hir b/tests/integration/expected/shl_i8.hir index cb012632e..1764cb671 100644 --- a/tests/integration/expected/shl_i8.hir +++ b/tests/integration/expected/shl_i8.hir @@ -1,15 +1,16 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = const.i32 7 : i32; - v4 = band v1, v3 : i32; - v5 = shl.wrapping v0, v4 : i32; - ret v5; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = const.i32 7 : i32; + v4 = band v1, v3 : i32; + v5 = shl.wrapping v0, v4 : i32; + ret v5; + } } diff --git a/tests/integration/expected/shl_u16.hir b/tests/integration/expected/shl_u16.hir index 9de9f8cd5..ca294419c 100644 --- a/tests/integration/expected/shl_u16.hir +++ b/tests/integration/expected/shl_u16.hir @@ -1,17 +1,18 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = const.i32 15 : i32; - v4 = band v1, v3 : i32; - v5 = shl.wrapping v0, v4 : i32; - v6 = const.i32 65535 : i32; - v7 = band v5, v6 : i32; - ret v7; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = const.i32 15 : i32; + v4 = band v1, v3 : i32; + v5 = shl.wrapping v0, v4 : i32; + v6 = const.i32 65535 : i32; + v7 = band v5, v6 : i32; + ret v7; + } } diff --git a/tests/integration/expected/shl_u32.hir b/tests/integration/expected/shl_u32.hir index cc2a16672..cdc4cffab 100644 --- a/tests/integration/expected/shl_u32.hir +++ b/tests/integration/expected/shl_u32.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = shl.wrapping v0, v1 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = shl.wrapping v0, v1 : i32; + ret v3; + } } diff --git a/tests/integration/expected/shl_u8.hir b/tests/integration/expected/shl_u8.hir index 75fdaf17b..e02b523c5 100644 --- a/tests/integration/expected/shl_u8.hir +++ b/tests/integration/expected/shl_u8.hir @@ -1,17 +1,18 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = const.i32 7 : i32; - v4 = band v1, v3 : i32; - v5 = shl.wrapping v0, v4 : i32; - v6 = const.i32 255 : i32; - v7 = band v5, v6 : i32; - ret v7; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = const.i32 7 : i32; + v4 = band v1, v3 : i32; + v5 = shl.wrapping v0, v4 : i32; + v6 = const.i32 255 : i32; + v7 = band v5, v6 : i32; + ret v7; + } } diff --git a/tests/integration/expected/shr_u16.hir b/tests/integration/expected/shr_u16.hir index 4c615bb4c..c6db1fab0 100644 --- a/tests/integration/expected/shr_u16.hir +++ b/tests/integration/expected/shr_u16.hir @@ -1,18 +1,19 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = const.i32 15 : i32; - v4 = band v1, v3 : i32; - v5 = cast v0 : u32; - v6 = cast v4 : u32; - v7 = shr.wrapping v5, v6 : u32; - v8 = cast v7 : i32; - ret v8; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = const.i32 15 : i32; + v4 = band v1, v3 : i32; + v5 = cast v0 : u32; + v6 = cast v4 : u32; + v7 = shr.wrapping v5, v6 : u32; + v8 = cast v7 : i32; + ret v8; + } } diff --git a/tests/integration/expected/shr_u32.hir b/tests/integration/expected/shr_u32.hir index b060de6d8..f249fd7b3 100644 --- a/tests/integration/expected/shr_u32.hir +++ b/tests/integration/expected/shr_u32.hir @@ -1,16 +1,17 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = cast v0 : u32; - v4 = cast v1 : u32; - v5 = shr.wrapping v3, v4 : u32; - v6 = cast v5 : i32; - ret v6; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = cast v0 : u32; + v4 = cast v1 : u32; + v5 = shr.wrapping v3, v4 : u32; + v6 = cast v5 : i32; + ret v6; + } } diff --git a/tests/integration/expected/shr_u8.hir b/tests/integration/expected/shr_u8.hir index e799b232e..fc9e7a2cd 100644 --- a/tests/integration/expected/shr_u8.hir +++ b/tests/integration/expected/shr_u8.hir @@ -1,18 +1,19 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = const.i32 7 : i32; - v4 = band v1, v3 : i32; - v5 = cast v0 : u32; - v6 = cast v4 : u32; - v7 = shr.wrapping v5, v6 : u32; - v8 = cast v7 : i32; - ret v8; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = const.i32 7 : i32; + v4 = band v1, v3 : i32; + v5 = cast v0 : u32; + v6 = cast v4 : u32; + v7 = shr.wrapping v5, v6 : u32; + v8 = cast v7 : i32; + ret v8; + } } diff --git a/tests/integration/expected/sub_i16.hir b/tests/integration/expected/sub_i16.hir index 67eb7d3f9..89b3e618e 100644 --- a/tests/integration/expected/sub_i16.hir +++ b/tests/integration/expected/sub_i16.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = sub.wrapping v0, v1 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = sub.wrapping v0, v1 : i32; + ret v3; + } } diff --git a/tests/integration/expected/sub_i32.hir b/tests/integration/expected/sub_i32.hir index 67eb7d3f9..89b3e618e 100644 --- a/tests/integration/expected/sub_i32.hir +++ b/tests/integration/expected/sub_i32.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = sub.wrapping v0, v1 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = sub.wrapping v0, v1 : i32; + ret v3; + } } diff --git a/tests/integration/expected/sub_i8.hir b/tests/integration/expected/sub_i8.hir index 67eb7d3f9..89b3e618e 100644 --- a/tests/integration/expected/sub_i8.hir +++ b/tests/integration/expected/sub_i8.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = sub.wrapping v0, v1 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = sub.wrapping v0, v1 : i32; + ret v3; + } } diff --git a/tests/integration/expected/sub_u16.hir b/tests/integration/expected/sub_u16.hir index d0e7d310e..1afcf3adb 100644 --- a/tests/integration/expected/sub_u16.hir +++ b/tests/integration/expected/sub_u16.hir @@ -1,15 +1,16 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = sub.wrapping v0, v1 : i32; - v4 = const.i32 65535 : i32; - v5 = band v3, v4 : i32; - ret v5; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = sub.wrapping v0, v1 : i32; + v4 = const.i32 65535 : i32; + v5 = band v3, v4 : i32; + ret v5; + } } diff --git a/tests/integration/expected/sub_u32.hir b/tests/integration/expected/sub_u32.hir index 67eb7d3f9..89b3e618e 100644 --- a/tests/integration/expected/sub_u32.hir +++ b/tests/integration/expected/sub_u32.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = sub.wrapping v0, v1 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = sub.wrapping v0, v1 : i32; + ret v3; + } } diff --git a/tests/integration/expected/sub_u8.hir b/tests/integration/expected/sub_u8.hir index f1bb1c449..c914cd3b6 100644 --- a/tests/integration/expected/sub_u8.hir +++ b/tests/integration/expected/sub_u8.hir @@ -1,15 +1,16 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = sub.wrapping v0, v1 : i32; - v4 = const.i32 255 : i32; - v5 = band v3, v4 : i32; - ret v5; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = sub.wrapping v0, v1 : i32; + v4 = const.i32 255 : i32; + v5 = band v3, v4 : i32; + ret v5; + } } diff --git a/tests/integration/expected/xor_bool.hir b/tests/integration/expected/xor_bool.hir index 7c8363ada..175e427cb 100644 --- a/tests/integration/expected/xor_bool.hir +++ b/tests/integration/expected/xor_bool.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = bxor v0, v1 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = bxor v0, v1 : i32; + ret v3; + } } diff --git a/tests/integration/expected/xor_i16.hir b/tests/integration/expected/xor_i16.hir index 63b788944..2221d39f5 100644 --- a/tests/integration/expected/xor_i16.hir +++ b/tests/integration/expected/xor_i16.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = bxor v1, v0 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = bxor v1, v0 : i32; + ret v3; + } } diff --git a/tests/integration/expected/xor_i32.hir b/tests/integration/expected/xor_i32.hir index 63b788944..2221d39f5 100644 --- a/tests/integration/expected/xor_i32.hir +++ b/tests/integration/expected/xor_i32.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = bxor v1, v0 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = bxor v1, v0 : i32; + ret v3; + } } diff --git a/tests/integration/expected/xor_i8.hir b/tests/integration/expected/xor_i8.hir index 63b788944..2221d39f5 100644 --- a/tests/integration/expected/xor_i8.hir +++ b/tests/integration/expected/xor_i8.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = bxor v1, v0 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = bxor v1, v0 : i32; + ret v3; + } } diff --git a/tests/integration/expected/xor_u16.hir b/tests/integration/expected/xor_u16.hir index 63b788944..2221d39f5 100644 --- a/tests/integration/expected/xor_u16.hir +++ b/tests/integration/expected/xor_u16.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = bxor v1, v0 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = bxor v1, v0 : i32; + ret v3; + } } diff --git a/tests/integration/expected/xor_u32.hir b/tests/integration/expected/xor_u32.hir index 63b788944..2221d39f5 100644 --- a/tests/integration/expected/xor_u32.hir +++ b/tests/integration/expected/xor_u32.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = bxor v1, v0 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = bxor v1, v0 : i32; + ret v3; + } } diff --git a/tests/integration/expected/xor_u8.hir b/tests/integration/expected/xor_u8.hir index 63b788944..2221d39f5 100644 --- a/tests/integration/expected/xor_u8.hir +++ b/tests/integration/expected/xor_u8.hir @@ -1,13 +1,14 @@ -module noname +module noname { -const $0 = 0x00100000; + const $0 = 0x00100000; -global external @__stack_pointer : i32 = $0 { id = 0 }; -global external @gv1 : i32 = $0 { id = 1 }; -global external @gv2 : i32 = $0 { id = 2 }; + global external @__stack_pointer : i32 = $0 { id = 0 }; + global external @gv1 : i32 = $0 { id = 1 }; + global external @gv2 : i32 = $0 { id = 2 }; -pub fn entrypoint(i32, i32) -> i32 { -block0(v0: i32, v1: i32): - v3 = bxor v1, v0 : i32; - ret v3; + pub fn entrypoint(i32, i32) -> i32 { + block0(v0: i32, v1: i32): + v3 = bxor v1, v0 : i32; + ret v3; + } } diff --git a/tests/integration/src/compiler_test.rs b/tests/integration/src/compiler_test.rs index 874fc9c95..c9bb3b5c0 100644 --- a/tests/integration/src/compiler_test.rs +++ b/tests/integration/src/compiler_test.rs @@ -19,6 +19,7 @@ use miden_diagnostics::Emitter; use miden_diagnostics::NullEmitter; use miden_diagnostics::SourceSpan; use miden_diagnostics::Verbosity; +use miden_frontend_wasm::translate_component; use miden_frontend_wasm::translate_module; use miden_frontend_wasm::WasmTranslationConfig; @@ -40,8 +41,10 @@ pub enum CompilerTestSource { cargo_project_folder_name: String, artifact_name: String, }, - // Wasm(String), - // Ir(String), + RustCargoComponent { + cargo_project_folder_name: String, + artifact_name: String, + }, } impl CompilerTestSource { @@ -51,13 +54,41 @@ impl CompilerTestSource { cargo_project_folder_name: _, artifact_name, } => artifact_name.clone(), + CompilerTestSource::RustCargoComponent { + cargo_project_folder_name: _, + artifact_name, + } => artifact_name.clone(), _ => panic!("Not a Rust Cargo project"), } } } +#[derive(derive_more::From)] +pub enum HirArtifact { + Program(Box), + Component(Box), +} + +impl HirArtifact { + pub fn unwrap_program(&self) -> &miden_hir::Program { + match self { + HirArtifact::Program(program) => program, + _ => panic!("Expected a Program"), + } + } + + pub fn unwrap_component(&self) -> &miden_hir::Component { + match self { + HirArtifact::Component(component) => component, + _ => panic!("Expected a Component"), + } + } +} + /// Compile to different stages (e.g. Wasm, IR, MASM) and compare the results against expected output pub struct CompilerTest { + /// The Wasm translation configuration + pub config: WasmTranslationConfig, /// The compiler session pub session: Session, /// The source code used to compile the test @@ -67,32 +98,37 @@ pub struct CompilerTest { /// The compiled Wasm component/module pub wasm_bytes: Vec, /// The compiled IR - pub hir: Option>, + pub hir: Option, /// The compiled MASM pub ir_masm: Option>, } impl CompilerTest { /// Compile the Wasm component from a Rust Cargo project using cargo-component - pub fn rust_source_cargo_component(cargo_project_folder: &str) -> Self { + pub fn rust_source_cargo_component( + cargo_project_folder: &str, + config: WasmTranslationConfig, + ) -> Self { let manifest_path = format!("../rust-apps-wasm/{}/Cargo.toml", cargo_project_folder); // dbg!(&pwd); let mut cargo_build_cmd = Command::new("cargo"); // Enable Wasm bulk-memory proposal (uses Wasm `memory.copy` op instead of `memcpy` import) cargo_build_cmd.env("RUSTFLAGS", "-C target-feature=+bulk-memory"); + // Enable Wasm bulk-memory proposal (uses Wasm `memory.copy` op instead of `memcpy` import) + cargo_build_cmd.env("RUSTFLAGS", "-C target-feature=+bulk-memory"); cargo_build_cmd .arg("component") .arg("build") .arg("--manifest-path") .arg(manifest_path) - .arg("--release") - // compile std as part of crate graph compilation - // https://doc.rust-lang.org/cargo/reference/unstable.html#build-std - .arg("-Z") - .arg("build-std=std,core,alloc,panic_abort") - .arg("-Z") - // abort on panic without message formatting (core::fmt uses call_indirect) - .arg("build-std-features=panic_immediate_abort"); + .arg("--release"); + // compile std as part of crate graph compilation + // https://doc.rust-lang.org/cargo/reference/unstable.html#build-std + // .arg("-Z") + // .arg("build-std=std,core,alloc,panic_abort") + // .arg("-Z") + // // abort on panic without message formatting (core::fmt uses call_indirect) + // .arg("build-std-features=panic_immediate_abort"); let mut child = cargo_build_cmd .arg("--message-format=json-render-diagnostics") .stdout(Stdio::piped()) @@ -146,8 +182,9 @@ impl CompilerTest { .unwrap() .to_string(); Self { + config, session: default_session(), - source: CompilerTestSource::RustCargo { + source: CompilerTestSource::RustCargoComponent { cargo_project_folder_name: cargo_project_folder.to_string(), artifact_name, }, @@ -180,11 +217,11 @@ impl CompilerTest { .arg(target_dir.clone()) // compile std as part of crate graph compilation // https://doc.rust-lang.org/cargo/reference/unstable.html#build-std - .arg("-Z") - .arg("build-std=core,alloc") - .arg("-Z") - // abort on panic without message formatting (core::fmt uses call_indirect) - .arg("build-std-features=panic_immediate_abort") + // .arg("-Z") + // .arg("build-std=core,alloc") + // .arg("-Z") + // // abort on panic without message formatting (core::fmt uses call_indirect) + // .arg("build-std-features=panic_immediate_abort") .output() .expect("Failed to execute cargo build."); if !output.status.success() { @@ -212,6 +249,7 @@ impl CompilerTest { ), }; CompilerTest { + config: WasmTranslationConfig::default(), session, source: CompilerTestSource::RustCargo { cargo_project_folder_name: cargo_project_folder.to_string(), @@ -229,6 +267,7 @@ impl CompilerTest { let wasm_bytes = compile_rust_file(rust_source); let session = default_session(); CompilerTest { + config: WasmTranslationConfig::default(), session, source: CompilerTestSource::Rust(rust_source.to_string()), wasm_bytes, @@ -244,10 +283,15 @@ impl CompilerTest { r#" #![no_std] #![no_main] + // This allows us to abort if the panic handler is invoked, but + // it is gated behind a perma-unstable nightly feature + #![feature(core_intrinsics)] + // Disable the warning triggered by the use of the `core_intrinsics` feature + #![allow(internal_features)] #[panic_handler] fn my_panic(_info: &core::panic::PanicInfo) -> ! {{ - loop {{}} + core::intrinsics::abort() }} #[no_mangle] @@ -269,6 +313,7 @@ impl CompilerTest { }; CompilerTest { + config: WasmTranslationConfig::default(), session, source: CompilerTestSource::Rust(rust_source.to_string()), wasm_bytes, @@ -285,35 +330,75 @@ impl CompilerTest { expected_wat_file.assert_eq(&wat); } + fn wasm_to_ir(&self) -> HirArtifact { + match &self.source { + CompilerTestSource::RustCargoComponent { .. } => { + // Wasm component is expected + let ir_component = + translate_component(&self.wasm_bytes, &self.config, &self.session.diagnostics) + .expect("Failed to translate Wasm to IR component"); + Box::new(ir_component).into() + } + _ => { + // Wasm module is expected + use miden_hir_transform as transforms; + let mut ir_module = + translate_module(&self.wasm_bytes, &self.config, &self.session.diagnostics) + .expect("Failed to translate Wasm to IR module"); + + let mut analyses = AnalysisManager::new(); + let mut rewrites = RewriteSet::default(); + rewrites.push(ModuleRewritePassAdapter::new( + transforms::SplitCriticalEdges, + )); + rewrites.push(ModuleRewritePassAdapter::new(transforms::Treeify)); + rewrites.push(ModuleRewritePassAdapter::new(transforms::InlineBlocks)); + rewrites + .apply(&mut ir_module, &mut analyses, &self.session) + .expect("Failed to apply rewrites"); + + let mut builder = ProgramBuilder::new(&self.session.diagnostics) + .with_module(Box::new(ir_module)) + .unwrap(); + if let Some(entrypoint) = self.entrypoint.as_ref() { + builder = builder.with_entrypoint(entrypoint.clone()); + } + let hir_program = builder.link().expect("Failed to link IR program"); + hir_program.into() + } + } + } + + /// Get the compiled IR, compiling the Wasm if it has not been compiled yet + pub fn hir(&mut self) -> &HirArtifact { + if self.hir.is_none() { + self.hir = Some(self.wasm_to_ir()); + } + self.hir.as_ref().unwrap() + } /// Compare the compiled IR against the expected output pub fn expect_ir(&mut self, expected_hir_file: expect_test::ExpectFile) { - let hir_program = if let Some(hir) = self.hir.as_ref() { - hir - } else { - let hir_module = wasm_to_ir(&self.wasm_bytes, &self.session); - let mut builder = ProgramBuilder::new(&self.session.diagnostics) - .with_module(hir_module.into()) - .unwrap(); - if let Some(entrypoint) = self.entrypoint.as_ref() { - builder = builder.with_entrypoint(entrypoint.clone()); + match self.hir() { + HirArtifact::Program(hir_program) => { + // Program does not implement pretty printer yet, use the first module + let ir_module = demangle( + &hir_program + .modules() + .iter() + .take(1) + .collect::>() + .first() + .expect("no module in IR program") + .to_string() + .as_str(), + ); + expected_hir_file.assert_eq(&ir_module); } - let hir_program = builder.link().expect("Failed to link IR program"); - self.hir = Some(hir_program); - self.hir.as_ref().unwrap() - }; - // Program does not implement pretty printer yet, use the first module - let ir_module = demangle( - &hir_program - .modules() - .iter() - .take(1) - .collect::>() - .first() - .expect("no module in IR program") - .to_string() - .as_str(), - ); - expected_hir_file.assert_eq(&ir_module); + HirArtifact::Component(hir_component) => { + let ir_component = demangle(&hir_component.to_string()); + expected_hir_file.assert_eq(&ir_component); + } + } } /// Compare the compiled MASM against the expected output @@ -356,7 +441,12 @@ impl CompilerTest { if self.ir_masm.is_none() { let mut compiler = MasmCompiler::new(&self.session); let hir = self.hir.take().expect("IR is not compiled"); - let ir_masm = compiler.compile(hir).unwrap(); + let ir_masm = match hir { + HirArtifact::Program(hir_program) => compiler.compile(hir_program).unwrap(), + HirArtifact::Component(_hir_component) => { + todo!("Component to MASM compilation is not implemented yet") + } + }; let frozen = ir_masm.freeze(); self.ir_masm = Some(frozen); } @@ -454,25 +544,3 @@ fn hash_string(inputs: &str) -> String { let hash = ::digest(inputs.as_bytes()); format!("{:x}", hash) } - -fn wasm_to_ir(wasm_bytes: &[u8], session: &Session) -> miden_hir::Module { - use miden_hir_transform as transforms; - let mut ir_module = translate_module( - wasm_bytes, - &WasmTranslationConfig::default(), - &session.diagnostics, - ) - .expect("Failed to translate Wasm to IR module"); - - let mut analyses = AnalysisManager::new(); - let mut rewrites = RewriteSet::default(); - rewrites.push(ModuleRewritePassAdapter::new( - transforms::SplitCriticalEdges, - )); - rewrites.push(ModuleRewritePassAdapter::new(transforms::Treeify)); - rewrites.push(ModuleRewritePassAdapter::new(transforms::InlineBlocks)); - rewrites - .apply(&mut ir_module, &mut analyses, session) - .expect("Failed to apply rewrites"); - ir_module -} diff --git a/tests/integration/src/rust_masm_tests/components.rs b/tests/integration/src/rust_masm_tests/components.rs index 57a51655b..bbfc75a37 100644 --- a/tests/integration/src/rust_masm_tests/components.rs +++ b/tests/integration/src/rust_masm_tests/components.rs @@ -1,9 +1,6 @@ -use crate::compiler_test::default_session; use crate::CompilerTest; use expect_test::expect_file; use miden_core::crypto::hash::RpoDigest; -use miden_frontend_wasm::translate_component; -use miden_frontend_wasm::ExportMetadata; use miden_frontend_wasm::ImportMetadata; use miden_frontend_wasm::WasmTranslationConfig; use miden_hir::InterfaceFunctionIdent; @@ -15,88 +12,61 @@ use miden_hir::Type; #[test] fn wcm_add() { // Has no imports - let test = CompilerTest::rust_source_cargo_component("add-comp"); + let config = Default::default(); + let mut test = CompilerTest::rust_source_cargo_component("add-comp", config); let artifact_name = test.source.artifact_name(); test.expect_wasm(expect_file![format!( "../../expected/components/{artifact_name}.wat" )]); - // test.expect_wit_bind(expect_file![format!( - // "../../expected/components/bindings/{artifact_name}_bindings.rs" - // )]); - let wasm_bytes = test.wasm_bytes; - - let session = default_session(); - let export_metadata = [( - Symbol::intern("add").into(), - ExportMetadata { - invoke_method: miden_hir::FunctionInvocationMethod::Call, - }, - )] - .into_iter() - .collect(); - let config = WasmTranslationConfig { - export_metadata, - ..Default::default() - }; - let component = translate_component(&wasm_bytes, &config, &session.diagnostics) - .expect("Failed to translate Wasm to IR module"); - assert!(!component.modules().is_empty()); + test.expect_ir(expect_file![format!( + "../../expected/components/{artifact_name}.hir" + )]); } #[test] fn wcm_inc() { // Imports an add component used in the above test - let test = CompilerTest::rust_source_cargo_component("inc-comp"); - let artifact_name = test.source.artifact_name(); - test.expect_wasm(expect_file![format!( - "../../expected/components/{artifact_name}.wat" - )]); - // test.expect_wit_bind(expect_file![format!( - // "../../expected/components/bindings/{artifact_name}_bindings.rs" - // )]); - let wasm_bytes = test.wasm_bytes; - - let session = default_session(); - let interface_function_ident = InterfaceFunctionIdent { - interface: InterfaceIdent::from_full_ident("miden:add/add@1.0.0".to_string()), + interface: InterfaceIdent::from_full_ident( + "miden:add-package/add-interface@1.0.0".to_string(), + ), function: Symbol::intern("add"), }; let import_metadata = [( interface_function_ident.clone(), ImportMetadata { digest: RpoDigest::default(), - invoke_method: miden_hir::FunctionInvocationMethod::Call, - }, - )] - .into_iter() - .collect(); - let export_metadata = [( - Symbol::intern("inc").into(), - ExportMetadata { - invoke_method: miden_hir::FunctionInvocationMethod::Call, }, )] .into_iter() .collect(); + let config = WasmTranslationConfig { import_metadata, - export_metadata, ..Default::default() }; - let ir = translate_component(&wasm_bytes, &config, &session.diagnostics) - .expect("Failed to translate Wasm to IR module"); - assert!(!ir.modules().is_empty()); + let mut test = CompilerTest::rust_source_cargo_component("inc-comp", config); + let artifact_name = test.source.artifact_name(); + test.expect_wasm(expect_file![format!( + "../../expected/components/{artifact_name}.wat" + )]); + test.expect_ir(expect_file![format!( + "../../expected/components/{artifact_name}.hir" + )]); + + let ir_component = test.hir().unwrap_component(); + + assert!(!ir_component.modules().is_empty()); let export_name_sym = Symbol::intern("inc"); - let export = ir.exports().get(&export_name_sym.into()).unwrap(); + let export = ir_component.exports().get(&export_name_sym.into()).unwrap(); assert_eq!(export.function.function.as_symbol(), export_name_sym); let expected_export_func_ty = LiftedFunctionType { params: vec![Type::U32], results: vec![Type::U32], }; assert_eq!(export.function_ty, expected_export_func_ty); - let module = ir.modules().front().get().unwrap(); + let module = ir_component.modules().first().unwrap().1; dbg!(&module.imports()); let import_info = module.imports(); let function_id = import_info @@ -110,7 +80,7 @@ fn wcm_inc() { .clone(); assert_eq!(function_id.module, module.name); // assert_eq!(function_id.function, interface_function_ident.function); - let component_import = ir.imports().get(&function_id).unwrap(); + let component_import = ir_component.imports().get(&function_id).unwrap(); assert_eq!( component_import.interface_function, interface_function_ident diff --git a/tests/integration/src/rust_masm_tests/sdk.rs b/tests/integration/src/rust_masm_tests/sdk.rs index c47748a3e..99df8d7fd 100644 --- a/tests/integration/src/rust_masm_tests/sdk.rs +++ b/tests/integration/src/rust_masm_tests/sdk.rs @@ -1,9 +1,15 @@ use crate::CompilerTest; use expect_test::expect_file; +use miden_core::crypto::hash::RpoDigest; +use miden_frontend_wasm::ImportMetadata; +use miden_frontend_wasm::WasmTranslationConfig; +use miden_hir::FunctionExportName; +use miden_hir::{InterfaceFunctionIdent, InterfaceIdent, Symbol}; +use rustc_hash::FxHashMap; #[test] fn sdk() { - let test = CompilerTest::rust_source_cargo_component("sdk/sdk"); + let test = CompilerTest::rust_source_cargo_component("sdk/sdk", Default::default()); let artifact_name = test.source.artifact_name(); test.expect_wasm(expect_file![format!( "../../expected/sdk_basic_wallet/{artifact_name}.wat" @@ -12,16 +18,70 @@ fn sdk() { #[test] fn sdk_basic_wallet() { - let test = CompilerTest::rust_source_cargo_component("sdk/basic-wallet"); + let interface_tx = InterfaceIdent::from_full_ident("miden:base/tx@1.0.0".to_string()); + let create_note_ident = InterfaceFunctionIdent { + interface: interface_tx.clone(), + function: Symbol::intern("create-note"), + }; + let interface_account = InterfaceIdent::from_full_ident("miden:base/account@1.0.0".to_string()); + let add_asset_ident = InterfaceFunctionIdent { + interface: interface_account.clone(), + function: Symbol::intern("add-asset"), + }; + let remove_asset_ident = InterfaceFunctionIdent { + interface: interface_account.clone(), + function: Symbol::intern("remove-asset"), + }; + let import_metadata: FxHashMap = [ + ( + create_note_ident.clone(), + ImportMetadata { + digest: RpoDigest::default(), + }, + ), + ( + remove_asset_ident.clone(), + ImportMetadata { + digest: RpoDigest::default(), + }, + ), + ( + add_asset_ident.clone(), + ImportMetadata { + digest: RpoDigest::default(), + }, + ), + ] + .into_iter() + .collect(); + let expected_exports: Vec = vec![ + Symbol::intern("send-asset").into(), + Symbol::intern("receive-asset").into(), + ]; + let config = WasmTranslationConfig { + import_metadata: import_metadata.clone(), + ..Default::default() + }; + let mut test = CompilerTest::rust_source_cargo_component("sdk/basic-wallet", config); let artifact_name = test.source.artifact_name(); test.expect_wasm(expect_file![format!( "../../expected/sdk_basic_wallet/{artifact_name}.wat" )]); + test.expect_ir(expect_file![format!( + "../../expected/sdk_basic_wallet/{artifact_name}.hir" + )]); + let ir = test.hir().unwrap_component(); + for (_, import) in ir.imports() { + assert!(import_metadata.contains_key(&import.interface_function)); + } + for name in expected_exports { + assert!(ir.exports().contains_key(&name)); + } } #[test] fn sdk_basic_wallet_p2id_note() { - let test = CompilerTest::rust_source_cargo_component("sdk/p2id-note"); + let test = CompilerTest::rust_source_cargo_component("sdk/p2id-note", Default::default()); let artifact_name = test.source.artifact_name(); test.expect_wasm(expect_file![format!( "../../expected/sdk_basic_wallet/{artifact_name}.wat" diff --git a/tests/rust-apps-wasm/add-comp/src/bindings.rs b/tests/rust-apps-wasm/add-comp/src/bindings.rs index 3ca31dc0d..b5ca7dd6d 100644 --- a/tests/rust-apps-wasm/add-comp/src/bindings.rs +++ b/tests/rust-apps-wasm/add-comp/src/bindings.rs @@ -1,10 +1,10 @@ // Generated by `wit-bindgen` 0.16.0. DO NOT EDIT! pub mod exports { pub mod miden { - pub mod add { + pub mod add_package { #[allow(clippy::all)] - pub mod add { + pub mod add_interface { #[used] #[doc(hidden)] #[cfg(target_arch = "wasm32")] @@ -12,7 +12,7 @@ pub mod exports { const _: () = { #[doc(hidden)] - #[export_name = "miden:add/add@1.0.0#add"] + #[export_name = "miden:add-package/add-interface@1.0.0#add"] #[allow(non_snake_case)] unsafe extern "C" fn __export_add(arg0: i32,arg1: i32,) -> i32 { #[allow(unused_imports)] @@ -50,7 +50,7 @@ pub mod exports { #[cfg(target_arch = "wasm32")] #[link_section = "component-type:add-world"] #[doc(hidden)] -pub static __WIT_BINDGEN_COMPONENT_TYPE: [u8; 273] = [3, 0, 9, 97, 100, 100, 45, 119, 111, 114, 108, 100, 0, 97, 115, 109, 13, 0, 1, 0, 7, 49, 1, 65, 2, 1, 66, 2, 1, 64, 2, 1, 97, 121, 1, 98, 121, 0, 121, 4, 0, 3, 97, 100, 100, 1, 0, 4, 1, 19, 109, 105, 100, 101, 110, 58, 97, 100, 100, 47, 97, 100, 100, 64, 49, 46, 48, 46, 48, 5, 0, 11, 9, 1, 0, 3, 97, 100, 100, 3, 0, 0, 7, 82, 1, 65, 2, 1, 65, 2, 1, 66, 2, 1, 64, 2, 1, 97, 121, 1, 98, 121, 0, 121, 4, 0, 3, 97, 100, 100, 1, 0, 4, 1, 19, 109, 105, 100, 101, 110, 58, 97, 100, 100, 47, 97, 100, 100, 64, 49, 46, 48, 46, 48, 5, 0, 4, 1, 25, 109, 105, 100, 101, 110, 58, 97, 100, 100, 47, 97, 100, 100, 45, 119, 111, 114, 108, 100, 64, 49, 46, 48, 46, 48, 4, 0, 11, 15, 1, 0, 9, 97, 100, 100, 45, 119, 111, 114, 108, 100, 3, 2, 0, 0, 16, 12, 112, 97, 99, 107, 97, 103, 101, 45, 100, 111, 99, 115, 0, 123, 125, 0, 70, 9, 112, 114, 111, 100, 117, 99, 101, 114, 115, 1, 12, 112, 114, 111, 99, 101, 115, 115, 101, 100, 45, 98, 121, 2, 13, 119, 105, 116, 45, 99, 111, 109, 112, 111, 110, 101, 110, 116, 6, 48, 46, 49, 56, 46, 50, 16, 119, 105, 116, 45, 98, 105, 110, 100, 103, 101, 110, 45, 114, 117, 115, 116, 6, 48, 46, 49, 54, 46, 48]; +pub static __WIT_BINDGEN_COMPONENT_TYPE: [u8; 327] = [3, 0, 9, 97, 100, 100, 45, 119, 111, 114, 108, 100, 0, 97, 115, 109, 13, 0, 1, 0, 7, 67, 1, 65, 2, 1, 66, 2, 1, 64, 2, 1, 97, 121, 1, 98, 121, 0, 121, 4, 0, 3, 97, 100, 100, 1, 0, 4, 1, 37, 109, 105, 100, 101, 110, 58, 97, 100, 100, 45, 112, 97, 99, 107, 97, 103, 101, 47, 97, 100, 100, 45, 105, 110, 116, 101, 114, 102, 97, 99, 101, 64, 49, 46, 48, 46, 48, 5, 0, 11, 19, 1, 0, 13, 97, 100, 100, 45, 105, 110, 116, 101, 114, 102, 97, 99, 101, 3, 0, 0, 7, 108, 1, 65, 2, 1, 65, 2, 1, 66, 2, 1, 64, 2, 1, 97, 121, 1, 98, 121, 0, 121, 4, 0, 3, 97, 100, 100, 1, 0, 4, 1, 37, 109, 105, 100, 101, 110, 58, 97, 100, 100, 45, 112, 97, 99, 107, 97, 103, 101, 47, 97, 100, 100, 45, 105, 110, 116, 101, 114, 102, 97, 99, 101, 64, 49, 46, 48, 46, 48, 5, 0, 4, 1, 33, 109, 105, 100, 101, 110, 58, 97, 100, 100, 45, 112, 97, 99, 107, 97, 103, 101, 47, 97, 100, 100, 45, 119, 111, 114, 108, 100, 64, 49, 46, 48, 46, 48, 4, 0, 11, 15, 1, 0, 9, 97, 100, 100, 45, 119, 111, 114, 108, 100, 3, 2, 0, 0, 16, 12, 112, 97, 99, 107, 97, 103, 101, 45, 100, 111, 99, 115, 0, 123, 125, 0, 70, 9, 112, 114, 111, 100, 117, 99, 101, 114, 115, 1, 12, 112, 114, 111, 99, 101, 115, 115, 101, 100, 45, 98, 121, 2, 13, 119, 105, 116, 45, 99, 111, 109, 112, 111, 110, 101, 110, 116, 6, 48, 46, 49, 56, 46, 50, 16, 119, 105, 116, 45, 98, 105, 110, 100, 103, 101, 110, 45, 114, 117, 115, 116, 6, 48, 46, 49, 54, 46, 48]; #[inline(never)] #[doc(hidden)] diff --git a/tests/rust-apps-wasm/add-comp/src/lib.rs b/tests/rust-apps-wasm/add-comp/src/lib.rs index efaacdcf2..f5ad2dc0c 100644 --- a/tests/rust-apps-wasm/add-comp/src/lib.rs +++ b/tests/rust-apps-wasm/add-comp/src/lib.rs @@ -1,16 +1,21 @@ #![no_std] +// This allows us to abort if the panic handler is invoked, but +// it is gated behind a perma-unstable nightly feature +#![feature(core_intrinsics)] +// Disable the warning triggered by the use of the `core_intrinsics` feature +#![allow(internal_features)] #[global_allocator] static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT; #[panic_handler] fn my_panic(_info: &core::panic::PanicInfo) -> ! { - loop {} + core::intrinsics::abort() } mod bindings; -use crate::bindings::exports::miden::add::add::Guest; +use crate::bindings::exports::miden::add_package::add_interface::Guest; struct Component; diff --git a/tests/rust-apps-wasm/add-comp/wit/add.wit b/tests/rust-apps-wasm/add-comp/wit/add.wit index 58515f715..b4dca0330 100644 --- a/tests/rust-apps-wasm/add-comp/wit/add.wit +++ b/tests/rust-apps-wasm/add-comp/wit/add.wit @@ -1,9 +1,9 @@ -package miden:add@1.0.0; +package miden:add-package@1.0.0; -interface add { +interface add-interface { add: func(a: u32, b: u32) -> u32; } world add-world { - export add; + export add-interface; } diff --git a/tests/rust-apps-wasm/fib/src/lib.rs b/tests/rust-apps-wasm/fib/src/lib.rs index 357025f8d..24d1b090c 100644 --- a/tests/rust-apps-wasm/fib/src/lib.rs +++ b/tests/rust-apps-wasm/fib/src/lib.rs @@ -1,11 +1,16 @@ #![no_std] +// This allows us to abort if the panic handler is invoked, but +// it is gated behind a perma-unstable nightly feature +#![feature(core_intrinsics)] +// Disable the warning triggered by the use of the `core_intrinsics` feature +#![allow(internal_features)] #[global_allocator] static A: dlmalloc::GlobalDlmalloc = dlmalloc::GlobalDlmalloc; #[panic_handler] fn my_panic(_info: &core::panic::PanicInfo) -> ! { - loop {} + core::intrinsics::abort() } pub fn fib(n: u32) -> u32 { diff --git a/tests/rust-apps-wasm/inc-comp/src/bindings.rs b/tests/rust-apps-wasm/inc-comp/src/bindings.rs index f2d746c01..c235308e5 100644 --- a/tests/rust-apps-wasm/inc-comp/src/bindings.rs +++ b/tests/rust-apps-wasm/inc-comp/src/bindings.rs @@ -31,10 +31,10 @@ pub trait Guest { fn inc(a: u32,) -> u32; } pub mod miden { - pub mod add { + pub mod add_package { #[allow(clippy::all)] - pub mod add { + pub mod add_interface { #[used] #[doc(hidden)] #[cfg(target_arch = "wasm32")] @@ -47,7 +47,7 @@ pub mod miden { unsafe { #[cfg(target_arch = "wasm32")] - #[link(wasm_import_module = "miden:add/add@1.0.0")] + #[link(wasm_import_module = "miden:add-package/add-interface@1.0.0")] extern "C" { #[link_name = "add"] fn wit_import(_: i32, _: i32, ) -> i32; @@ -68,7 +68,7 @@ pub mod miden { #[cfg(target_arch = "wasm32")] #[link_section = "component-type:inc"] #[doc(hidden)] -pub static __WIT_BINDGEN_COMPONENT_TYPE: [u8; 209] = [3, 0, 3, 105, 110, 99, 0, 97, 115, 109, 13, 0, 1, 0, 7, 92, 1, 65, 2, 1, 65, 4, 1, 66, 2, 1, 64, 2, 1, 97, 121, 1, 98, 121, 0, 121, 4, 0, 3, 97, 100, 100, 1, 0, 3, 1, 19, 109, 105, 100, 101, 110, 58, 97, 100, 100, 47, 97, 100, 100, 64, 49, 46, 48, 46, 48, 5, 0, 1, 64, 1, 1, 97, 121, 0, 121, 4, 0, 3, 105, 110, 99, 1, 1, 4, 1, 19, 109, 105, 100, 101, 110, 58, 105, 110, 99, 47, 105, 110, 99, 64, 49, 46, 48, 46, 48, 4, 0, 11, 9, 1, 0, 3, 105, 110, 99, 3, 0, 0, 0, 16, 12, 112, 97, 99, 107, 97, 103, 101, 45, 100, 111, 99, 115, 0, 123, 125, 0, 70, 9, 112, 114, 111, 100, 117, 99, 101, 114, 115, 1, 12, 112, 114, 111, 99, 101, 115, 115, 101, 100, 45, 98, 121, 2, 13, 119, 105, 116, 45, 99, 111, 109, 112, 111, 110, 101, 110, 116, 6, 48, 46, 49, 56, 46, 50, 16, 119, 105, 116, 45, 98, 105, 110, 100, 103, 101, 110, 45, 114, 117, 115, 116, 6, 48, 46, 49, 54, 46, 48]; +pub static __WIT_BINDGEN_COMPONENT_TYPE: [u8; 235] = [3, 0, 3, 105, 110, 99, 0, 97, 115, 109, 13, 0, 1, 0, 7, 118, 1, 65, 2, 1, 65, 4, 1, 66, 2, 1, 64, 2, 1, 97, 121, 1, 98, 121, 0, 121, 4, 0, 3, 97, 100, 100, 1, 0, 3, 1, 37, 109, 105, 100, 101, 110, 58, 97, 100, 100, 45, 112, 97, 99, 107, 97, 103, 101, 47, 97, 100, 100, 45, 105, 110, 116, 101, 114, 102, 97, 99, 101, 64, 49, 46, 48, 46, 48, 5, 0, 1, 64, 1, 1, 97, 121, 0, 121, 4, 0, 3, 105, 110, 99, 1, 1, 4, 1, 27, 109, 105, 100, 101, 110, 58, 105, 110, 99, 45, 112, 97, 99, 107, 97, 103, 101, 47, 105, 110, 99, 64, 49, 46, 48, 46, 48, 4, 0, 11, 9, 1, 0, 3, 105, 110, 99, 3, 0, 0, 0, 16, 12, 112, 97, 99, 107, 97, 103, 101, 45, 100, 111, 99, 115, 0, 123, 125, 0, 70, 9, 112, 114, 111, 100, 117, 99, 101, 114, 115, 1, 12, 112, 114, 111, 99, 101, 115, 115, 101, 100, 45, 98, 121, 2, 13, 119, 105, 116, 45, 99, 111, 109, 112, 111, 110, 101, 110, 116, 6, 48, 46, 49, 56, 46, 50, 16, 119, 105, 116, 45, 98, 105, 110, 100, 103, 101, 110, 45, 114, 117, 115, 116, 6, 48, 46, 49, 54, 46, 48]; #[inline(never)] #[doc(hidden)] diff --git a/tests/rust-apps-wasm/inc-comp/src/lib.rs b/tests/rust-apps-wasm/inc-comp/src/lib.rs index 496cf71fb..0a5753355 100644 --- a/tests/rust-apps-wasm/inc-comp/src/lib.rs +++ b/tests/rust-apps-wasm/inc-comp/src/lib.rs @@ -1,16 +1,21 @@ #![no_std] +// This allows us to abort if the panic handler is invoked, but +// it is gated behind a perma-unstable nightly feature +#![feature(core_intrinsics)] +// Disable the warning triggered by the use of the `core_intrinsics` feature +#![allow(internal_features)] #[global_allocator] static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT; #[panic_handler] fn my_panic(_info: &core::panic::PanicInfo) -> ! { - loop {} + core::intrinsics::abort() } mod bindings; -use crate::bindings::miden::add::add::add; +use crate::bindings::miden::add_package::add_interface::add; use crate::bindings::Guest; struct Component; diff --git a/tests/rust-apps-wasm/inc-comp/wit/inc.wit b/tests/rust-apps-wasm/inc-comp/wit/inc.wit index 213543895..b63637af8 100644 --- a/tests/rust-apps-wasm/inc-comp/wit/inc.wit +++ b/tests/rust-apps-wasm/inc-comp/wit/inc.wit @@ -1,8 +1,8 @@ -package miden:inc@1.0.0; +package miden:inc-package@1.0.0; -use miden:add/add@1.0.0; +use miden:add-package/add-interface@1.0.0; world inc { - import add; + import add-interface; export inc: func(a: u32) -> u32; } diff --git a/tests/rust-apps-wasm/sdk/basic-wallet/src/bindings.rs b/tests/rust-apps-wasm/sdk/basic-wallet/src/bindings.rs index 7a02447b9..9492a6752 100644 --- a/tests/rust-apps-wasm/sdk/basic-wallet/src/bindings.rs +++ b/tests/rust-apps-wasm/sdk/basic-wallet/src/bindings.rs @@ -15,9 +15,10 @@ pub mod miden { #[repr(C)] #[derive(Clone, Copy)] pub struct Felt { - /// We use f64 as the backing type for the field element. It has the size that we need and + /// We plan to use f64 as the backing type for the field element. It has the size that we need and /// we don't plan to support floating point arithmetic in programs for Miden VM. - pub inner: f64, + /// For now its u64 + pub inner: u64, } impl ::core::fmt::Debug for Felt { fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { @@ -221,15 +222,15 @@ pub mod miden { #[link(wasm_import_module = "miden:base/core-types@1.0.0")] extern "C" { #[link_name = "account-id-from-felt"] - fn wit_import(_: f64, ) -> f64; + fn wit_import(_: i64, ) -> i64; } #[cfg(not(target_arch = "wasm32"))] - fn wit_import(_: f64, ) -> f64{ unreachable!() } - let ret = wit_import(wit_bindgen::rt::as_f64(inner0)); + fn wit_import(_: i64, ) -> i64{ unreachable!() } + let ret = wit_import(wit_bindgen::rt::as_i64(inner0)); AccountId{ inner: Felt{ - inner: ret, + inner: ret as u64, }, } } @@ -265,15 +266,15 @@ pub mod miden { #[link(wasm_import_module = "miden:base/account@1.0.0")] extern "C" { #[link_name = "get-id"] - fn wit_import() -> f64; + fn wit_import() -> i64; } #[cfg(not(target_arch = "wasm32"))] - fn wit_import() -> f64{ unreachable!() } + fn wit_import() -> i64{ unreachable!() } let ret = wit_import(); super::super::super::miden::base::core_types::AccountId{ inner: super::super::super::miden::base::core_types::Felt{ - inner: ret, + inner: ret as u64, }, } } @@ -290,15 +291,15 @@ pub mod miden { #[link(wasm_import_module = "miden:base/account@1.0.0")] extern "C" { #[link_name = "get-nonce"] - fn wit_import() -> f64; + fn wit_import() -> i64; } #[cfg(not(target_arch = "wasm32"))] - fn wit_import() -> f64{ unreachable!() } + fn wit_import() -> i64{ unreachable!() } let ret = wit_import(); super::super::super::miden::base::core_types::Nonce{ inner: super::super::super::miden::base::core_types::Felt{ - inner: ret, + inner: ret as u64, }, } } @@ -325,19 +326,19 @@ pub mod miden { #[cfg(not(target_arch = "wasm32"))] fn wit_import(_: i32, ){ unreachable!() } wit_import(ptr0); - let l1 = *((ptr0 + 0) as *const f64); - let l2 = *((ptr0 + 8) as *const f64); - let l3 = *((ptr0 + 16) as *const f64); - let l4 = *((ptr0 + 24) as *const f64); + let l1 = *((ptr0 + 0) as *const i64); + let l2 = *((ptr0 + 8) as *const i64); + let l3 = *((ptr0 + 16) as *const i64); + let l4 = *((ptr0 + 24) as *const i64); super::super::super::miden::base::core_types::AccountHash{ inner: (super::super::super::miden::base::core_types::Felt{ - inner: l1, + inner: l1 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l2, + inner: l2 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l3, + inner: l3 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l4, + inner: l4 as u64, }), } } @@ -364,19 +365,19 @@ pub mod miden { #[cfg(not(target_arch = "wasm32"))] fn wit_import(_: i32, ){ unreachable!() } wit_import(ptr0); - let l1 = *((ptr0 + 0) as *const f64); - let l2 = *((ptr0 + 8) as *const f64); - let l3 = *((ptr0 + 16) as *const f64); - let l4 = *((ptr0 + 24) as *const f64); + let l1 = *((ptr0 + 0) as *const i64); + let l2 = *((ptr0 + 8) as *const i64); + let l3 = *((ptr0 + 16) as *const i64); + let l4 = *((ptr0 + 24) as *const i64); super::super::super::miden::base::core_types::AccountHash{ inner: (super::super::super::miden::base::core_types::Felt{ - inner: l1, + inner: l1 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l2, + inner: l2 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l3, + inner: l3 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l4, + inner: l4 as u64, }), } } @@ -395,12 +396,12 @@ pub mod miden { #[link(wasm_import_module = "miden:base/account@1.0.0")] extern "C" { #[link_name = "incr-nonce"] - fn wit_import(_: f64, ); + fn wit_import(_: i64, ); } #[cfg(not(target_arch = "wasm32"))] - fn wit_import(_: f64, ){ unreachable!() } - wit_import(wit_bindgen::rt::as_f64(inner0)); + fn wit_import(_: i64, ){ unreachable!() } + wit_import(wit_bindgen::rt::as_i64(inner0)); } } #[allow(unused_unsafe, clippy::all)] @@ -420,25 +421,25 @@ pub mod miden { #[link(wasm_import_module = "miden:base/account@1.0.0")] extern "C" { #[link_name = "get-item"] - fn wit_import(_: f64, _: i32, ); + fn wit_import(_: i64, _: i32, ); } #[cfg(not(target_arch = "wasm32"))] - fn wit_import(_: f64, _: i32, ){ unreachable!() } - wit_import(wit_bindgen::rt::as_f64(inner0), ptr1); - let l2 = *((ptr1 + 0) as *const f64); - let l3 = *((ptr1 + 8) as *const f64); - let l4 = *((ptr1 + 16) as *const f64); - let l5 = *((ptr1 + 24) as *const f64); + fn wit_import(_: i64, _: i32, ){ unreachable!() } + wit_import(wit_bindgen::rt::as_i64(inner0), ptr1); + let l2 = *((ptr1 + 0) as *const i64); + let l3 = *((ptr1 + 8) as *const i64); + let l4 = *((ptr1 + 16) as *const i64); + let l5 = *((ptr1 + 24) as *const i64); super::super::super::miden::base::core_types::StorageValue{ inner: (super::super::super::miden::base::core_types::Felt{ - inner: l2, + inner: l2 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l3, + inner: l3 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l4, + inner: l4 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l5, + inner: l5 as u64, }), } } @@ -467,39 +468,39 @@ pub mod miden { #[link(wasm_import_module = "miden:base/account@1.0.0")] extern "C" { #[link_name = "set-item"] - fn wit_import(_: f64, _: f64, _: f64, _: f64, _: f64, _: i32, ); + fn wit_import(_: i64, _: i64, _: i64, _: i64, _: i64, _: i32, ); } #[cfg(not(target_arch = "wasm32"))] - fn wit_import(_: f64, _: f64, _: f64, _: f64, _: f64, _: i32, ){ unreachable!() } - wit_import(wit_bindgen::rt::as_f64(inner0), wit_bindgen::rt::as_f64(inner3), wit_bindgen::rt::as_f64(inner4), wit_bindgen::rt::as_f64(inner5), wit_bindgen::rt::as_f64(inner6), ptr7); - let l8 = *((ptr7 + 0) as *const f64); - let l9 = *((ptr7 + 8) as *const f64); - let l10 = *((ptr7 + 16) as *const f64); - let l11 = *((ptr7 + 24) as *const f64); - let l12 = *((ptr7 + 32) as *const f64); - let l13 = *((ptr7 + 40) as *const f64); - let l14 = *((ptr7 + 48) as *const f64); - let l15 = *((ptr7 + 56) as *const f64); + fn wit_import(_: i64, _: i64, _: i64, _: i64, _: i64, _: i32, ){ unreachable!() } + wit_import(wit_bindgen::rt::as_i64(inner0), wit_bindgen::rt::as_i64(inner3), wit_bindgen::rt::as_i64(inner4), wit_bindgen::rt::as_i64(inner5), wit_bindgen::rt::as_i64(inner6), ptr7); + let l8 = *((ptr7 + 0) as *const i64); + let l9 = *((ptr7 + 8) as *const i64); + let l10 = *((ptr7 + 16) as *const i64); + let l11 = *((ptr7 + 24) as *const i64); + let l12 = *((ptr7 + 32) as *const i64); + let l13 = *((ptr7 + 40) as *const i64); + let l14 = *((ptr7 + 48) as *const i64); + let l15 = *((ptr7 + 56) as *const i64); (super::super::super::miden::base::core_types::StorageRoot{ inner: (super::super::super::miden::base::core_types::Felt{ - inner: l8, + inner: l8 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l9, + inner: l9 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l10, + inner: l10 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l11, + inner: l11 as u64, }), }, super::super::super::miden::base::core_types::StorageValue{ inner: (super::super::super::miden::base::core_types::Felt{ - inner: l12, + inner: l12 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l13, + inner: l13 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l14, + inner: l14 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l15, + inner: l15 as u64, }), }) } @@ -525,12 +526,12 @@ pub mod miden { #[link(wasm_import_module = "miden:base/account@1.0.0")] extern "C" { #[link_name = "set-code"] - fn wit_import(_: f64, _: f64, _: f64, _: f64, ); + fn wit_import(_: i64, _: i64, _: i64, _: i64, ); } #[cfg(not(target_arch = "wasm32"))] - fn wit_import(_: f64, _: f64, _: f64, _: f64, ){ unreachable!() } - wit_import(wit_bindgen::rt::as_f64(inner2), wit_bindgen::rt::as_f64(inner3), wit_bindgen::rt::as_f64(inner4), wit_bindgen::rt::as_f64(inner5)); + fn wit_import(_: i64, _: i64, _: i64, _: i64, ){ unreachable!() } + wit_import(wit_bindgen::rt::as_i64(inner2), wit_bindgen::rt::as_i64(inner3), wit_bindgen::rt::as_i64(inner4), wit_bindgen::rt::as_i64(inner5)); } } #[allow(unused_unsafe, clippy::all)] @@ -550,14 +551,14 @@ pub mod miden { #[link(wasm_import_module = "miden:base/account@1.0.0")] extern "C" { #[link_name = "get-balance"] - fn wit_import(_: f64, ) -> f64; + fn wit_import(_: i64, ) -> i64; } #[cfg(not(target_arch = "wasm32"))] - fn wit_import(_: f64, ) -> f64{ unreachable!() } - let ret = wit_import(wit_bindgen::rt::as_f64(inner1)); + fn wit_import(_: i64, ) -> i64{ unreachable!() } + let ret = wit_import(wit_bindgen::rt::as_i64(inner1)); super::super::super::miden::base::core_types::Felt{ - inner: ret, + inner: ret as u64, } } } @@ -582,12 +583,12 @@ pub mod miden { #[link(wasm_import_module = "miden:base/account@1.0.0")] extern "C" { #[link_name = "has-non-fungible-asset"] - fn wit_import(_: f64, _: f64, _: f64, _: f64, ) -> i32; + fn wit_import(_: i64, _: i64, _: i64, _: i64, ) -> i32; } #[cfg(not(target_arch = "wasm32"))] - fn wit_import(_: f64, _: f64, _: f64, _: f64, ) -> i32{ unreachable!() } - let ret = wit_import(wit_bindgen::rt::as_f64(inner2), wit_bindgen::rt::as_f64(inner3), wit_bindgen::rt::as_f64(inner4), wit_bindgen::rt::as_f64(inner5)); + fn wit_import(_: i64, _: i64, _: i64, _: i64, ) -> i32{ unreachable!() } + let ret = wit_import(wit_bindgen::rt::as_i64(inner2), wit_bindgen::rt::as_i64(inner3), wit_bindgen::rt::as_i64(inner4), wit_bindgen::rt::as_i64(inner5)); wit_bindgen::rt::bool_lift(ret as u8) } } @@ -617,25 +618,25 @@ pub mod miden { #[link(wasm_import_module = "miden:base/account@1.0.0")] extern "C" { #[link_name = "add-asset"] - fn wit_import(_: f64, _: f64, _: f64, _: f64, _: i32, ); + fn wit_import(_: i64, _: i64, _: i64, _: i64, _: i32, ); } #[cfg(not(target_arch = "wasm32"))] - fn wit_import(_: f64, _: f64, _: f64, _: f64, _: i32, ){ unreachable!() } - wit_import(wit_bindgen::rt::as_f64(inner2), wit_bindgen::rt::as_f64(inner3), wit_bindgen::rt::as_f64(inner4), wit_bindgen::rt::as_f64(inner5), ptr6); - let l7 = *((ptr6 + 0) as *const f64); - let l8 = *((ptr6 + 8) as *const f64); - let l9 = *((ptr6 + 16) as *const f64); - let l10 = *((ptr6 + 24) as *const f64); + fn wit_import(_: i64, _: i64, _: i64, _: i64, _: i32, ){ unreachable!() } + wit_import(wit_bindgen::rt::as_i64(inner2), wit_bindgen::rt::as_i64(inner3), wit_bindgen::rt::as_i64(inner4), wit_bindgen::rt::as_i64(inner5), ptr6); + let l7 = *((ptr6 + 0) as *const i64); + let l8 = *((ptr6 + 8) as *const i64); + let l9 = *((ptr6 + 16) as *const i64); + let l10 = *((ptr6 + 24) as *const i64); super::super::super::miden::base::core_types::CoreAsset{ inner: (super::super::super::miden::base::core_types::Felt{ - inner: l7, + inner: l7 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l8, + inner: l8 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l9, + inner: l9 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l10, + inner: l10 as u64, }), } } @@ -662,25 +663,25 @@ pub mod miden { #[link(wasm_import_module = "miden:base/account@1.0.0")] extern "C" { #[link_name = "remove-asset"] - fn wit_import(_: f64, _: f64, _: f64, _: f64, _: i32, ); + fn wit_import(_: i64, _: i64, _: i64, _: i64, _: i32, ); } #[cfg(not(target_arch = "wasm32"))] - fn wit_import(_: f64, _: f64, _: f64, _: f64, _: i32, ){ unreachable!() } - wit_import(wit_bindgen::rt::as_f64(inner2), wit_bindgen::rt::as_f64(inner3), wit_bindgen::rt::as_f64(inner4), wit_bindgen::rt::as_f64(inner5), ptr6); - let l7 = *((ptr6 + 0) as *const f64); - let l8 = *((ptr6 + 8) as *const f64); - let l9 = *((ptr6 + 16) as *const f64); - let l10 = *((ptr6 + 24) as *const f64); + fn wit_import(_: i64, _: i64, _: i64, _: i64, _: i32, ){ unreachable!() } + wit_import(wit_bindgen::rt::as_i64(inner2), wit_bindgen::rt::as_i64(inner3), wit_bindgen::rt::as_i64(inner4), wit_bindgen::rt::as_i64(inner5), ptr6); + let l7 = *((ptr6 + 0) as *const i64); + let l8 = *((ptr6 + 8) as *const i64); + let l9 = *((ptr6 + 16) as *const i64); + let l10 = *((ptr6 + 24) as *const i64); super::super::super::miden::base::core_types::CoreAsset{ inner: (super::super::super::miden::base::core_types::Felt{ - inner: l7, + inner: l7 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l8, + inner: l8 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l9, + inner: l9 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l10, + inner: l10 as u64, }), } } @@ -707,19 +708,19 @@ pub mod miden { #[cfg(not(target_arch = "wasm32"))] fn wit_import(_: i32, ){ unreachable!() } wit_import(ptr0); - let l1 = *((ptr0 + 0) as *const f64); - let l2 = *((ptr0 + 8) as *const f64); - let l3 = *((ptr0 + 16) as *const f64); - let l4 = *((ptr0 + 24) as *const f64); + let l1 = *((ptr0 + 0) as *const i64); + let l2 = *((ptr0 + 8) as *const i64); + let l3 = *((ptr0 + 16) as *const i64); + let l4 = *((ptr0 + 24) as *const i64); super::super::super::miden::base::core_types::VaultCommitment{ inner: (super::super::super::miden::base::core_types::Felt{ - inner: l1, + inner: l1 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l2, + inner: l2 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l3, + inner: l3 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l4, + inner: l4 as u64, }), } } @@ -753,14 +754,14 @@ pub mod miden { #[link(wasm_import_module = "miden:base/tx@1.0.0")] extern "C" { #[link_name = "get-block-number"] - fn wit_import() -> f64; + fn wit_import() -> i64; } #[cfg(not(target_arch = "wasm32"))] - fn wit_import() -> f64{ unreachable!() } + fn wit_import() -> i64{ unreachable!() } let ret = wit_import(); super::super::super::miden::base::core_types::Felt{ - inner: ret, + inner: ret as u64, } } } @@ -786,19 +787,19 @@ pub mod miden { #[cfg(not(target_arch = "wasm32"))] fn wit_import(_: i32, ){ unreachable!() } wit_import(ptr0); - let l1 = *((ptr0 + 0) as *const f64); - let l2 = *((ptr0 + 8) as *const f64); - let l3 = *((ptr0 + 16) as *const f64); - let l4 = *((ptr0 + 24) as *const f64); + let l1 = *((ptr0 + 0) as *const i64); + let l2 = *((ptr0 + 8) as *const i64); + let l3 = *((ptr0 + 16) as *const i64); + let l4 = *((ptr0 + 24) as *const i64); super::super::super::miden::base::core_types::BlockHash{ inner: (super::super::super::miden::base::core_types::Felt{ - inner: l1, + inner: l1 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l2, + inner: l2 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l3, + inner: l3 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l4, + inner: l4 as u64, }), } } @@ -826,18 +827,18 @@ pub mod miden { #[cfg(not(target_arch = "wasm32"))] fn wit_import(_: i32, ){ unreachable!() } wit_import(ptr0); - let l1 = *((ptr0 + 0) as *const f64); - let l2 = *((ptr0 + 8) as *const f64); - let l3 = *((ptr0 + 16) as *const f64); - let l4 = *((ptr0 + 24) as *const f64); + let l1 = *((ptr0 + 0) as *const i64); + let l2 = *((ptr0 + 8) as *const i64); + let l3 = *((ptr0 + 16) as *const i64); + let l4 = *((ptr0 + 24) as *const i64); (super::super::super::miden::base::core_types::Felt{ - inner: l1, + inner: l1 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l2, + inner: l2 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l3, + inner: l3 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l4, + inner: l4 as u64, }) } } @@ -864,18 +865,18 @@ pub mod miden { #[cfg(not(target_arch = "wasm32"))] fn wit_import(_: i32, ){ unreachable!() } wit_import(ptr0); - let l1 = *((ptr0 + 0) as *const f64); - let l2 = *((ptr0 + 8) as *const f64); - let l3 = *((ptr0 + 16) as *const f64); - let l4 = *((ptr0 + 24) as *const f64); + let l1 = *((ptr0 + 0) as *const i64); + let l2 = *((ptr0 + 8) as *const i64); + let l3 = *((ptr0 + 16) as *const i64); + let l4 = *((ptr0 + 24) as *const i64); (super::super::super::miden::base::core_types::Felt{ - inner: l1, + inner: l1 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l2, + inner: l2 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l3, + inner: l3 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l4, + inner: l4 as u64, }) } } @@ -909,15 +910,15 @@ pub mod miden { #[link(wasm_import_module = "miden:base/tx@1.0.0")] extern "C" { #[link_name = "create-note"] - fn wit_import(_: f64, _: f64, _: f64, _: f64, _: f64, _: f64, _: f64, _: f64, _: f64, ) -> f64; + fn wit_import(_: i64, _: i64, _: i64, _: i64, _: i64, _: i64, _: i64, _: i64, _: i64, ) -> i64; } #[cfg(not(target_arch = "wasm32"))] - fn wit_import(_: f64, _: f64, _: f64, _: f64, _: f64, _: f64, _: f64, _: f64, _: f64, ) -> f64{ unreachable!() } - let ret = wit_import(wit_bindgen::rt::as_f64(inner2), wit_bindgen::rt::as_f64(inner3), wit_bindgen::rt::as_f64(inner4), wit_bindgen::rt::as_f64(inner5), wit_bindgen::rt::as_f64(inner7), wit_bindgen::rt::as_f64(inner10), wit_bindgen::rt::as_f64(inner11), wit_bindgen::rt::as_f64(inner12), wit_bindgen::rt::as_f64(inner13)); + fn wit_import(_: i64, _: i64, _: i64, _: i64, _: i64, _: i64, _: i64, _: i64, _: i64, ) -> i64{ unreachable!() } + let ret = wit_import(wit_bindgen::rt::as_i64(inner2), wit_bindgen::rt::as_i64(inner3), wit_bindgen::rt::as_i64(inner4), wit_bindgen::rt::as_i64(inner5), wit_bindgen::rt::as_i64(inner7), wit_bindgen::rt::as_i64(inner10), wit_bindgen::rt::as_i64(inner11), wit_bindgen::rt::as_i64(inner12), wit_bindgen::rt::as_i64(inner13)); super::super::super::miden::base::core_types::NoteId{ inner: super::super::super::miden::base::core_types::Felt{ - inner: ret, + inner: ret as u64, }, } } @@ -945,7 +946,7 @@ pub mod exports { #[doc(hidden)] #[export_name = "miden:basic-wallet/basic-wallet@1.0.0#receive-asset"] #[allow(non_snake_case)] - unsafe extern "C" fn __export_receive_asset(arg0: f64,arg1: f64,arg2: f64,arg3: f64,) { + unsafe extern "C" fn __export_receive_asset(arg0: i64,arg1: i64,arg2: i64,arg3: i64,) { #[allow(unused_imports)] use wit_bindgen::rt::{alloc, vec::Vec, string::String}; @@ -965,13 +966,13 @@ pub mod exports { <_GuestImpl as Guest>::receive_asset(super::super::super::super::miden::base::core_types::CoreAsset{ inner: (super::super::super::super::miden::base::core_types::Felt{ - inner: arg0, + inner: arg0 as u64, }, super::super::super::super::miden::base::core_types::Felt{ - inner: arg1, + inner: arg1 as u64, }, super::super::super::super::miden::base::core_types::Felt{ - inner: arg2, + inner: arg2 as u64, }, super::super::super::super::miden::base::core_types::Felt{ - inner: arg3, + inner: arg3 as u64, }), }); } @@ -981,7 +982,7 @@ pub mod exports { #[doc(hidden)] #[export_name = "miden:basic-wallet/basic-wallet@1.0.0#send-asset"] #[allow(non_snake_case)] - unsafe extern "C" fn __export_send_asset(arg0: f64,arg1: f64,arg2: f64,arg3: f64,arg4: f64,arg5: f64,arg6: f64,arg7: f64,arg8: f64,) { + unsafe extern "C" fn __export_send_asset(arg0: i64,arg1: i64,arg2: i64,arg3: i64,arg4: i64,arg5: i64,arg6: i64,arg7: i64,arg8: i64,) { #[allow(unused_imports)] use wit_bindgen::rt::{alloc, vec::Vec, string::String}; @@ -1001,27 +1002,27 @@ pub mod exports { <_GuestImpl as Guest>::send_asset(super::super::super::super::miden::base::core_types::CoreAsset{ inner: (super::super::super::super::miden::base::core_types::Felt{ - inner: arg0, + inner: arg0 as u64, }, super::super::super::super::miden::base::core_types::Felt{ - inner: arg1, + inner: arg1 as u64, }, super::super::super::super::miden::base::core_types::Felt{ - inner: arg2, + inner: arg2 as u64, }, super::super::super::super::miden::base::core_types::Felt{ - inner: arg3, + inner: arg3 as u64, }), }, super::super::super::super::miden::base::core_types::Tag{ inner: super::super::super::super::miden::base::core_types::Felt{ - inner: arg4, + inner: arg4 as u64, }, }, super::super::super::super::miden::base::core_types::Recipient{ inner: (super::super::super::super::miden::base::core_types::Felt{ - inner: arg5, + inner: arg5 as u64, }, super::super::super::super::miden::base::core_types::Felt{ - inner: arg6, + inner: arg6 as u64, }, super::super::super::super::miden::base::core_types::Felt{ - inner: arg7, + inner: arg7 as u64, }, super::super::super::super::miden::base::core_types::Felt{ - inner: arg8, + inner: arg8 as u64, }), }); } @@ -1041,7 +1042,7 @@ pub mod exports { #[cfg(target_arch = "wasm32")] #[link_section = "component-type:basic-wallet-world"] #[doc(hidden)] -pub static __WIT_BINDGEN_COMPONENT_TYPE: [u8; 2717] = [3, 0, 18, 98, 97, 115, 105, 99, 45, 119, 97, 108, 108, 101, 116, 45, 119, 111, 114, 108, 100, 0, 97, 115, 109, 13, 0, 1, 0, 7, 227, 4, 1, 65, 7, 1, 66, 28, 1, 114, 1, 5, 105, 110, 110, 101, 114, 117, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 1, 111, 4, 1, 1, 1, 1, 4, 0, 4, 119, 111, 114, 100, 3, 0, 2, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 4, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 3, 116, 97, 103, 3, 0, 8, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 10, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 12, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 14, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 16, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 18, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 20, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 22, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 24, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 3, 1, 27, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 99, 111, 114, 101, 45, 116, 121, 112, 101, 115, 64, 49, 46, 48, 46, 48, 5, 0, 2, 3, 0, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 2, 3, 0, 0, 3, 116, 97, 103, 2, 3, 0, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 1, 66, 10, 2, 3, 2, 1, 1, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 0, 2, 3, 2, 1, 2, 4, 0, 3, 116, 97, 103, 3, 0, 2, 2, 3, 2, 1, 3, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 4, 1, 64, 1, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 1, 1, 0, 4, 0, 13, 114, 101, 99, 101, 105, 118, 101, 45, 97, 115, 115, 101, 116, 1, 6, 1, 64, 3, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 1, 3, 116, 97, 103, 3, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 5, 1, 0, 4, 0, 10, 115, 101, 110, 100, 45, 97, 115, 115, 101, 116, 1, 7, 4, 1, 37, 109, 105, 100, 101, 110, 58, 98, 97, 115, 105, 99, 45, 119, 97, 108, 108, 101, 116, 47, 98, 97, 115, 105, 99, 45, 119, 97, 108, 108, 101, 116, 64, 49, 46, 48, 46, 48, 5, 4, 11, 18, 1, 0, 12, 98, 97, 115, 105, 99, 45, 119, 97, 108, 108, 101, 116, 3, 0, 0, 7, 143, 15, 1, 65, 2, 1, 65, 22, 1, 66, 30, 1, 114, 1, 5, 105, 110, 110, 101, 114, 117, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 1, 111, 4, 1, 1, 1, 1, 4, 0, 4, 119, 111, 114, 100, 3, 0, 2, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 4, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 3, 116, 97, 103, 3, 0, 8, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 10, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 12, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 14, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 16, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 18, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 20, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 22, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 24, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 1, 64, 1, 4, 102, 101, 108, 116, 1, 0, 5, 4, 0, 20, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 45, 102, 114, 111, 109, 45, 102, 101, 108, 116, 1, 28, 3, 1, 27, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 99, 111, 114, 101, 45, 116, 121, 112, 101, 115, 64, 49, 46, 48, 46, 48, 5, 0, 2, 3, 0, 0, 4, 102, 101, 108, 116, 2, 3, 0, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 2, 3, 0, 0, 3, 116, 97, 103, 2, 3, 0, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 2, 3, 0, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 2, 3, 0, 0, 5, 110, 111, 110, 99, 101, 2, 3, 0, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 2, 3, 0, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 2, 3, 0, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 1, 66, 47, 2, 3, 2, 1, 1, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 2, 3, 2, 1, 2, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 2, 2, 3, 2, 1, 3, 4, 0, 3, 116, 97, 103, 3, 0, 4, 2, 3, 2, 1, 4, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 2, 3, 2, 1, 5, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 8, 2, 3, 2, 1, 6, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 10, 2, 3, 2, 1, 7, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 12, 2, 3, 2, 1, 8, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 14, 2, 3, 2, 1, 9, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 16, 2, 3, 2, 1, 10, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 18, 2, 3, 2, 1, 11, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 20, 1, 64, 0, 0, 9, 4, 0, 6, 103, 101, 116, 45, 105, 100, 1, 22, 1, 64, 0, 0, 11, 4, 0, 9, 103, 101, 116, 45, 110, 111, 110, 99, 101, 1, 23, 1, 64, 0, 0, 13, 4, 0, 16, 103, 101, 116, 45, 105, 110, 105, 116, 105, 97, 108, 45, 104, 97, 115, 104, 1, 24, 4, 0, 16, 103, 101, 116, 45, 99, 117, 114, 114, 101, 110, 116, 45, 104, 97, 115, 104, 1, 24, 1, 64, 1, 5, 118, 97, 108, 117, 101, 1, 1, 0, 4, 0, 10, 105, 110, 99, 114, 45, 110, 111, 110, 99, 101, 1, 25, 1, 64, 1, 5, 105, 110, 100, 101, 120, 1, 0, 15, 4, 0, 8, 103, 101, 116, 45, 105, 116, 101, 109, 1, 26, 1, 111, 2, 17, 15, 1, 64, 2, 5, 105, 110, 100, 101, 120, 1, 5, 118, 97, 108, 117, 101, 15, 0, 27, 4, 0, 8, 115, 101, 116, 45, 105, 116, 101, 109, 1, 28, 1, 64, 1, 9, 99, 111, 100, 101, 45, 114, 111, 111, 116, 19, 1, 0, 4, 0, 8, 115, 101, 116, 45, 99, 111, 100, 101, 1, 29, 1, 64, 1, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 9, 0, 1, 4, 0, 11, 103, 101, 116, 45, 98, 97, 108, 97, 110, 99, 101, 1, 30, 1, 64, 1, 5, 97, 115, 115, 101, 116, 3, 0, 127, 4, 0, 22, 104, 97, 115, 45, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 1, 31, 1, 64, 1, 5, 97, 115, 115, 101, 116, 3, 0, 3, 4, 0, 9, 97, 100, 100, 45, 97, 115, 115, 101, 116, 1, 32, 4, 0, 12, 114, 101, 109, 111, 118, 101, 45, 97, 115, 115, 101, 116, 1, 32, 1, 64, 0, 0, 21, 4, 0, 20, 103, 101, 116, 45, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 1, 33, 3, 1, 24, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 97, 99, 99, 111, 117, 110, 116, 64, 49, 46, 48, 46, 48, 5, 12, 2, 3, 0, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 2, 3, 0, 0, 4, 119, 111, 114, 100, 2, 3, 0, 0, 7, 110, 111, 116, 101, 45, 105, 100, 1, 66, 37, 2, 3, 2, 1, 1, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 2, 3, 2, 1, 2, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 2, 2, 3, 2, 1, 3, 4, 0, 3, 116, 97, 103, 3, 0, 4, 2, 3, 2, 1, 4, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 2, 3, 2, 1, 5, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 8, 2, 3, 2, 1, 6, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 10, 2, 3, 2, 1, 7, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 12, 2, 3, 2, 1, 8, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 14, 2, 3, 2, 1, 9, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 16, 2, 3, 2, 1, 10, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 18, 2, 3, 2, 1, 11, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 20, 2, 3, 2, 1, 13, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 22, 2, 3, 2, 1, 14, 4, 0, 4, 119, 111, 114, 100, 3, 0, 24, 2, 3, 2, 1, 15, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 1, 64, 0, 0, 1, 4, 0, 16, 103, 101, 116, 45, 98, 108, 111, 99, 107, 45, 110, 117, 109, 98, 101, 114, 1, 28, 1, 64, 0, 0, 23, 4, 0, 14, 103, 101, 116, 45, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 1, 29, 1, 64, 0, 0, 25, 4, 0, 20, 103, 101, 116, 45, 105, 110, 112, 117, 116, 45, 110, 111, 116, 101, 115, 45, 104, 97, 115, 104, 1, 30, 4, 0, 21, 103, 101, 116, 45, 111, 117, 116, 112, 117, 116, 45, 110, 111, 116, 101, 115, 45, 104, 97, 115, 104, 1, 30, 1, 64, 3, 5, 97, 115, 115, 101, 116, 3, 3, 116, 97, 103, 5, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 7, 0, 27, 4, 0, 11, 99, 114, 101, 97, 116, 101, 45, 110, 111, 116, 101, 1, 31, 3, 1, 19, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 116, 120, 64, 49, 46, 48, 46, 48, 5, 16, 1, 66, 10, 2, 3, 2, 1, 2, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 0, 2, 3, 2, 1, 3, 4, 0, 3, 116, 97, 103, 3, 0, 2, 2, 3, 2, 1, 4, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 4, 1, 64, 1, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 1, 1, 0, 4, 0, 13, 114, 101, 99, 101, 105, 118, 101, 45, 97, 115, 115, 101, 116, 1, 6, 1, 64, 3, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 1, 3, 116, 97, 103, 3, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 5, 1, 0, 4, 0, 10, 115, 101, 110, 100, 45, 97, 115, 115, 101, 116, 1, 7, 4, 1, 37, 109, 105, 100, 101, 110, 58, 98, 97, 115, 105, 99, 45, 119, 97, 108, 108, 101, 116, 47, 98, 97, 115, 105, 99, 45, 119, 97, 108, 108, 101, 116, 64, 49, 46, 48, 46, 48, 5, 17, 4, 1, 43, 109, 105, 100, 101, 110, 58, 98, 97, 115, 105, 99, 45, 119, 97, 108, 108, 101, 116, 47, 98, 97, 115, 105, 99, 45, 119, 97, 108, 108, 101, 116, 45, 119, 111, 114, 108, 100, 64, 49, 46, 48, 46, 48, 4, 0, 11, 24, 1, 0, 18, 98, 97, 115, 105, 99, 45, 119, 97, 108, 108, 101, 116, 45, 119, 111, 114, 108, 100, 3, 2, 0, 0, 16, 12, 112, 97, 99, 107, 97, 103, 101, 45, 100, 111, 99, 115, 0, 123, 125, 0, 70, 9, 112, 114, 111, 100, 117, 99, 101, 114, 115, 1, 12, 112, 114, 111, 99, 101, 115, 115, 101, 100, 45, 98, 121, 2, 13, 119, 105, 116, 45, 99, 111, 109, 112, 111, 110, 101, 110, 116, 6, 48, 46, 49, 56, 46, 50, 16, 119, 105, 116, 45, 98, 105, 110, 100, 103, 101, 110, 45, 114, 117, 115, 116, 6, 48, 46, 49, 54, 46, 48]; +pub static __WIT_BINDGEN_COMPONENT_TYPE: [u8; 2717] = [3, 0, 18, 98, 97, 115, 105, 99, 45, 119, 97, 108, 108, 101, 116, 45, 119, 111, 114, 108, 100, 0, 97, 115, 109, 13, 0, 1, 0, 7, 227, 4, 1, 65, 7, 1, 66, 28, 1, 114, 1, 5, 105, 110, 110, 101, 114, 119, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 1, 111, 4, 1, 1, 1, 1, 4, 0, 4, 119, 111, 114, 100, 3, 0, 2, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 4, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 3, 116, 97, 103, 3, 0, 8, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 10, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 12, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 14, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 16, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 18, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 20, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 22, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 24, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 3, 1, 27, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 99, 111, 114, 101, 45, 116, 121, 112, 101, 115, 64, 49, 46, 48, 46, 48, 5, 0, 2, 3, 0, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 2, 3, 0, 0, 3, 116, 97, 103, 2, 3, 0, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 1, 66, 10, 2, 3, 2, 1, 1, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 0, 2, 3, 2, 1, 2, 4, 0, 3, 116, 97, 103, 3, 0, 2, 2, 3, 2, 1, 3, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 4, 1, 64, 1, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 1, 1, 0, 4, 0, 13, 114, 101, 99, 101, 105, 118, 101, 45, 97, 115, 115, 101, 116, 1, 6, 1, 64, 3, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 1, 3, 116, 97, 103, 3, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 5, 1, 0, 4, 0, 10, 115, 101, 110, 100, 45, 97, 115, 115, 101, 116, 1, 7, 4, 1, 37, 109, 105, 100, 101, 110, 58, 98, 97, 115, 105, 99, 45, 119, 97, 108, 108, 101, 116, 47, 98, 97, 115, 105, 99, 45, 119, 97, 108, 108, 101, 116, 64, 49, 46, 48, 46, 48, 5, 4, 11, 18, 1, 0, 12, 98, 97, 115, 105, 99, 45, 119, 97, 108, 108, 101, 116, 3, 0, 0, 7, 143, 15, 1, 65, 2, 1, 65, 22, 1, 66, 30, 1, 114, 1, 5, 105, 110, 110, 101, 114, 119, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 1, 111, 4, 1, 1, 1, 1, 4, 0, 4, 119, 111, 114, 100, 3, 0, 2, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 4, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 3, 116, 97, 103, 3, 0, 8, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 10, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 12, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 14, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 16, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 18, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 20, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 22, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 24, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 1, 64, 1, 4, 102, 101, 108, 116, 1, 0, 5, 4, 0, 20, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 45, 102, 114, 111, 109, 45, 102, 101, 108, 116, 1, 28, 3, 1, 27, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 99, 111, 114, 101, 45, 116, 121, 112, 101, 115, 64, 49, 46, 48, 46, 48, 5, 0, 2, 3, 0, 0, 4, 102, 101, 108, 116, 2, 3, 0, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 2, 3, 0, 0, 3, 116, 97, 103, 2, 3, 0, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 2, 3, 0, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 2, 3, 0, 0, 5, 110, 111, 110, 99, 101, 2, 3, 0, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 2, 3, 0, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 2, 3, 0, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 1, 66, 47, 2, 3, 2, 1, 1, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 2, 3, 2, 1, 2, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 2, 2, 3, 2, 1, 3, 4, 0, 3, 116, 97, 103, 3, 0, 4, 2, 3, 2, 1, 4, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 2, 3, 2, 1, 5, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 8, 2, 3, 2, 1, 6, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 10, 2, 3, 2, 1, 7, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 12, 2, 3, 2, 1, 8, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 14, 2, 3, 2, 1, 9, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 16, 2, 3, 2, 1, 10, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 18, 2, 3, 2, 1, 11, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 20, 1, 64, 0, 0, 9, 4, 0, 6, 103, 101, 116, 45, 105, 100, 1, 22, 1, 64, 0, 0, 11, 4, 0, 9, 103, 101, 116, 45, 110, 111, 110, 99, 101, 1, 23, 1, 64, 0, 0, 13, 4, 0, 16, 103, 101, 116, 45, 105, 110, 105, 116, 105, 97, 108, 45, 104, 97, 115, 104, 1, 24, 4, 0, 16, 103, 101, 116, 45, 99, 117, 114, 114, 101, 110, 116, 45, 104, 97, 115, 104, 1, 24, 1, 64, 1, 5, 118, 97, 108, 117, 101, 1, 1, 0, 4, 0, 10, 105, 110, 99, 114, 45, 110, 111, 110, 99, 101, 1, 25, 1, 64, 1, 5, 105, 110, 100, 101, 120, 1, 0, 15, 4, 0, 8, 103, 101, 116, 45, 105, 116, 101, 109, 1, 26, 1, 111, 2, 17, 15, 1, 64, 2, 5, 105, 110, 100, 101, 120, 1, 5, 118, 97, 108, 117, 101, 15, 0, 27, 4, 0, 8, 115, 101, 116, 45, 105, 116, 101, 109, 1, 28, 1, 64, 1, 9, 99, 111, 100, 101, 45, 114, 111, 111, 116, 19, 1, 0, 4, 0, 8, 115, 101, 116, 45, 99, 111, 100, 101, 1, 29, 1, 64, 1, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 9, 0, 1, 4, 0, 11, 103, 101, 116, 45, 98, 97, 108, 97, 110, 99, 101, 1, 30, 1, 64, 1, 5, 97, 115, 115, 101, 116, 3, 0, 127, 4, 0, 22, 104, 97, 115, 45, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 1, 31, 1, 64, 1, 5, 97, 115, 115, 101, 116, 3, 0, 3, 4, 0, 9, 97, 100, 100, 45, 97, 115, 115, 101, 116, 1, 32, 4, 0, 12, 114, 101, 109, 111, 118, 101, 45, 97, 115, 115, 101, 116, 1, 32, 1, 64, 0, 0, 21, 4, 0, 20, 103, 101, 116, 45, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 1, 33, 3, 1, 24, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 97, 99, 99, 111, 117, 110, 116, 64, 49, 46, 48, 46, 48, 5, 12, 2, 3, 0, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 2, 3, 0, 0, 4, 119, 111, 114, 100, 2, 3, 0, 0, 7, 110, 111, 116, 101, 45, 105, 100, 1, 66, 37, 2, 3, 2, 1, 1, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 2, 3, 2, 1, 2, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 2, 2, 3, 2, 1, 3, 4, 0, 3, 116, 97, 103, 3, 0, 4, 2, 3, 2, 1, 4, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 2, 3, 2, 1, 5, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 8, 2, 3, 2, 1, 6, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 10, 2, 3, 2, 1, 7, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 12, 2, 3, 2, 1, 8, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 14, 2, 3, 2, 1, 9, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 16, 2, 3, 2, 1, 10, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 18, 2, 3, 2, 1, 11, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 20, 2, 3, 2, 1, 13, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 22, 2, 3, 2, 1, 14, 4, 0, 4, 119, 111, 114, 100, 3, 0, 24, 2, 3, 2, 1, 15, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 1, 64, 0, 0, 1, 4, 0, 16, 103, 101, 116, 45, 98, 108, 111, 99, 107, 45, 110, 117, 109, 98, 101, 114, 1, 28, 1, 64, 0, 0, 23, 4, 0, 14, 103, 101, 116, 45, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 1, 29, 1, 64, 0, 0, 25, 4, 0, 20, 103, 101, 116, 45, 105, 110, 112, 117, 116, 45, 110, 111, 116, 101, 115, 45, 104, 97, 115, 104, 1, 30, 4, 0, 21, 103, 101, 116, 45, 111, 117, 116, 112, 117, 116, 45, 110, 111, 116, 101, 115, 45, 104, 97, 115, 104, 1, 30, 1, 64, 3, 5, 97, 115, 115, 101, 116, 3, 3, 116, 97, 103, 5, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 7, 0, 27, 4, 0, 11, 99, 114, 101, 97, 116, 101, 45, 110, 111, 116, 101, 1, 31, 3, 1, 19, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 116, 120, 64, 49, 46, 48, 46, 48, 5, 16, 1, 66, 10, 2, 3, 2, 1, 2, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 0, 2, 3, 2, 1, 3, 4, 0, 3, 116, 97, 103, 3, 0, 2, 2, 3, 2, 1, 4, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 4, 1, 64, 1, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 1, 1, 0, 4, 0, 13, 114, 101, 99, 101, 105, 118, 101, 45, 97, 115, 115, 101, 116, 1, 6, 1, 64, 3, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 1, 3, 116, 97, 103, 3, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 5, 1, 0, 4, 0, 10, 115, 101, 110, 100, 45, 97, 115, 115, 101, 116, 1, 7, 4, 1, 37, 109, 105, 100, 101, 110, 58, 98, 97, 115, 105, 99, 45, 119, 97, 108, 108, 101, 116, 47, 98, 97, 115, 105, 99, 45, 119, 97, 108, 108, 101, 116, 64, 49, 46, 48, 46, 48, 5, 17, 4, 1, 43, 109, 105, 100, 101, 110, 58, 98, 97, 115, 105, 99, 45, 119, 97, 108, 108, 101, 116, 47, 98, 97, 115, 105, 99, 45, 119, 97, 108, 108, 101, 116, 45, 119, 111, 114, 108, 100, 64, 49, 46, 48, 46, 48, 4, 0, 11, 24, 1, 0, 18, 98, 97, 115, 105, 99, 45, 119, 97, 108, 108, 101, 116, 45, 119, 111, 114, 108, 100, 3, 2, 0, 0, 16, 12, 112, 97, 99, 107, 97, 103, 101, 45, 100, 111, 99, 115, 0, 123, 125, 0, 70, 9, 112, 114, 111, 100, 117, 99, 101, 114, 115, 1, 12, 112, 114, 111, 99, 101, 115, 115, 101, 100, 45, 98, 121, 2, 13, 119, 105, 116, 45, 99, 111, 109, 112, 111, 110, 101, 110, 116, 6, 48, 46, 49, 56, 46, 50, 16, 119, 105, 116, 45, 98, 105, 110, 100, 103, 101, 110, 45, 114, 117, 115, 116, 6, 48, 46, 49, 54, 46, 48]; #[inline(never)] #[doc(hidden)] diff --git a/tests/rust-apps-wasm/sdk/basic-wallet/src/lib.rs b/tests/rust-apps-wasm/sdk/basic-wallet/src/lib.rs index cf97ce09d..b94cd4257 100644 --- a/tests/rust-apps-wasm/sdk/basic-wallet/src/lib.rs +++ b/tests/rust-apps-wasm/sdk/basic-wallet/src/lib.rs @@ -1,11 +1,16 @@ #![no_std] +// This allows us to abort if the panic handler is invoked, but +// it is gated behind a perma-unstable nightly feature +#![feature(core_intrinsics)] +// Disable the warning triggered by the use of the `core_intrinsics` feature +#![allow(internal_features)] #[global_allocator] static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT; #[panic_handler] fn my_panic(_info: &core::panic::PanicInfo) -> ! { - loop {} + core::intrinsics::abort() } #[allow(dead_code)] diff --git a/tests/rust-apps-wasm/sdk/p2id-note/Cargo.toml b/tests/rust-apps-wasm/sdk/p2id-note/Cargo.toml index 6185aa9b9..2a7366b27 100644 --- a/tests/rust-apps-wasm/sdk/p2id-note/Cargo.toml +++ b/tests/rust-apps-wasm/sdk/p2id-note/Cargo.toml @@ -31,4 +31,5 @@ package = "miden:basic-wallet-p2id-note" derives = ["PartialEq"] [profile.release] -panic = "abort" \ No newline at end of file +panic = "abort" +opt-level = "z" \ No newline at end of file diff --git a/tests/rust-apps-wasm/sdk/p2id-note/src/bindings.rs b/tests/rust-apps-wasm/sdk/p2id-note/src/bindings.rs index 9a1b368d3..bd81ba732 100644 --- a/tests/rust-apps-wasm/sdk/p2id-note/src/bindings.rs +++ b/tests/rust-apps-wasm/sdk/p2id-note/src/bindings.rs @@ -15,9 +15,10 @@ pub mod miden { #[repr(C)] #[derive(Clone, Copy, PartialEq)] pub struct Felt { - /// We use f64 as the backing type for the field element. It has the size that we need and + /// We plan to use f64 as the backing type for the field element. It has the size that we need and /// we don't plan to support floating point arithmetic in programs for Miden VM. - pub inner: f64, + /// For now its u64 + pub inner: u64, } impl ::core::fmt::Debug for Felt { fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { @@ -221,15 +222,15 @@ pub mod miden { #[link(wasm_import_module = "miden:base/core-types@1.0.0")] extern "C" { #[link_name = "account-id-from-felt"] - fn wit_import(_: f64, ) -> f64; + fn wit_import(_: i64, ) -> i64; } #[cfg(not(target_arch = "wasm32"))] - fn wit_import(_: f64, ) -> f64{ unreachable!() } - let ret = wit_import(wit_bindgen::rt::as_f64(inner0)); + fn wit_import(_: i64, ) -> i64{ unreachable!() } + let ret = wit_import(wit_bindgen::rt::as_i64(inner0)); AccountId{ inner: Felt{ - inner: ret, + inner: ret as u64, }, } } @@ -263,14 +264,14 @@ pub mod miden { #[link(wasm_import_module = "miden:base/tx@1.0.0")] extern "C" { #[link_name = "get-block-number"] - fn wit_import() -> f64; + fn wit_import() -> i64; } #[cfg(not(target_arch = "wasm32"))] - fn wit_import() -> f64{ unreachable!() } + fn wit_import() -> i64{ unreachable!() } let ret = wit_import(); super::super::super::miden::base::core_types::Felt{ - inner: ret, + inner: ret as u64, } } } @@ -296,19 +297,19 @@ pub mod miden { #[cfg(not(target_arch = "wasm32"))] fn wit_import(_: i32, ){ unreachable!() } wit_import(ptr0); - let l1 = *((ptr0 + 0) as *const f64); - let l2 = *((ptr0 + 8) as *const f64); - let l3 = *((ptr0 + 16) as *const f64); - let l4 = *((ptr0 + 24) as *const f64); + let l1 = *((ptr0 + 0) as *const i64); + let l2 = *((ptr0 + 8) as *const i64); + let l3 = *((ptr0 + 16) as *const i64); + let l4 = *((ptr0 + 24) as *const i64); super::super::super::miden::base::core_types::BlockHash{ inner: (super::super::super::miden::base::core_types::Felt{ - inner: l1, + inner: l1 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l2, + inner: l2 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l3, + inner: l3 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l4, + inner: l4 as u64, }), } } @@ -336,18 +337,18 @@ pub mod miden { #[cfg(not(target_arch = "wasm32"))] fn wit_import(_: i32, ){ unreachable!() } wit_import(ptr0); - let l1 = *((ptr0 + 0) as *const f64); - let l2 = *((ptr0 + 8) as *const f64); - let l3 = *((ptr0 + 16) as *const f64); - let l4 = *((ptr0 + 24) as *const f64); + let l1 = *((ptr0 + 0) as *const i64); + let l2 = *((ptr0 + 8) as *const i64); + let l3 = *((ptr0 + 16) as *const i64); + let l4 = *((ptr0 + 24) as *const i64); (super::super::super::miden::base::core_types::Felt{ - inner: l1, + inner: l1 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l2, + inner: l2 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l3, + inner: l3 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l4, + inner: l4 as u64, }) } } @@ -374,18 +375,18 @@ pub mod miden { #[cfg(not(target_arch = "wasm32"))] fn wit_import(_: i32, ){ unreachable!() } wit_import(ptr0); - let l1 = *((ptr0 + 0) as *const f64); - let l2 = *((ptr0 + 8) as *const f64); - let l3 = *((ptr0 + 16) as *const f64); - let l4 = *((ptr0 + 24) as *const f64); + let l1 = *((ptr0 + 0) as *const i64); + let l2 = *((ptr0 + 8) as *const i64); + let l3 = *((ptr0 + 16) as *const i64); + let l4 = *((ptr0 + 24) as *const i64); (super::super::super::miden::base::core_types::Felt{ - inner: l1, + inner: l1 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l2, + inner: l2 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l3, + inner: l3 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l4, + inner: l4 as u64, }) } } @@ -419,15 +420,15 @@ pub mod miden { #[link(wasm_import_module = "miden:base/tx@1.0.0")] extern "C" { #[link_name = "create-note"] - fn wit_import(_: f64, _: f64, _: f64, _: f64, _: f64, _: f64, _: f64, _: f64, _: f64, ) -> f64; + fn wit_import(_: i64, _: i64, _: i64, _: i64, _: i64, _: i64, _: i64, _: i64, _: i64, ) -> i64; } #[cfg(not(target_arch = "wasm32"))] - fn wit_import(_: f64, _: f64, _: f64, _: f64, _: f64, _: f64, _: f64, _: f64, _: f64, ) -> f64{ unreachable!() } - let ret = wit_import(wit_bindgen::rt::as_f64(inner2), wit_bindgen::rt::as_f64(inner3), wit_bindgen::rt::as_f64(inner4), wit_bindgen::rt::as_f64(inner5), wit_bindgen::rt::as_f64(inner7), wit_bindgen::rt::as_f64(inner10), wit_bindgen::rt::as_f64(inner11), wit_bindgen::rt::as_f64(inner12), wit_bindgen::rt::as_f64(inner13)); + fn wit_import(_: i64, _: i64, _: i64, _: i64, _: i64, _: i64, _: i64, _: i64, _: i64, ) -> i64{ unreachable!() } + let ret = wit_import(wit_bindgen::rt::as_i64(inner2), wit_bindgen::rt::as_i64(inner3), wit_bindgen::rt::as_i64(inner4), wit_bindgen::rt::as_i64(inner5), wit_bindgen::rt::as_i64(inner7), wit_bindgen::rt::as_i64(inner10), wit_bindgen::rt::as_i64(inner11), wit_bindgen::rt::as_i64(inner12), wit_bindgen::rt::as_i64(inner13)); super::super::super::miden::base::core_types::NoteId{ inner: super::super::super::miden::base::core_types::Felt{ - inner: ret, + inner: ret as u64, }, } } @@ -463,15 +464,15 @@ pub mod miden { #[link(wasm_import_module = "miden:base/account@1.0.0")] extern "C" { #[link_name = "get-id"] - fn wit_import() -> f64; + fn wit_import() -> i64; } #[cfg(not(target_arch = "wasm32"))] - fn wit_import() -> f64{ unreachable!() } + fn wit_import() -> i64{ unreachable!() } let ret = wit_import(); super::super::super::miden::base::core_types::AccountId{ inner: super::super::super::miden::base::core_types::Felt{ - inner: ret, + inner: ret as u64, }, } } @@ -488,15 +489,15 @@ pub mod miden { #[link(wasm_import_module = "miden:base/account@1.0.0")] extern "C" { #[link_name = "get-nonce"] - fn wit_import() -> f64; + fn wit_import() -> i64; } #[cfg(not(target_arch = "wasm32"))] - fn wit_import() -> f64{ unreachable!() } + fn wit_import() -> i64{ unreachable!() } let ret = wit_import(); super::super::super::miden::base::core_types::Nonce{ inner: super::super::super::miden::base::core_types::Felt{ - inner: ret, + inner: ret as u64, }, } } @@ -523,19 +524,19 @@ pub mod miden { #[cfg(not(target_arch = "wasm32"))] fn wit_import(_: i32, ){ unreachable!() } wit_import(ptr0); - let l1 = *((ptr0 + 0) as *const f64); - let l2 = *((ptr0 + 8) as *const f64); - let l3 = *((ptr0 + 16) as *const f64); - let l4 = *((ptr0 + 24) as *const f64); + let l1 = *((ptr0 + 0) as *const i64); + let l2 = *((ptr0 + 8) as *const i64); + let l3 = *((ptr0 + 16) as *const i64); + let l4 = *((ptr0 + 24) as *const i64); super::super::super::miden::base::core_types::AccountHash{ inner: (super::super::super::miden::base::core_types::Felt{ - inner: l1, + inner: l1 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l2, + inner: l2 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l3, + inner: l3 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l4, + inner: l4 as u64, }), } } @@ -562,19 +563,19 @@ pub mod miden { #[cfg(not(target_arch = "wasm32"))] fn wit_import(_: i32, ){ unreachable!() } wit_import(ptr0); - let l1 = *((ptr0 + 0) as *const f64); - let l2 = *((ptr0 + 8) as *const f64); - let l3 = *((ptr0 + 16) as *const f64); - let l4 = *((ptr0 + 24) as *const f64); + let l1 = *((ptr0 + 0) as *const i64); + let l2 = *((ptr0 + 8) as *const i64); + let l3 = *((ptr0 + 16) as *const i64); + let l4 = *((ptr0 + 24) as *const i64); super::super::super::miden::base::core_types::AccountHash{ inner: (super::super::super::miden::base::core_types::Felt{ - inner: l1, + inner: l1 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l2, + inner: l2 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l3, + inner: l3 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l4, + inner: l4 as u64, }), } } @@ -593,12 +594,12 @@ pub mod miden { #[link(wasm_import_module = "miden:base/account@1.0.0")] extern "C" { #[link_name = "incr-nonce"] - fn wit_import(_: f64, ); + fn wit_import(_: i64, ); } #[cfg(not(target_arch = "wasm32"))] - fn wit_import(_: f64, ){ unreachable!() } - wit_import(wit_bindgen::rt::as_f64(inner0)); + fn wit_import(_: i64, ){ unreachable!() } + wit_import(wit_bindgen::rt::as_i64(inner0)); } } #[allow(unused_unsafe, clippy::all)] @@ -618,25 +619,25 @@ pub mod miden { #[link(wasm_import_module = "miden:base/account@1.0.0")] extern "C" { #[link_name = "get-item"] - fn wit_import(_: f64, _: i32, ); + fn wit_import(_: i64, _: i32, ); } #[cfg(not(target_arch = "wasm32"))] - fn wit_import(_: f64, _: i32, ){ unreachable!() } - wit_import(wit_bindgen::rt::as_f64(inner0), ptr1); - let l2 = *((ptr1 + 0) as *const f64); - let l3 = *((ptr1 + 8) as *const f64); - let l4 = *((ptr1 + 16) as *const f64); - let l5 = *((ptr1 + 24) as *const f64); + fn wit_import(_: i64, _: i32, ){ unreachable!() } + wit_import(wit_bindgen::rt::as_i64(inner0), ptr1); + let l2 = *((ptr1 + 0) as *const i64); + let l3 = *((ptr1 + 8) as *const i64); + let l4 = *((ptr1 + 16) as *const i64); + let l5 = *((ptr1 + 24) as *const i64); super::super::super::miden::base::core_types::StorageValue{ inner: (super::super::super::miden::base::core_types::Felt{ - inner: l2, + inner: l2 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l3, + inner: l3 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l4, + inner: l4 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l5, + inner: l5 as u64, }), } } @@ -665,39 +666,39 @@ pub mod miden { #[link(wasm_import_module = "miden:base/account@1.0.0")] extern "C" { #[link_name = "set-item"] - fn wit_import(_: f64, _: f64, _: f64, _: f64, _: f64, _: i32, ); + fn wit_import(_: i64, _: i64, _: i64, _: i64, _: i64, _: i32, ); } #[cfg(not(target_arch = "wasm32"))] - fn wit_import(_: f64, _: f64, _: f64, _: f64, _: f64, _: i32, ){ unreachable!() } - wit_import(wit_bindgen::rt::as_f64(inner0), wit_bindgen::rt::as_f64(inner3), wit_bindgen::rt::as_f64(inner4), wit_bindgen::rt::as_f64(inner5), wit_bindgen::rt::as_f64(inner6), ptr7); - let l8 = *((ptr7 + 0) as *const f64); - let l9 = *((ptr7 + 8) as *const f64); - let l10 = *((ptr7 + 16) as *const f64); - let l11 = *((ptr7 + 24) as *const f64); - let l12 = *((ptr7 + 32) as *const f64); - let l13 = *((ptr7 + 40) as *const f64); - let l14 = *((ptr7 + 48) as *const f64); - let l15 = *((ptr7 + 56) as *const f64); + fn wit_import(_: i64, _: i64, _: i64, _: i64, _: i64, _: i32, ){ unreachable!() } + wit_import(wit_bindgen::rt::as_i64(inner0), wit_bindgen::rt::as_i64(inner3), wit_bindgen::rt::as_i64(inner4), wit_bindgen::rt::as_i64(inner5), wit_bindgen::rt::as_i64(inner6), ptr7); + let l8 = *((ptr7 + 0) as *const i64); + let l9 = *((ptr7 + 8) as *const i64); + let l10 = *((ptr7 + 16) as *const i64); + let l11 = *((ptr7 + 24) as *const i64); + let l12 = *((ptr7 + 32) as *const i64); + let l13 = *((ptr7 + 40) as *const i64); + let l14 = *((ptr7 + 48) as *const i64); + let l15 = *((ptr7 + 56) as *const i64); (super::super::super::miden::base::core_types::StorageRoot{ inner: (super::super::super::miden::base::core_types::Felt{ - inner: l8, + inner: l8 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l9, + inner: l9 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l10, + inner: l10 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l11, + inner: l11 as u64, }), }, super::super::super::miden::base::core_types::StorageValue{ inner: (super::super::super::miden::base::core_types::Felt{ - inner: l12, + inner: l12 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l13, + inner: l13 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l14, + inner: l14 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l15, + inner: l15 as u64, }), }) } @@ -723,12 +724,12 @@ pub mod miden { #[link(wasm_import_module = "miden:base/account@1.0.0")] extern "C" { #[link_name = "set-code"] - fn wit_import(_: f64, _: f64, _: f64, _: f64, ); + fn wit_import(_: i64, _: i64, _: i64, _: i64, ); } #[cfg(not(target_arch = "wasm32"))] - fn wit_import(_: f64, _: f64, _: f64, _: f64, ){ unreachable!() } - wit_import(wit_bindgen::rt::as_f64(inner2), wit_bindgen::rt::as_f64(inner3), wit_bindgen::rt::as_f64(inner4), wit_bindgen::rt::as_f64(inner5)); + fn wit_import(_: i64, _: i64, _: i64, _: i64, ){ unreachable!() } + wit_import(wit_bindgen::rt::as_i64(inner2), wit_bindgen::rt::as_i64(inner3), wit_bindgen::rt::as_i64(inner4), wit_bindgen::rt::as_i64(inner5)); } } #[allow(unused_unsafe, clippy::all)] @@ -748,14 +749,14 @@ pub mod miden { #[link(wasm_import_module = "miden:base/account@1.0.0")] extern "C" { #[link_name = "get-balance"] - fn wit_import(_: f64, ) -> f64; + fn wit_import(_: i64, ) -> i64; } #[cfg(not(target_arch = "wasm32"))] - fn wit_import(_: f64, ) -> f64{ unreachable!() } - let ret = wit_import(wit_bindgen::rt::as_f64(inner1)); + fn wit_import(_: i64, ) -> i64{ unreachable!() } + let ret = wit_import(wit_bindgen::rt::as_i64(inner1)); super::super::super::miden::base::core_types::Felt{ - inner: ret, + inner: ret as u64, } } } @@ -780,12 +781,12 @@ pub mod miden { #[link(wasm_import_module = "miden:base/account@1.0.0")] extern "C" { #[link_name = "has-non-fungible-asset"] - fn wit_import(_: f64, _: f64, _: f64, _: f64, ) -> i32; + fn wit_import(_: i64, _: i64, _: i64, _: i64, ) -> i32; } #[cfg(not(target_arch = "wasm32"))] - fn wit_import(_: f64, _: f64, _: f64, _: f64, ) -> i32{ unreachable!() } - let ret = wit_import(wit_bindgen::rt::as_f64(inner2), wit_bindgen::rt::as_f64(inner3), wit_bindgen::rt::as_f64(inner4), wit_bindgen::rt::as_f64(inner5)); + fn wit_import(_: i64, _: i64, _: i64, _: i64, ) -> i32{ unreachable!() } + let ret = wit_import(wit_bindgen::rt::as_i64(inner2), wit_bindgen::rt::as_i64(inner3), wit_bindgen::rt::as_i64(inner4), wit_bindgen::rt::as_i64(inner5)); wit_bindgen::rt::bool_lift(ret as u8) } } @@ -815,25 +816,25 @@ pub mod miden { #[link(wasm_import_module = "miden:base/account@1.0.0")] extern "C" { #[link_name = "add-asset"] - fn wit_import(_: f64, _: f64, _: f64, _: f64, _: i32, ); + fn wit_import(_: i64, _: i64, _: i64, _: i64, _: i32, ); } #[cfg(not(target_arch = "wasm32"))] - fn wit_import(_: f64, _: f64, _: f64, _: f64, _: i32, ){ unreachable!() } - wit_import(wit_bindgen::rt::as_f64(inner2), wit_bindgen::rt::as_f64(inner3), wit_bindgen::rt::as_f64(inner4), wit_bindgen::rt::as_f64(inner5), ptr6); - let l7 = *((ptr6 + 0) as *const f64); - let l8 = *((ptr6 + 8) as *const f64); - let l9 = *((ptr6 + 16) as *const f64); - let l10 = *((ptr6 + 24) as *const f64); + fn wit_import(_: i64, _: i64, _: i64, _: i64, _: i32, ){ unreachable!() } + wit_import(wit_bindgen::rt::as_i64(inner2), wit_bindgen::rt::as_i64(inner3), wit_bindgen::rt::as_i64(inner4), wit_bindgen::rt::as_i64(inner5), ptr6); + let l7 = *((ptr6 + 0) as *const i64); + let l8 = *((ptr6 + 8) as *const i64); + let l9 = *((ptr6 + 16) as *const i64); + let l10 = *((ptr6 + 24) as *const i64); super::super::super::miden::base::core_types::CoreAsset{ inner: (super::super::super::miden::base::core_types::Felt{ - inner: l7, + inner: l7 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l8, + inner: l8 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l9, + inner: l9 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l10, + inner: l10 as u64, }), } } @@ -860,25 +861,25 @@ pub mod miden { #[link(wasm_import_module = "miden:base/account@1.0.0")] extern "C" { #[link_name = "remove-asset"] - fn wit_import(_: f64, _: f64, _: f64, _: f64, _: i32, ); + fn wit_import(_: i64, _: i64, _: i64, _: i64, _: i32, ); } #[cfg(not(target_arch = "wasm32"))] - fn wit_import(_: f64, _: f64, _: f64, _: f64, _: i32, ){ unreachable!() } - wit_import(wit_bindgen::rt::as_f64(inner2), wit_bindgen::rt::as_f64(inner3), wit_bindgen::rt::as_f64(inner4), wit_bindgen::rt::as_f64(inner5), ptr6); - let l7 = *((ptr6 + 0) as *const f64); - let l8 = *((ptr6 + 8) as *const f64); - let l9 = *((ptr6 + 16) as *const f64); - let l10 = *((ptr6 + 24) as *const f64); + fn wit_import(_: i64, _: i64, _: i64, _: i64, _: i32, ){ unreachable!() } + wit_import(wit_bindgen::rt::as_i64(inner2), wit_bindgen::rt::as_i64(inner3), wit_bindgen::rt::as_i64(inner4), wit_bindgen::rt::as_i64(inner5), ptr6); + let l7 = *((ptr6 + 0) as *const i64); + let l8 = *((ptr6 + 8) as *const i64); + let l9 = *((ptr6 + 16) as *const i64); + let l10 = *((ptr6 + 24) as *const i64); super::super::super::miden::base::core_types::CoreAsset{ inner: (super::super::super::miden::base::core_types::Felt{ - inner: l7, + inner: l7 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l8, + inner: l8 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l9, + inner: l9 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l10, + inner: l10 as u64, }), } } @@ -905,19 +906,19 @@ pub mod miden { #[cfg(not(target_arch = "wasm32"))] fn wit_import(_: i32, ){ unreachable!() } wit_import(ptr0); - let l1 = *((ptr0 + 0) as *const f64); - let l2 = *((ptr0 + 8) as *const f64); - let l3 = *((ptr0 + 16) as *const f64); - let l4 = *((ptr0 + 24) as *const f64); + let l1 = *((ptr0 + 0) as *const i64); + let l2 = *((ptr0 + 8) as *const i64); + let l3 = *((ptr0 + 16) as *const i64); + let l4 = *((ptr0 + 24) as *const i64); super::super::super::miden::base::core_types::VaultCommitment{ inner: (super::super::super::miden::base::core_types::Felt{ - inner: l1, + inner: l1 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l2, + inner: l2 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l3, + inner: l3 as u64, }, super::super::super::miden::base::core_types::Felt{ - inner: l4, + inner: l4 as u64, }), } } @@ -1003,15 +1004,15 @@ pub mod miden { #[link(wasm_import_module = "miden:base/note@1.0.0")] extern "C" { #[link_name = "get-sender"] - fn wit_import() -> f64; + fn wit_import() -> i64; } #[cfg(not(target_arch = "wasm32"))] - fn wit_import() -> f64{ unreachable!() } + fn wit_import() -> i64{ unreachable!() } let ret = wit_import(); super::super::super::miden::base::core_types::AccountId{ inner: super::super::super::miden::base::core_types::Felt{ - inner: ret, + inner: ret as u64, }, } } @@ -1048,12 +1049,12 @@ pub mod miden { #[link(wasm_import_module = "miden:basic-wallet/basic-wallet@1.0.0")] extern "C" { #[link_name = "receive-asset"] - fn wit_import(_: f64, _: f64, _: f64, _: f64, ); + fn wit_import(_: i64, _: i64, _: i64, _: i64, ); } #[cfg(not(target_arch = "wasm32"))] - fn wit_import(_: f64, _: f64, _: f64, _: f64, ){ unreachable!() } - wit_import(wit_bindgen::rt::as_f64(inner2), wit_bindgen::rt::as_f64(inner3), wit_bindgen::rt::as_f64(inner4), wit_bindgen::rt::as_f64(inner5)); + fn wit_import(_: i64, _: i64, _: i64, _: i64, ){ unreachable!() } + wit_import(wit_bindgen::rt::as_i64(inner2), wit_bindgen::rt::as_i64(inner3), wit_bindgen::rt::as_i64(inner4), wit_bindgen::rt::as_i64(inner5)); } } #[allow(unused_unsafe, clippy::all)] @@ -1081,12 +1082,12 @@ pub mod miden { #[link(wasm_import_module = "miden:basic-wallet/basic-wallet@1.0.0")] extern "C" { #[link_name = "send-asset"] - fn wit_import(_: f64, _: f64, _: f64, _: f64, _: f64, _: f64, _: f64, _: f64, _: f64, ); + fn wit_import(_: i64, _: i64, _: i64, _: i64, _: i64, _: i64, _: i64, _: i64, _: i64, ); } #[cfg(not(target_arch = "wasm32"))] - fn wit_import(_: f64, _: f64, _: f64, _: f64, _: f64, _: f64, _: f64, _: f64, _: f64, ){ unreachable!() } - wit_import(wit_bindgen::rt::as_f64(inner2), wit_bindgen::rt::as_f64(inner3), wit_bindgen::rt::as_f64(inner4), wit_bindgen::rt::as_f64(inner5), wit_bindgen::rt::as_f64(inner7), wit_bindgen::rt::as_f64(inner10), wit_bindgen::rt::as_f64(inner11), wit_bindgen::rt::as_f64(inner12), wit_bindgen::rt::as_f64(inner13)); + fn wit_import(_: i64, _: i64, _: i64, _: i64, _: i64, _: i64, _: i64, _: i64, _: i64, ){ unreachable!() } + wit_import(wit_bindgen::rt::as_i64(inner2), wit_bindgen::rt::as_i64(inner3), wit_bindgen::rt::as_i64(inner4), wit_bindgen::rt::as_i64(inner5), wit_bindgen::rt::as_i64(inner7), wit_bindgen::rt::as_i64(inner10), wit_bindgen::rt::as_i64(inner11), wit_bindgen::rt::as_i64(inner12), wit_bindgen::rt::as_i64(inner13)); } } @@ -1144,7 +1145,7 @@ pub mod exports { #[cfg(target_arch = "wasm32")] #[link_section = "component-type:notes-world"] #[doc(hidden)] -pub static __WIT_BINDGEN_COMPONENT_TYPE: [u8; 2438] = [3, 0, 11, 110, 111, 116, 101, 115, 45, 119, 111, 114, 108, 100, 0, 97, 115, 109, 13, 0, 1, 0, 7, 128, 18, 1, 65, 2, 1, 65, 26, 1, 66, 30, 1, 114, 1, 5, 105, 110, 110, 101, 114, 117, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 1, 111, 4, 1, 1, 1, 1, 4, 0, 4, 119, 111, 114, 100, 3, 0, 2, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 4, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 3, 116, 97, 103, 3, 0, 8, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 10, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 12, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 14, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 16, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 18, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 20, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 22, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 24, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 1, 64, 1, 4, 102, 101, 108, 116, 1, 0, 5, 4, 0, 20, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 45, 102, 114, 111, 109, 45, 102, 101, 108, 116, 1, 28, 3, 1, 27, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 99, 111, 114, 101, 45, 116, 121, 112, 101, 115, 64, 49, 46, 48, 46, 48, 5, 0, 2, 3, 0, 0, 4, 102, 101, 108, 116, 2, 3, 0, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 2, 3, 0, 0, 3, 116, 97, 103, 2, 3, 0, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 2, 3, 0, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 2, 3, 0, 0, 5, 110, 111, 110, 99, 101, 2, 3, 0, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 2, 3, 0, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 2, 3, 0, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 2, 3, 0, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 2, 3, 0, 0, 4, 119, 111, 114, 100, 2, 3, 0, 0, 7, 110, 111, 116, 101, 45, 105, 100, 1, 66, 37, 2, 3, 2, 1, 1, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 2, 3, 2, 1, 2, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 2, 2, 3, 2, 1, 3, 4, 0, 3, 116, 97, 103, 3, 0, 4, 2, 3, 2, 1, 4, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 2, 3, 2, 1, 5, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 8, 2, 3, 2, 1, 6, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 10, 2, 3, 2, 1, 7, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 12, 2, 3, 2, 1, 8, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 14, 2, 3, 2, 1, 9, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 16, 2, 3, 2, 1, 10, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 18, 2, 3, 2, 1, 11, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 20, 2, 3, 2, 1, 12, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 22, 2, 3, 2, 1, 13, 4, 0, 4, 119, 111, 114, 100, 3, 0, 24, 2, 3, 2, 1, 14, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 1, 64, 0, 0, 1, 4, 0, 16, 103, 101, 116, 45, 98, 108, 111, 99, 107, 45, 110, 117, 109, 98, 101, 114, 1, 28, 1, 64, 0, 0, 23, 4, 0, 14, 103, 101, 116, 45, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 1, 29, 1, 64, 0, 0, 25, 4, 0, 20, 103, 101, 116, 45, 105, 110, 112, 117, 116, 45, 110, 111, 116, 101, 115, 45, 104, 97, 115, 104, 1, 30, 4, 0, 21, 103, 101, 116, 45, 111, 117, 116, 112, 117, 116, 45, 110, 111, 116, 101, 115, 45, 104, 97, 115, 104, 1, 30, 1, 64, 3, 5, 97, 115, 115, 101, 116, 3, 3, 116, 97, 103, 5, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 7, 0, 27, 4, 0, 11, 99, 114, 101, 97, 116, 101, 45, 110, 111, 116, 101, 1, 31, 3, 1, 19, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 116, 120, 64, 49, 46, 48, 46, 48, 5, 15, 1, 66, 47, 2, 3, 2, 1, 1, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 2, 3, 2, 1, 2, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 2, 2, 3, 2, 1, 3, 4, 0, 3, 116, 97, 103, 3, 0, 4, 2, 3, 2, 1, 4, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 2, 3, 2, 1, 5, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 8, 2, 3, 2, 1, 6, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 10, 2, 3, 2, 1, 7, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 12, 2, 3, 2, 1, 8, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 14, 2, 3, 2, 1, 9, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 16, 2, 3, 2, 1, 10, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 18, 2, 3, 2, 1, 11, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 20, 1, 64, 0, 0, 9, 4, 0, 6, 103, 101, 116, 45, 105, 100, 1, 22, 1, 64, 0, 0, 11, 4, 0, 9, 103, 101, 116, 45, 110, 111, 110, 99, 101, 1, 23, 1, 64, 0, 0, 13, 4, 0, 16, 103, 101, 116, 45, 105, 110, 105, 116, 105, 97, 108, 45, 104, 97, 115, 104, 1, 24, 4, 0, 16, 103, 101, 116, 45, 99, 117, 114, 114, 101, 110, 116, 45, 104, 97, 115, 104, 1, 24, 1, 64, 1, 5, 118, 97, 108, 117, 101, 1, 1, 0, 4, 0, 10, 105, 110, 99, 114, 45, 110, 111, 110, 99, 101, 1, 25, 1, 64, 1, 5, 105, 110, 100, 101, 120, 1, 0, 15, 4, 0, 8, 103, 101, 116, 45, 105, 116, 101, 109, 1, 26, 1, 111, 2, 17, 15, 1, 64, 2, 5, 105, 110, 100, 101, 120, 1, 5, 118, 97, 108, 117, 101, 15, 0, 27, 4, 0, 8, 115, 101, 116, 45, 105, 116, 101, 109, 1, 28, 1, 64, 1, 9, 99, 111, 100, 101, 45, 114, 111, 111, 116, 19, 1, 0, 4, 0, 8, 115, 101, 116, 45, 99, 111, 100, 101, 1, 29, 1, 64, 1, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 9, 0, 1, 4, 0, 11, 103, 101, 116, 45, 98, 97, 108, 97, 110, 99, 101, 1, 30, 1, 64, 1, 5, 97, 115, 115, 101, 116, 3, 0, 127, 4, 0, 22, 104, 97, 115, 45, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 1, 31, 1, 64, 1, 5, 97, 115, 115, 101, 116, 3, 0, 3, 4, 0, 9, 97, 100, 100, 45, 97, 115, 115, 101, 116, 1, 32, 4, 0, 12, 114, 101, 109, 111, 118, 101, 45, 97, 115, 115, 101, 116, 1, 32, 1, 64, 0, 0, 21, 4, 0, 20, 103, 101, 116, 45, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 1, 33, 3, 1, 24, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 97, 99, 99, 111, 117, 110, 116, 64, 49, 46, 48, 46, 48, 5, 16, 1, 66, 30, 2, 3, 2, 1, 1, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 2, 3, 2, 1, 2, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 2, 2, 3, 2, 1, 3, 4, 0, 3, 116, 97, 103, 3, 0, 4, 2, 3, 2, 1, 4, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 2, 3, 2, 1, 5, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 8, 2, 3, 2, 1, 6, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 10, 2, 3, 2, 1, 7, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 12, 2, 3, 2, 1, 8, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 14, 2, 3, 2, 1, 9, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 16, 2, 3, 2, 1, 10, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 18, 2, 3, 2, 1, 11, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 20, 1, 112, 1, 1, 64, 0, 0, 22, 4, 0, 10, 103, 101, 116, 45, 105, 110, 112, 117, 116, 115, 1, 23, 1, 112, 3, 1, 64, 0, 0, 24, 4, 0, 10, 103, 101, 116, 45, 97, 115, 115, 101, 116, 115, 1, 25, 1, 64, 0, 0, 9, 4, 0, 10, 103, 101, 116, 45, 115, 101, 110, 100, 101, 114, 1, 26, 3, 1, 21, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 110, 111, 116, 101, 64, 49, 46, 48, 46, 48, 5, 17, 1, 66, 10, 2, 3, 2, 1, 2, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 0, 2, 3, 2, 1, 3, 4, 0, 3, 116, 97, 103, 3, 0, 2, 2, 3, 2, 1, 4, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 4, 1, 64, 1, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 1, 1, 0, 4, 0, 13, 114, 101, 99, 101, 105, 118, 101, 45, 97, 115, 115, 101, 116, 1, 6, 1, 64, 3, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 1, 3, 116, 97, 103, 3, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 5, 1, 0, 4, 0, 10, 115, 101, 110, 100, 45, 97, 115, 115, 101, 116, 1, 7, 3, 1, 37, 109, 105, 100, 101, 110, 58, 98, 97, 115, 105, 99, 45, 119, 97, 108, 108, 101, 116, 47, 98, 97, 115, 105, 99, 45, 119, 97, 108, 108, 101, 116, 64, 49, 46, 48, 46, 48, 5, 18, 1, 66, 2, 1, 64, 0, 1, 0, 4, 0, 11, 110, 111, 116, 101, 45, 115, 99, 114, 105, 112, 116, 1, 0, 4, 1, 28, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 110, 111, 116, 101, 45, 115, 99, 114, 105, 112, 116, 64, 49, 46, 48, 46, 48, 5, 19, 4, 1, 28, 109, 105, 100, 101, 110, 58, 112, 50, 105, 100, 47, 110, 111, 116, 101, 115, 45, 119, 111, 114, 108, 100, 64, 49, 46, 48, 46, 48, 4, 0, 11, 17, 1, 0, 11, 110, 111, 116, 101, 115, 45, 119, 111, 114, 108, 100, 3, 0, 0, 0, 16, 12, 112, 97, 99, 107, 97, 103, 101, 45, 100, 111, 99, 115, 0, 123, 125, 0, 70, 9, 112, 114, 111, 100, 117, 99, 101, 114, 115, 1, 12, 112, 114, 111, 99, 101, 115, 115, 101, 100, 45, 98, 121, 2, 13, 119, 105, 116, 45, 99, 111, 109, 112, 111, 110, 101, 110, 116, 6, 48, 46, 49, 56, 46, 50, 16, 119, 105, 116, 45, 98, 105, 110, 100, 103, 101, 110, 45, 114, 117, 115, 116, 6, 48, 46, 49, 54, 46, 48]; +pub static __WIT_BINDGEN_COMPONENT_TYPE: [u8; 2438] = [3, 0, 11, 110, 111, 116, 101, 115, 45, 119, 111, 114, 108, 100, 0, 97, 115, 109, 13, 0, 1, 0, 7, 128, 18, 1, 65, 2, 1, 65, 26, 1, 66, 30, 1, 114, 1, 5, 105, 110, 110, 101, 114, 119, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 1, 111, 4, 1, 1, 1, 1, 4, 0, 4, 119, 111, 114, 100, 3, 0, 2, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 4, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 3, 116, 97, 103, 3, 0, 8, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 10, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 12, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 14, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 16, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 18, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 20, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 22, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 24, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 1, 64, 1, 4, 102, 101, 108, 116, 1, 0, 5, 4, 0, 20, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 45, 102, 114, 111, 109, 45, 102, 101, 108, 116, 1, 28, 3, 1, 27, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 99, 111, 114, 101, 45, 116, 121, 112, 101, 115, 64, 49, 46, 48, 46, 48, 5, 0, 2, 3, 0, 0, 4, 102, 101, 108, 116, 2, 3, 0, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 2, 3, 0, 0, 3, 116, 97, 103, 2, 3, 0, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 2, 3, 0, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 2, 3, 0, 0, 5, 110, 111, 110, 99, 101, 2, 3, 0, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 2, 3, 0, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 2, 3, 0, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 2, 3, 0, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 2, 3, 0, 0, 4, 119, 111, 114, 100, 2, 3, 0, 0, 7, 110, 111, 116, 101, 45, 105, 100, 1, 66, 37, 2, 3, 2, 1, 1, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 2, 3, 2, 1, 2, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 2, 2, 3, 2, 1, 3, 4, 0, 3, 116, 97, 103, 3, 0, 4, 2, 3, 2, 1, 4, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 2, 3, 2, 1, 5, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 8, 2, 3, 2, 1, 6, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 10, 2, 3, 2, 1, 7, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 12, 2, 3, 2, 1, 8, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 14, 2, 3, 2, 1, 9, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 16, 2, 3, 2, 1, 10, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 18, 2, 3, 2, 1, 11, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 20, 2, 3, 2, 1, 12, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 22, 2, 3, 2, 1, 13, 4, 0, 4, 119, 111, 114, 100, 3, 0, 24, 2, 3, 2, 1, 14, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 1, 64, 0, 0, 1, 4, 0, 16, 103, 101, 116, 45, 98, 108, 111, 99, 107, 45, 110, 117, 109, 98, 101, 114, 1, 28, 1, 64, 0, 0, 23, 4, 0, 14, 103, 101, 116, 45, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 1, 29, 1, 64, 0, 0, 25, 4, 0, 20, 103, 101, 116, 45, 105, 110, 112, 117, 116, 45, 110, 111, 116, 101, 115, 45, 104, 97, 115, 104, 1, 30, 4, 0, 21, 103, 101, 116, 45, 111, 117, 116, 112, 117, 116, 45, 110, 111, 116, 101, 115, 45, 104, 97, 115, 104, 1, 30, 1, 64, 3, 5, 97, 115, 115, 101, 116, 3, 3, 116, 97, 103, 5, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 7, 0, 27, 4, 0, 11, 99, 114, 101, 97, 116, 101, 45, 110, 111, 116, 101, 1, 31, 3, 1, 19, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 116, 120, 64, 49, 46, 48, 46, 48, 5, 15, 1, 66, 47, 2, 3, 2, 1, 1, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 2, 3, 2, 1, 2, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 2, 2, 3, 2, 1, 3, 4, 0, 3, 116, 97, 103, 3, 0, 4, 2, 3, 2, 1, 4, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 2, 3, 2, 1, 5, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 8, 2, 3, 2, 1, 6, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 10, 2, 3, 2, 1, 7, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 12, 2, 3, 2, 1, 8, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 14, 2, 3, 2, 1, 9, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 16, 2, 3, 2, 1, 10, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 18, 2, 3, 2, 1, 11, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 20, 1, 64, 0, 0, 9, 4, 0, 6, 103, 101, 116, 45, 105, 100, 1, 22, 1, 64, 0, 0, 11, 4, 0, 9, 103, 101, 116, 45, 110, 111, 110, 99, 101, 1, 23, 1, 64, 0, 0, 13, 4, 0, 16, 103, 101, 116, 45, 105, 110, 105, 116, 105, 97, 108, 45, 104, 97, 115, 104, 1, 24, 4, 0, 16, 103, 101, 116, 45, 99, 117, 114, 114, 101, 110, 116, 45, 104, 97, 115, 104, 1, 24, 1, 64, 1, 5, 118, 97, 108, 117, 101, 1, 1, 0, 4, 0, 10, 105, 110, 99, 114, 45, 110, 111, 110, 99, 101, 1, 25, 1, 64, 1, 5, 105, 110, 100, 101, 120, 1, 0, 15, 4, 0, 8, 103, 101, 116, 45, 105, 116, 101, 109, 1, 26, 1, 111, 2, 17, 15, 1, 64, 2, 5, 105, 110, 100, 101, 120, 1, 5, 118, 97, 108, 117, 101, 15, 0, 27, 4, 0, 8, 115, 101, 116, 45, 105, 116, 101, 109, 1, 28, 1, 64, 1, 9, 99, 111, 100, 101, 45, 114, 111, 111, 116, 19, 1, 0, 4, 0, 8, 115, 101, 116, 45, 99, 111, 100, 101, 1, 29, 1, 64, 1, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 9, 0, 1, 4, 0, 11, 103, 101, 116, 45, 98, 97, 108, 97, 110, 99, 101, 1, 30, 1, 64, 1, 5, 97, 115, 115, 101, 116, 3, 0, 127, 4, 0, 22, 104, 97, 115, 45, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 1, 31, 1, 64, 1, 5, 97, 115, 115, 101, 116, 3, 0, 3, 4, 0, 9, 97, 100, 100, 45, 97, 115, 115, 101, 116, 1, 32, 4, 0, 12, 114, 101, 109, 111, 118, 101, 45, 97, 115, 115, 101, 116, 1, 32, 1, 64, 0, 0, 21, 4, 0, 20, 103, 101, 116, 45, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 1, 33, 3, 1, 24, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 97, 99, 99, 111, 117, 110, 116, 64, 49, 46, 48, 46, 48, 5, 16, 1, 66, 30, 2, 3, 2, 1, 1, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 2, 3, 2, 1, 2, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 2, 2, 3, 2, 1, 3, 4, 0, 3, 116, 97, 103, 3, 0, 4, 2, 3, 2, 1, 4, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 2, 3, 2, 1, 5, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 8, 2, 3, 2, 1, 6, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 10, 2, 3, 2, 1, 7, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 12, 2, 3, 2, 1, 8, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 14, 2, 3, 2, 1, 9, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 16, 2, 3, 2, 1, 10, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 18, 2, 3, 2, 1, 11, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 20, 1, 112, 1, 1, 64, 0, 0, 22, 4, 0, 10, 103, 101, 116, 45, 105, 110, 112, 117, 116, 115, 1, 23, 1, 112, 3, 1, 64, 0, 0, 24, 4, 0, 10, 103, 101, 116, 45, 97, 115, 115, 101, 116, 115, 1, 25, 1, 64, 0, 0, 9, 4, 0, 10, 103, 101, 116, 45, 115, 101, 110, 100, 101, 114, 1, 26, 3, 1, 21, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 110, 111, 116, 101, 64, 49, 46, 48, 46, 48, 5, 17, 1, 66, 10, 2, 3, 2, 1, 2, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 0, 2, 3, 2, 1, 3, 4, 0, 3, 116, 97, 103, 3, 0, 2, 2, 3, 2, 1, 4, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 4, 1, 64, 1, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 1, 1, 0, 4, 0, 13, 114, 101, 99, 101, 105, 118, 101, 45, 97, 115, 115, 101, 116, 1, 6, 1, 64, 3, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 1, 3, 116, 97, 103, 3, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 5, 1, 0, 4, 0, 10, 115, 101, 110, 100, 45, 97, 115, 115, 101, 116, 1, 7, 3, 1, 37, 109, 105, 100, 101, 110, 58, 98, 97, 115, 105, 99, 45, 119, 97, 108, 108, 101, 116, 47, 98, 97, 115, 105, 99, 45, 119, 97, 108, 108, 101, 116, 64, 49, 46, 48, 46, 48, 5, 18, 1, 66, 2, 1, 64, 0, 1, 0, 4, 0, 11, 110, 111, 116, 101, 45, 115, 99, 114, 105, 112, 116, 1, 0, 4, 1, 28, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 110, 111, 116, 101, 45, 115, 99, 114, 105, 112, 116, 64, 49, 46, 48, 46, 48, 5, 19, 4, 1, 28, 109, 105, 100, 101, 110, 58, 112, 50, 105, 100, 47, 110, 111, 116, 101, 115, 45, 119, 111, 114, 108, 100, 64, 49, 46, 48, 46, 48, 4, 0, 11, 17, 1, 0, 11, 110, 111, 116, 101, 115, 45, 119, 111, 114, 108, 100, 3, 0, 0, 0, 16, 12, 112, 97, 99, 107, 97, 103, 101, 45, 100, 111, 99, 115, 0, 123, 125, 0, 70, 9, 112, 114, 111, 100, 117, 99, 101, 114, 115, 1, 12, 112, 114, 111, 99, 101, 115, 115, 101, 100, 45, 98, 121, 2, 13, 119, 105, 116, 45, 99, 111, 109, 112, 111, 110, 101, 110, 116, 6, 48, 46, 49, 56, 46, 50, 16, 119, 105, 116, 45, 98, 105, 110, 100, 103, 101, 110, 45, 114, 117, 115, 116, 6, 48, 46, 49, 54, 46, 48]; #[inline(never)] #[doc(hidden)] diff --git a/tests/rust-apps-wasm/sdk/p2id-note/src/lib.rs b/tests/rust-apps-wasm/sdk/p2id-note/src/lib.rs index 328347a7c..287b1c4fb 100644 --- a/tests/rust-apps-wasm/sdk/p2id-note/src/lib.rs +++ b/tests/rust-apps-wasm/sdk/p2id-note/src/lib.rs @@ -1,11 +1,16 @@ #![no_std] +// This allows us to abort if the panic handler is invoked, but +// it is gated behind a perma-unstable nightly feature +#![feature(core_intrinsics)] +// Disable the warning triggered by the use of the `core_intrinsics` feature +#![allow(internal_features)] #[global_allocator] static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT; #[panic_handler] fn my_panic(_info: &core::panic::PanicInfo) -> ! { - loop {} + core::intrinsics::abort() } #[allow(dead_code)] @@ -26,7 +31,7 @@ impl Guest for Component { let target_account_id_felt = inputs[0]; let target_account_id = account_id_from_felt(target_account_id_felt); let account_id = get_id(); - assert_eq!(account_id, target_account_id); + // assert_eq!(account_id, target_account_id); let assets = get_assets(); for asset in assets { receive_asset(asset); diff --git a/tests/rust-apps-wasm/sdk/sdk/src/bindings.rs b/tests/rust-apps-wasm/sdk/sdk/src/bindings.rs index 2d3d52b32..d84e2421b 100644 --- a/tests/rust-apps-wasm/sdk/sdk/src/bindings.rs +++ b/tests/rust-apps-wasm/sdk/sdk/src/bindings.rs @@ -16,9 +16,10 @@ pub mod exports { #[repr(C)] #[derive(Clone, Copy)] pub struct Felt { - /// We use f64 as the backing type for the field element. It has the size that we need and + /// We plan to use f64 as the backing type for the field element. It has the size that we need and /// we don't plan to support floating point arithmetic in programs for Miden VM. - pub inner: f64, + /// For now its u64 + pub inner: u64, } impl ::core::fmt::Debug for Felt { fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { @@ -105,7 +106,7 @@ pub mod exports { #[doc(hidden)] #[export_name = "miden:base/core-types@1.0.0#account-id-from-felt"] #[allow(non_snake_case)] - unsafe extern "C" fn __export_account_id_from_felt(arg0: f64,) -> f64 { + unsafe extern "C" fn __export_account_id_from_felt(arg0: i64,) -> i64 { #[allow(unused_imports)] use wit_bindgen::rt::{alloc, vec::Vec, string::String}; @@ -124,11 +125,11 @@ pub mod exports { wit_bindgen::rt::run_ctors_once(); let result0 = <_GuestImpl as Guest>::account_id_from_felt(Felt{ - inner: arg0, + inner: arg0 as u64, }); let AccountId{ inner:inner1, } = result0; let Felt{ inner:inner2, } = inner1; - wit_bindgen::rt::as_f64(inner2) + wit_bindgen::rt::as_i64(inner2) } }; use super::super::super::super::super::Component as _GuestImpl; @@ -202,7 +203,7 @@ pub mod exports { #[doc(hidden)] #[export_name = "miden:base/types@1.0.0#from-core-asset"] #[allow(non_snake_case)] - unsafe extern "C" fn __export_from_core_asset(arg0: f64,arg1: f64,arg2: f64,arg3: f64,) -> i32 { + unsafe extern "C" fn __export_from_core_asset(arg0: i64,arg1: i64,arg2: i64,arg3: i64,) -> i32 { #[allow(unused_imports)] use wit_bindgen::rt::{alloc, vec::Vec, string::String}; @@ -222,13 +223,13 @@ pub mod exports { let result0 = <_GuestImpl as Guest>::from_core_asset(super::super::super::super::exports::miden::base::core_types::CoreAsset{ inner: (super::super::super::super::exports::miden::base::core_types::Felt{ - inner: arg0, + inner: arg0 as u64, }, super::super::super::super::exports::miden::base::core_types::Felt{ - inner: arg1, + inner: arg1 as u64, }, super::super::super::super::exports::miden::base::core_types::Felt{ - inner: arg2, + inner: arg2 as u64, }, super::super::super::super::exports::miden::base::core_types::Felt{ - inner: arg3, + inner: arg3 as u64, }), }); let ptr1 = _RET_AREA.0.as_mut_ptr() as i32; @@ -238,7 +239,7 @@ pub mod exports { let FungibleAsset{ asset:asset2, amount:amount2, } = e; let super::super::super::super::exports::miden::base::core_types::AccountId{ inner:inner3, } = asset2; let super::super::super::super::exports::miden::base::core_types::Felt{ inner:inner4, } = inner3; - *((ptr1 + 8) as *mut f64) = wit_bindgen::rt::as_f64(inner4); + *((ptr1 + 8) as *mut i64) = wit_bindgen::rt::as_i64(inner4); *((ptr1 + 16) as *mut i64) = wit_bindgen::rt::as_i64(amount2); }, Asset::NonFungible(e) => { @@ -246,13 +247,13 @@ pub mod exports { let NonFungibleAsset{ inner:inner5, } = e; let (t6_0, t6_1, t6_2, t6_3, ) = inner5; let super::super::super::super::exports::miden::base::core_types::Felt{ inner:inner7, } = t6_0; - *((ptr1 + 8) as *mut f64) = wit_bindgen::rt::as_f64(inner7); + *((ptr1 + 8) as *mut i64) = wit_bindgen::rt::as_i64(inner7); let super::super::super::super::exports::miden::base::core_types::Felt{ inner:inner8, } = t6_1; - *((ptr1 + 16) as *mut f64) = wit_bindgen::rt::as_f64(inner8); + *((ptr1 + 16) as *mut i64) = wit_bindgen::rt::as_i64(inner8); let super::super::super::super::exports::miden::base::core_types::Felt{ inner:inner9, } = t6_2; - *((ptr1 + 24) as *mut f64) = wit_bindgen::rt::as_f64(inner9); + *((ptr1 + 24) as *mut i64) = wit_bindgen::rt::as_i64(inner9); let super::super::super::super::exports::miden::base::core_types::Felt{ inner:inner10, } = t6_3; - *((ptr1 + 32) as *mut f64) = wit_bindgen::rt::as_f64(inner10); + *((ptr1 + 32) as *mut i64) = wit_bindgen::rt::as_i64(inner10); }, } ptr1 @@ -263,7 +264,7 @@ pub mod exports { #[doc(hidden)] #[export_name = "miden:base/types@1.0.0#to-core-asset"] #[allow(non_snake_case)] - unsafe extern "C" fn __export_to_core_asset(arg0: i32,arg1: f64,arg2: i64,arg3: f64,arg4: f64,) -> i32 { + unsafe extern "C" fn __export_to_core_asset(arg0: i32,arg1: i64,arg2: i64,arg3: i64,arg4: i64,) -> i32 { #[allow(unused_imports)] use wit_bindgen::rt::{alloc, vec::Vec, string::String}; @@ -286,7 +287,7 @@ pub mod exports { let e0 = FungibleAsset{ asset: super::super::super::super::exports::miden::base::core_types::AccountId{ inner: super::super::super::super::exports::miden::base::core_types::Felt{ - inner: arg1, + inner: arg1 as u64, }, }, amount: arg2 as u64, @@ -297,13 +298,13 @@ pub mod exports { debug_assert_eq!(n, 1, "invalid enum discriminant"); let e0 = NonFungibleAsset{ inner: (super::super::super::super::exports::miden::base::core_types::Felt{ - inner: arg1, + inner: arg1 as u64, }, super::super::super::super::exports::miden::base::core_types::Felt{ - inner: f64::from_bits(arg2 as u64), + inner: arg2 as u64, }, super::super::super::super::exports::miden::base::core_types::Felt{ - inner: arg3, + inner: arg3 as u64, }, super::super::super::super::exports::miden::base::core_types::Felt{ - inner: arg4, + inner: arg4 as u64, }), }; Asset::NonFungible(e0) @@ -314,13 +315,13 @@ pub mod exports { let super::super::super::super::exports::miden::base::core_types::CoreAsset{ inner:inner3, } = result1; let (t4_0, t4_1, t4_2, t4_3, ) = inner3; let super::super::super::super::exports::miden::base::core_types::Felt{ inner:inner5, } = t4_0; - *((ptr2 + 0) as *mut f64) = wit_bindgen::rt::as_f64(inner5); + *((ptr2 + 0) as *mut i64) = wit_bindgen::rt::as_i64(inner5); let super::super::super::super::exports::miden::base::core_types::Felt{ inner:inner6, } = t4_1; - *((ptr2 + 8) as *mut f64) = wit_bindgen::rt::as_f64(inner6); + *((ptr2 + 8) as *mut i64) = wit_bindgen::rt::as_i64(inner6); let super::super::super::super::exports::miden::base::core_types::Felt{ inner:inner7, } = t4_2; - *((ptr2 + 16) as *mut f64) = wit_bindgen::rt::as_f64(inner7); + *((ptr2 + 16) as *mut i64) = wit_bindgen::rt::as_i64(inner7); let super::super::super::super::exports::miden::base::core_types::Felt{ inner:inner8, } = t4_3; - *((ptr2 + 24) as *mut f64) = wit_bindgen::rt::as_f64(inner8); + *((ptr2 + 24) as *mut i64) = wit_bindgen::rt::as_i64(inner8); ptr2 } }; @@ -348,7 +349,7 @@ pub mod exports { #[cfg(target_arch = "wasm32")] #[link_section = "component-type:base-world"] #[doc(hidden)] -pub static __WIT_BINDGEN_COMPONENT_TYPE: [u8; 16715] = [3, 0, 10, 98, 97, 115, 101, 45, 119, 111, 114, 108, 100, 0, 97, 115, 109, 13, 0, 1, 0, 7, 171, 3, 1, 65, 2, 1, 66, 30, 1, 114, 1, 5, 105, 110, 110, 101, 114, 117, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 1, 111, 4, 1, 1, 1, 1, 4, 0, 4, 119, 111, 114, 100, 3, 0, 2, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 4, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 3, 116, 97, 103, 3, 0, 8, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 10, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 12, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 14, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 16, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 18, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 20, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 22, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 24, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 1, 64, 1, 4, 102, 101, 108, 116, 1, 0, 5, 4, 0, 20, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 45, 102, 114, 111, 109, 45, 102, 101, 108, 116, 1, 28, 4, 1, 27, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 99, 111, 114, 101, 45, 116, 121, 112, 101, 115, 64, 49, 46, 48, 46, 48, 5, 0, 11, 16, 1, 0, 10, 99, 111, 114, 101, 45, 116, 121, 112, 101, 115, 3, 0, 0, 7, 142, 9, 1, 65, 15, 1, 66, 28, 1, 114, 1, 5, 105, 110, 110, 101, 114, 117, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 1, 111, 4, 1, 1, 1, 1, 4, 0, 4, 119, 111, 114, 100, 3, 0, 2, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 4, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 3, 116, 97, 103, 3, 0, 8, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 10, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 12, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 14, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 16, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 18, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 20, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 22, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 24, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 3, 1, 27, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 99, 111, 114, 101, 45, 116, 121, 112, 101, 115, 64, 49, 46, 48, 46, 48, 5, 0, 2, 3, 0, 0, 4, 102, 101, 108, 116, 2, 3, 0, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 2, 3, 0, 0, 3, 116, 97, 103, 2, 3, 0, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 2, 3, 0, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 2, 3, 0, 0, 5, 110, 111, 110, 99, 101, 2, 3, 0, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 2, 3, 0, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 2, 3, 0, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 1, 66, 47, 2, 3, 2, 1, 1, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 2, 3, 2, 1, 2, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 2, 2, 3, 2, 1, 3, 4, 0, 3, 116, 97, 103, 3, 0, 4, 2, 3, 2, 1, 4, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 2, 3, 2, 1, 5, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 8, 2, 3, 2, 1, 6, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 10, 2, 3, 2, 1, 7, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 12, 2, 3, 2, 1, 8, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 14, 2, 3, 2, 1, 9, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 16, 2, 3, 2, 1, 10, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 18, 2, 3, 2, 1, 11, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 20, 1, 64, 0, 0, 9, 4, 0, 6, 103, 101, 116, 45, 105, 100, 1, 22, 1, 64, 0, 0, 11, 4, 0, 9, 103, 101, 116, 45, 110, 111, 110, 99, 101, 1, 23, 1, 64, 0, 0, 13, 4, 0, 16, 103, 101, 116, 45, 105, 110, 105, 116, 105, 97, 108, 45, 104, 97, 115, 104, 1, 24, 4, 0, 16, 103, 101, 116, 45, 99, 117, 114, 114, 101, 110, 116, 45, 104, 97, 115, 104, 1, 24, 1, 64, 1, 5, 118, 97, 108, 117, 101, 1, 1, 0, 4, 0, 10, 105, 110, 99, 114, 45, 110, 111, 110, 99, 101, 1, 25, 1, 64, 1, 5, 105, 110, 100, 101, 120, 1, 0, 15, 4, 0, 8, 103, 101, 116, 45, 105, 116, 101, 109, 1, 26, 1, 111, 2, 17, 15, 1, 64, 2, 5, 105, 110, 100, 101, 120, 1, 5, 118, 97, 108, 117, 101, 15, 0, 27, 4, 0, 8, 115, 101, 116, 45, 105, 116, 101, 109, 1, 28, 1, 64, 1, 9, 99, 111, 100, 101, 45, 114, 111, 111, 116, 19, 1, 0, 4, 0, 8, 115, 101, 116, 45, 99, 111, 100, 101, 1, 29, 1, 64, 1, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 9, 0, 1, 4, 0, 11, 103, 101, 116, 45, 98, 97, 108, 97, 110, 99, 101, 1, 30, 1, 64, 1, 5, 97, 115, 115, 101, 116, 3, 0, 127, 4, 0, 22, 104, 97, 115, 45, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 1, 31, 1, 64, 1, 5, 97, 115, 115, 101, 116, 3, 0, 3, 4, 0, 9, 97, 100, 100, 45, 97, 115, 115, 101, 116, 1, 32, 4, 0, 12, 114, 101, 109, 111, 118, 101, 45, 97, 115, 115, 101, 116, 1, 32, 1, 64, 0, 0, 21, 4, 0, 20, 103, 101, 116, 45, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 1, 33, 4, 1, 24, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 97, 99, 99, 111, 117, 110, 116, 64, 49, 46, 48, 46, 48, 5, 12, 11, 13, 1, 0, 7, 97, 99, 99, 111, 117, 110, 116, 3, 2, 0, 7, 244, 6, 1, 65, 15, 1, 66, 28, 1, 114, 1, 5, 105, 110, 110, 101, 114, 117, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 1, 111, 4, 1, 1, 1, 1, 4, 0, 4, 119, 111, 114, 100, 3, 0, 2, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 4, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 3, 116, 97, 103, 3, 0, 8, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 10, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 12, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 14, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 16, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 18, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 20, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 22, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 24, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 3, 1, 27, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 99, 111, 114, 101, 45, 116, 121, 112, 101, 115, 64, 49, 46, 48, 46, 48, 5, 0, 2, 3, 0, 0, 4, 102, 101, 108, 116, 2, 3, 0, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 2, 3, 0, 0, 3, 116, 97, 103, 2, 3, 0, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 2, 3, 0, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 2, 3, 0, 0, 5, 110, 111, 110, 99, 101, 2, 3, 0, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 2, 3, 0, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 2, 3, 0, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 1, 66, 30, 2, 3, 2, 1, 1, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 2, 3, 2, 1, 2, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 2, 2, 3, 2, 1, 3, 4, 0, 3, 116, 97, 103, 3, 0, 4, 2, 3, 2, 1, 4, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 2, 3, 2, 1, 5, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 8, 2, 3, 2, 1, 6, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 10, 2, 3, 2, 1, 7, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 12, 2, 3, 2, 1, 8, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 14, 2, 3, 2, 1, 9, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 16, 2, 3, 2, 1, 10, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 18, 2, 3, 2, 1, 11, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 20, 1, 112, 1, 1, 64, 0, 0, 22, 4, 0, 10, 103, 101, 116, 45, 105, 110, 112, 117, 116, 115, 1, 23, 1, 112, 3, 1, 64, 0, 0, 24, 4, 0, 10, 103, 101, 116, 45, 97, 115, 115, 101, 116, 115, 1, 25, 1, 64, 0, 0, 9, 4, 0, 10, 103, 101, 116, 45, 115, 101, 110, 100, 101, 114, 1, 26, 4, 1, 21, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 110, 111, 116, 101, 64, 49, 46, 48, 46, 48, 5, 12, 11, 10, 1, 0, 4, 110, 111, 116, 101, 3, 4, 0, 7, 160, 8, 1, 65, 18, 1, 66, 28, 1, 114, 1, 5, 105, 110, 110, 101, 114, 117, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 1, 111, 4, 1, 1, 1, 1, 4, 0, 4, 119, 111, 114, 100, 3, 0, 2, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 4, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 3, 116, 97, 103, 3, 0, 8, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 10, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 12, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 14, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 16, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 18, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 20, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 22, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 24, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 3, 1, 27, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 99, 111, 114, 101, 45, 116, 121, 112, 101, 115, 64, 49, 46, 48, 46, 48, 5, 0, 2, 3, 0, 0, 4, 102, 101, 108, 116, 2, 3, 0, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 2, 3, 0, 0, 3, 116, 97, 103, 2, 3, 0, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 2, 3, 0, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 2, 3, 0, 0, 5, 110, 111, 110, 99, 101, 2, 3, 0, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 2, 3, 0, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 2, 3, 0, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 2, 3, 0, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 2, 3, 0, 0, 4, 119, 111, 114, 100, 2, 3, 0, 0, 7, 110, 111, 116, 101, 45, 105, 100, 1, 66, 37, 2, 3, 2, 1, 1, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 2, 3, 2, 1, 2, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 2, 2, 3, 2, 1, 3, 4, 0, 3, 116, 97, 103, 3, 0, 4, 2, 3, 2, 1, 4, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 2, 3, 2, 1, 5, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 8, 2, 3, 2, 1, 6, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 10, 2, 3, 2, 1, 7, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 12, 2, 3, 2, 1, 8, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 14, 2, 3, 2, 1, 9, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 16, 2, 3, 2, 1, 10, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 18, 2, 3, 2, 1, 11, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 20, 2, 3, 2, 1, 12, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 22, 2, 3, 2, 1, 13, 4, 0, 4, 119, 111, 114, 100, 3, 0, 24, 2, 3, 2, 1, 14, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 1, 64, 0, 0, 1, 4, 0, 16, 103, 101, 116, 45, 98, 108, 111, 99, 107, 45, 110, 117, 109, 98, 101, 114, 1, 28, 1, 64, 0, 0, 23, 4, 0, 14, 103, 101, 116, 45, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 1, 29, 1, 64, 0, 0, 25, 4, 0, 20, 103, 101, 116, 45, 105, 110, 112, 117, 116, 45, 110, 111, 116, 101, 115, 45, 104, 97, 115, 104, 1, 30, 4, 0, 21, 103, 101, 116, 45, 111, 117, 116, 112, 117, 116, 45, 110, 111, 116, 101, 115, 45, 104, 97, 115, 104, 1, 30, 1, 64, 3, 5, 97, 115, 115, 101, 116, 3, 3, 116, 97, 103, 5, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 7, 0, 27, 4, 0, 11, 99, 114, 101, 97, 116, 101, 45, 110, 111, 116, 101, 1, 31, 4, 1, 19, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 116, 120, 64, 49, 46, 48, 46, 48, 5, 15, 11, 8, 1, 0, 2, 116, 120, 3, 6, 0, 7, 173, 8, 1, 65, 17, 1, 66, 28, 1, 114, 1, 5, 105, 110, 110, 101, 114, 117, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 1, 111, 4, 1, 1, 1, 1, 4, 0, 4, 119, 111, 114, 100, 3, 0, 2, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 4, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 3, 116, 97, 103, 3, 0, 8, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 10, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 12, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 14, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 16, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 18, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 20, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 22, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 24, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 3, 1, 27, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 99, 111, 114, 101, 45, 116, 121, 112, 101, 115, 64, 49, 46, 48, 46, 48, 5, 0, 2, 3, 0, 0, 4, 102, 101, 108, 116, 2, 3, 0, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 2, 3, 0, 0, 3, 116, 97, 103, 2, 3, 0, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 2, 3, 0, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 2, 3, 0, 0, 5, 110, 111, 110, 99, 101, 2, 3, 0, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 2, 3, 0, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 2, 3, 0, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 2, 3, 0, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 2, 3, 0, 0, 4, 119, 111, 114, 100, 1, 66, 34, 2, 3, 2, 1, 1, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 2, 3, 2, 1, 2, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 2, 2, 3, 2, 1, 3, 4, 0, 3, 116, 97, 103, 3, 0, 4, 2, 3, 2, 1, 4, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 2, 3, 2, 1, 5, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 8, 2, 3, 2, 1, 6, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 10, 2, 3, 2, 1, 7, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 12, 2, 3, 2, 1, 8, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 14, 2, 3, 2, 1, 9, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 16, 2, 3, 2, 1, 10, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 18, 2, 3, 2, 1, 11, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 20, 2, 3, 2, 1, 12, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 22, 2, 3, 2, 1, 13, 4, 0, 4, 119, 111, 114, 100, 3, 0, 24, 1, 64, 2, 9, 102, 97, 117, 99, 101, 116, 45, 105, 100, 9, 6, 97, 109, 111, 117, 110, 116, 1, 0, 3, 4, 0, 20, 98, 117, 105, 108, 100, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 1, 26, 1, 64, 1, 6, 97, 109, 111, 117, 110, 116, 1, 0, 3, 4, 0, 21, 99, 114, 101, 97, 116, 101, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 1, 27, 1, 64, 2, 9, 102, 97, 117, 99, 101, 116, 45, 105, 100, 9, 9, 100, 97, 116, 97, 45, 104, 97, 115, 104, 25, 0, 3, 4, 0, 24, 98, 117, 105, 108, 100, 45, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 1, 28, 1, 64, 1, 9, 100, 97, 116, 97, 45, 104, 97, 115, 104, 25, 0, 3, 4, 0, 25, 99, 114, 101, 97, 116, 101, 45, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 1, 29, 4, 1, 22, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 97, 115, 115, 101, 116, 64, 49, 46, 48, 46, 48, 5, 14, 11, 11, 1, 0, 5, 97, 115, 115, 101, 116, 3, 8, 0, 7, 170, 7, 1, 65, 17, 1, 66, 28, 1, 114, 1, 5, 105, 110, 110, 101, 114, 117, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 1, 111, 4, 1, 1, 1, 1, 4, 0, 4, 119, 111, 114, 100, 3, 0, 2, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 4, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 3, 116, 97, 103, 3, 0, 8, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 10, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 12, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 14, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 16, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 18, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 20, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 22, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 24, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 3, 1, 27, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 99, 111, 114, 101, 45, 116, 121, 112, 101, 115, 64, 49, 46, 48, 46, 48, 5, 0, 2, 3, 0, 0, 4, 102, 101, 108, 116, 2, 3, 0, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 2, 3, 0, 0, 3, 116, 97, 103, 2, 3, 0, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 2, 3, 0, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 2, 3, 0, 0, 5, 110, 111, 110, 99, 101, 2, 3, 0, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 2, 3, 0, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 2, 3, 0, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 2, 3, 0, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 2, 3, 0, 0, 4, 119, 111, 114, 100, 1, 66, 31, 2, 3, 2, 1, 1, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 2, 3, 2, 1, 2, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 2, 2, 3, 2, 1, 3, 4, 0, 3, 116, 97, 103, 3, 0, 4, 2, 3, 2, 1, 4, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 2, 3, 2, 1, 5, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 8, 2, 3, 2, 1, 6, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 10, 2, 3, 2, 1, 7, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 12, 2, 3, 2, 1, 8, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 14, 2, 3, 2, 1, 9, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 16, 2, 3, 2, 1, 10, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 18, 2, 3, 2, 1, 11, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 20, 2, 3, 2, 1, 12, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 22, 2, 3, 2, 1, 13, 4, 0, 4, 119, 111, 114, 100, 3, 0, 24, 1, 64, 1, 5, 97, 115, 115, 101, 116, 3, 0, 3, 4, 0, 4, 109, 105, 110, 116, 1, 26, 4, 0, 4, 98, 117, 114, 110, 1, 26, 1, 64, 0, 0, 1, 4, 0, 18, 103, 101, 116, 45, 116, 111, 116, 97, 108, 45, 105, 115, 115, 117, 97, 110, 99, 101, 1, 27, 4, 1, 23, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 102, 97, 117, 99, 101, 116, 64, 49, 46, 48, 46, 48, 5, 14, 11, 12, 1, 0, 6, 102, 97, 117, 99, 101, 116, 3, 10, 0, 7, 210, 5, 1, 65, 8, 1, 66, 28, 1, 114, 1, 5, 105, 110, 110, 101, 114, 117, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 1, 111, 4, 1, 1, 1, 1, 4, 0, 4, 119, 111, 114, 100, 3, 0, 2, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 4, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 3, 116, 97, 103, 3, 0, 8, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 10, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 12, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 14, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 16, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 18, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 20, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 22, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 24, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 3, 1, 27, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 99, 111, 114, 101, 45, 116, 121, 112, 101, 115, 64, 49, 46, 48, 46, 48, 5, 0, 2, 3, 0, 0, 4, 102, 101, 108, 116, 2, 3, 0, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 2, 3, 0, 0, 4, 119, 111, 114, 100, 2, 3, 0, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 1, 66, 18, 2, 3, 2, 1, 1, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 2, 3, 2, 1, 2, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 2, 2, 3, 2, 1, 3, 4, 0, 4, 119, 111, 114, 100, 3, 0, 4, 2, 3, 2, 1, 4, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 6, 1, 114, 2, 5, 97, 115, 115, 101, 116, 3, 6, 97, 109, 111, 117, 110, 116, 119, 4, 0, 14, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 3, 0, 8, 1, 114, 1, 5, 105, 110, 110, 101, 114, 5, 4, 0, 18, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 3, 0, 10, 1, 113, 2, 8, 102, 117, 110, 103, 105, 98, 108, 101, 1, 9, 0, 12, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 1, 11, 0, 4, 0, 5, 97, 115, 115, 101, 116, 3, 0, 12, 1, 64, 1, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 7, 0, 13, 4, 0, 15, 102, 114, 111, 109, 45, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 1, 14, 1, 64, 1, 5, 97, 115, 115, 101, 116, 13, 0, 7, 4, 0, 13, 116, 111, 45, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 1, 15, 4, 1, 22, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 116, 121, 112, 101, 115, 64, 49, 46, 48, 46, 48, 5, 5, 11, 11, 1, 0, 5, 116, 121, 112, 101, 115, 3, 12, 0, 7, 60, 1, 65, 2, 1, 66, 2, 1, 64, 0, 1, 0, 4, 0, 11, 110, 111, 116, 101, 45, 115, 99, 114, 105, 112, 116, 1, 0, 4, 1, 28, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 110, 111, 116, 101, 45, 115, 99, 114, 105, 112, 116, 64, 49, 46, 48, 46, 48, 5, 0, 11, 17, 1, 0, 11, 110, 111, 116, 101, 45, 115, 99, 114, 105, 112, 116, 3, 14, 0, 7, 153, 6, 1, 65, 2, 1, 65, 8, 1, 66, 30, 1, 114, 1, 5, 105, 110, 110, 101, 114, 117, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 1, 111, 4, 1, 1, 1, 1, 4, 0, 4, 119, 111, 114, 100, 3, 0, 2, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 4, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 3, 116, 97, 103, 3, 0, 8, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 10, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 12, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 14, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 16, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 18, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 20, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 22, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 24, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 1, 64, 1, 4, 102, 101, 108, 116, 1, 0, 5, 4, 0, 20, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 45, 102, 114, 111, 109, 45, 102, 101, 108, 116, 1, 28, 4, 1, 27, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 99, 111, 114, 101, 45, 116, 121, 112, 101, 115, 64, 49, 46, 48, 46, 48, 5, 0, 2, 3, 0, 0, 4, 102, 101, 108, 116, 2, 3, 0, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 2, 3, 0, 0, 4, 119, 111, 114, 100, 2, 3, 0, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 1, 66, 18, 2, 3, 2, 1, 1, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 2, 3, 2, 1, 2, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 2, 2, 3, 2, 1, 3, 4, 0, 4, 119, 111, 114, 100, 3, 0, 4, 2, 3, 2, 1, 4, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 6, 1, 114, 2, 5, 97, 115, 115, 101, 116, 3, 6, 97, 109, 111, 117, 110, 116, 119, 4, 0, 14, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 3, 0, 8, 1, 114, 1, 5, 105, 110, 110, 101, 114, 5, 4, 0, 18, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 3, 0, 10, 1, 113, 2, 8, 102, 117, 110, 103, 105, 98, 108, 101, 1, 9, 0, 12, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 1, 11, 0, 4, 0, 5, 97, 115, 115, 101, 116, 3, 0, 12, 1, 64, 1, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 7, 0, 13, 4, 0, 15, 102, 114, 111, 109, 45, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 1, 14, 1, 64, 1, 5, 97, 115, 115, 101, 116, 13, 0, 7, 4, 0, 13, 116, 111, 45, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 1, 15, 4, 1, 22, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 116, 121, 112, 101, 115, 64, 49, 46, 48, 46, 48, 5, 5, 4, 1, 27, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 98, 97, 115, 101, 45, 119, 111, 114, 108, 100, 64, 49, 46, 48, 46, 48, 4, 0, 11, 16, 1, 0, 10, 98, 97, 115, 101, 45, 119, 111, 114, 108, 100, 3, 16, 0, 0, 130, 73, 12, 112, 97, 99, 107, 97, 103, 101, 45, 100, 111, 99, 115, 0, 123, 34, 105, 110, 116, 101, 114, 102, 97, 99, 101, 115, 34, 58, 123, 34, 99, 111, 114, 101, 45, 116, 121, 112, 101, 115, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 84, 121, 112, 101, 115, 32, 116, 111, 32, 98, 101, 32, 117, 115, 101, 100, 32, 105, 110, 32, 116, 120, 45, 107, 101, 114, 110, 101, 108, 32, 105, 110, 116, 101, 114, 102, 97, 99, 101, 34, 44, 34, 102, 117, 110, 99, 115, 34, 58, 123, 34, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 45, 102, 114, 111, 109, 45, 102, 101, 108, 116, 34, 58, 34, 67, 114, 101, 97, 116, 101, 115, 32, 97, 32, 110, 101, 119, 32, 97, 99, 99, 111, 117, 110, 116, 32, 73, 68, 32, 102, 114, 111, 109, 32, 97, 32, 102, 105, 101, 108, 100, 32, 101, 108, 101, 109, 101, 110, 116, 46, 34, 125, 44, 34, 116, 121, 112, 101, 115, 34, 58, 123, 34, 102, 101, 108, 116, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 82, 101, 112, 114, 101, 115, 101, 110, 116, 115, 32, 98, 97, 115, 101, 32, 102, 105, 101, 108, 100, 32, 101, 108, 101, 109, 101, 110, 116, 32, 105, 110, 32, 116, 104, 101, 32, 102, 105, 101, 108, 100, 32, 117, 115, 105, 110, 103, 32, 77, 111, 110, 116, 103, 111, 109, 101, 114, 121, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 46, 92, 110, 73, 110, 116, 101, 114, 110, 97, 108, 32, 118, 97, 108, 117, 101, 115, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 32, 120, 32, 42, 32, 82, 32, 109, 111, 100, 32, 77, 32, 119, 104, 101, 114, 101, 32, 82, 32, 61, 32, 50, 94, 54, 52, 32, 109, 111, 100, 32, 77, 32, 97, 110, 100, 32, 120, 32, 105, 110, 32, 91, 48, 44, 32, 77, 41, 46, 92, 110, 84, 104, 101, 32, 98, 97, 99, 107, 105, 110, 103, 32, 116, 121, 112, 101, 32, 105, 115, 32, 96, 102, 54, 52, 96, 32, 98, 117, 116, 32, 116, 104, 101, 32, 105, 110, 116, 101, 114, 110, 97, 108, 32, 118, 97, 108, 117, 101, 115, 32, 97, 114, 101, 32, 97, 108, 119, 97, 121, 115, 32, 105, 110, 116, 101, 103, 101, 114, 32, 105, 110, 32, 116, 104, 101, 32, 114, 97, 110, 103, 101, 32, 91, 48, 44, 32, 77, 41, 46, 92, 110, 70, 105, 101, 108, 100, 32, 109, 111, 100, 117, 108, 117, 115, 32, 77, 32, 61, 32, 50, 94, 54, 52, 32, 45, 32, 50, 94, 51, 50, 32, 43, 32, 49, 34, 44, 34, 105, 116, 101, 109, 115, 34, 58, 123, 34, 105, 110, 110, 101, 114, 34, 58, 34, 87, 101, 32, 117, 115, 101, 32, 102, 54, 52, 32, 97, 115, 32, 116, 104, 101, 32, 98, 97, 99, 107, 105, 110, 103, 32, 116, 121, 112, 101, 32, 102, 111, 114, 32, 116, 104, 101, 32, 102, 105, 101, 108, 100, 32, 101, 108, 101, 109, 101, 110, 116, 46, 32, 73, 116, 32, 104, 97, 115, 32, 116, 104, 101, 32, 115, 105, 122, 101, 32, 116, 104, 97, 116, 32, 119, 101, 32, 110, 101, 101, 100, 32, 97, 110, 100, 92, 110, 119, 101, 32, 100, 111, 110, 39, 116, 32, 112, 108, 97, 110, 32, 116, 111, 32, 115, 117, 112, 112, 111, 114, 116, 32, 102, 108, 111, 97, 116, 105, 110, 103, 32, 112, 111, 105, 110, 116, 32, 97, 114, 105, 116, 104, 109, 101, 116, 105, 99, 32, 105, 110, 32, 112, 114, 111, 103, 114, 97, 109, 115, 32, 102, 111, 114, 32, 77, 105, 100, 101, 110, 32, 86, 77, 46, 34, 125, 125, 44, 34, 119, 111, 114, 100, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 65, 32, 103, 114, 111, 117, 112, 32, 111, 102, 32, 102, 111, 117, 114, 32, 102, 105, 101, 108, 100, 32, 101, 108, 101, 109, 101, 110, 116, 115, 32, 105, 110, 32, 116, 104, 101, 32, 77, 105, 100, 101, 110, 32, 98, 97, 115, 101, 32, 102, 105, 101, 108, 100, 46, 34, 125, 44, 34, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 85, 110, 105, 113, 117, 101, 32, 105, 100, 101, 110, 116, 105, 102, 105, 101, 114, 32, 111, 102, 32, 97, 110, 32, 97, 99, 99, 111, 117, 110, 116, 46, 92, 110, 92, 110, 65, 99, 99, 111, 117, 110, 116, 32, 73, 68, 32, 99, 111, 110, 115, 105, 115, 116, 115, 32, 111, 102, 32, 49, 32, 102, 105, 101, 108, 100, 32, 101, 108, 101, 109, 101, 110, 116, 32, 40, 126, 54, 52, 32, 98, 105, 116, 115, 41, 46, 32, 84, 104, 105, 115, 32, 102, 105, 101, 108, 100, 32, 101, 108, 101, 109, 101, 110, 116, 32, 117, 110, 105, 113, 117, 101, 108, 121, 32, 105, 100, 101, 110, 116, 105, 102, 105, 101, 115, 32, 97, 92, 110, 115, 105, 110, 103, 108, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 97, 110, 100, 32, 97, 108, 115, 111, 32, 115, 112, 101, 99, 105, 102, 105, 101, 115, 32, 116, 104, 101, 32, 116, 121, 112, 101, 32, 111, 102, 32, 116, 104, 101, 32, 117, 110, 100, 101, 114, 108, 121, 105, 110, 103, 32, 97, 99, 99, 111, 117, 110, 116, 46, 32, 83, 112, 101, 99, 105, 102, 105, 99, 97, 108, 108, 121, 58, 92, 110, 45, 32, 84, 104, 101, 32, 116, 119, 111, 32, 109, 111, 115, 116, 32, 115, 105, 103, 110, 105, 102, 105, 99, 97, 110, 116, 32, 98, 105, 116, 115, 32, 111, 102, 32, 116, 104, 101, 32, 73, 68, 32, 115, 112, 101, 99, 105, 102, 121, 32, 116, 104, 101, 32, 116, 121, 112, 101, 32, 111, 102, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 58, 92, 110, 45, 32, 48, 48, 32, 45, 32, 114, 101, 103, 117, 108, 97, 114, 32, 97, 99, 99, 111, 117, 110, 116, 32, 119, 105, 116, 104, 32, 117, 112, 100, 97, 116, 97, 98, 108, 101, 32, 99, 111, 100, 101, 46, 92, 110, 45, 32, 48, 49, 32, 45, 32, 114, 101, 103, 117, 108, 97, 114, 32, 97, 99, 99, 111, 117, 110, 116, 32, 119, 105, 116, 104, 32, 105, 109, 109, 117, 116, 97, 98, 108, 101, 32, 99, 111, 100, 101, 46, 92, 110, 45, 32, 49, 48, 32, 45, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 102, 97, 117, 99, 101, 116, 32, 119, 105, 116, 104, 32, 105, 109, 109, 117, 116, 97, 98, 108, 101, 32, 99, 111, 100, 101, 46, 92, 110, 45, 32, 49, 49, 32, 45, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 102, 97, 117, 99, 101, 116, 32, 119, 105, 116, 104, 32, 105, 109, 109, 117, 116, 97, 98, 108, 101, 32, 99, 111, 100, 101, 46, 92, 110, 45, 32, 84, 104, 101, 32, 116, 104, 105, 114, 100, 32, 109, 111, 115, 116, 32, 115, 105, 103, 110, 105, 102, 105, 99, 97, 110, 116, 32, 98, 105, 116, 32, 111, 102, 32, 116, 104, 101, 32, 73, 68, 32, 115, 112, 101, 99, 105, 102, 105, 101, 115, 32, 119, 104, 101, 116, 104, 101, 114, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 100, 97, 116, 97, 32, 105, 115, 32, 115, 116, 111, 114, 101, 100, 32, 111, 110, 45, 99, 104, 97, 105, 110, 58, 92, 110, 45, 32, 48, 32, 45, 32, 102, 117, 108, 108, 32, 97, 99, 99, 111, 117, 110, 116, 32, 100, 97, 116, 97, 32, 105, 115, 32, 115, 116, 111, 114, 101, 100, 32, 111, 110, 45, 99, 104, 97, 105, 110, 46, 92, 110, 45, 32, 49, 32, 45, 32, 111, 110, 108, 121, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 104, 97, 115, 104, 32, 105, 115, 32, 115, 116, 111, 114, 101, 100, 32, 111, 110, 45, 99, 104, 97, 105, 110, 32, 119, 104, 105, 99, 104, 32, 115, 101, 114, 118, 101, 115, 32, 97, 115, 32, 97, 32, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 32, 116, 111, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 115, 116, 97, 116, 101, 46, 92, 110, 65, 115, 32, 115, 117, 99, 104, 32, 116, 104, 101, 32, 116, 104, 114, 101, 101, 32, 109, 111, 115, 116, 32, 115, 105, 103, 110, 105, 102, 105, 99, 97, 110, 116, 32, 98, 105, 116, 115, 32, 102, 117, 108, 108, 121, 32, 100, 101, 115, 99, 114, 105, 98, 101, 115, 32, 116, 104, 101, 32, 116, 121, 112, 101, 32, 111, 102, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 46, 34, 125, 44, 34, 114, 101, 99, 105, 112, 105, 101, 110, 116, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 82, 101, 99, 105, 112, 105, 101, 110, 116, 32, 111, 102, 32, 116, 104, 101, 32, 110, 111, 116, 101, 44, 32, 105, 46, 101, 46, 44, 32, 104, 97, 115, 104, 40, 104, 97, 115, 104, 40, 104, 97, 115, 104, 40, 115, 101, 114, 105, 97, 108, 95, 110, 117, 109, 44, 32, 91, 48, 59, 32, 52, 93, 41, 44, 32, 110, 111, 116, 101, 95, 115, 99, 114, 105, 112, 116, 95, 104, 97, 115, 104, 41, 44, 32, 105, 110, 112, 117, 116, 95, 104, 97, 115, 104, 41, 34, 125, 44, 34, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 65, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 111, 114, 32, 97, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 46, 92, 110, 92, 110, 65, 108, 108, 32, 97, 115, 115, 101, 116, 115, 32, 97, 114, 101, 32, 101, 110, 99, 111, 100, 101, 100, 32, 117, 115, 105, 110, 103, 32, 97, 32, 115, 105, 110, 103, 108, 101, 32, 119, 111, 114, 100, 32, 40, 52, 32, 101, 108, 101, 109, 101, 110, 116, 115, 41, 32, 115, 117, 99, 104, 32, 116, 104, 97, 116, 32, 105, 116, 32, 105, 115, 32, 101, 97, 115, 121, 32, 116, 111, 32, 100, 101, 116, 101, 114, 109, 105, 110, 101, 32, 116, 104, 101, 92, 110, 116, 121, 112, 101, 32, 111, 102, 32, 97, 110, 32, 97, 115, 115, 101, 116, 32, 98, 111, 116, 104, 32, 105, 110, 115, 105, 100, 101, 32, 97, 110, 100, 32, 111, 117, 116, 115, 105, 100, 101, 32, 77, 105, 100, 101, 110, 32, 86, 77, 46, 32, 83, 112, 101, 99, 105, 102, 105, 99, 97, 108, 108, 121, 58, 92, 110, 69, 108, 101, 109, 101, 110, 116, 32, 49, 32, 119, 105, 108, 108, 32, 98, 101, 58, 92, 110, 45, 32, 90, 69, 82, 79, 32, 102, 111, 114, 32, 97, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 92, 110, 45, 32, 110, 111, 110, 45, 90, 69, 82, 79, 32, 102, 111, 114, 32, 97, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 92, 110, 84, 104, 101, 32, 109, 111, 115, 116, 32, 115, 105, 103, 110, 105, 102, 105, 99, 97, 110, 116, 32, 98, 105, 116, 32, 119, 105, 108, 108, 32, 98, 101, 58, 92, 110, 45, 32, 79, 78, 69, 32, 102, 111, 114, 32, 97, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 92, 110, 45, 32, 90, 69, 82, 79, 32, 102, 111, 114, 32, 97, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 92, 110, 92, 110, 84, 104, 101, 32, 97, 98, 111, 118, 101, 32, 112, 114, 111, 112, 101, 114, 116, 105, 101, 115, 32, 103, 117, 97, 114, 97, 110, 116, 101, 101, 32, 116, 104, 97, 116, 32, 116, 104, 101, 114, 101, 32, 99, 97, 110, 32, 110, 101, 118, 101, 114, 32, 98, 101, 32, 97, 32, 99, 111, 108, 108, 105, 115, 105, 111, 110, 32, 98, 101, 116, 119, 101, 101, 110, 32, 97, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 110, 100, 32, 97, 92, 110, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 46, 92, 110, 92, 110, 84, 104, 101, 32, 109, 101, 116, 104, 111, 100, 111, 108, 111, 103, 121, 32, 102, 111, 114, 32, 99, 111, 110, 115, 116, 114, 117, 99, 116, 105, 110, 103, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 110, 100, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 115, 32, 105, 115, 32, 100, 101, 115, 99, 114, 105, 98, 101, 100, 32, 98, 101, 108, 111, 119, 46, 92, 110, 92, 110, 35, 32, 70, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 115, 92, 110, 84, 104, 101, 32, 109, 111, 115, 116, 32, 115, 105, 103, 110, 105, 102, 105, 99, 97, 110, 116, 32, 101, 108, 101, 109, 101, 110, 116, 32, 111, 102, 32, 97, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 105, 115, 32, 115, 101, 116, 32, 116, 111, 32, 116, 104, 101, 32, 73, 68, 32, 111, 102, 32, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 32, 119, 104, 105, 99, 104, 32, 105, 115, 115, 117, 101, 100, 92, 110, 116, 104, 101, 32, 97, 115, 115, 101, 116, 46, 32, 84, 104, 105, 115, 32, 103, 117, 97, 114, 97, 110, 116, 101, 101, 115, 32, 116, 104, 101, 32, 112, 114, 111, 112, 101, 114, 116, 105, 101, 115, 32, 100, 101, 115, 99, 114, 105, 98, 101, 100, 32, 97, 98, 111, 118, 101, 32, 40, 116, 104, 101, 32, 102, 105, 114, 115, 116, 32, 98, 105, 116, 32, 105, 115, 32, 79, 78, 69, 41, 46, 92, 110, 92, 110, 84, 104, 101, 32, 108, 101, 97, 115, 116, 32, 115, 105, 103, 110, 105, 102, 105, 99, 97, 110, 116, 32, 101, 108, 101, 109, 101, 110, 116, 32, 105, 115, 32, 115, 101, 116, 32, 116, 111, 32, 116, 104, 101, 32, 97, 109, 111, 117, 110, 116, 32, 111, 102, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 46, 32, 84, 104, 105, 115, 32, 97, 109, 111, 117, 110, 116, 32, 99, 97, 110, 110, 111, 116, 32, 98, 101, 32, 103, 114, 101, 97, 116, 101, 114, 92, 110, 116, 104, 97, 110, 32, 50, 94, 54, 51, 32, 45, 32, 49, 32, 97, 110, 100, 32, 116, 104, 117, 115, 32, 114, 101, 113, 117, 105, 114, 101, 115, 32, 54, 51, 45, 98, 105, 116, 115, 32, 116, 111, 32, 115, 116, 111, 114, 101, 46, 92, 110, 92, 110, 69, 108, 101, 109, 101, 110, 116, 115, 32, 49, 32, 97, 110, 100, 32, 50, 32, 97, 114, 101, 32, 115, 101, 116, 32, 116, 111, 32, 90, 69, 82, 79, 46, 92, 110, 92, 110, 73, 116, 32, 105, 115, 32, 105, 109, 112, 111, 115, 115, 105, 98, 108, 101, 32, 116, 111, 32, 102, 105, 110, 100, 32, 97, 32, 99, 111, 108, 108, 105, 115, 105, 111, 110, 32, 98, 101, 116, 119, 101, 101, 110, 32, 116, 119, 111, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 115, 32, 105, 115, 115, 117, 101, 100, 32, 98, 121, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, 102, 97, 117, 99, 101, 116, 115, 32, 97, 115, 92, 110, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 95, 105, 100, 32, 105, 115, 32, 105, 110, 99, 108, 117, 100, 101, 100, 32, 105, 110, 32, 116, 104, 101, 32, 100, 101, 115, 99, 114, 105, 112, 116, 105, 111, 110, 32, 111, 102, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 32, 97, 110, 100, 32, 116, 104, 105, 115, 32, 105, 115, 32, 103, 117, 97, 114, 97, 110, 116, 101, 101, 100, 32, 116, 111, 32, 98, 101, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 92, 110, 102, 111, 114, 32, 101, 97, 99, 104, 32, 102, 97, 117, 99, 101, 116, 32, 97, 115, 32, 112, 101, 114, 32, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 32, 99, 114, 101, 97, 116, 105, 111, 110, 32, 108, 111, 103, 105, 99, 46, 92, 110, 92, 110, 35, 32, 78, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 115, 92, 110, 84, 104, 101, 32, 52, 32, 101, 108, 101, 109, 101, 110, 116, 115, 32, 111, 102, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 115, 32, 97, 114, 101, 32, 99, 111, 109, 112, 117, 116, 101, 100, 32, 97, 115, 32, 102, 111, 108, 108, 111, 119, 115, 58, 92, 110, 45, 32, 70, 105, 114, 115, 116, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 32, 100, 97, 116, 97, 32, 105, 115, 32, 104, 97, 115, 104, 101, 100, 46, 32, 84, 104, 105, 115, 32, 99, 111, 109, 112, 114, 101, 115, 115, 101, 115, 32, 97, 110, 32, 97, 115, 115, 101, 116, 32, 111, 102, 32, 97, 110, 32, 97, 114, 98, 105, 116, 114, 97, 114, 121, 32, 108, 101, 110, 103, 116, 104, 32, 116, 111, 32, 52, 32, 102, 105, 101, 108, 100, 92, 110, 101, 108, 101, 109, 101, 110, 116, 115, 58, 32, 91, 100, 48, 44, 32, 100, 49, 44, 32, 100, 50, 44, 32, 100, 51, 93, 46, 92, 110, 45, 32, 100, 49, 32, 105, 115, 32, 116, 104, 101, 110, 32, 114, 101, 112, 108, 97, 99, 101, 100, 32, 119, 105, 116, 104, 32, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 95, 105, 100, 32, 119, 104, 105, 99, 104, 32, 105, 115, 115, 117, 101, 115, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 58, 32, 91, 100, 48, 44, 32, 102, 97, 117, 99, 101, 116, 95, 105, 100, 44, 32, 100, 50, 44, 32, 100, 51, 93, 46, 92, 110, 45, 32, 76, 97, 115, 116, 108, 121, 44, 32, 116, 104, 101, 32, 109, 111, 115, 116, 32, 115, 105, 103, 110, 105, 102, 105, 99, 97, 110, 116, 32, 98, 105, 116, 32, 111, 102, 32, 100, 51, 32, 105, 115, 32, 115, 101, 116, 32, 116, 111, 32, 90, 69, 82, 79, 46, 92, 110, 92, 110, 73, 116, 32, 105, 115, 32, 105, 109, 112, 111, 115, 115, 105, 98, 108, 101, 32, 116, 111, 32, 102, 105, 110, 100, 32, 97, 32, 99, 111, 108, 108, 105, 115, 105, 111, 110, 32, 98, 101, 116, 119, 101, 101, 110, 32, 116, 119, 111, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 115, 32, 105, 115, 115, 117, 101, 100, 32, 98, 121, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, 102, 97, 117, 99, 101, 116, 115, 92, 110, 97, 115, 32, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 95, 105, 100, 32, 105, 115, 32, 105, 110, 99, 108, 117, 100, 101, 100, 32, 105, 110, 32, 116, 104, 101, 32, 100, 101, 115, 99, 114, 105, 112, 116, 105, 111, 110, 32, 111, 102, 32, 116, 104, 101, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 97, 110, 100, 32, 116, 104, 105, 115, 32, 105, 115, 32, 103, 117, 97, 114, 97, 110, 116, 101, 101, 100, 92, 110, 116, 111, 32, 98, 101, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, 97, 115, 32, 112, 101, 114, 32, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 32, 99, 114, 101, 97, 116, 105, 111, 110, 32, 108, 111, 103, 105, 99, 46, 32, 67, 111, 108, 108, 105, 115, 105, 111, 110, 32, 114, 101, 115, 105, 115, 116, 97, 110, 99, 101, 32, 102, 111, 114, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 115, 92, 110, 105, 115, 115, 117, 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 115, 97, 109, 101, 32, 102, 97, 117, 99, 101, 116, 32, 105, 115, 32, 126, 50, 94, 57, 53, 46, 34, 125, 44, 34, 110, 111, 110, 99, 101, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 65, 99, 99, 111, 117, 110, 116, 32, 110, 111, 110, 99, 101, 34, 125, 44, 34, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 65, 99, 99, 111, 117, 110, 116, 32, 104, 97, 115, 104, 34, 125, 44, 34, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 66, 108, 111, 99, 107, 32, 104, 97, 115, 104, 34, 125, 44, 34, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 83, 116, 111, 114, 97, 103, 101, 32, 118, 97, 108, 117, 101, 34, 125, 44, 34, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 65, 99, 99, 111, 117, 110, 116, 32, 115, 116, 111, 114, 97, 103, 101, 32, 114, 111, 111, 116, 34, 125, 44, 34, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 65, 99, 99, 111, 117, 110, 116, 32, 99, 111, 100, 101, 32, 114, 111, 111, 116, 34, 125, 44, 34, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 67, 111, 109, 109, 105, 116, 109, 101, 110, 116, 32, 116, 111, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 118, 97, 117, 108, 116, 34, 125, 44, 34, 110, 111, 116, 101, 45, 105, 100, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 65, 110, 32, 105, 100, 32, 111, 102, 32, 116, 104, 101, 32, 99, 114, 101, 97, 116, 101, 100, 32, 110, 111, 116, 101, 34, 125, 125, 125, 44, 34, 97, 99, 99, 111, 117, 110, 116, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 65, 99, 99, 111, 117, 110, 116, 45, 114, 101, 108, 97, 116, 101, 100, 32, 102, 117, 110, 99, 116, 105, 111, 110, 115, 34, 44, 34, 102, 117, 110, 99, 115, 34, 58, 123, 34, 103, 101, 116, 45, 105, 100, 34, 58, 34, 71, 101, 116, 32, 116, 104, 101, 32, 105, 100, 32, 111, 102, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 108, 121, 32, 101, 120, 101, 99, 117, 116, 105, 110, 103, 32, 97, 99, 99, 111, 117, 110, 116, 34, 44, 34, 103, 101, 116, 45, 110, 111, 110, 99, 101, 34, 58, 34, 82, 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 110, 111, 110, 99, 101, 34, 44, 34, 103, 101, 116, 45, 105, 110, 105, 116, 105, 97, 108, 45, 104, 97, 115, 104, 34, 58, 34, 71, 101, 116, 32, 116, 104, 101, 32, 105, 110, 105, 116, 105, 97, 108, 32, 104, 97, 115, 104, 32, 111, 102, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 108, 121, 32, 101, 120, 101, 99, 117, 116, 105, 110, 103, 32, 97, 99, 99, 111, 117, 110, 116, 34, 44, 34, 103, 101, 116, 45, 99, 117, 114, 114, 101, 110, 116, 45, 104, 97, 115, 104, 34, 58, 34, 71, 101, 116, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 104, 97, 115, 104, 32, 111, 102, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 100, 97, 116, 97, 32, 115, 116, 111, 114, 101, 100, 32, 105, 110, 32, 109, 101, 109, 111, 114, 121, 34, 44, 34, 105, 110, 99, 114, 45, 110, 111, 110, 99, 101, 34, 58, 34, 73, 110, 99, 114, 101, 109, 101, 110, 116, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 110, 111, 110, 99, 101, 32, 98, 121, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 118, 97, 108, 117, 101, 46, 92, 110, 118, 97, 108, 117, 101, 32, 99, 97, 110, 32, 98, 101, 32, 97, 116, 32, 109, 111, 115, 116, 32, 50, 94, 51, 50, 32, 45, 32, 49, 32, 111, 116, 104, 101, 114, 119, 105, 115, 101, 32, 116, 104, 105, 115, 32, 112, 114, 111, 99, 101, 100, 117, 114, 101, 32, 112, 97, 110, 105, 99, 115, 34, 44, 34, 103, 101, 116, 45, 105, 116, 101, 109, 34, 58, 34, 71, 101, 116, 32, 116, 104, 101, 32, 118, 97, 108, 117, 101, 32, 111, 102, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 107, 101, 121, 32, 105, 110, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 115, 116, 111, 114, 97, 103, 101, 34, 44, 34, 115, 101, 116, 45, 105, 116, 101, 109, 34, 58, 34, 83, 101, 116, 32, 116, 104, 101, 32, 118, 97, 108, 117, 101, 32, 111, 102, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 107, 101, 121, 32, 105, 110, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 115, 116, 111, 114, 97, 103, 101, 92, 110, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 111, 108, 100, 32, 118, 97, 108, 117, 101, 32, 111, 102, 32, 116, 104, 101, 32, 107, 101, 121, 32, 97, 110, 100, 32, 116, 104, 101, 32, 110, 101, 119, 32, 115, 116, 111, 114, 97, 103, 101, 32, 114, 111, 111, 116, 34, 44, 34, 115, 101, 116, 45, 99, 111, 100, 101, 34, 58, 34, 83, 101, 116, 115, 32, 116, 104, 101, 32, 99, 111, 100, 101, 32, 111, 102, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 116, 104, 101, 32, 116, 114, 97, 110, 115, 97, 99, 116, 105, 111, 110, 32, 105, 115, 32, 98, 101, 105, 110, 103, 32, 101, 120, 101, 99, 117, 116, 101, 100, 32, 97, 103, 97, 105, 110, 115, 116, 46, 92, 110, 84, 104, 105, 115, 32, 112, 114, 111, 99, 101, 100, 117, 114, 101, 32, 99, 97, 110, 32, 111, 110, 108, 121, 32, 98, 101, 32, 101, 120, 101, 99, 117, 116, 101, 100, 32, 111, 110, 32, 114, 101, 103, 117, 108, 97, 114, 32, 97, 99, 99, 111, 117, 110, 116, 115, 32, 119, 105, 116, 104, 32, 117, 112, 100, 97, 116, 97, 98, 108, 101, 92, 110, 99, 111, 100, 101, 46, 32, 79, 116, 104, 101, 114, 119, 105, 115, 101, 44, 32, 116, 104, 105, 115, 32, 112, 114, 111, 99, 101, 100, 117, 114, 101, 32, 102, 97, 105, 108, 115, 46, 32, 99, 111, 100, 101, 32, 105, 115, 32, 116, 104, 101, 32, 104, 97, 115, 104, 32, 111, 102, 32, 116, 104, 101, 32, 99, 111, 100, 101, 92, 110, 116, 111, 32, 115, 101, 116, 46, 34, 44, 34, 103, 101, 116, 45, 98, 97, 108, 97, 110, 99, 101, 34, 58, 34, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 98, 97, 108, 97, 110, 99, 101, 32, 111, 102, 32, 97, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 97, 115, 115, 111, 99, 105, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 97, 32, 97, 99, 99, 111, 117, 110, 116, 95, 105, 100, 46, 92, 110, 80, 97, 110, 105, 99, 115, 32, 105, 102, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 32, 105, 115, 32, 110, 111, 116, 32, 97, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 46, 32, 97, 99, 99, 111, 117, 110, 116, 95, 105, 100, 32, 105, 115, 32, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 32, 105, 100, 92, 110, 111, 102, 32, 116, 104, 101, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 111, 102, 32, 105, 110, 116, 101, 114, 101, 115, 116, 46, 32, 98, 97, 108, 97, 110, 99, 101, 32, 105, 115, 32, 116, 104, 101, 32, 118, 97, 117, 108, 116, 32, 98, 97, 108, 97, 110, 99, 101, 32, 111, 102, 32, 116, 104, 101, 92, 110, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 46, 34, 44, 34, 104, 97, 115, 45, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 34, 58, 34, 82, 101, 116, 117, 114, 110, 115, 32, 97, 32, 98, 111, 111, 108, 101, 97, 110, 32, 105, 110, 100, 105, 99, 97, 116, 105, 110, 103, 32, 119, 104, 101, 116, 104, 101, 114, 32, 116, 104, 101, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 105, 115, 32, 112, 114, 101, 115, 101, 110, 116, 92, 110, 105, 110, 32, 116, 104, 101, 32, 118, 97, 117, 108, 116, 46, 32, 80, 97, 110, 105, 99, 115, 32, 105, 102, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 32, 105, 115, 32, 97, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 46, 32, 97, 115, 115, 101, 116, 32, 105, 115, 32, 116, 104, 101, 92, 110, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 111, 102, 32, 105, 110, 116, 101, 114, 101, 115, 116, 46, 32, 104, 97, 115, 95, 97, 115, 115, 101, 116, 32, 105, 115, 32, 97, 32, 98, 111, 111, 108, 101, 97, 110, 32, 105, 110, 100, 105, 99, 97, 116, 105, 110, 103, 92, 110, 119, 104, 101, 116, 104, 101, 114, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 118, 97, 117, 108, 116, 32, 104, 97, 115, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 32, 111, 102, 32, 105, 110, 116, 101, 114, 101, 115, 116, 46, 34, 44, 34, 97, 100, 100, 45, 97, 115, 115, 101, 116, 34, 58, 34, 65, 100, 100, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 97, 115, 115, 101, 116, 32, 116, 111, 32, 116, 104, 101, 32, 118, 97, 117, 108, 116, 46, 32, 80, 97, 110, 105, 99, 115, 32, 117, 110, 100, 101, 114, 32, 118, 97, 114, 105, 111, 117, 115, 32, 99, 111, 110, 100, 105, 116, 105, 111, 110, 115, 46, 92, 110, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 102, 105, 110, 97, 108, 32, 97, 115, 115, 101, 116, 32, 105, 110, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 118, 97, 117, 108, 116, 32, 100, 101, 102, 105, 110, 101, 100, 32, 97, 115, 32, 102, 111, 108, 108, 111, 119, 115, 58, 32, 73, 102, 32, 97, 115, 115, 101, 116, 32, 105, 115, 92, 110, 97, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 44, 32, 116, 104, 101, 110, 32, 114, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 115, 97, 109, 101, 32, 97, 115, 32, 97, 115, 115, 101, 116, 46, 32, 73, 102, 32, 97, 115, 115, 101, 116, 32, 105, 115, 32, 97, 92, 110, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 44, 32, 116, 104, 101, 110, 32, 114, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 116, 111, 116, 97, 108, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 105, 110, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 92, 110, 118, 97, 117, 108, 116, 32, 97, 102, 116, 101, 114, 32, 97, 115, 115, 101, 116, 32, 119, 97, 115, 32, 97, 100, 100, 101, 100, 32, 116, 111, 32, 105, 116, 46, 34, 44, 34, 114, 101, 109, 111, 118, 101, 45, 97, 115, 115, 101, 116, 34, 58, 34, 82, 101, 109, 111, 118, 101, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 97, 115, 115, 101, 116, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 118, 97, 117, 108, 116, 34, 44, 34, 103, 101, 116, 45, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 34, 58, 34, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 32, 116, 111, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 118, 97, 117, 108, 116, 46, 34, 125, 125, 44, 34, 110, 111, 116, 101, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 78, 111, 116, 101, 45, 114, 101, 108, 97, 116, 101, 100, 32, 102, 117, 110, 99, 116, 105, 111, 110, 115, 34, 44, 34, 102, 117, 110, 99, 115, 34, 58, 123, 34, 103, 101, 116, 45, 105, 110, 112, 117, 116, 115, 34, 58, 34, 71, 101, 116, 32, 116, 104, 101, 32, 105, 110, 112, 117, 116, 115, 32, 111, 102, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 108, 121, 32, 101, 120, 101, 99, 117, 116, 101, 100, 32, 110, 111, 116, 101, 34, 44, 34, 103, 101, 116, 45, 97, 115, 115, 101, 116, 115, 34, 58, 34, 71, 101, 116, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 115, 32, 111, 102, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 108, 121, 32, 101, 120, 101, 99, 117, 116, 105, 110, 103, 32, 110, 111, 116, 101, 34, 44, 34, 103, 101, 116, 45, 115, 101, 110, 100, 101, 114, 34, 58, 34, 71, 101, 116, 32, 116, 104, 101, 32, 115, 101, 110, 100, 101, 114, 32, 111, 102, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 108, 121, 32, 101, 120, 101, 99, 117, 116, 105, 110, 103, 32, 110, 111, 116, 101, 34, 125, 125, 44, 34, 116, 120, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 84, 114, 97, 110, 115, 97, 99, 116, 105, 111, 110, 45, 114, 101, 108, 97, 116, 101, 100, 32, 102, 117, 110, 99, 116, 105, 111, 110, 115, 34, 44, 34, 102, 117, 110, 99, 115, 34, 58, 123, 34, 103, 101, 116, 45, 98, 108, 111, 99, 107, 45, 110, 117, 109, 98, 101, 114, 34, 58, 34, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 98, 108, 111, 99, 107, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 116, 104, 101, 32, 108, 97, 115, 116, 32, 107, 110, 111, 119, 110, 32, 98, 108, 111, 99, 107, 32, 97, 116, 32, 116, 104, 101, 32, 116, 105, 109, 101, 32, 111, 102, 32, 116, 114, 97, 110, 115, 97, 99, 116, 105, 111, 110, 32, 101, 120, 101, 99, 117, 116, 105, 111, 110, 46, 34, 44, 34, 103, 101, 116, 45, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 34, 58, 34, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 98, 108, 111, 99, 107, 32, 104, 97, 115, 104, 32, 111, 102, 32, 116, 104, 101, 32, 108, 97, 115, 116, 32, 107, 110, 111, 119, 110, 32, 98, 108, 111, 99, 107, 32, 97, 116, 32, 116, 104, 101, 32, 116, 105, 109, 101, 32, 111, 102, 32, 116, 114, 97, 110, 115, 97, 99, 116, 105, 111, 110, 32, 101, 120, 101, 99, 117, 116, 105, 111, 110, 46, 34, 44, 34, 103, 101, 116, 45, 105, 110, 112, 117, 116, 45, 110, 111, 116, 101, 115, 45, 104, 97, 115, 104, 34, 58, 34, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 105, 110, 112, 117, 116, 32, 110, 111, 116, 101, 115, 32, 104, 97, 115, 104, 46, 32, 84, 104, 105, 115, 32, 105, 115, 32, 99, 111, 109, 112, 117, 116, 101, 100, 32, 97, 115, 32, 97, 32, 115, 101, 113, 117, 101, 110, 116, 105, 97, 108, 32, 104, 97, 115, 104, 32, 111, 102, 92, 110, 40, 110, 117, 108, 108, 105, 102, 105, 101, 114, 44, 32, 115, 99, 114, 105, 112, 116, 95, 114, 111, 111, 116, 41, 32, 116, 117, 112, 108, 101, 115, 32, 111, 118, 101, 114, 32, 97, 108, 108, 32, 105, 110, 112, 117, 116, 32, 110, 111, 116, 101, 115, 46, 34, 44, 34, 103, 101, 116, 45, 111, 117, 116, 112, 117, 116, 45, 110, 111, 116, 101, 115, 45, 104, 97, 115, 104, 34, 58, 34, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 111, 117, 116, 112, 117, 116, 32, 110, 111, 116, 101, 115, 32, 104, 97, 115, 104, 46, 32, 84, 104, 105, 115, 32, 105, 115, 32, 99, 111, 109, 112, 117, 116, 101, 100, 32, 97, 115, 32, 97, 32, 115, 101, 113, 117, 101, 110, 116, 105, 97, 108, 32, 104, 97, 115, 104, 32, 111, 102, 92, 110, 40, 110, 111, 116, 101, 95, 104, 97, 115, 104, 44, 32, 110, 111, 116, 101, 95, 109, 101, 116, 97, 100, 97, 116, 97, 41, 32, 116, 117, 112, 108, 101, 115, 32, 111, 118, 101, 114, 32, 97, 108, 108, 32, 111, 117, 116, 112, 117, 116, 32, 110, 111, 116, 101, 115, 46, 34, 44, 34, 99, 114, 101, 97, 116, 101, 45, 110, 111, 116, 101, 34, 58, 34, 67, 114, 101, 97, 116, 101, 115, 32, 97, 32, 110, 101, 119, 32, 110, 111, 116, 101, 46, 92, 110, 97, 115, 115, 101, 116, 32, 105, 115, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 32, 116, 111, 32, 98, 101, 32, 105, 110, 99, 108, 117, 100, 101, 100, 32, 105, 110, 32, 116, 104, 101, 32, 110, 111, 116, 101, 46, 92, 110, 116, 97, 103, 32, 105, 115, 32, 116, 104, 101, 32, 116, 97, 103, 32, 116, 111, 32, 98, 101, 32, 105, 110, 99, 108, 117, 100, 101, 100, 32, 105, 110, 32, 116, 104, 101, 32, 110, 111, 116, 101, 46, 92, 110, 114, 101, 99, 105, 112, 105, 101, 110, 116, 32, 105, 115, 32, 116, 104, 101, 32, 114, 101, 99, 105, 112, 105, 101, 110, 116, 32, 111, 102, 32, 116, 104, 101, 32, 110, 111, 116, 101, 46, 92, 110, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 105, 100, 32, 111, 102, 32, 116, 104, 101, 32, 99, 114, 101, 97, 116, 101, 100, 32, 110, 111, 116, 101, 46, 34, 125, 125, 44, 34, 97, 115, 115, 101, 116, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 65, 115, 115, 101, 116, 45, 114, 101, 108, 97, 116, 101, 100, 32, 102, 117, 110, 99, 116, 105, 111, 110, 115, 46, 32, 84, 104, 101, 115, 101, 32, 102, 117, 110, 99, 116, 105, 111, 110, 115, 32, 99, 97, 110, 32, 111, 110, 108, 121, 32, 98, 101, 32, 99, 97, 108, 108, 101, 100, 32, 98, 121, 32, 102, 97, 117, 99, 101, 116, 32, 97, 99, 99, 111, 117, 110, 116, 115, 46, 34, 44, 34, 102, 117, 110, 99, 115, 34, 58, 123, 34, 98, 117, 105, 108, 100, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 34, 58, 34, 66, 117, 105, 108, 100, 115, 32, 97, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 102, 111, 114, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 102, 97, 117, 99, 101, 116, 32, 97, 110, 100, 32, 97, 109, 111, 117, 110, 116, 46, 92, 110, 102, 97, 117, 99, 101, 116, 95, 105, 100, 32, 105, 115, 32, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 32, 116, 111, 32, 99, 114, 101, 97, 116, 101, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 32, 102, 111, 114, 46, 92, 110, 97, 109, 111, 117, 110, 116, 32, 105, 115, 32, 116, 104, 101, 32, 97, 109, 111, 117, 110, 116, 32, 111, 102, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 32, 116, 111, 32, 99, 114, 101, 97, 116, 101, 46, 92, 110, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 99, 114, 101, 97, 116, 101, 100, 32, 97, 115, 115, 101, 116, 46, 34, 44, 34, 99, 114, 101, 97, 116, 101, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 34, 58, 34, 67, 114, 101, 97, 116, 101, 115, 32, 97, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 102, 111, 114, 32, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 32, 116, 104, 101, 32, 116, 114, 97, 110, 115, 97, 99, 116, 105, 111, 110, 32, 105, 115, 32, 98, 101, 105, 110, 103, 92, 110, 101, 120, 101, 99, 117, 116, 101, 100, 32, 97, 103, 97, 105, 110, 115, 116, 46, 92, 110, 97, 109, 111, 117, 110, 116, 32, 105, 115, 32, 116, 104, 101, 32, 97, 109, 111, 117, 110, 116, 32, 111, 102, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 32, 116, 111, 32, 99, 114, 101, 97, 116, 101, 46, 92, 110, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 99, 114, 101, 97, 116, 101, 100, 32, 97, 115, 115, 101, 116, 46, 34, 44, 34, 98, 117, 105, 108, 100, 45, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 34, 58, 34, 66, 117, 105, 108, 100, 115, 32, 97, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 102, 111, 114, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 102, 97, 117, 99, 101, 116, 32, 97, 110, 100, 92, 110, 100, 97, 116, 97, 45, 104, 97, 115, 104, 46, 92, 110, 102, 97, 117, 99, 101, 116, 95, 105, 100, 32, 105, 115, 32, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 32, 116, 111, 32, 99, 114, 101, 97, 116, 101, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 32, 102, 111, 114, 46, 92, 110, 100, 97, 116, 97, 45, 104, 97, 115, 104, 32, 105, 115, 32, 116, 104, 101, 32, 100, 97, 116, 97, 32, 104, 97, 115, 104, 32, 111, 102, 32, 116, 104, 101, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 116, 111, 32, 98, 117, 105, 108, 100, 46, 92, 110, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 99, 114, 101, 97, 116, 101, 100, 32, 97, 115, 115, 101, 116, 46, 34, 44, 34, 99, 114, 101, 97, 116, 101, 45, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 34, 58, 34, 67, 114, 101, 97, 116, 101, 115, 32, 97, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 102, 111, 114, 32, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 32, 116, 104, 101, 32, 116, 114, 97, 110, 115, 97, 99, 116, 105, 111, 110, 32, 105, 115, 32, 98, 101, 105, 110, 103, 32, 101, 120, 101, 99, 117, 116, 101, 100, 32, 97, 103, 97, 105, 110, 115, 116, 46, 92, 110, 100, 97, 116, 97, 45, 104, 97, 115, 104, 32, 105, 115, 32, 116, 104, 101, 32, 100, 97, 116, 97, 32, 104, 97, 115, 104, 32, 111, 102, 32, 116, 104, 101, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 116, 111, 32, 99, 114, 101, 97, 116, 101, 46, 92, 110, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 99, 114, 101, 97, 116, 101, 100, 32, 97, 115, 115, 101, 116, 46, 34, 125, 125, 44, 34, 102, 97, 117, 99, 101, 116, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 70, 97, 117, 99, 101, 116, 45, 114, 101, 108, 97, 116, 101, 100, 32, 102, 117, 110, 99, 116, 105, 111, 110, 115, 46, 32, 84, 104, 101, 115, 101, 32, 102, 117, 110, 99, 116, 105, 111, 110, 115, 32, 99, 97, 110, 32, 111, 110, 108, 121, 32, 98, 101, 32, 99, 97, 108, 108, 101, 100, 32, 98, 121, 32, 102, 97, 117, 99, 101, 116, 32, 97, 99, 99, 111, 117, 110, 116, 115, 46, 34, 44, 34, 102, 117, 110, 99, 115, 34, 58, 123, 34, 109, 105, 110, 116, 34, 58, 34, 77, 105, 110, 116, 32, 97, 110, 32, 97, 115, 115, 101, 116, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 32, 116, 114, 97, 110, 115, 97, 99, 116, 105, 111, 110, 32, 105, 115, 32, 98, 101, 105, 110, 103, 32, 101, 120, 101, 99, 117, 116, 101, 100, 32, 97, 103, 97, 105, 110, 115, 116, 46, 92, 110, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 109, 105, 110, 116, 101, 100, 32, 97, 115, 115, 101, 116, 46, 34, 44, 34, 98, 117, 114, 110, 34, 58, 34, 66, 117, 114, 110, 32, 97, 110, 32, 97, 115, 115, 101, 116, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 32, 116, 114, 97, 110, 115, 97, 99, 116, 105, 111, 110, 32, 105, 115, 32, 98, 101, 105, 110, 103, 32, 101, 120, 101, 99, 117, 116, 101, 100, 32, 97, 103, 97, 105, 110, 115, 116, 46, 92, 110, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 98, 117, 114, 110, 101, 100, 32, 97, 115, 115, 101, 116, 46, 34, 44, 34, 103, 101, 116, 45, 116, 111, 116, 97, 108, 45, 105, 115, 115, 117, 97, 110, 99, 101, 34, 58, 34, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 116, 111, 116, 97, 108, 32, 105, 115, 115, 117, 97, 110, 99, 101, 32, 111, 102, 32, 116, 104, 101, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 102, 97, 117, 99, 101, 116, 32, 116, 104, 101, 32, 116, 114, 97, 110, 115, 97, 99, 116, 105, 111, 110, 32, 105, 115, 92, 110, 98, 101, 105, 110, 103, 32, 101, 120, 101, 99, 117, 116, 101, 100, 32, 97, 103, 97, 105, 110, 115, 116, 46, 32, 80, 97, 110, 105, 99, 115, 32, 105, 102, 32, 116, 104, 101, 32, 116, 114, 97, 110, 115, 97, 99, 116, 105, 111, 110, 32, 105, 115, 32, 110, 111, 116, 32, 98, 101, 105, 110, 103, 32, 101, 120, 101, 99, 117, 116, 101, 100, 92, 110, 97, 103, 97, 105, 110, 115, 116, 32, 97, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 102, 97, 117, 99, 101, 116, 46, 34, 125, 125, 44, 34, 116, 121, 112, 101, 115, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 72, 105, 103, 104, 45, 108, 101, 118, 101, 108, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 32, 111, 102, 32, 99, 111, 114, 101, 32, 116, 121, 112, 101, 115, 34, 44, 34, 102, 117, 110, 99, 115, 34, 58, 123, 34, 102, 114, 111, 109, 45, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 34, 58, 34, 67, 111, 110, 118, 101, 114, 116, 115, 32, 97, 32, 99, 111, 114, 101, 32, 97, 115, 115, 101, 116, 32, 116, 111, 32, 97, 32, 97, 110, 32, 97, 115, 115, 101, 116, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 46, 34, 44, 34, 116, 111, 45, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 34, 58, 34, 67, 111, 110, 118, 101, 114, 116, 115, 32, 97, 110, 32, 97, 115, 115, 101, 116, 32, 116, 111, 32, 97, 32, 99, 111, 114, 101, 32, 97, 115, 115, 101, 116, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 46, 34, 125, 44, 34, 116, 121, 112, 101, 115, 34, 58, 123, 34, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 65, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 34, 44, 34, 105, 116, 101, 109, 115, 34, 58, 123, 34, 97, 115, 115, 101, 116, 34, 58, 34, 70, 97, 117, 99, 101, 116, 32, 73, 68, 32, 111, 102, 32, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 32, 119, 104, 105, 99, 104, 32, 105, 115, 115, 117, 101, 100, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 32, 97, 115, 32, 119, 101, 108, 108, 32, 97, 115, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 32, 97, 109, 111, 117, 110, 116, 46, 34, 44, 34, 97, 109, 111, 117, 110, 116, 34, 58, 34, 65, 115, 115, 101, 116, 32, 97, 109, 111, 117, 110, 116, 32, 105, 115, 32, 103, 117, 97, 114, 97, 110, 116, 101, 101, 100, 32, 116, 111, 32, 98, 101, 32, 50, 94, 54, 51, 32, 45, 32, 49, 32, 111, 114, 32, 115, 109, 97, 108, 108, 101, 114, 46, 34, 125, 125, 44, 34, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 65, 32, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 32, 116, 111, 32, 97, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 46, 92, 110, 92, 110, 65, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 99, 111, 110, 115, 105, 115, 116, 115, 32, 111, 102, 32, 52, 32, 102, 105, 101, 108, 100, 32, 101, 108, 101, 109, 101, 110, 116, 115, 32, 119, 104, 105, 99, 104, 32, 97, 114, 101, 32, 99, 111, 109, 112, 117, 116, 101, 100, 32, 98, 121, 32, 104, 97, 115, 104, 105, 110, 103, 32, 97, 115, 115, 101, 116, 32, 100, 97, 116, 97, 92, 110, 40, 119, 104, 105, 99, 104, 32, 99, 97, 110, 32, 98, 101, 32, 111, 102, 32, 97, 114, 98, 105, 116, 114, 97, 114, 121, 32, 108, 101, 110, 103, 116, 104, 41, 32, 116, 111, 32, 112, 114, 111, 100, 117, 99, 101, 58, 32, 91, 100, 48, 44, 32, 100, 49, 44, 32, 100, 50, 44, 32, 100, 51, 93, 46, 32, 32, 87, 101, 32, 116, 104, 101, 110, 32, 114, 101, 112, 108, 97, 99, 101, 32, 100, 49, 32, 119, 105, 116, 104, 32, 116, 104, 101, 92, 110, 102, 97, 117, 99, 101, 116, 95, 105, 100, 32, 116, 104, 97, 116, 32, 105, 115, 115, 117, 101, 100, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 58, 32, 91, 100, 48, 44, 32, 102, 97, 117, 99, 101, 116, 95, 105, 100, 44, 32, 100, 50, 44, 32, 100, 51, 93, 46, 32, 87, 101, 32, 116, 104, 101, 110, 32, 115, 101, 116, 32, 116, 104, 101, 32, 109, 111, 115, 116, 32, 115, 105, 103, 110, 105, 102, 105, 99, 97, 110, 116, 32, 98, 105, 116, 92, 110, 111, 102, 32, 116, 104, 101, 32, 109, 111, 115, 116, 32, 115, 105, 103, 110, 105, 102, 105, 99, 97, 110, 116, 32, 101, 108, 101, 109, 101, 110, 116, 32, 116, 111, 32, 90, 69, 82, 79, 46, 34, 125, 44, 34, 97, 115, 115, 101, 116, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 65, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 111, 114, 32, 97, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 46, 34, 125, 125, 125, 44, 34, 110, 111, 116, 101, 45, 115, 99, 114, 105, 112, 116, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 78, 111, 116, 101, 32, 115, 99, 114, 105, 112, 116, 32, 105, 110, 116, 101, 114, 102, 97, 99, 101, 32, 116, 104, 97, 116, 32, 105, 115, 32, 101, 120, 112, 101, 99, 116, 101, 100, 32, 116, 111, 32, 98, 101, 32, 105, 109, 112, 108, 101, 109, 101, 110, 116, 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 110, 111, 116, 101, 32, 115, 99, 114, 105, 112, 116, 46, 34, 125, 125, 125, 0, 70, 9, 112, 114, 111, 100, 117, 99, 101, 114, 115, 1, 12, 112, 114, 111, 99, 101, 115, 115, 101, 100, 45, 98, 121, 2, 13, 119, 105, 116, 45, 99, 111, 109, 112, 111, 110, 101, 110, 116, 6, 48, 46, 49, 56, 46, 50, 16, 119, 105, 116, 45, 98, 105, 110, 100, 103, 101, 110, 45, 114, 117, 115, 116, 6, 48, 46, 49, 54, 46, 48]; +pub static __WIT_BINDGEN_COMPONENT_TYPE: [u8; 16740] = [3, 0, 10, 98, 97, 115, 101, 45, 119, 111, 114, 108, 100, 0, 97, 115, 109, 13, 0, 1, 0, 7, 171, 3, 1, 65, 2, 1, 66, 30, 1, 114, 1, 5, 105, 110, 110, 101, 114, 119, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 1, 111, 4, 1, 1, 1, 1, 4, 0, 4, 119, 111, 114, 100, 3, 0, 2, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 4, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 3, 116, 97, 103, 3, 0, 8, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 10, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 12, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 14, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 16, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 18, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 20, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 22, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 24, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 1, 64, 1, 4, 102, 101, 108, 116, 1, 0, 5, 4, 0, 20, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 45, 102, 114, 111, 109, 45, 102, 101, 108, 116, 1, 28, 4, 1, 27, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 99, 111, 114, 101, 45, 116, 121, 112, 101, 115, 64, 49, 46, 48, 46, 48, 5, 0, 11, 16, 1, 0, 10, 99, 111, 114, 101, 45, 116, 121, 112, 101, 115, 3, 0, 0, 7, 142, 9, 1, 65, 15, 1, 66, 28, 1, 114, 1, 5, 105, 110, 110, 101, 114, 119, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 1, 111, 4, 1, 1, 1, 1, 4, 0, 4, 119, 111, 114, 100, 3, 0, 2, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 4, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 3, 116, 97, 103, 3, 0, 8, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 10, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 12, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 14, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 16, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 18, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 20, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 22, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 24, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 3, 1, 27, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 99, 111, 114, 101, 45, 116, 121, 112, 101, 115, 64, 49, 46, 48, 46, 48, 5, 0, 2, 3, 0, 0, 4, 102, 101, 108, 116, 2, 3, 0, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 2, 3, 0, 0, 3, 116, 97, 103, 2, 3, 0, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 2, 3, 0, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 2, 3, 0, 0, 5, 110, 111, 110, 99, 101, 2, 3, 0, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 2, 3, 0, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 2, 3, 0, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 1, 66, 47, 2, 3, 2, 1, 1, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 2, 3, 2, 1, 2, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 2, 2, 3, 2, 1, 3, 4, 0, 3, 116, 97, 103, 3, 0, 4, 2, 3, 2, 1, 4, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 2, 3, 2, 1, 5, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 8, 2, 3, 2, 1, 6, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 10, 2, 3, 2, 1, 7, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 12, 2, 3, 2, 1, 8, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 14, 2, 3, 2, 1, 9, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 16, 2, 3, 2, 1, 10, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 18, 2, 3, 2, 1, 11, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 20, 1, 64, 0, 0, 9, 4, 0, 6, 103, 101, 116, 45, 105, 100, 1, 22, 1, 64, 0, 0, 11, 4, 0, 9, 103, 101, 116, 45, 110, 111, 110, 99, 101, 1, 23, 1, 64, 0, 0, 13, 4, 0, 16, 103, 101, 116, 45, 105, 110, 105, 116, 105, 97, 108, 45, 104, 97, 115, 104, 1, 24, 4, 0, 16, 103, 101, 116, 45, 99, 117, 114, 114, 101, 110, 116, 45, 104, 97, 115, 104, 1, 24, 1, 64, 1, 5, 118, 97, 108, 117, 101, 1, 1, 0, 4, 0, 10, 105, 110, 99, 114, 45, 110, 111, 110, 99, 101, 1, 25, 1, 64, 1, 5, 105, 110, 100, 101, 120, 1, 0, 15, 4, 0, 8, 103, 101, 116, 45, 105, 116, 101, 109, 1, 26, 1, 111, 2, 17, 15, 1, 64, 2, 5, 105, 110, 100, 101, 120, 1, 5, 118, 97, 108, 117, 101, 15, 0, 27, 4, 0, 8, 115, 101, 116, 45, 105, 116, 101, 109, 1, 28, 1, 64, 1, 9, 99, 111, 100, 101, 45, 114, 111, 111, 116, 19, 1, 0, 4, 0, 8, 115, 101, 116, 45, 99, 111, 100, 101, 1, 29, 1, 64, 1, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 9, 0, 1, 4, 0, 11, 103, 101, 116, 45, 98, 97, 108, 97, 110, 99, 101, 1, 30, 1, 64, 1, 5, 97, 115, 115, 101, 116, 3, 0, 127, 4, 0, 22, 104, 97, 115, 45, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 1, 31, 1, 64, 1, 5, 97, 115, 115, 101, 116, 3, 0, 3, 4, 0, 9, 97, 100, 100, 45, 97, 115, 115, 101, 116, 1, 32, 4, 0, 12, 114, 101, 109, 111, 118, 101, 45, 97, 115, 115, 101, 116, 1, 32, 1, 64, 0, 0, 21, 4, 0, 20, 103, 101, 116, 45, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 1, 33, 4, 1, 24, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 97, 99, 99, 111, 117, 110, 116, 64, 49, 46, 48, 46, 48, 5, 12, 11, 13, 1, 0, 7, 97, 99, 99, 111, 117, 110, 116, 3, 2, 0, 7, 244, 6, 1, 65, 15, 1, 66, 28, 1, 114, 1, 5, 105, 110, 110, 101, 114, 119, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 1, 111, 4, 1, 1, 1, 1, 4, 0, 4, 119, 111, 114, 100, 3, 0, 2, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 4, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 3, 116, 97, 103, 3, 0, 8, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 10, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 12, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 14, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 16, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 18, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 20, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 22, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 24, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 3, 1, 27, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 99, 111, 114, 101, 45, 116, 121, 112, 101, 115, 64, 49, 46, 48, 46, 48, 5, 0, 2, 3, 0, 0, 4, 102, 101, 108, 116, 2, 3, 0, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 2, 3, 0, 0, 3, 116, 97, 103, 2, 3, 0, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 2, 3, 0, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 2, 3, 0, 0, 5, 110, 111, 110, 99, 101, 2, 3, 0, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 2, 3, 0, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 2, 3, 0, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 1, 66, 30, 2, 3, 2, 1, 1, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 2, 3, 2, 1, 2, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 2, 2, 3, 2, 1, 3, 4, 0, 3, 116, 97, 103, 3, 0, 4, 2, 3, 2, 1, 4, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 2, 3, 2, 1, 5, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 8, 2, 3, 2, 1, 6, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 10, 2, 3, 2, 1, 7, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 12, 2, 3, 2, 1, 8, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 14, 2, 3, 2, 1, 9, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 16, 2, 3, 2, 1, 10, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 18, 2, 3, 2, 1, 11, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 20, 1, 112, 1, 1, 64, 0, 0, 22, 4, 0, 10, 103, 101, 116, 45, 105, 110, 112, 117, 116, 115, 1, 23, 1, 112, 3, 1, 64, 0, 0, 24, 4, 0, 10, 103, 101, 116, 45, 97, 115, 115, 101, 116, 115, 1, 25, 1, 64, 0, 0, 9, 4, 0, 10, 103, 101, 116, 45, 115, 101, 110, 100, 101, 114, 1, 26, 4, 1, 21, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 110, 111, 116, 101, 64, 49, 46, 48, 46, 48, 5, 12, 11, 10, 1, 0, 4, 110, 111, 116, 101, 3, 4, 0, 7, 160, 8, 1, 65, 18, 1, 66, 28, 1, 114, 1, 5, 105, 110, 110, 101, 114, 119, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 1, 111, 4, 1, 1, 1, 1, 4, 0, 4, 119, 111, 114, 100, 3, 0, 2, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 4, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 3, 116, 97, 103, 3, 0, 8, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 10, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 12, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 14, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 16, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 18, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 20, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 22, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 24, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 3, 1, 27, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 99, 111, 114, 101, 45, 116, 121, 112, 101, 115, 64, 49, 46, 48, 46, 48, 5, 0, 2, 3, 0, 0, 4, 102, 101, 108, 116, 2, 3, 0, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 2, 3, 0, 0, 3, 116, 97, 103, 2, 3, 0, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 2, 3, 0, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 2, 3, 0, 0, 5, 110, 111, 110, 99, 101, 2, 3, 0, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 2, 3, 0, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 2, 3, 0, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 2, 3, 0, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 2, 3, 0, 0, 4, 119, 111, 114, 100, 2, 3, 0, 0, 7, 110, 111, 116, 101, 45, 105, 100, 1, 66, 37, 2, 3, 2, 1, 1, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 2, 3, 2, 1, 2, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 2, 2, 3, 2, 1, 3, 4, 0, 3, 116, 97, 103, 3, 0, 4, 2, 3, 2, 1, 4, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 2, 3, 2, 1, 5, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 8, 2, 3, 2, 1, 6, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 10, 2, 3, 2, 1, 7, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 12, 2, 3, 2, 1, 8, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 14, 2, 3, 2, 1, 9, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 16, 2, 3, 2, 1, 10, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 18, 2, 3, 2, 1, 11, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 20, 2, 3, 2, 1, 12, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 22, 2, 3, 2, 1, 13, 4, 0, 4, 119, 111, 114, 100, 3, 0, 24, 2, 3, 2, 1, 14, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 1, 64, 0, 0, 1, 4, 0, 16, 103, 101, 116, 45, 98, 108, 111, 99, 107, 45, 110, 117, 109, 98, 101, 114, 1, 28, 1, 64, 0, 0, 23, 4, 0, 14, 103, 101, 116, 45, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 1, 29, 1, 64, 0, 0, 25, 4, 0, 20, 103, 101, 116, 45, 105, 110, 112, 117, 116, 45, 110, 111, 116, 101, 115, 45, 104, 97, 115, 104, 1, 30, 4, 0, 21, 103, 101, 116, 45, 111, 117, 116, 112, 117, 116, 45, 110, 111, 116, 101, 115, 45, 104, 97, 115, 104, 1, 30, 1, 64, 3, 5, 97, 115, 115, 101, 116, 3, 3, 116, 97, 103, 5, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 7, 0, 27, 4, 0, 11, 99, 114, 101, 97, 116, 101, 45, 110, 111, 116, 101, 1, 31, 4, 1, 19, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 116, 120, 64, 49, 46, 48, 46, 48, 5, 15, 11, 8, 1, 0, 2, 116, 120, 3, 6, 0, 7, 173, 8, 1, 65, 17, 1, 66, 28, 1, 114, 1, 5, 105, 110, 110, 101, 114, 119, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 1, 111, 4, 1, 1, 1, 1, 4, 0, 4, 119, 111, 114, 100, 3, 0, 2, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 4, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 3, 116, 97, 103, 3, 0, 8, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 10, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 12, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 14, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 16, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 18, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 20, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 22, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 24, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 3, 1, 27, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 99, 111, 114, 101, 45, 116, 121, 112, 101, 115, 64, 49, 46, 48, 46, 48, 5, 0, 2, 3, 0, 0, 4, 102, 101, 108, 116, 2, 3, 0, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 2, 3, 0, 0, 3, 116, 97, 103, 2, 3, 0, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 2, 3, 0, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 2, 3, 0, 0, 5, 110, 111, 110, 99, 101, 2, 3, 0, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 2, 3, 0, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 2, 3, 0, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 2, 3, 0, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 2, 3, 0, 0, 4, 119, 111, 114, 100, 1, 66, 34, 2, 3, 2, 1, 1, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 2, 3, 2, 1, 2, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 2, 2, 3, 2, 1, 3, 4, 0, 3, 116, 97, 103, 3, 0, 4, 2, 3, 2, 1, 4, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 2, 3, 2, 1, 5, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 8, 2, 3, 2, 1, 6, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 10, 2, 3, 2, 1, 7, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 12, 2, 3, 2, 1, 8, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 14, 2, 3, 2, 1, 9, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 16, 2, 3, 2, 1, 10, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 18, 2, 3, 2, 1, 11, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 20, 2, 3, 2, 1, 12, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 22, 2, 3, 2, 1, 13, 4, 0, 4, 119, 111, 114, 100, 3, 0, 24, 1, 64, 2, 9, 102, 97, 117, 99, 101, 116, 45, 105, 100, 9, 6, 97, 109, 111, 117, 110, 116, 1, 0, 3, 4, 0, 20, 98, 117, 105, 108, 100, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 1, 26, 1, 64, 1, 6, 97, 109, 111, 117, 110, 116, 1, 0, 3, 4, 0, 21, 99, 114, 101, 97, 116, 101, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 1, 27, 1, 64, 2, 9, 102, 97, 117, 99, 101, 116, 45, 105, 100, 9, 9, 100, 97, 116, 97, 45, 104, 97, 115, 104, 25, 0, 3, 4, 0, 24, 98, 117, 105, 108, 100, 45, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 1, 28, 1, 64, 1, 9, 100, 97, 116, 97, 45, 104, 97, 115, 104, 25, 0, 3, 4, 0, 25, 99, 114, 101, 97, 116, 101, 45, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 1, 29, 4, 1, 22, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 97, 115, 115, 101, 116, 64, 49, 46, 48, 46, 48, 5, 14, 11, 11, 1, 0, 5, 97, 115, 115, 101, 116, 3, 8, 0, 7, 170, 7, 1, 65, 17, 1, 66, 28, 1, 114, 1, 5, 105, 110, 110, 101, 114, 119, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 1, 111, 4, 1, 1, 1, 1, 4, 0, 4, 119, 111, 114, 100, 3, 0, 2, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 4, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 3, 116, 97, 103, 3, 0, 8, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 10, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 12, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 14, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 16, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 18, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 20, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 22, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 24, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 3, 1, 27, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 99, 111, 114, 101, 45, 116, 121, 112, 101, 115, 64, 49, 46, 48, 46, 48, 5, 0, 2, 3, 0, 0, 4, 102, 101, 108, 116, 2, 3, 0, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 2, 3, 0, 0, 3, 116, 97, 103, 2, 3, 0, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 2, 3, 0, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 2, 3, 0, 0, 5, 110, 111, 110, 99, 101, 2, 3, 0, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 2, 3, 0, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 2, 3, 0, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 2, 3, 0, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 2, 3, 0, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 2, 3, 0, 0, 4, 119, 111, 114, 100, 1, 66, 31, 2, 3, 2, 1, 1, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 2, 3, 2, 1, 2, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 2, 2, 3, 2, 1, 3, 4, 0, 3, 116, 97, 103, 3, 0, 4, 2, 3, 2, 1, 4, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 2, 3, 2, 1, 5, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 8, 2, 3, 2, 1, 6, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 10, 2, 3, 2, 1, 7, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 12, 2, 3, 2, 1, 8, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 14, 2, 3, 2, 1, 9, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 16, 2, 3, 2, 1, 10, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 18, 2, 3, 2, 1, 11, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 20, 2, 3, 2, 1, 12, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 22, 2, 3, 2, 1, 13, 4, 0, 4, 119, 111, 114, 100, 3, 0, 24, 1, 64, 1, 5, 97, 115, 115, 101, 116, 3, 0, 3, 4, 0, 4, 109, 105, 110, 116, 1, 26, 4, 0, 4, 98, 117, 114, 110, 1, 26, 1, 64, 0, 0, 1, 4, 0, 18, 103, 101, 116, 45, 116, 111, 116, 97, 108, 45, 105, 115, 115, 117, 97, 110, 99, 101, 1, 27, 4, 1, 23, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 102, 97, 117, 99, 101, 116, 64, 49, 46, 48, 46, 48, 5, 14, 11, 12, 1, 0, 6, 102, 97, 117, 99, 101, 116, 3, 10, 0, 7, 210, 5, 1, 65, 8, 1, 66, 28, 1, 114, 1, 5, 105, 110, 110, 101, 114, 119, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 1, 111, 4, 1, 1, 1, 1, 4, 0, 4, 119, 111, 114, 100, 3, 0, 2, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 4, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 3, 116, 97, 103, 3, 0, 8, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 10, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 12, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 14, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 16, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 18, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 20, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 22, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 24, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 3, 1, 27, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 99, 111, 114, 101, 45, 116, 121, 112, 101, 115, 64, 49, 46, 48, 46, 48, 5, 0, 2, 3, 0, 0, 4, 102, 101, 108, 116, 2, 3, 0, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 2, 3, 0, 0, 4, 119, 111, 114, 100, 2, 3, 0, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 1, 66, 18, 2, 3, 2, 1, 1, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 2, 3, 2, 1, 2, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 2, 2, 3, 2, 1, 3, 4, 0, 4, 119, 111, 114, 100, 3, 0, 4, 2, 3, 2, 1, 4, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 6, 1, 114, 2, 5, 97, 115, 115, 101, 116, 3, 6, 97, 109, 111, 117, 110, 116, 119, 4, 0, 14, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 3, 0, 8, 1, 114, 1, 5, 105, 110, 110, 101, 114, 5, 4, 0, 18, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 3, 0, 10, 1, 113, 2, 8, 102, 117, 110, 103, 105, 98, 108, 101, 1, 9, 0, 12, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 1, 11, 0, 4, 0, 5, 97, 115, 115, 101, 116, 3, 0, 12, 1, 64, 1, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 7, 0, 13, 4, 0, 15, 102, 114, 111, 109, 45, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 1, 14, 1, 64, 1, 5, 97, 115, 115, 101, 116, 13, 0, 7, 4, 0, 13, 116, 111, 45, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 1, 15, 4, 1, 22, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 116, 121, 112, 101, 115, 64, 49, 46, 48, 46, 48, 5, 5, 11, 11, 1, 0, 5, 116, 121, 112, 101, 115, 3, 12, 0, 7, 60, 1, 65, 2, 1, 66, 2, 1, 64, 0, 1, 0, 4, 0, 11, 110, 111, 116, 101, 45, 115, 99, 114, 105, 112, 116, 1, 0, 4, 1, 28, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 110, 111, 116, 101, 45, 115, 99, 114, 105, 112, 116, 64, 49, 46, 48, 46, 48, 5, 0, 11, 17, 1, 0, 11, 110, 111, 116, 101, 45, 115, 99, 114, 105, 112, 116, 3, 14, 0, 7, 153, 6, 1, 65, 2, 1, 65, 8, 1, 66, 30, 1, 114, 1, 5, 105, 110, 110, 101, 114, 119, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 1, 111, 4, 1, 1, 1, 1, 4, 0, 4, 119, 111, 114, 100, 3, 0, 2, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 4, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 9, 114, 101, 99, 105, 112, 105, 101, 110, 116, 3, 0, 6, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 3, 116, 97, 103, 3, 0, 8, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 10, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 5, 110, 111, 110, 99, 101, 3, 0, 12, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 3, 0, 14, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 10, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 3, 0, 16, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 13, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 3, 0, 18, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 12, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 3, 0, 20, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 17, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 3, 0, 22, 1, 114, 1, 5, 105, 110, 110, 101, 114, 3, 4, 0, 16, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 3, 0, 24, 1, 114, 1, 5, 105, 110, 110, 101, 114, 1, 4, 0, 7, 110, 111, 116, 101, 45, 105, 100, 3, 0, 26, 1, 64, 1, 4, 102, 101, 108, 116, 1, 0, 5, 4, 0, 20, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 45, 102, 114, 111, 109, 45, 102, 101, 108, 116, 1, 28, 4, 1, 27, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 99, 111, 114, 101, 45, 116, 121, 112, 101, 115, 64, 49, 46, 48, 46, 48, 5, 0, 2, 3, 0, 0, 4, 102, 101, 108, 116, 2, 3, 0, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 2, 3, 0, 0, 4, 119, 111, 114, 100, 2, 3, 0, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 1, 66, 18, 2, 3, 2, 1, 1, 4, 0, 4, 102, 101, 108, 116, 3, 0, 0, 2, 3, 2, 1, 2, 4, 0, 10, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 3, 0, 2, 2, 3, 2, 1, 3, 4, 0, 4, 119, 111, 114, 100, 3, 0, 4, 2, 3, 2, 1, 4, 4, 0, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 3, 0, 6, 1, 114, 2, 5, 97, 115, 115, 101, 116, 3, 6, 97, 109, 111, 117, 110, 116, 119, 4, 0, 14, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 3, 0, 8, 1, 114, 1, 5, 105, 110, 110, 101, 114, 5, 4, 0, 18, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 3, 0, 10, 1, 113, 2, 8, 102, 117, 110, 103, 105, 98, 108, 101, 1, 9, 0, 12, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 1, 11, 0, 4, 0, 5, 97, 115, 115, 101, 116, 3, 0, 12, 1, 64, 1, 10, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 7, 0, 13, 4, 0, 15, 102, 114, 111, 109, 45, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 1, 14, 1, 64, 1, 5, 97, 115, 115, 101, 116, 13, 0, 7, 4, 0, 13, 116, 111, 45, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 1, 15, 4, 1, 22, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 116, 121, 112, 101, 115, 64, 49, 46, 48, 46, 48, 5, 5, 4, 1, 27, 109, 105, 100, 101, 110, 58, 98, 97, 115, 101, 47, 98, 97, 115, 101, 45, 119, 111, 114, 108, 100, 64, 49, 46, 48, 46, 48, 4, 0, 11, 16, 1, 0, 10, 98, 97, 115, 101, 45, 119, 111, 114, 108, 100, 3, 16, 0, 0, 155, 73, 12, 112, 97, 99, 107, 97, 103, 101, 45, 100, 111, 99, 115, 0, 123, 34, 105, 110, 116, 101, 114, 102, 97, 99, 101, 115, 34, 58, 123, 34, 99, 111, 114, 101, 45, 116, 121, 112, 101, 115, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 84, 121, 112, 101, 115, 32, 116, 111, 32, 98, 101, 32, 117, 115, 101, 100, 32, 105, 110, 32, 116, 120, 45, 107, 101, 114, 110, 101, 108, 32, 105, 110, 116, 101, 114, 102, 97, 99, 101, 34, 44, 34, 102, 117, 110, 99, 115, 34, 58, 123, 34, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 45, 102, 114, 111, 109, 45, 102, 101, 108, 116, 34, 58, 34, 67, 114, 101, 97, 116, 101, 115, 32, 97, 32, 110, 101, 119, 32, 97, 99, 99, 111, 117, 110, 116, 32, 73, 68, 32, 102, 114, 111, 109, 32, 97, 32, 102, 105, 101, 108, 100, 32, 101, 108, 101, 109, 101, 110, 116, 46, 34, 125, 44, 34, 116, 121, 112, 101, 115, 34, 58, 123, 34, 102, 101, 108, 116, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 82, 101, 112, 114, 101, 115, 101, 110, 116, 115, 32, 98, 97, 115, 101, 32, 102, 105, 101, 108, 100, 32, 101, 108, 101, 109, 101, 110, 116, 32, 105, 110, 32, 116, 104, 101, 32, 102, 105, 101, 108, 100, 32, 117, 115, 105, 110, 103, 32, 77, 111, 110, 116, 103, 111, 109, 101, 114, 121, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 46, 92, 110, 73, 110, 116, 101, 114, 110, 97, 108, 32, 118, 97, 108, 117, 101, 115, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 32, 120, 32, 42, 32, 82, 32, 109, 111, 100, 32, 77, 32, 119, 104, 101, 114, 101, 32, 82, 32, 61, 32, 50, 94, 54, 52, 32, 109, 111, 100, 32, 77, 32, 97, 110, 100, 32, 120, 32, 105, 110, 32, 91, 48, 44, 32, 77, 41, 46, 92, 110, 84, 104, 101, 32, 98, 97, 99, 107, 105, 110, 103, 32, 116, 121, 112, 101, 32, 105, 115, 32, 96, 102, 54, 52, 96, 32, 98, 117, 116, 32, 116, 104, 101, 32, 105, 110, 116, 101, 114, 110, 97, 108, 32, 118, 97, 108, 117, 101, 115, 32, 97, 114, 101, 32, 97, 108, 119, 97, 121, 115, 32, 105, 110, 116, 101, 103, 101, 114, 32, 105, 110, 32, 116, 104, 101, 32, 114, 97, 110, 103, 101, 32, 91, 48, 44, 32, 77, 41, 46, 92, 110, 70, 105, 101, 108, 100, 32, 109, 111, 100, 117, 108, 117, 115, 32, 77, 32, 61, 32, 50, 94, 54, 52, 32, 45, 32, 50, 94, 51, 50, 32, 43, 32, 49, 34, 44, 34, 105, 116, 101, 109, 115, 34, 58, 123, 34, 105, 110, 110, 101, 114, 34, 58, 34, 87, 101, 32, 112, 108, 97, 110, 32, 116, 111, 32, 117, 115, 101, 32, 102, 54, 52, 32, 97, 115, 32, 116, 104, 101, 32, 98, 97, 99, 107, 105, 110, 103, 32, 116, 121, 112, 101, 32, 102, 111, 114, 32, 116, 104, 101, 32, 102, 105, 101, 108, 100, 32, 101, 108, 101, 109, 101, 110, 116, 46, 32, 73, 116, 32, 104, 97, 115, 32, 116, 104, 101, 32, 115, 105, 122, 101, 32, 116, 104, 97, 116, 32, 119, 101, 32, 110, 101, 101, 100, 32, 97, 110, 100, 92, 110, 119, 101, 32, 100, 111, 110, 39, 116, 32, 112, 108, 97, 110, 32, 116, 111, 32, 115, 117, 112, 112, 111, 114, 116, 32, 102, 108, 111, 97, 116, 105, 110, 103, 32, 112, 111, 105, 110, 116, 32, 97, 114, 105, 116, 104, 109, 101, 116, 105, 99, 32, 105, 110, 32, 112, 114, 111, 103, 114, 97, 109, 115, 32, 102, 111, 114, 32, 77, 105, 100, 101, 110, 32, 86, 77, 46, 92, 110, 70, 111, 114, 32, 110, 111, 119, 32, 105, 116, 115, 32, 117, 54, 52, 34, 125, 125, 44, 34, 119, 111, 114, 100, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 65, 32, 103, 114, 111, 117, 112, 32, 111, 102, 32, 102, 111, 117, 114, 32, 102, 105, 101, 108, 100, 32, 101, 108, 101, 109, 101, 110, 116, 115, 32, 105, 110, 32, 116, 104, 101, 32, 77, 105, 100, 101, 110, 32, 98, 97, 115, 101, 32, 102, 105, 101, 108, 100, 46, 34, 125, 44, 34, 97, 99, 99, 111, 117, 110, 116, 45, 105, 100, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 85, 110, 105, 113, 117, 101, 32, 105, 100, 101, 110, 116, 105, 102, 105, 101, 114, 32, 111, 102, 32, 97, 110, 32, 97, 99, 99, 111, 117, 110, 116, 46, 92, 110, 92, 110, 65, 99, 99, 111, 117, 110, 116, 32, 73, 68, 32, 99, 111, 110, 115, 105, 115, 116, 115, 32, 111, 102, 32, 49, 32, 102, 105, 101, 108, 100, 32, 101, 108, 101, 109, 101, 110, 116, 32, 40, 126, 54, 52, 32, 98, 105, 116, 115, 41, 46, 32, 84, 104, 105, 115, 32, 102, 105, 101, 108, 100, 32, 101, 108, 101, 109, 101, 110, 116, 32, 117, 110, 105, 113, 117, 101, 108, 121, 32, 105, 100, 101, 110, 116, 105, 102, 105, 101, 115, 32, 97, 92, 110, 115, 105, 110, 103, 108, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 97, 110, 100, 32, 97, 108, 115, 111, 32, 115, 112, 101, 99, 105, 102, 105, 101, 115, 32, 116, 104, 101, 32, 116, 121, 112, 101, 32, 111, 102, 32, 116, 104, 101, 32, 117, 110, 100, 101, 114, 108, 121, 105, 110, 103, 32, 97, 99, 99, 111, 117, 110, 116, 46, 32, 83, 112, 101, 99, 105, 102, 105, 99, 97, 108, 108, 121, 58, 92, 110, 45, 32, 84, 104, 101, 32, 116, 119, 111, 32, 109, 111, 115, 116, 32, 115, 105, 103, 110, 105, 102, 105, 99, 97, 110, 116, 32, 98, 105, 116, 115, 32, 111, 102, 32, 116, 104, 101, 32, 73, 68, 32, 115, 112, 101, 99, 105, 102, 121, 32, 116, 104, 101, 32, 116, 121, 112, 101, 32, 111, 102, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 58, 92, 110, 45, 32, 48, 48, 32, 45, 32, 114, 101, 103, 117, 108, 97, 114, 32, 97, 99, 99, 111, 117, 110, 116, 32, 119, 105, 116, 104, 32, 117, 112, 100, 97, 116, 97, 98, 108, 101, 32, 99, 111, 100, 101, 46, 92, 110, 45, 32, 48, 49, 32, 45, 32, 114, 101, 103, 117, 108, 97, 114, 32, 97, 99, 99, 111, 117, 110, 116, 32, 119, 105, 116, 104, 32, 105, 109, 109, 117, 116, 97, 98, 108, 101, 32, 99, 111, 100, 101, 46, 92, 110, 45, 32, 49, 48, 32, 45, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 102, 97, 117, 99, 101, 116, 32, 119, 105, 116, 104, 32, 105, 109, 109, 117, 116, 97, 98, 108, 101, 32, 99, 111, 100, 101, 46, 92, 110, 45, 32, 49, 49, 32, 45, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 102, 97, 117, 99, 101, 116, 32, 119, 105, 116, 104, 32, 105, 109, 109, 117, 116, 97, 98, 108, 101, 32, 99, 111, 100, 101, 46, 92, 110, 45, 32, 84, 104, 101, 32, 116, 104, 105, 114, 100, 32, 109, 111, 115, 116, 32, 115, 105, 103, 110, 105, 102, 105, 99, 97, 110, 116, 32, 98, 105, 116, 32, 111, 102, 32, 116, 104, 101, 32, 73, 68, 32, 115, 112, 101, 99, 105, 102, 105, 101, 115, 32, 119, 104, 101, 116, 104, 101, 114, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 100, 97, 116, 97, 32, 105, 115, 32, 115, 116, 111, 114, 101, 100, 32, 111, 110, 45, 99, 104, 97, 105, 110, 58, 92, 110, 45, 32, 48, 32, 45, 32, 102, 117, 108, 108, 32, 97, 99, 99, 111, 117, 110, 116, 32, 100, 97, 116, 97, 32, 105, 115, 32, 115, 116, 111, 114, 101, 100, 32, 111, 110, 45, 99, 104, 97, 105, 110, 46, 92, 110, 45, 32, 49, 32, 45, 32, 111, 110, 108, 121, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 104, 97, 115, 104, 32, 105, 115, 32, 115, 116, 111, 114, 101, 100, 32, 111, 110, 45, 99, 104, 97, 105, 110, 32, 119, 104, 105, 99, 104, 32, 115, 101, 114, 118, 101, 115, 32, 97, 115, 32, 97, 32, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 32, 116, 111, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 115, 116, 97, 116, 101, 46, 92, 110, 65, 115, 32, 115, 117, 99, 104, 32, 116, 104, 101, 32, 116, 104, 114, 101, 101, 32, 109, 111, 115, 116, 32, 115, 105, 103, 110, 105, 102, 105, 99, 97, 110, 116, 32, 98, 105, 116, 115, 32, 102, 117, 108, 108, 121, 32, 100, 101, 115, 99, 114, 105, 98, 101, 115, 32, 116, 104, 101, 32, 116, 121, 112, 101, 32, 111, 102, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 46, 34, 125, 44, 34, 114, 101, 99, 105, 112, 105, 101, 110, 116, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 82, 101, 99, 105, 112, 105, 101, 110, 116, 32, 111, 102, 32, 116, 104, 101, 32, 110, 111, 116, 101, 44, 32, 105, 46, 101, 46, 44, 32, 104, 97, 115, 104, 40, 104, 97, 115, 104, 40, 104, 97, 115, 104, 40, 115, 101, 114, 105, 97, 108, 95, 110, 117, 109, 44, 32, 91, 48, 59, 32, 52, 93, 41, 44, 32, 110, 111, 116, 101, 95, 115, 99, 114, 105, 112, 116, 95, 104, 97, 115, 104, 41, 44, 32, 105, 110, 112, 117, 116, 95, 104, 97, 115, 104, 41, 34, 125, 44, 34, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 65, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 111, 114, 32, 97, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 46, 92, 110, 92, 110, 65, 108, 108, 32, 97, 115, 115, 101, 116, 115, 32, 97, 114, 101, 32, 101, 110, 99, 111, 100, 101, 100, 32, 117, 115, 105, 110, 103, 32, 97, 32, 115, 105, 110, 103, 108, 101, 32, 119, 111, 114, 100, 32, 40, 52, 32, 101, 108, 101, 109, 101, 110, 116, 115, 41, 32, 115, 117, 99, 104, 32, 116, 104, 97, 116, 32, 105, 116, 32, 105, 115, 32, 101, 97, 115, 121, 32, 116, 111, 32, 100, 101, 116, 101, 114, 109, 105, 110, 101, 32, 116, 104, 101, 92, 110, 116, 121, 112, 101, 32, 111, 102, 32, 97, 110, 32, 97, 115, 115, 101, 116, 32, 98, 111, 116, 104, 32, 105, 110, 115, 105, 100, 101, 32, 97, 110, 100, 32, 111, 117, 116, 115, 105, 100, 101, 32, 77, 105, 100, 101, 110, 32, 86, 77, 46, 32, 83, 112, 101, 99, 105, 102, 105, 99, 97, 108, 108, 121, 58, 92, 110, 69, 108, 101, 109, 101, 110, 116, 32, 49, 32, 119, 105, 108, 108, 32, 98, 101, 58, 92, 110, 45, 32, 90, 69, 82, 79, 32, 102, 111, 114, 32, 97, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 92, 110, 45, 32, 110, 111, 110, 45, 90, 69, 82, 79, 32, 102, 111, 114, 32, 97, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 92, 110, 84, 104, 101, 32, 109, 111, 115, 116, 32, 115, 105, 103, 110, 105, 102, 105, 99, 97, 110, 116, 32, 98, 105, 116, 32, 119, 105, 108, 108, 32, 98, 101, 58, 92, 110, 45, 32, 79, 78, 69, 32, 102, 111, 114, 32, 97, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 92, 110, 45, 32, 90, 69, 82, 79, 32, 102, 111, 114, 32, 97, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 92, 110, 92, 110, 84, 104, 101, 32, 97, 98, 111, 118, 101, 32, 112, 114, 111, 112, 101, 114, 116, 105, 101, 115, 32, 103, 117, 97, 114, 97, 110, 116, 101, 101, 32, 116, 104, 97, 116, 32, 116, 104, 101, 114, 101, 32, 99, 97, 110, 32, 110, 101, 118, 101, 114, 32, 98, 101, 32, 97, 32, 99, 111, 108, 108, 105, 115, 105, 111, 110, 32, 98, 101, 116, 119, 101, 101, 110, 32, 97, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 110, 100, 32, 97, 92, 110, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 46, 92, 110, 92, 110, 84, 104, 101, 32, 109, 101, 116, 104, 111, 100, 111, 108, 111, 103, 121, 32, 102, 111, 114, 32, 99, 111, 110, 115, 116, 114, 117, 99, 116, 105, 110, 103, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 110, 100, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 115, 32, 105, 115, 32, 100, 101, 115, 99, 114, 105, 98, 101, 100, 32, 98, 101, 108, 111, 119, 46, 92, 110, 92, 110, 35, 32, 70, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 115, 92, 110, 84, 104, 101, 32, 109, 111, 115, 116, 32, 115, 105, 103, 110, 105, 102, 105, 99, 97, 110, 116, 32, 101, 108, 101, 109, 101, 110, 116, 32, 111, 102, 32, 97, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 105, 115, 32, 115, 101, 116, 32, 116, 111, 32, 116, 104, 101, 32, 73, 68, 32, 111, 102, 32, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 32, 119, 104, 105, 99, 104, 32, 105, 115, 115, 117, 101, 100, 92, 110, 116, 104, 101, 32, 97, 115, 115, 101, 116, 46, 32, 84, 104, 105, 115, 32, 103, 117, 97, 114, 97, 110, 116, 101, 101, 115, 32, 116, 104, 101, 32, 112, 114, 111, 112, 101, 114, 116, 105, 101, 115, 32, 100, 101, 115, 99, 114, 105, 98, 101, 100, 32, 97, 98, 111, 118, 101, 32, 40, 116, 104, 101, 32, 102, 105, 114, 115, 116, 32, 98, 105, 116, 32, 105, 115, 32, 79, 78, 69, 41, 46, 92, 110, 92, 110, 84, 104, 101, 32, 108, 101, 97, 115, 116, 32, 115, 105, 103, 110, 105, 102, 105, 99, 97, 110, 116, 32, 101, 108, 101, 109, 101, 110, 116, 32, 105, 115, 32, 115, 101, 116, 32, 116, 111, 32, 116, 104, 101, 32, 97, 109, 111, 117, 110, 116, 32, 111, 102, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 46, 32, 84, 104, 105, 115, 32, 97, 109, 111, 117, 110, 116, 32, 99, 97, 110, 110, 111, 116, 32, 98, 101, 32, 103, 114, 101, 97, 116, 101, 114, 92, 110, 116, 104, 97, 110, 32, 50, 94, 54, 51, 32, 45, 32, 49, 32, 97, 110, 100, 32, 116, 104, 117, 115, 32, 114, 101, 113, 117, 105, 114, 101, 115, 32, 54, 51, 45, 98, 105, 116, 115, 32, 116, 111, 32, 115, 116, 111, 114, 101, 46, 92, 110, 92, 110, 69, 108, 101, 109, 101, 110, 116, 115, 32, 49, 32, 97, 110, 100, 32, 50, 32, 97, 114, 101, 32, 115, 101, 116, 32, 116, 111, 32, 90, 69, 82, 79, 46, 92, 110, 92, 110, 73, 116, 32, 105, 115, 32, 105, 109, 112, 111, 115, 115, 105, 98, 108, 101, 32, 116, 111, 32, 102, 105, 110, 100, 32, 97, 32, 99, 111, 108, 108, 105, 115, 105, 111, 110, 32, 98, 101, 116, 119, 101, 101, 110, 32, 116, 119, 111, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 115, 32, 105, 115, 115, 117, 101, 100, 32, 98, 121, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, 102, 97, 117, 99, 101, 116, 115, 32, 97, 115, 92, 110, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 95, 105, 100, 32, 105, 115, 32, 105, 110, 99, 108, 117, 100, 101, 100, 32, 105, 110, 32, 116, 104, 101, 32, 100, 101, 115, 99, 114, 105, 112, 116, 105, 111, 110, 32, 111, 102, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 32, 97, 110, 100, 32, 116, 104, 105, 115, 32, 105, 115, 32, 103, 117, 97, 114, 97, 110, 116, 101, 101, 100, 32, 116, 111, 32, 98, 101, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 92, 110, 102, 111, 114, 32, 101, 97, 99, 104, 32, 102, 97, 117, 99, 101, 116, 32, 97, 115, 32, 112, 101, 114, 32, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 32, 99, 114, 101, 97, 116, 105, 111, 110, 32, 108, 111, 103, 105, 99, 46, 92, 110, 92, 110, 35, 32, 78, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 115, 92, 110, 84, 104, 101, 32, 52, 32, 101, 108, 101, 109, 101, 110, 116, 115, 32, 111, 102, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 115, 32, 97, 114, 101, 32, 99, 111, 109, 112, 117, 116, 101, 100, 32, 97, 115, 32, 102, 111, 108, 108, 111, 119, 115, 58, 92, 110, 45, 32, 70, 105, 114, 115, 116, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 32, 100, 97, 116, 97, 32, 105, 115, 32, 104, 97, 115, 104, 101, 100, 46, 32, 84, 104, 105, 115, 32, 99, 111, 109, 112, 114, 101, 115, 115, 101, 115, 32, 97, 110, 32, 97, 115, 115, 101, 116, 32, 111, 102, 32, 97, 110, 32, 97, 114, 98, 105, 116, 114, 97, 114, 121, 32, 108, 101, 110, 103, 116, 104, 32, 116, 111, 32, 52, 32, 102, 105, 101, 108, 100, 92, 110, 101, 108, 101, 109, 101, 110, 116, 115, 58, 32, 91, 100, 48, 44, 32, 100, 49, 44, 32, 100, 50, 44, 32, 100, 51, 93, 46, 92, 110, 45, 32, 100, 49, 32, 105, 115, 32, 116, 104, 101, 110, 32, 114, 101, 112, 108, 97, 99, 101, 100, 32, 119, 105, 116, 104, 32, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 95, 105, 100, 32, 119, 104, 105, 99, 104, 32, 105, 115, 115, 117, 101, 115, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 58, 32, 91, 100, 48, 44, 32, 102, 97, 117, 99, 101, 116, 95, 105, 100, 44, 32, 100, 50, 44, 32, 100, 51, 93, 46, 92, 110, 45, 32, 76, 97, 115, 116, 108, 121, 44, 32, 116, 104, 101, 32, 109, 111, 115, 116, 32, 115, 105, 103, 110, 105, 102, 105, 99, 97, 110, 116, 32, 98, 105, 116, 32, 111, 102, 32, 100, 51, 32, 105, 115, 32, 115, 101, 116, 32, 116, 111, 32, 90, 69, 82, 79, 46, 92, 110, 92, 110, 73, 116, 32, 105, 115, 32, 105, 109, 112, 111, 115, 115, 105, 98, 108, 101, 32, 116, 111, 32, 102, 105, 110, 100, 32, 97, 32, 99, 111, 108, 108, 105, 115, 105, 111, 110, 32, 98, 101, 116, 119, 101, 101, 110, 32, 116, 119, 111, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 115, 32, 105, 115, 115, 117, 101, 100, 32, 98, 121, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, 102, 97, 117, 99, 101, 116, 115, 92, 110, 97, 115, 32, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 95, 105, 100, 32, 105, 115, 32, 105, 110, 99, 108, 117, 100, 101, 100, 32, 105, 110, 32, 116, 104, 101, 32, 100, 101, 115, 99, 114, 105, 112, 116, 105, 111, 110, 32, 111, 102, 32, 116, 104, 101, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 97, 110, 100, 32, 116, 104, 105, 115, 32, 105, 115, 32, 103, 117, 97, 114, 97, 110, 116, 101, 101, 100, 92, 110, 116, 111, 32, 98, 101, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, 97, 115, 32, 112, 101, 114, 32, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 32, 99, 114, 101, 97, 116, 105, 111, 110, 32, 108, 111, 103, 105, 99, 46, 32, 67, 111, 108, 108, 105, 115, 105, 111, 110, 32, 114, 101, 115, 105, 115, 116, 97, 110, 99, 101, 32, 102, 111, 114, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 115, 92, 110, 105, 115, 115, 117, 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 115, 97, 109, 101, 32, 102, 97, 117, 99, 101, 116, 32, 105, 115, 32, 126, 50, 94, 57, 53, 46, 34, 125, 44, 34, 110, 111, 110, 99, 101, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 65, 99, 99, 111, 117, 110, 116, 32, 110, 111, 110, 99, 101, 34, 125, 44, 34, 97, 99, 99, 111, 117, 110, 116, 45, 104, 97, 115, 104, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 65, 99, 99, 111, 117, 110, 116, 32, 104, 97, 115, 104, 34, 125, 44, 34, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 66, 108, 111, 99, 107, 32, 104, 97, 115, 104, 34, 125, 44, 34, 115, 116, 111, 114, 97, 103, 101, 45, 118, 97, 108, 117, 101, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 83, 116, 111, 114, 97, 103, 101, 32, 118, 97, 108, 117, 101, 34, 125, 44, 34, 115, 116, 111, 114, 97, 103, 101, 45, 114, 111, 111, 116, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 65, 99, 99, 111, 117, 110, 116, 32, 115, 116, 111, 114, 97, 103, 101, 32, 114, 111, 111, 116, 34, 125, 44, 34, 97, 99, 99, 111, 117, 110, 116, 45, 99, 111, 100, 101, 45, 114, 111, 111, 116, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 65, 99, 99, 111, 117, 110, 116, 32, 99, 111, 100, 101, 32, 114, 111, 111, 116, 34, 125, 44, 34, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 67, 111, 109, 109, 105, 116, 109, 101, 110, 116, 32, 116, 111, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 118, 97, 117, 108, 116, 34, 125, 44, 34, 110, 111, 116, 101, 45, 105, 100, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 65, 110, 32, 105, 100, 32, 111, 102, 32, 116, 104, 101, 32, 99, 114, 101, 97, 116, 101, 100, 32, 110, 111, 116, 101, 34, 125, 125, 125, 44, 34, 97, 99, 99, 111, 117, 110, 116, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 65, 99, 99, 111, 117, 110, 116, 45, 114, 101, 108, 97, 116, 101, 100, 32, 102, 117, 110, 99, 116, 105, 111, 110, 115, 34, 44, 34, 102, 117, 110, 99, 115, 34, 58, 123, 34, 103, 101, 116, 45, 105, 100, 34, 58, 34, 71, 101, 116, 32, 116, 104, 101, 32, 105, 100, 32, 111, 102, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 108, 121, 32, 101, 120, 101, 99, 117, 116, 105, 110, 103, 32, 97, 99, 99, 111, 117, 110, 116, 34, 44, 34, 103, 101, 116, 45, 110, 111, 110, 99, 101, 34, 58, 34, 82, 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 110, 111, 110, 99, 101, 34, 44, 34, 103, 101, 116, 45, 105, 110, 105, 116, 105, 97, 108, 45, 104, 97, 115, 104, 34, 58, 34, 71, 101, 116, 32, 116, 104, 101, 32, 105, 110, 105, 116, 105, 97, 108, 32, 104, 97, 115, 104, 32, 111, 102, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 108, 121, 32, 101, 120, 101, 99, 117, 116, 105, 110, 103, 32, 97, 99, 99, 111, 117, 110, 116, 34, 44, 34, 103, 101, 116, 45, 99, 117, 114, 114, 101, 110, 116, 45, 104, 97, 115, 104, 34, 58, 34, 71, 101, 116, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 104, 97, 115, 104, 32, 111, 102, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 100, 97, 116, 97, 32, 115, 116, 111, 114, 101, 100, 32, 105, 110, 32, 109, 101, 109, 111, 114, 121, 34, 44, 34, 105, 110, 99, 114, 45, 110, 111, 110, 99, 101, 34, 58, 34, 73, 110, 99, 114, 101, 109, 101, 110, 116, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 110, 111, 110, 99, 101, 32, 98, 121, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 118, 97, 108, 117, 101, 46, 92, 110, 118, 97, 108, 117, 101, 32, 99, 97, 110, 32, 98, 101, 32, 97, 116, 32, 109, 111, 115, 116, 32, 50, 94, 51, 50, 32, 45, 32, 49, 32, 111, 116, 104, 101, 114, 119, 105, 115, 101, 32, 116, 104, 105, 115, 32, 112, 114, 111, 99, 101, 100, 117, 114, 101, 32, 112, 97, 110, 105, 99, 115, 34, 44, 34, 103, 101, 116, 45, 105, 116, 101, 109, 34, 58, 34, 71, 101, 116, 32, 116, 104, 101, 32, 118, 97, 108, 117, 101, 32, 111, 102, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 107, 101, 121, 32, 105, 110, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 115, 116, 111, 114, 97, 103, 101, 34, 44, 34, 115, 101, 116, 45, 105, 116, 101, 109, 34, 58, 34, 83, 101, 116, 32, 116, 104, 101, 32, 118, 97, 108, 117, 101, 32, 111, 102, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 107, 101, 121, 32, 105, 110, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 115, 116, 111, 114, 97, 103, 101, 92, 110, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 111, 108, 100, 32, 118, 97, 108, 117, 101, 32, 111, 102, 32, 116, 104, 101, 32, 107, 101, 121, 32, 97, 110, 100, 32, 116, 104, 101, 32, 110, 101, 119, 32, 115, 116, 111, 114, 97, 103, 101, 32, 114, 111, 111, 116, 34, 44, 34, 115, 101, 116, 45, 99, 111, 100, 101, 34, 58, 34, 83, 101, 116, 115, 32, 116, 104, 101, 32, 99, 111, 100, 101, 32, 111, 102, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 116, 104, 101, 32, 116, 114, 97, 110, 115, 97, 99, 116, 105, 111, 110, 32, 105, 115, 32, 98, 101, 105, 110, 103, 32, 101, 120, 101, 99, 117, 116, 101, 100, 32, 97, 103, 97, 105, 110, 115, 116, 46, 92, 110, 84, 104, 105, 115, 32, 112, 114, 111, 99, 101, 100, 117, 114, 101, 32, 99, 97, 110, 32, 111, 110, 108, 121, 32, 98, 101, 32, 101, 120, 101, 99, 117, 116, 101, 100, 32, 111, 110, 32, 114, 101, 103, 117, 108, 97, 114, 32, 97, 99, 99, 111, 117, 110, 116, 115, 32, 119, 105, 116, 104, 32, 117, 112, 100, 97, 116, 97, 98, 108, 101, 92, 110, 99, 111, 100, 101, 46, 32, 79, 116, 104, 101, 114, 119, 105, 115, 101, 44, 32, 116, 104, 105, 115, 32, 112, 114, 111, 99, 101, 100, 117, 114, 101, 32, 102, 97, 105, 108, 115, 46, 32, 99, 111, 100, 101, 32, 105, 115, 32, 116, 104, 101, 32, 104, 97, 115, 104, 32, 111, 102, 32, 116, 104, 101, 32, 99, 111, 100, 101, 92, 110, 116, 111, 32, 115, 101, 116, 46, 34, 44, 34, 103, 101, 116, 45, 98, 97, 108, 97, 110, 99, 101, 34, 58, 34, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 98, 97, 108, 97, 110, 99, 101, 32, 111, 102, 32, 97, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 97, 115, 115, 111, 99, 105, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 97, 32, 97, 99, 99, 111, 117, 110, 116, 95, 105, 100, 46, 92, 110, 80, 97, 110, 105, 99, 115, 32, 105, 102, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 32, 105, 115, 32, 110, 111, 116, 32, 97, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 46, 32, 97, 99, 99, 111, 117, 110, 116, 95, 105, 100, 32, 105, 115, 32, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 32, 105, 100, 92, 110, 111, 102, 32, 116, 104, 101, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 111, 102, 32, 105, 110, 116, 101, 114, 101, 115, 116, 46, 32, 98, 97, 108, 97, 110, 99, 101, 32, 105, 115, 32, 116, 104, 101, 32, 118, 97, 117, 108, 116, 32, 98, 97, 108, 97, 110, 99, 101, 32, 111, 102, 32, 116, 104, 101, 92, 110, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 46, 34, 44, 34, 104, 97, 115, 45, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 34, 58, 34, 82, 101, 116, 117, 114, 110, 115, 32, 97, 32, 98, 111, 111, 108, 101, 97, 110, 32, 105, 110, 100, 105, 99, 97, 116, 105, 110, 103, 32, 119, 104, 101, 116, 104, 101, 114, 32, 116, 104, 101, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 105, 115, 32, 112, 114, 101, 115, 101, 110, 116, 92, 110, 105, 110, 32, 116, 104, 101, 32, 118, 97, 117, 108, 116, 46, 32, 80, 97, 110, 105, 99, 115, 32, 105, 102, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 32, 105, 115, 32, 97, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 46, 32, 97, 115, 115, 101, 116, 32, 105, 115, 32, 116, 104, 101, 92, 110, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 111, 102, 32, 105, 110, 116, 101, 114, 101, 115, 116, 46, 32, 104, 97, 115, 95, 97, 115, 115, 101, 116, 32, 105, 115, 32, 97, 32, 98, 111, 111, 108, 101, 97, 110, 32, 105, 110, 100, 105, 99, 97, 116, 105, 110, 103, 92, 110, 119, 104, 101, 116, 104, 101, 114, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 118, 97, 117, 108, 116, 32, 104, 97, 115, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 32, 111, 102, 32, 105, 110, 116, 101, 114, 101, 115, 116, 46, 34, 44, 34, 97, 100, 100, 45, 97, 115, 115, 101, 116, 34, 58, 34, 65, 100, 100, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 97, 115, 115, 101, 116, 32, 116, 111, 32, 116, 104, 101, 32, 118, 97, 117, 108, 116, 46, 32, 80, 97, 110, 105, 99, 115, 32, 117, 110, 100, 101, 114, 32, 118, 97, 114, 105, 111, 117, 115, 32, 99, 111, 110, 100, 105, 116, 105, 111, 110, 115, 46, 92, 110, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 102, 105, 110, 97, 108, 32, 97, 115, 115, 101, 116, 32, 105, 110, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 118, 97, 117, 108, 116, 32, 100, 101, 102, 105, 110, 101, 100, 32, 97, 115, 32, 102, 111, 108, 108, 111, 119, 115, 58, 32, 73, 102, 32, 97, 115, 115, 101, 116, 32, 105, 115, 92, 110, 97, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 44, 32, 116, 104, 101, 110, 32, 114, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 115, 97, 109, 101, 32, 97, 115, 32, 97, 115, 115, 101, 116, 46, 32, 73, 102, 32, 97, 115, 115, 101, 116, 32, 105, 115, 32, 97, 92, 110, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 44, 32, 116, 104, 101, 110, 32, 114, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 116, 111, 116, 97, 108, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 105, 110, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 92, 110, 118, 97, 117, 108, 116, 32, 97, 102, 116, 101, 114, 32, 97, 115, 115, 101, 116, 32, 119, 97, 115, 32, 97, 100, 100, 101, 100, 32, 116, 111, 32, 105, 116, 46, 34, 44, 34, 114, 101, 109, 111, 118, 101, 45, 97, 115, 115, 101, 116, 34, 58, 34, 82, 101, 109, 111, 118, 101, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 97, 115, 115, 101, 116, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 118, 97, 117, 108, 116, 34, 44, 34, 103, 101, 116, 45, 118, 97, 117, 108, 116, 45, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 34, 58, 34, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 32, 116, 111, 32, 116, 104, 101, 32, 97, 99, 99, 111, 117, 110, 116, 32, 118, 97, 117, 108, 116, 46, 34, 125, 125, 44, 34, 110, 111, 116, 101, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 78, 111, 116, 101, 45, 114, 101, 108, 97, 116, 101, 100, 32, 102, 117, 110, 99, 116, 105, 111, 110, 115, 34, 44, 34, 102, 117, 110, 99, 115, 34, 58, 123, 34, 103, 101, 116, 45, 105, 110, 112, 117, 116, 115, 34, 58, 34, 71, 101, 116, 32, 116, 104, 101, 32, 105, 110, 112, 117, 116, 115, 32, 111, 102, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 108, 121, 32, 101, 120, 101, 99, 117, 116, 101, 100, 32, 110, 111, 116, 101, 34, 44, 34, 103, 101, 116, 45, 97, 115, 115, 101, 116, 115, 34, 58, 34, 71, 101, 116, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 115, 32, 111, 102, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 108, 121, 32, 101, 120, 101, 99, 117, 116, 105, 110, 103, 32, 110, 111, 116, 101, 34, 44, 34, 103, 101, 116, 45, 115, 101, 110, 100, 101, 114, 34, 58, 34, 71, 101, 116, 32, 116, 104, 101, 32, 115, 101, 110, 100, 101, 114, 32, 111, 102, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 108, 121, 32, 101, 120, 101, 99, 117, 116, 105, 110, 103, 32, 110, 111, 116, 101, 34, 125, 125, 44, 34, 116, 120, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 84, 114, 97, 110, 115, 97, 99, 116, 105, 111, 110, 45, 114, 101, 108, 97, 116, 101, 100, 32, 102, 117, 110, 99, 116, 105, 111, 110, 115, 34, 44, 34, 102, 117, 110, 99, 115, 34, 58, 123, 34, 103, 101, 116, 45, 98, 108, 111, 99, 107, 45, 110, 117, 109, 98, 101, 114, 34, 58, 34, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 98, 108, 111, 99, 107, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 116, 104, 101, 32, 108, 97, 115, 116, 32, 107, 110, 111, 119, 110, 32, 98, 108, 111, 99, 107, 32, 97, 116, 32, 116, 104, 101, 32, 116, 105, 109, 101, 32, 111, 102, 32, 116, 114, 97, 110, 115, 97, 99, 116, 105, 111, 110, 32, 101, 120, 101, 99, 117, 116, 105, 111, 110, 46, 34, 44, 34, 103, 101, 116, 45, 98, 108, 111, 99, 107, 45, 104, 97, 115, 104, 34, 58, 34, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 98, 108, 111, 99, 107, 32, 104, 97, 115, 104, 32, 111, 102, 32, 116, 104, 101, 32, 108, 97, 115, 116, 32, 107, 110, 111, 119, 110, 32, 98, 108, 111, 99, 107, 32, 97, 116, 32, 116, 104, 101, 32, 116, 105, 109, 101, 32, 111, 102, 32, 116, 114, 97, 110, 115, 97, 99, 116, 105, 111, 110, 32, 101, 120, 101, 99, 117, 116, 105, 111, 110, 46, 34, 44, 34, 103, 101, 116, 45, 105, 110, 112, 117, 116, 45, 110, 111, 116, 101, 115, 45, 104, 97, 115, 104, 34, 58, 34, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 105, 110, 112, 117, 116, 32, 110, 111, 116, 101, 115, 32, 104, 97, 115, 104, 46, 32, 84, 104, 105, 115, 32, 105, 115, 32, 99, 111, 109, 112, 117, 116, 101, 100, 32, 97, 115, 32, 97, 32, 115, 101, 113, 117, 101, 110, 116, 105, 97, 108, 32, 104, 97, 115, 104, 32, 111, 102, 92, 110, 40, 110, 117, 108, 108, 105, 102, 105, 101, 114, 44, 32, 115, 99, 114, 105, 112, 116, 95, 114, 111, 111, 116, 41, 32, 116, 117, 112, 108, 101, 115, 32, 111, 118, 101, 114, 32, 97, 108, 108, 32, 105, 110, 112, 117, 116, 32, 110, 111, 116, 101, 115, 46, 34, 44, 34, 103, 101, 116, 45, 111, 117, 116, 112, 117, 116, 45, 110, 111, 116, 101, 115, 45, 104, 97, 115, 104, 34, 58, 34, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 111, 117, 116, 112, 117, 116, 32, 110, 111, 116, 101, 115, 32, 104, 97, 115, 104, 46, 32, 84, 104, 105, 115, 32, 105, 115, 32, 99, 111, 109, 112, 117, 116, 101, 100, 32, 97, 115, 32, 97, 32, 115, 101, 113, 117, 101, 110, 116, 105, 97, 108, 32, 104, 97, 115, 104, 32, 111, 102, 92, 110, 40, 110, 111, 116, 101, 95, 104, 97, 115, 104, 44, 32, 110, 111, 116, 101, 95, 109, 101, 116, 97, 100, 97, 116, 97, 41, 32, 116, 117, 112, 108, 101, 115, 32, 111, 118, 101, 114, 32, 97, 108, 108, 32, 111, 117, 116, 112, 117, 116, 32, 110, 111, 116, 101, 115, 46, 34, 44, 34, 99, 114, 101, 97, 116, 101, 45, 110, 111, 116, 101, 34, 58, 34, 67, 114, 101, 97, 116, 101, 115, 32, 97, 32, 110, 101, 119, 32, 110, 111, 116, 101, 46, 92, 110, 97, 115, 115, 101, 116, 32, 105, 115, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 32, 116, 111, 32, 98, 101, 32, 105, 110, 99, 108, 117, 100, 101, 100, 32, 105, 110, 32, 116, 104, 101, 32, 110, 111, 116, 101, 46, 92, 110, 116, 97, 103, 32, 105, 115, 32, 116, 104, 101, 32, 116, 97, 103, 32, 116, 111, 32, 98, 101, 32, 105, 110, 99, 108, 117, 100, 101, 100, 32, 105, 110, 32, 116, 104, 101, 32, 110, 111, 116, 101, 46, 92, 110, 114, 101, 99, 105, 112, 105, 101, 110, 116, 32, 105, 115, 32, 116, 104, 101, 32, 114, 101, 99, 105, 112, 105, 101, 110, 116, 32, 111, 102, 32, 116, 104, 101, 32, 110, 111, 116, 101, 46, 92, 110, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 105, 100, 32, 111, 102, 32, 116, 104, 101, 32, 99, 114, 101, 97, 116, 101, 100, 32, 110, 111, 116, 101, 46, 34, 125, 125, 44, 34, 97, 115, 115, 101, 116, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 65, 115, 115, 101, 116, 45, 114, 101, 108, 97, 116, 101, 100, 32, 102, 117, 110, 99, 116, 105, 111, 110, 115, 46, 32, 84, 104, 101, 115, 101, 32, 102, 117, 110, 99, 116, 105, 111, 110, 115, 32, 99, 97, 110, 32, 111, 110, 108, 121, 32, 98, 101, 32, 99, 97, 108, 108, 101, 100, 32, 98, 121, 32, 102, 97, 117, 99, 101, 116, 32, 97, 99, 99, 111, 117, 110, 116, 115, 46, 34, 44, 34, 102, 117, 110, 99, 115, 34, 58, 123, 34, 98, 117, 105, 108, 100, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 34, 58, 34, 66, 117, 105, 108, 100, 115, 32, 97, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 102, 111, 114, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 102, 97, 117, 99, 101, 116, 32, 97, 110, 100, 32, 97, 109, 111, 117, 110, 116, 46, 92, 110, 102, 97, 117, 99, 101, 116, 95, 105, 100, 32, 105, 115, 32, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 32, 116, 111, 32, 99, 114, 101, 97, 116, 101, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 32, 102, 111, 114, 46, 92, 110, 97, 109, 111, 117, 110, 116, 32, 105, 115, 32, 116, 104, 101, 32, 97, 109, 111, 117, 110, 116, 32, 111, 102, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 32, 116, 111, 32, 99, 114, 101, 97, 116, 101, 46, 92, 110, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 99, 114, 101, 97, 116, 101, 100, 32, 97, 115, 115, 101, 116, 46, 34, 44, 34, 99, 114, 101, 97, 116, 101, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 34, 58, 34, 67, 114, 101, 97, 116, 101, 115, 32, 97, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 102, 111, 114, 32, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 32, 116, 104, 101, 32, 116, 114, 97, 110, 115, 97, 99, 116, 105, 111, 110, 32, 105, 115, 32, 98, 101, 105, 110, 103, 92, 110, 101, 120, 101, 99, 117, 116, 101, 100, 32, 97, 103, 97, 105, 110, 115, 116, 46, 92, 110, 97, 109, 111, 117, 110, 116, 32, 105, 115, 32, 116, 104, 101, 32, 97, 109, 111, 117, 110, 116, 32, 111, 102, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 32, 116, 111, 32, 99, 114, 101, 97, 116, 101, 46, 92, 110, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 99, 114, 101, 97, 116, 101, 100, 32, 97, 115, 115, 101, 116, 46, 34, 44, 34, 98, 117, 105, 108, 100, 45, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 34, 58, 34, 66, 117, 105, 108, 100, 115, 32, 97, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 102, 111, 114, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 102, 97, 117, 99, 101, 116, 32, 97, 110, 100, 92, 110, 100, 97, 116, 97, 45, 104, 97, 115, 104, 46, 92, 110, 102, 97, 117, 99, 101, 116, 95, 105, 100, 32, 105, 115, 32, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 32, 116, 111, 32, 99, 114, 101, 97, 116, 101, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 32, 102, 111, 114, 46, 92, 110, 100, 97, 116, 97, 45, 104, 97, 115, 104, 32, 105, 115, 32, 116, 104, 101, 32, 100, 97, 116, 97, 32, 104, 97, 115, 104, 32, 111, 102, 32, 116, 104, 101, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 116, 111, 32, 98, 117, 105, 108, 100, 46, 92, 110, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 99, 114, 101, 97, 116, 101, 100, 32, 97, 115, 115, 101, 116, 46, 34, 44, 34, 99, 114, 101, 97, 116, 101, 45, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 34, 58, 34, 67, 114, 101, 97, 116, 101, 115, 32, 97, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 102, 111, 114, 32, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 32, 116, 104, 101, 32, 116, 114, 97, 110, 115, 97, 99, 116, 105, 111, 110, 32, 105, 115, 32, 98, 101, 105, 110, 103, 32, 101, 120, 101, 99, 117, 116, 101, 100, 32, 97, 103, 97, 105, 110, 115, 116, 46, 92, 110, 100, 97, 116, 97, 45, 104, 97, 115, 104, 32, 105, 115, 32, 116, 104, 101, 32, 100, 97, 116, 97, 32, 104, 97, 115, 104, 32, 111, 102, 32, 116, 104, 101, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 116, 111, 32, 99, 114, 101, 97, 116, 101, 46, 92, 110, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 99, 114, 101, 97, 116, 101, 100, 32, 97, 115, 115, 101, 116, 46, 34, 125, 125, 44, 34, 102, 97, 117, 99, 101, 116, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 70, 97, 117, 99, 101, 116, 45, 114, 101, 108, 97, 116, 101, 100, 32, 102, 117, 110, 99, 116, 105, 111, 110, 115, 46, 32, 84, 104, 101, 115, 101, 32, 102, 117, 110, 99, 116, 105, 111, 110, 115, 32, 99, 97, 110, 32, 111, 110, 108, 121, 32, 98, 101, 32, 99, 97, 108, 108, 101, 100, 32, 98, 121, 32, 102, 97, 117, 99, 101, 116, 32, 97, 99, 99, 111, 117, 110, 116, 115, 46, 34, 44, 34, 102, 117, 110, 99, 115, 34, 58, 123, 34, 109, 105, 110, 116, 34, 58, 34, 77, 105, 110, 116, 32, 97, 110, 32, 97, 115, 115, 101, 116, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 32, 116, 114, 97, 110, 115, 97, 99, 116, 105, 111, 110, 32, 105, 115, 32, 98, 101, 105, 110, 103, 32, 101, 120, 101, 99, 117, 116, 101, 100, 32, 97, 103, 97, 105, 110, 115, 116, 46, 92, 110, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 109, 105, 110, 116, 101, 100, 32, 97, 115, 115, 101, 116, 46, 34, 44, 34, 98, 117, 114, 110, 34, 58, 34, 66, 117, 114, 110, 32, 97, 110, 32, 97, 115, 115, 101, 116, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 32, 116, 114, 97, 110, 115, 97, 99, 116, 105, 111, 110, 32, 105, 115, 32, 98, 101, 105, 110, 103, 32, 101, 120, 101, 99, 117, 116, 101, 100, 32, 97, 103, 97, 105, 110, 115, 116, 46, 92, 110, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 98, 117, 114, 110, 101, 100, 32, 97, 115, 115, 101, 116, 46, 34, 44, 34, 103, 101, 116, 45, 116, 111, 116, 97, 108, 45, 105, 115, 115, 117, 97, 110, 99, 101, 34, 58, 34, 82, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 116, 111, 116, 97, 108, 32, 105, 115, 115, 117, 97, 110, 99, 101, 32, 111, 102, 32, 116, 104, 101, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 102, 97, 117, 99, 101, 116, 32, 116, 104, 101, 32, 116, 114, 97, 110, 115, 97, 99, 116, 105, 111, 110, 32, 105, 115, 92, 110, 98, 101, 105, 110, 103, 32, 101, 120, 101, 99, 117, 116, 101, 100, 32, 97, 103, 97, 105, 110, 115, 116, 46, 32, 80, 97, 110, 105, 99, 115, 32, 105, 102, 32, 116, 104, 101, 32, 116, 114, 97, 110, 115, 97, 99, 116, 105, 111, 110, 32, 105, 115, 32, 110, 111, 116, 32, 98, 101, 105, 110, 103, 32, 101, 120, 101, 99, 117, 116, 101, 100, 92, 110, 97, 103, 97, 105, 110, 115, 116, 32, 97, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 102, 97, 117, 99, 101, 116, 46, 34, 125, 125, 44, 34, 116, 121, 112, 101, 115, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 72, 105, 103, 104, 45, 108, 101, 118, 101, 108, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 32, 111, 102, 32, 99, 111, 114, 101, 32, 116, 121, 112, 101, 115, 34, 44, 34, 102, 117, 110, 99, 115, 34, 58, 123, 34, 102, 114, 111, 109, 45, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 34, 58, 34, 67, 111, 110, 118, 101, 114, 116, 115, 32, 97, 32, 99, 111, 114, 101, 32, 97, 115, 115, 101, 116, 32, 116, 111, 32, 97, 32, 97, 110, 32, 97, 115, 115, 101, 116, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 46, 34, 44, 34, 116, 111, 45, 99, 111, 114, 101, 45, 97, 115, 115, 101, 116, 34, 58, 34, 67, 111, 110, 118, 101, 114, 116, 115, 32, 97, 110, 32, 97, 115, 115, 101, 116, 32, 116, 111, 32, 97, 32, 99, 111, 114, 101, 32, 97, 115, 115, 101, 116, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 46, 34, 125, 44, 34, 116, 121, 112, 101, 115, 34, 58, 123, 34, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 65, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 34, 44, 34, 105, 116, 101, 109, 115, 34, 58, 123, 34, 97, 115, 115, 101, 116, 34, 58, 34, 70, 97, 117, 99, 101, 116, 32, 73, 68, 32, 111, 102, 32, 116, 104, 101, 32, 102, 97, 117, 99, 101, 116, 32, 119, 104, 105, 99, 104, 32, 105, 115, 115, 117, 101, 100, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 32, 97, 115, 32, 119, 101, 108, 108, 32, 97, 115, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 32, 97, 109, 111, 117, 110, 116, 46, 34, 44, 34, 97, 109, 111, 117, 110, 116, 34, 58, 34, 65, 115, 115, 101, 116, 32, 97, 109, 111, 117, 110, 116, 32, 105, 115, 32, 103, 117, 97, 114, 97, 110, 116, 101, 101, 100, 32, 116, 111, 32, 98, 101, 32, 50, 94, 54, 51, 32, 45, 32, 49, 32, 111, 114, 32, 115, 109, 97, 108, 108, 101, 114, 46, 34, 125, 125, 44, 34, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 45, 97, 115, 115, 101, 116, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 65, 32, 99, 111, 109, 109, 105, 116, 109, 101, 110, 116, 32, 116, 111, 32, 97, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 46, 92, 110, 92, 110, 65, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 32, 99, 111, 110, 115, 105, 115, 116, 115, 32, 111, 102, 32, 52, 32, 102, 105, 101, 108, 100, 32, 101, 108, 101, 109, 101, 110, 116, 115, 32, 119, 104, 105, 99, 104, 32, 97, 114, 101, 32, 99, 111, 109, 112, 117, 116, 101, 100, 32, 98, 121, 32, 104, 97, 115, 104, 105, 110, 103, 32, 97, 115, 115, 101, 116, 32, 100, 97, 116, 97, 92, 110, 40, 119, 104, 105, 99, 104, 32, 99, 97, 110, 32, 98, 101, 32, 111, 102, 32, 97, 114, 98, 105, 116, 114, 97, 114, 121, 32, 108, 101, 110, 103, 116, 104, 41, 32, 116, 111, 32, 112, 114, 111, 100, 117, 99, 101, 58, 32, 91, 100, 48, 44, 32, 100, 49, 44, 32, 100, 50, 44, 32, 100, 51, 93, 46, 32, 32, 87, 101, 32, 116, 104, 101, 110, 32, 114, 101, 112, 108, 97, 99, 101, 32, 100, 49, 32, 119, 105, 116, 104, 32, 116, 104, 101, 92, 110, 102, 97, 117, 99, 101, 116, 95, 105, 100, 32, 116, 104, 97, 116, 32, 105, 115, 115, 117, 101, 100, 32, 116, 104, 101, 32, 97, 115, 115, 101, 116, 58, 32, 91, 100, 48, 44, 32, 102, 97, 117, 99, 101, 116, 95, 105, 100, 44, 32, 100, 50, 44, 32, 100, 51, 93, 46, 32, 87, 101, 32, 116, 104, 101, 110, 32, 115, 101, 116, 32, 116, 104, 101, 32, 109, 111, 115, 116, 32, 115, 105, 103, 110, 105, 102, 105, 99, 97, 110, 116, 32, 98, 105, 116, 92, 110, 111, 102, 32, 116, 104, 101, 32, 109, 111, 115, 116, 32, 115, 105, 103, 110, 105, 102, 105, 99, 97, 110, 116, 32, 101, 108, 101, 109, 101, 110, 116, 32, 116, 111, 32, 90, 69, 82, 79, 46, 34, 125, 44, 34, 97, 115, 115, 101, 116, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 65, 32, 102, 117, 110, 103, 105, 98, 108, 101, 32, 111, 114, 32, 97, 32, 110, 111, 110, 45, 102, 117, 110, 103, 105, 98, 108, 101, 32, 97, 115, 115, 101, 116, 46, 34, 125, 125, 125, 44, 34, 110, 111, 116, 101, 45, 115, 99, 114, 105, 112, 116, 34, 58, 123, 34, 100, 111, 99, 115, 34, 58, 34, 78, 111, 116, 101, 32, 115, 99, 114, 105, 112, 116, 32, 105, 110, 116, 101, 114, 102, 97, 99, 101, 32, 116, 104, 97, 116, 32, 105, 115, 32, 101, 120, 112, 101, 99, 116, 101, 100, 32, 116, 111, 32, 98, 101, 32, 105, 109, 112, 108, 101, 109, 101, 110, 116, 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 110, 111, 116, 101, 32, 115, 99, 114, 105, 112, 116, 46, 34, 125, 125, 125, 0, 70, 9, 112, 114, 111, 100, 117, 99, 101, 114, 115, 1, 12, 112, 114, 111, 99, 101, 115, 115, 101, 100, 45, 98, 121, 2, 13, 119, 105, 116, 45, 99, 111, 109, 112, 111, 110, 101, 110, 116, 6, 48, 46, 49, 56, 46, 50, 16, 119, 105, 116, 45, 98, 105, 110, 100, 103, 101, 110, 45, 114, 117, 115, 116, 6, 48, 46, 49, 54, 46, 48]; #[inline(never)] #[doc(hidden)] diff --git a/tests/rust-apps-wasm/sdk/sdk/src/lib.rs b/tests/rust-apps-wasm/sdk/sdk/src/lib.rs index cd520ed57..71c17d3b6 100644 --- a/tests/rust-apps-wasm/sdk/sdk/src/lib.rs +++ b/tests/rust-apps-wasm/sdk/sdk/src/lib.rs @@ -1,11 +1,16 @@ #![no_std] +// This allows us to abort if the panic handler is invoked, but +// it is gated behind a perma-unstable nightly feature +#![feature(core_intrinsics)] +// Disable the warning triggered by the use of the `core_intrinsics` feature +#![allow(internal_features)] #[global_allocator] static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT; #[panic_handler] fn my_panic(_info: &core::panic::PanicInfo) -> ! { - loop {} + core::intrinsics::abort() } mod bindings; @@ -13,7 +18,7 @@ mod bindings; use bindings::exports::miden::base::core_types; use bindings::exports::miden::base::core_types::{AccountId, CoreAsset, Felt}; use bindings::exports::miden::base::types; -use bindings::exports::miden::base::types::Asset; +use bindings::exports::miden::base::types::{Asset, FungibleAsset}; pub struct Component; @@ -26,10 +31,24 @@ impl core_types::Guest for Component { impl types::Guest for Component { fn from_core_asset(asset: CoreAsset) -> Asset { - todo!() + // TODO: implement + Asset::Fungible(FungibleAsset { + asset: AccountId { + inner: asset.inner.0, + }, + amount: 0, + }) } fn to_core_asset(asset: Asset) -> CoreAsset { - todo!() + // TODO: implement + CoreAsset { + inner: ( + Felt { inner: 0 }, + Felt { inner: 0 }, + Felt { inner: 0 }, + Felt { inner: 0 }, + ), + } } } diff --git a/tests/rust-apps-wasm/sdk/sdk/wit/miden.wit b/tests/rust-apps-wasm/sdk/sdk/wit/miden.wit index 81f659aa3..068c86265 100644 --- a/tests/rust-apps-wasm/sdk/sdk/wit/miden.wit +++ b/tests/rust-apps-wasm/sdk/sdk/wit/miden.wit @@ -7,9 +7,10 @@ interface core-types { /// The backing type is `f64` but the internal values are always integer in the range [0, M). /// Field modulus M = 2^64 - 2^32 + 1 record felt { - /// We use f64 as the backing type for the field element. It has the size that we need and + /// We plan to use f64 as the backing type for the field element. It has the size that we need and /// we don't plan to support floating point arithmetic in programs for Miden VM. - inner: f64 + /// For now its u64 + inner: u64 }