From 5bd3abc3a6a4ad8e27f620959158d17a3297d118 Mon Sep 17 00:00:00 2001 From: boxdot Date: Sun, 21 Aug 2022 12:25:38 +0200 Subject: [PATCH] Fix (clippy) warnings in Rust generate code Also fix (clippy) warnings in Rust tests Tested against rustc version 1.63.0. After this is merged and the new generator is released, additional flag `--all-targets` can be added to `cargo test` in CI. --- .../generator/templates/rust/archive.jinja2 | 12 +- .../generator/templates/rust/structure.jinja2 | 6 + .../generator/templates/rust/variadic.jinja2 | 4 +- .../rust_expectations/archives/comments.rs.1 | 14 +- .../rust_expectations/archives/empty.rs.1 | 6 +- .../archives/multivector.rs.1 | 56 +- .../archives/multivector.rs.2 | 14 +- .../archives/namespaces.rs.1 | 41 +- .../rust_expectations/archives/ranges.rs.1 | 13 +- .../rust_expectations/archives/raw_data.rs.1 | 10 +- .../archives/references.rs.1 | 47 +- .../rust_expectations/archives/struct.rs.1 | 15 +- .../archives/subarchive.rs.1 | 12 +- .../rust_expectations/archives/vector.rs.1 | 13 +- .../constants/invalid_value.rs.1 | 5 +- .../enums/default_width.rs.1 | 42 +- .../rust_expectations/enums/namespaces.rs.1 | 12 +- .../rust_expectations/enums/structs.rs.1 | 40 + .../rust_expectations/structs/comments.rs.1 | 12 + .../structs/default_width.rs.1 | 40 + .../rust_expectations/structs/integers.rs.1 | 40 + .../rust_expectations/structs/namespaces.rs.1 | 10 + .../rust_expectations/structs/unaligned.rs.1 | 48 + .../tests/generators/test_rust_generator.py | 2 +- flatdata-rs/lib/src/arrayview.rs | 29 +- flatdata-rs/lib/src/bytereader.rs | 2252 ++++++++--------- flatdata-rs/lib/src/bytewriter.rs | 2226 ++++++++-------- flatdata-rs/lib/src/error.rs | 4 +- flatdata-rs/lib/src/filestorage.rs | 2 +- flatdata-rs/lib/src/generator.rs | 6 +- flatdata-rs/lib/src/memstorage.rs | 2 +- flatdata-rs/lib/src/multiarrayview.rs | 14 +- flatdata-rs/lib/src/multivector.rs | 14 +- flatdata-rs/lib/src/rawdata.rs | 4 + flatdata-rs/lib/src/structs.rs | 6 +- flatdata-rs/lib/src/test/mod.rs | 1 + flatdata-rs/lib/src/test/test_generated.rs | 275 +- flatdata-rs/lib/src/vector.rs | 8 +- .../tests/coappearances/src/coappearances.rs | 2 +- flatdata-rs/tests/coappearances/src/lib.rs | 62 +- .../features/src/archives/multivector.rs | 6 +- .../tests/features/src/archives/ranges.rs | 2 +- .../tests/features/src/archives/subarchive.rs | 2 +- .../tests/features/src/archives/vector.rs | 2 +- .../tests/features/src/structs/unaligned.rs | 2 +- 45 files changed, 2867 insertions(+), 2568 deletions(-) diff --git a/flatdata-generator/flatdata/generator/templates/rust/archive.jinja2 b/flatdata-generator/flatdata/generator/templates/rust/archive.jinja2 index a3867cbb..465942da 100644 --- a/flatdata-generator/flatdata/generator/templates/rust/archive.jinja2 +++ b/flatdata-generator/flatdata/generator/templates/rust/archive.jinja2 @@ -109,15 +109,13 @@ impl ::std::fmt::Debug for {{archive.name}} { } impl {{archive.name}} { + #[allow(unused_imports, unused_variables)] pub fn open(storage: flatdata::StorageHandle) -> ::std::result::Result { - #[allow(unused_imports)] use flatdata::SliceExt; - #[allow(unused_variables)] use flatdata::ResourceStorageError as Error; // extend lifetime since Rust cannot know that we reference a cache here - #[allow(unused_variables)] let extend = |x : Result<&[u8], Error>| -> Result<&'static [u8], Error> {x.map(|x| unsafe{std::mem::transmute(x)})}; storage.read(&Self::signature_name("{{archive.name}}"), schema::{{ archive_ns }}::{{ archive.name | camel_to_snake_case | upper }})?; @@ -129,17 +127,17 @@ impl {{archive.name}} { {% if [r] | vector_resources %} {% set t = fully_qualified_name(archive, r.referenced_structures[0].node) %} let resource = extend(storage.read("{{r.name}}", schema::{{ archive_ns }}::resources::{{ r.name | upper }})); - check("{{ r.name }}", |r| r.len(), max_size, resource.and_then(|x| <&[{{t}}]>::from_bytes(x)))? + check("{{ r.name }}", |r| r.len(), max_size, resource.and_then(<&[{{t}}]>::from_bytes))? {% elif [r] | instance_resources %} {% set t = fully_qualified_name(archive, r.referenced_structures[0].node) %} let resource = extend(storage.read("{{r.name}}", schema::{{ archive_ns }}::resources::{{ r.name | upper }})); - check("{{ r.name }}", |_| 0, max_size, resource.and_then(|x| {{t}}::from_bytes_slice(x)))? + check("{{ r.name }}", |_| 0, max_size, resource.and_then({{t}}::from_bytes_slice))? {% elif [r] | rawdata_resources %} let resource = extend(storage.read("{{r.name}}", schema::{{ archive_ns }}::resources::{{ r.name | upper }})); - check("{{ r.name }}", |r| r.len(), max_size, resource.map(|x| flatdata::RawData::new(x)))? + check("{{ r.name }}", |r| r.len(), max_size, resource.map(flatdata::RawData::new))? {% elif [r] | multivector_resources %} {% set i = fully_qualified_name(archive, r.index_reference.node) %} - let index_schema = &format!("index({})", schema::{{ archive_ns }}::resources::{{ r.name | upper }}); + let index_schema = format!("index({})", schema::{{ archive_ns }}::resources::{{ r.name | upper }}); let index = extend(storage.read("{{r.name}}_index", &index_schema)); let data = extend(storage.read("{{r.name}}", schema::{{ archive_ns }}::resources::{{ r.name | upper }})); let result = match (index, data) { diff --git a/flatdata-generator/flatdata/generator/templates/rust/structure.jinja2 b/flatdata-generator/flatdata/generator/templates/rust/structure.jinja2 index bfdce592..8a05d52d 100644 --- a/flatdata-generator/flatdata/generator/templates/rust/structure.jinja2 +++ b/flatdata-generator/flatdata/generator/templates/rust/structure.jinja2 @@ -11,6 +11,8 @@ pub struct {{struct.name}} { } impl {{ struct.name }} { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; {{ struct.size_in_bytes }}]} @@ -45,6 +47,7 @@ impl {{ struct.name }} { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < {{ struct.size_in_bytes }} { @@ -57,6 +60,7 @@ impl {{ struct.name }} { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < {{ struct.size_in_bytes }} { @@ -94,6 +98,7 @@ impl {{ struct.name }} { /// [`{{ field.range | escape_rust_keywords }}`]: #method.{{ field.range | escape_rust_keywords }} {% endif %} #[inline] + #[allow(clippy::useless_transmute)] pub fn {{ field.name | escape_rust_keywords }}(&self) -> {% if field.invalid_value %}Option<{{ field | field_type }}>{% else %}{{ field | field_type }}{% endif %} { let value = flatdata_read_bytes!({{ field | primitive_type }}, self.data.as_ptr(), {{ field.offset }}, {{ field.type.width }}); {% if field.invalid_value %} @@ -109,6 +114,7 @@ impl {{ struct.name }} { {{ field.doc | rust_doc }} {% endif %} #[inline] + #[allow(clippy::identity_op)] pub fn {{ field.range | escape_rust_keywords }}(&self) -> std::ops::Range<{% if field.invalid_value %}Option<{{ field | field_type }}>{% else %}{{ field | field_type }}{% endif %}> { let start = flatdata_read_bytes!({{ field.type.name }}, self.data.as_ptr(), {{ field.offset }}, {{ field.type.width }}); let end = flatdata_read_bytes!({{ field.type.name }}, self.data.as_ptr(), {{ field.offset }} + {{ struct.size_in_bytes }} * 8, {{ field.type.width }}); diff --git a/flatdata-generator/flatdata/generator/templates/rust/variadic.jinja2 b/flatdata-generator/flatdata/generator/templates/rust/variadic.jinja2 index 8e864099..6a3fa3e8 100644 --- a/flatdata-generator/flatdata/generator/templates/rust/variadic.jinja2 +++ b/flatdata-generator/flatdata/generator/templates/rust/variadic.jinja2 @@ -52,7 +52,7 @@ impl<'a> {{name}}Builder<'a> { /// /// [`{{type.node.name}}`]: struct.{{type.node.name}}.html #[inline] - pub fn add_{{ type.node.name | camel_to_snake_case }}<'b>(&'b mut self) -> &'b mut {{inner_type}} { + pub fn add_{{ type.node.name | camel_to_snake_case }}(&mut self) -> &mut {{inner_type}} { let old_len = self.data.len(); let increment = 1 + <{{inner_type}} as flatdata::Struct>::SIZE_IN_BYTES; self.data.resize(old_len + increment, 0); @@ -101,7 +101,7 @@ impl<'a> flatdata::VariadicStruct<'a> for {{name}} { match index { {% for type in types %} {% set inner_type = fully_qualified_name(archive, type.node) %} - {{loop.index0}} => {{name}}Ref::{{type.node.name}}({{inner_type}}::from_bytes_slice(&data).expect("Corrupted data")), + {{loop.index0}} => {{name}}Ref::{{type.node.name}}({{inner_type}}::from_bytes_slice(data).expect("Corrupted data")), {% endfor %} _ => panic!("invalid type index {} for variadic type {{name}}Ref", index), } diff --git a/flatdata-generator/tests/generators/rust_expectations/archives/comments.rs.1 b/flatdata-generator/tests/generators/rust_expectations/archives/comments.rs.1 index 05ce18a3..4313cb74 100644 --- a/flatdata-generator/tests/generators/rust_expectations/archives/comments.rs.1 +++ b/flatdata-generator/tests/generators/rust_expectations/archives/comments.rs.1 @@ -27,15 +27,13 @@ impl ::std::fmt::Debug for Foo { } impl Foo { + #[allow(unused_imports, unused_variables)] pub fn open(storage: flatdata::StorageHandle) -> ::std::result::Result { - #[allow(unused_imports)] use flatdata::SliceExt; - #[allow(unused_variables)] use flatdata::ResourceStorageError as Error; // extend lifetime since Rust cannot know that we reference a cache here - #[allow(unused_variables)] let extend = |x : Result<&[u8], Error>| -> Result<&'static [u8], Error> {x.map(|x| unsafe{std::mem::transmute(x)})}; storage.read(&Self::signature_name("Foo"), schema::foo::FOO)?; @@ -44,10 +42,9 @@ impl Foo { use flatdata::check_resource as check; let max_size = None; let resource = extend(storage.read("bar", schema::foo::resources::BAR)); - check("bar", |r| r.len(), max_size, resource.map(|x| flatdata::RawData::new(x)))? + check("bar", |r| r.len(), max_size, resource.map(flatdata::RawData::new))? }; - Ok(Self { _storage: storage, bar, @@ -115,15 +112,13 @@ impl ::std::fmt::Debug for Bar { } impl Bar { + #[allow(unused_imports, unused_variables)] pub fn open(storage: flatdata::StorageHandle) -> ::std::result::Result { - #[allow(unused_imports)] use flatdata::SliceExt; - #[allow(unused_variables)] use flatdata::ResourceStorageError as Error; // extend lifetime since Rust cannot know that we reference a cache here - #[allow(unused_variables)] let extend = |x : Result<&[u8], Error>| -> Result<&'static [u8], Error> {x.map(|x| unsafe{std::mem::transmute(x)})}; storage.read(&Self::signature_name("Bar"), schema::bar::BAR)?; @@ -132,10 +127,9 @@ impl Bar { use flatdata::check_resource as check; let max_size = None; let resource = extend(storage.read("foo", schema::bar::resources::FOO)); - check("foo", |r| r.len(), max_size, resource.map(|x| flatdata::RawData::new(x)))? + check("foo", |r| r.len(), max_size, resource.map(flatdata::RawData::new))? }; - Ok(Self { _storage: storage, foo, diff --git a/flatdata-generator/tests/generators/rust_expectations/archives/empty.rs.1 b/flatdata-generator/tests/generators/rust_expectations/archives/empty.rs.1 index 4d287267..d9172290 100644 --- a/flatdata-generator/tests/generators/rust_expectations/archives/empty.rs.1 +++ b/flatdata-generator/tests/generators/rust_expectations/archives/empty.rs.1 @@ -18,15 +18,13 @@ impl ::std::fmt::Debug for A { } impl A { + #[allow(unused_imports, unused_variables)] pub fn open(storage: flatdata::StorageHandle) -> ::std::result::Result { - #[allow(unused_imports)] use flatdata::SliceExt; - #[allow(unused_variables)] use flatdata::ResourceStorageError as Error; // extend lifetime since Rust cannot know that we reference a cache here - #[allow(unused_variables)] let extend = |x : Result<&[u8], Error>| -> Result<&'static [u8], Error> {x.map(|x| unsafe{std::mem::transmute(x)})}; storage.read(&Self::signature_name("A"), schema::a::A)?; @@ -54,4 +52,4 @@ impl ABuilder { flatdata::create_archive("A", schema::a::A, &storage)?; Ok(Self { storage }) } -} \ No newline at end of file +} diff --git a/flatdata-generator/tests/generators/rust_expectations/archives/multivector.rs.1 b/flatdata-generator/tests/generators/rust_expectations/archives/multivector.rs.1 index e2786251..44f69d78 100644 --- a/flatdata-generator/tests/generators/rust_expectations/archives/multivector.rs.1 +++ b/flatdata-generator/tests/generators/rust_expectations/archives/multivector.rs.1 @@ -22,6 +22,8 @@ pub struct IndexType8 { } impl IndexType8 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 1]} @@ -44,12 +46,14 @@ impl IndexType8 { /// /// [`range`]: #method.range #[inline] + #[allow(clippy::useless_transmute)] pub fn value(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 8); unsafe { std::mem::transmute::(value) } } #[inline] + #[allow(clippy::identity_op)] pub fn range(&self) -> std::ops::Range { let start = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 8); let end = flatdata_read_bytes!(u64, self.data.as_ptr(), 0 + 1 * 8, 8); @@ -111,6 +115,8 @@ pub struct IndexType16 { } impl IndexType16 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 2]} @@ -133,12 +139,14 @@ impl IndexType16 { /// /// [`range`]: #method.range #[inline] + #[allow(clippy::useless_transmute)] pub fn value(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 16); unsafe { std::mem::transmute::(value) } } #[inline] + #[allow(clippy::identity_op)] pub fn range(&self) -> std::ops::Range { let start = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 16); let end = flatdata_read_bytes!(u64, self.data.as_ptr(), 0 + 2 * 8, 16); @@ -200,6 +208,8 @@ pub struct IndexType64 { } impl IndexType64 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 8]} @@ -222,12 +232,14 @@ impl IndexType64 { /// /// [`range`]: #method.range #[inline] + #[allow(clippy::useless_transmute)] pub fn value(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 64); unsafe { std::mem::transmute::(value) } } #[inline] + #[allow(clippy::identity_op)] pub fn range(&self) -> std::ops::Range { let start = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 64); let end = flatdata_read_bytes!(u64, self.data.as_ptr(), 0 + 8 * 8, 64); @@ -298,6 +310,8 @@ pub struct S { } impl S { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 8]} @@ -331,6 +345,7 @@ impl S { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 8 { @@ -343,6 +358,7 @@ impl S { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 8 { @@ -369,6 +385,7 @@ unsafe impl flatdata::NoOverlap for S {} impl S { #[inline] + #[allow(clippy::useless_transmute)] pub fn x(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 64); unsafe { std::mem::transmute::(value) } @@ -411,6 +428,8 @@ pub struct T { } impl T { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 8]} @@ -444,6 +463,7 @@ impl T { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 8 { @@ -456,6 +476,7 @@ impl T { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 8 { @@ -482,6 +503,7 @@ unsafe impl flatdata::NoOverlap for T {} impl T { #[inline] + #[allow(clippy::useless_transmute)] pub fn x(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 64); unsafe { std::mem::transmute::(value) } @@ -563,7 +585,7 @@ impl<'a> DataBuilder<'a> { /// /// [`S`]: struct.S.html #[inline] - pub fn add_s<'b>(&'b mut self) -> &'b mut super::n::S { + pub fn add_s(&mut self) -> &mut super::n::S { let old_len = self.data.len(); let increment = 1 + ::SIZE_IN_BYTES; self.data.resize(old_len + increment, 0); @@ -575,7 +597,7 @@ impl<'a> DataBuilder<'a> { /// /// [`T`]: struct.T.html #[inline] - pub fn add_t<'b>(&'b mut self) -> &'b mut super::n::T { + pub fn add_t(&mut self) -> &mut super::n::T { let old_len = self.data.len(); let increment = 1 + ::SIZE_IN_BYTES; self.data.resize(old_len + increment, 0); @@ -619,8 +641,8 @@ impl<'a> flatdata::VariadicStruct<'a> for Data { fn create(index: flatdata::TypeIndex, data: &'a [u8]) -> Self::Item { match index { - 0 => DataRef::S(super::n::S::from_bytes_slice(&data).expect("Corrupted data")), - 1 => DataRef::T(super::n::T::from_bytes_slice(&data).expect("Corrupted data")), + 0 => DataRef::S(super::n::S::from_bytes_slice(data).expect("Corrupted data")), + 1 => DataRef::T(super::n::T::from_bytes_slice(data).expect("Corrupted data")), _ => panic!("invalid type index {} for variadic type DataRef", index), } } @@ -677,7 +699,7 @@ impl<'a> OptionalDataBuilder<'a> { /// /// [`S`]: struct.S.html #[inline] - pub fn add_s<'b>(&'b mut self) -> &'b mut super::n::S { + pub fn add_s(&mut self) -> &mut super::n::S { let old_len = self.data.len(); let increment = 1 + ::SIZE_IN_BYTES; self.data.resize(old_len + increment, 0); @@ -689,7 +711,7 @@ impl<'a> OptionalDataBuilder<'a> { /// /// [`T`]: struct.T.html #[inline] - pub fn add_t<'b>(&'b mut self) -> &'b mut super::n::T { + pub fn add_t(&mut self) -> &mut super::n::T { let old_len = self.data.len(); let increment = 1 + ::SIZE_IN_BYTES; self.data.resize(old_len + increment, 0); @@ -733,8 +755,8 @@ impl<'a> flatdata::VariadicStruct<'a> for OptionalData { fn create(index: flatdata::TypeIndex, data: &'a [u8]) -> Self::Item { match index { - 0 => OptionalDataRef::S(super::n::S::from_bytes_slice(&data).expect("Corrupted data")), - 1 => OptionalDataRef::T(super::n::T::from_bytes_slice(&data).expect("Corrupted data")), + 0 => OptionalDataRef::S(super::n::S::from_bytes_slice(data).expect("Corrupted data")), + 1 => OptionalDataRef::T(super::n::T::from_bytes_slice(data).expect("Corrupted data")), _ => panic!("invalid type index {} for variadic type OptionalDataRef", index), } } @@ -791,7 +813,7 @@ impl<'a> DataU64IndexBuilder<'a> { /// /// [`S`]: struct.S.html #[inline] - pub fn add_s<'b>(&'b mut self) -> &'b mut super::n::S { + pub fn add_s(&mut self) -> &mut super::n::S { let old_len = self.data.len(); let increment = 1 + ::SIZE_IN_BYTES; self.data.resize(old_len + increment, 0); @@ -803,7 +825,7 @@ impl<'a> DataU64IndexBuilder<'a> { /// /// [`T`]: struct.T.html #[inline] - pub fn add_t<'b>(&'b mut self) -> &'b mut super::n::T { + pub fn add_t(&mut self) -> &mut super::n::T { let old_len = self.data.len(); let increment = 1 + ::SIZE_IN_BYTES; self.data.resize(old_len + increment, 0); @@ -847,8 +869,8 @@ impl<'a> flatdata::VariadicStruct<'a> for DataU64Index { fn create(index: flatdata::TypeIndex, data: &'a [u8]) -> Self::Item { match index { - 0 => DataU64IndexRef::S(super::n::S::from_bytes_slice(&data).expect("Corrupted data")), - 1 => DataU64IndexRef::T(super::n::T::from_bytes_slice(&data).expect("Corrupted data")), + 0 => DataU64IndexRef::S(super::n::S::from_bytes_slice(data).expect("Corrupted data")), + 1 => DataU64IndexRef::T(super::n::T::from_bytes_slice(data).expect("Corrupted data")), _ => panic!("invalid type index {} for variadic type DataU64IndexRef", index), } } @@ -903,15 +925,13 @@ impl ::std::fmt::Debug for A { } impl A { + #[allow(unused_imports, unused_variables)] pub fn open(storage: flatdata::StorageHandle) -> ::std::result::Result { - #[allow(unused_imports)] use flatdata::SliceExt; - #[allow(unused_variables)] use flatdata::ResourceStorageError as Error; // extend lifetime since Rust cannot know that we reference a cache here - #[allow(unused_variables)] let extend = |x : Result<&[u8], Error>| -> Result<&'static [u8], Error> {x.map(|x| unsafe{std::mem::transmute(x)})}; storage.read(&Self::signature_name("A"), schema::a::A)?; @@ -919,7 +939,7 @@ impl A { let data = { use flatdata::check_resource as check; let max_size = None; - let index_schema = &format!("index({})", schema::a::resources::DATA); + let index_schema = format!("index({})", schema::a::resources::DATA); let index = extend(storage.read("data_index", &index_schema)); let data = extend(storage.read("data", schema::a::resources::DATA)); let result = match (index, data) { @@ -941,7 +961,7 @@ impl A { let optional_data = { use flatdata::check_optional_resource as check; let max_size = None; - let index_schema = &format!("index({})", schema::a::resources::OPTIONAL_DATA); + let index_schema = format!("index({})", schema::a::resources::OPTIONAL_DATA); let index = extend(storage.read("optional_data_index", &index_schema)); let data = extend(storage.read("optional_data", schema::a::resources::OPTIONAL_DATA)); let result = match (index, data) { @@ -963,7 +983,7 @@ impl A { let data_u64_index = { use flatdata::check_resource as check; let max_size = None; - let index_schema = &format!("index({})", schema::a::resources::DATA_U64_INDEX); + let index_schema = format!("index({})", schema::a::resources::DATA_U64_INDEX); let index = extend(storage.read("data_u64_index_index", &index_schema)); let data = extend(storage.read("data_u64_index", schema::a::resources::DATA_U64_INDEX)); let result = match (index, data) { diff --git a/flatdata-generator/tests/generators/rust_expectations/archives/multivector.rs.2 b/flatdata-generator/tests/generators/rust_expectations/archives/multivector.rs.2 index 038ac3b6..064f424e 100644 --- a/flatdata-generator/tests/generators/rust_expectations/archives/multivector.rs.2 +++ b/flatdata-generator/tests/generators/rust_expectations/archives/multivector.rs.2 @@ -17,6 +17,8 @@ pub struct IndexType8 { } impl IndexType8 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 1]} @@ -39,12 +41,14 @@ impl IndexType8 { /// /// [`range`]: #method.range #[inline] + #[allow(clippy::useless_transmute)] pub fn value(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 8); unsafe { std::mem::transmute::(value) } } #[inline] + #[allow(clippy::identity_op)] pub fn range(&self) -> std::ops::Range { let start = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 8); let end = flatdata_read_bytes!(u64, self.data.as_ptr(), 0 + 1 * 8, 8); @@ -106,6 +110,8 @@ pub struct IndexType16 { } impl IndexType16 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 2]} @@ -128,12 +134,14 @@ impl IndexType16 { /// /// [`range`]: #method.range #[inline] + #[allow(clippy::useless_transmute)] pub fn value(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 16); unsafe { std::mem::transmute::(value) } } #[inline] + #[allow(clippy::identity_op)] pub fn range(&self) -> std::ops::Range { let start = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 16); let end = flatdata_read_bytes!(u64, self.data.as_ptr(), 0 + 2 * 8, 16); @@ -195,6 +203,8 @@ pub struct IndexType64 { } impl IndexType64 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 8]} @@ -217,12 +227,14 @@ impl IndexType64 { /// /// [`range`]: #method.range #[inline] + #[allow(clippy::useless_transmute)] pub fn value(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 64); unsafe { std::mem::transmute::(value) } } #[inline] + #[allow(clippy::identity_op)] pub fn range(&self) -> std::ops::Range { let start = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 64); let end = flatdata_read_bytes!(u64, self.data.as_ptr(), 0 + 8 * 8, 64); @@ -274,4 +286,4 @@ impl flatdata::IndexStruct for IndexType64 { fn set_index(&mut self, value: usize) { self.set_value(value as u64); } -} \ No newline at end of file +} diff --git a/flatdata-generator/tests/generators/rust_expectations/archives/namespaces.rs.1 b/flatdata-generator/tests/generators/rust_expectations/archives/namespaces.rs.1 index 15719c94..b48258f4 100644 --- a/flatdata-generator/tests/generators/rust_expectations/archives/namespaces.rs.1 +++ b/flatdata-generator/tests/generators/rust_expectations/archives/namespaces.rs.1 @@ -1,3 +1,4 @@ +// Do not edit: This code was generated by flatdata's generator. #[allow(missing_docs)] pub mod n { #[allow(unused_imports)] @@ -10,6 +11,8 @@ pub struct S { } impl S { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 8]} @@ -43,6 +46,7 @@ impl S { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 8 { @@ -55,6 +59,7 @@ impl S { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 8 { @@ -81,6 +86,7 @@ unsafe impl flatdata::NoOverlap for S {} impl S { #[inline] + #[allow(clippy::useless_transmute)] pub fn x(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 64); unsafe { std::mem::transmute::(value) } @@ -146,15 +152,13 @@ impl ::std::fmt::Debug for X { } impl X { + #[allow(unused_imports, unused_variables)] pub fn open(storage: flatdata::StorageHandle) -> ::std::result::Result { - #[allow(unused_imports)] use flatdata::SliceExt; - #[allow(unused_variables)] use flatdata::ResourceStorageError as Error; // extend lifetime since Rust cannot know that we reference a cache here - #[allow(unused_variables)] let extend = |x : Result<&[u8], Error>| -> Result<&'static [u8], Error> {x.map(|x| unsafe{std::mem::transmute(x)})}; storage.read(&Self::signature_name("X"), schema::x::X)?; @@ -163,7 +167,7 @@ impl X { use flatdata::check_resource as check; let max_size = None; let resource = extend(storage.read("payload", schema::x::resources::PAYLOAD)); - check("payload", |r| r.len(), max_size, resource.map(|x| flatdata::RawData::new(x)))? + check("payload", |r| r.len(), max_size, resource.map(flatdata::RawData::new))? }; Ok(Self { @@ -241,6 +245,8 @@ pub struct S { } impl S { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 8]} @@ -274,6 +280,7 @@ impl S { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 8 { @@ -286,6 +293,7 @@ impl S { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 8 { @@ -312,6 +320,7 @@ unsafe impl flatdata::NoOverlap for S {} impl S { #[inline] + #[allow(clippy::useless_transmute)] pub fn x(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 64); unsafe { std::mem::transmute::(value) } @@ -377,15 +386,13 @@ impl ::std::fmt::Debug for X { } impl X { + #[allow(unused_imports, unused_variables)] pub fn open(storage: flatdata::StorageHandle) -> ::std::result::Result { - #[allow(unused_imports)] use flatdata::SliceExt; - #[allow(unused_variables)] use flatdata::ResourceStorageError as Error; // extend lifetime since Rust cannot know that we reference a cache here - #[allow(unused_variables)] let extend = |x : Result<&[u8], Error>| -> Result<&'static [u8], Error> {x.map(|x| unsafe{std::mem::transmute(x)})}; storage.read(&Self::signature_name("X"), schema::x::X)?; @@ -394,7 +401,7 @@ impl X { use flatdata::check_resource as check; let max_size = None; let resource = extend(storage.read("payload", schema::x::resources::PAYLOAD)); - check("payload", |r| r.len(), max_size, resource.map(|x| flatdata::RawData::new(x)))? + check("payload", |r| r.len(), max_size, resource.map(flatdata::RawData::new))? }; Ok(Self { @@ -485,6 +492,8 @@ pub struct IndexType32 { } impl IndexType32 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 4]} @@ -507,12 +516,14 @@ impl IndexType32 { /// /// [`range`]: #method.range #[inline] + #[allow(clippy::useless_transmute)] pub fn value(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 32); unsafe { std::mem::transmute::(value) } } #[inline] + #[allow(clippy::identity_op)] pub fn range(&self) -> std::ops::Range { let start = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 32); let end = flatdata_read_bytes!(u64, self.data.as_ptr(), 0 + 4 * 8, 32); @@ -619,7 +630,7 @@ impl<'a> MultiBuilder<'a> { /// /// [`S`]: struct.S.html #[inline] - pub fn add_s<'b>(&'b mut self) -> &'b mut super::n::S { + pub fn add_s(&mut self) -> &mut super::n::S { let old_len = self.data.len(); let increment = 1 + ::SIZE_IN_BYTES; self.data.resize(old_len + increment, 0); @@ -661,7 +672,7 @@ impl<'a> flatdata::VariadicStruct<'a> for Multi { fn create(index: flatdata::TypeIndex, data: &'a [u8]) -> Self::Item { match index { - 0 => MultiRef::S(super::n::S::from_bytes_slice(&data).expect("Corrupted data")), + 0 => MultiRef::S(super::n::S::from_bytes_slice(data).expect("Corrupted data")), _ => panic!("invalid type index {} for variadic type MultiRef", index), } } @@ -724,15 +735,13 @@ impl ::std::fmt::Debug for A { } impl A { + #[allow(unused_imports, unused_variables)] pub fn open(storage: flatdata::StorageHandle) -> ::std::result::Result { - #[allow(unused_imports)] use flatdata::SliceExt; - #[allow(unused_variables)] use flatdata::ResourceStorageError as Error; // extend lifetime since Rust cannot know that we reference a cache here - #[allow(unused_variables)] let extend = |x : Result<&[u8], Error>| -> Result<&'static [u8], Error> {x.map(|x| unsafe{std::mem::transmute(x)})}; storage.read(&Self::signature_name("A"), schema::a::A)?; @@ -741,18 +750,18 @@ impl A { use flatdata::check_resource as check; let max_size = None; let resource = extend(storage.read("single", schema::a::resources::SINGLE)); - check("single", |_| 0, max_size, resource.and_then(|x| super::n::S::from_bytes_slice(x)))? + check("single", |_| 0, max_size, resource.and_then(super::n::S::from_bytes_slice))? }; let list = { use flatdata::check_resource as check; let max_size = None; let resource = extend(storage.read("list", schema::a::resources::LIST)); - check("list", |r| r.len(), max_size, resource.and_then(|x| <&[super::m::S]>::from_bytes(x)))? + check("list", |r| r.len(), max_size, resource.and_then(<&[super::m::S]>::from_bytes))? }; let multi = { use flatdata::check_resource as check; let max_size = None; - let index_schema = &format!("index({})", schema::a::resources::MULTI); + let index_schema = format!("index({})", schema::a::resources::MULTI); let index = extend(storage.read("multi_index", &index_schema)); let data = extend(storage.read("multi", schema::a::resources::MULTI)); let result = match (index, data) { diff --git a/flatdata-generator/tests/generators/rust_expectations/archives/ranges.rs.1 b/flatdata-generator/tests/generators/rust_expectations/archives/ranges.rs.1 index c40868e8..94cbce1a 100644 --- a/flatdata-generator/tests/generators/rust_expectations/archives/ranges.rs.1 +++ b/flatdata-generator/tests/generators/rust_expectations/archives/ranges.rs.1 @@ -4,6 +4,8 @@ pub struct S { } impl S { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 10]} @@ -23,6 +25,7 @@ impl flatdata::Overlap for S {} impl S { #[inline] + #[allow(clippy::useless_transmute)] pub fn x(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 64); unsafe { std::mem::transmute::(value) } @@ -32,12 +35,14 @@ impl S { /// /// [`y_range`]: #method.y_range #[inline] + #[allow(clippy::useless_transmute)] pub fn first_y(&self) -> u32 { let value = flatdata_read_bytes!(u32, self.data.as_ptr(), 64, 14); unsafe { std::mem::transmute::(value) } } #[inline] + #[allow(clippy::identity_op)] pub fn y_range(&self) -> std::ops::Range { let start = flatdata_read_bytes!(u32, self.data.as_ptr(), 64, 14); let end = flatdata_read_bytes!(u32, self.data.as_ptr(), 64 + 10 * 8, 14); @@ -115,15 +120,13 @@ impl ::std::fmt::Debug for A { } impl A { + #[allow(unused_imports, unused_variables)] pub fn open(storage: flatdata::StorageHandle) -> ::std::result::Result { - #[allow(unused_imports)] use flatdata::SliceExt; - #[allow(unused_variables)] use flatdata::ResourceStorageError as Error; // extend lifetime since Rust cannot know that we reference a cache here - #[allow(unused_variables)] let extend = |x : Result<&[u8], Error>| -> Result<&'static [u8], Error> {x.map(|x| unsafe{std::mem::transmute(x)})}; storage.read(&Self::signature_name("A"), schema::a::A)?; @@ -132,7 +135,7 @@ impl A { use flatdata::check_resource as check; let max_size = None; let resource = extend(storage.read("data", schema::a::resources::DATA)); - check("data", |r| r.len(), max_size, resource.and_then(|x| <&[super::n::S]>::from_bytes(x)))? + check("data", |r| r.len(), max_size, resource.and_then(<&[super::n::S]>::from_bytes))? }; Ok(Self { @@ -182,4 +185,4 @@ impl ABuilder { flatdata::create_archive("A", schema::a::A, &storage)?; Ok(Self { storage }) } -} \ No newline at end of file +} diff --git a/flatdata-generator/tests/generators/rust_expectations/archives/raw_data.rs.1 b/flatdata-generator/tests/generators/rust_expectations/archives/raw_data.rs.1 index c71afbdf..b0a31dbf 100644 --- a/flatdata-generator/tests/generators/rust_expectations/archives/raw_data.rs.1 +++ b/flatdata-generator/tests/generators/rust_expectations/archives/raw_data.rs.1 @@ -32,15 +32,13 @@ impl ::std::fmt::Debug for A { } impl A { + #[allow(unused_imports, unused_variables)] pub fn open(storage: flatdata::StorageHandle) -> ::std::result::Result { - #[allow(unused_imports)] use flatdata::SliceExt; - #[allow(unused_variables)] use flatdata::ResourceStorageError as Error; // extend lifetime since Rust cannot know that we reference a cache here - #[allow(unused_variables)] let extend = |x : Result<&[u8], Error>| -> Result<&'static [u8], Error> {x.map(|x| unsafe{std::mem::transmute(x)})}; storage.read(&Self::signature_name("A"), schema::a::A)?; @@ -49,13 +47,13 @@ impl A { use flatdata::check_resource as check; let max_size = None; let resource = extend(storage.read("data", schema::a::resources::DATA)); - check("data", |r| r.len(), max_size, resource.map(|x| flatdata::RawData::new(x)))? + check("data", |r| r.len(), max_size, resource.map(flatdata::RawData::new))? }; let optional_data = { use flatdata::check_optional_resource as check; let max_size = None; let resource = extend(storage.read("optional_data", schema::a::resources::OPTIONAL_DATA)); - check("optional_data", |r| r.len(), max_size, resource.map(|x| flatdata::RawData::new(x)))? + check("optional_data", |r| r.len(), max_size, resource.map(flatdata::RawData::new))? }; Ok(Self { @@ -100,4 +98,4 @@ impl ABuilder { flatdata::create_archive("A", schema::a::A, &storage)?; Ok(Self { storage }) } -} \ No newline at end of file +} diff --git a/flatdata-generator/tests/generators/rust_expectations/archives/references.rs.1 b/flatdata-generator/tests/generators/rust_expectations/archives/references.rs.1 index 55c1e11a..fd5f4f34 100644 --- a/flatdata-generator/tests/generators/rust_expectations/archives/references.rs.1 +++ b/flatdata-generator/tests/generators/rust_expectations/archives/references.rs.1 @@ -24,6 +24,8 @@ pub struct IndexType32 { } impl IndexType32 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 4]} @@ -46,12 +48,14 @@ impl IndexType32 { /// /// [`range`]: #method.range #[inline] + #[allow(clippy::useless_transmute)] pub fn value(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 32); unsafe { std::mem::transmute::(value) } } #[inline] + #[allow(clippy::identity_op)] pub fn range(&self) -> std::ops::Range { let start = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 32); let end = flatdata_read_bytes!(u64, self.data.as_ptr(), 0 + 4 * 8, 32); @@ -122,6 +126,8 @@ pub struct S { } impl S { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 4]} @@ -155,6 +161,7 @@ impl S { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 4 { @@ -167,6 +174,7 @@ impl S { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 4 { @@ -193,6 +201,7 @@ unsafe impl flatdata::NoOverlap for S {} impl S { #[inline] + #[allow(clippy::useless_transmute)] pub fn x(&self) -> u32 { let value = flatdata_read_bytes!(u32, self.data.as_ptr(), 0, 32); unsafe { std::mem::transmute::(value) } @@ -235,6 +244,8 @@ pub struct R { } impl R { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 2]} @@ -268,6 +279,7 @@ impl R { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 2 { @@ -280,6 +292,7 @@ impl R { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 2 { @@ -306,12 +319,14 @@ unsafe impl flatdata::NoOverlap for R {} impl R { #[inline] + #[allow(clippy::useless_transmute)] pub fn ref_(&self) -> u32 { let value = flatdata_read_bytes!(u32, self.data.as_ptr(), 0, 8); unsafe { std::mem::transmute::(value) } } #[inline] + #[allow(clippy::useless_transmute)] pub fn ref2(&self) -> u32 { let value = flatdata_read_bytes!(u32, self.data.as_ptr(), 8, 4); unsafe { std::mem::transmute::(value) } @@ -398,7 +413,7 @@ impl<'a> Multilist1Builder<'a> { /// /// [`S`]: struct.S.html #[inline] - pub fn add_s<'b>(&'b mut self) -> &'b mut super::n::S { + pub fn add_s(&mut self) -> &mut super::n::S { let old_len = self.data.len(); let increment = 1 + ::SIZE_IN_BYTES; self.data.resize(old_len + increment, 0); @@ -440,7 +455,7 @@ impl<'a> flatdata::VariadicStruct<'a> for Multilist1 { fn create(index: flatdata::TypeIndex, data: &'a [u8]) -> Self::Item { match index { - 0 => Multilist1Ref::S(super::n::S::from_bytes_slice(&data).expect("Corrupted data")), + 0 => Multilist1Ref::S(super::n::S::from_bytes_slice(data).expect("Corrupted data")), _ => panic!("invalid type index {} for variadic type Multilist1Ref", index), } } @@ -494,7 +509,7 @@ impl<'a> Multilist2Builder<'a> { /// /// [`S`]: struct.S.html #[inline] - pub fn add_s<'b>(&'b mut self) -> &'b mut super::n::S { + pub fn add_s(&mut self) -> &mut super::n::S { let old_len = self.data.len(); let increment = 1 + ::SIZE_IN_BYTES; self.data.resize(old_len + increment, 0); @@ -536,7 +551,7 @@ impl<'a> flatdata::VariadicStruct<'a> for Multilist2 { fn create(index: flatdata::TypeIndex, data: &'a [u8]) -> Self::Item { match index { - 0 => Multilist2Ref::S(super::n::S::from_bytes_slice(&data).expect("Corrupted data")), + 0 => Multilist2Ref::S(super::n::S::from_bytes_slice(data).expect("Corrupted data")), _ => panic!("invalid type index {} for variadic type Multilist2Ref", index), } } @@ -590,7 +605,7 @@ impl<'a> MultirefsBuilder<'a> { /// /// [`R`]: struct.R.html #[inline] - pub fn add_r<'b>(&'b mut self) -> &'b mut super::n::R { + pub fn add_r(&mut self) -> &mut super::n::R { let old_len = self.data.len(); let increment = 1 + ::SIZE_IN_BYTES; self.data.resize(old_len + increment, 0); @@ -632,7 +647,7 @@ impl<'a> flatdata::VariadicStruct<'a> for Multirefs { fn create(index: flatdata::TypeIndex, data: &'a [u8]) -> Self::Item { match index { - 0 => MultirefsRef::R(super::n::R::from_bytes_slice(&data).expect("Corrupted data")), + 0 => MultirefsRef::R(super::n::R::from_bytes_slice(data).expect("Corrupted data")), _ => panic!("invalid type index {} for variadic type MultirefsRef", index), } } @@ -722,15 +737,13 @@ impl ::std::fmt::Debug for A { } impl A { + #[allow(unused_imports, unused_variables)] pub fn open(storage: flatdata::StorageHandle) -> ::std::result::Result { - #[allow(unused_imports)] use flatdata::SliceExt; - #[allow(unused_variables)] use flatdata::ResourceStorageError as Error; // extend lifetime since Rust cannot know that we reference a cache here - #[allow(unused_variables)] let extend = |x : Result<&[u8], Error>| -> Result<&'static [u8], Error> {x.map(|x| unsafe{std::mem::transmute(x)})}; storage.read(&Self::signature_name("A"), schema::a::A)?; @@ -739,18 +752,18 @@ impl A { use flatdata::check_optional_resource as check; let max_size = Some(16); let resource = extend(storage.read("list1", schema::a::resources::LIST1)); - check("list1", |r| r.len(), max_size, resource.and_then(|x| <&[super::n::S]>::from_bytes(x)))? + check("list1", |r| r.len(), max_size, resource.and_then(<&[super::n::S]>::from_bytes))? }; let list2 = { use flatdata::check_resource as check; let max_size = Some(16); let resource = extend(storage.read("list2", schema::a::resources::LIST2)); - check("list2", |r| r.len(), max_size, resource.and_then(|x| <&[super::n::S]>::from_bytes(x)))? + check("list2", |r| r.len(), max_size, resource.and_then(<&[super::n::S]>::from_bytes))? }; let multilist1 = { use flatdata::check_optional_resource as check; let max_size = Some(16); - let index_schema = &format!("index({})", schema::a::resources::MULTILIST1); + let index_schema = format!("index({})", schema::a::resources::MULTILIST1); let index = extend(storage.read("multilist1_index", &index_schema)); let data = extend(storage.read("multilist1", schema::a::resources::MULTILIST1)); let result = match (index, data) { @@ -772,7 +785,7 @@ impl A { let multilist2 = { use flatdata::check_resource as check; let max_size = Some(16); - let index_schema = &format!("index({})", schema::a::resources::MULTILIST2); + let index_schema = format!("index({})", schema::a::resources::MULTILIST2); let index = extend(storage.read("multilist2_index", &index_schema)); let data = extend(storage.read("multilist2", schema::a::resources::MULTILIST2)); let result = match (index, data) { @@ -795,24 +808,24 @@ impl A { use flatdata::check_optional_resource as check; let max_size = Some(16); let resource = extend(storage.read("raw1", schema::a::resources::RAW1)); - check("raw1", |r| r.len(), max_size, resource.map(|x| flatdata::RawData::new(x)))? + check("raw1", |r| r.len(), max_size, resource.map(flatdata::RawData::new))? }; let raw2 = { use flatdata::check_resource as check; let max_size = Some(16); let resource = extend(storage.read("raw2", schema::a::resources::RAW2)); - check("raw2", |r| r.len(), max_size, resource.map(|x| flatdata::RawData::new(x)))? + check("raw2", |r| r.len(), max_size, resource.map(flatdata::RawData::new))? }; let refs = { use flatdata::check_resource as check; let max_size = None; let resource = extend(storage.read("refs", schema::a::resources::REFS)); - check("refs", |r| r.len(), max_size, resource.and_then(|x| <&[super::n::R]>::from_bytes(x)))? + check("refs", |r| r.len(), max_size, resource.and_then(<&[super::n::R]>::from_bytes))? }; let multirefs = { use flatdata::check_resource as check; let max_size = None; - let index_schema = &format!("index({})", schema::a::resources::MULTIREFS); + let index_schema = format!("index({})", schema::a::resources::MULTIREFS); let index = extend(storage.read("multirefs_index", &index_schema)); let data = extend(storage.read("multirefs", schema::a::resources::MULTIREFS)); let result = match (index, data) { diff --git a/flatdata-generator/tests/generators/rust_expectations/archives/struct.rs.1 b/flatdata-generator/tests/generators/rust_expectations/archives/struct.rs.1 index 2a785e63..369a2378 100644 --- a/flatdata-generator/tests/generators/rust_expectations/archives/struct.rs.1 +++ b/flatdata-generator/tests/generators/rust_expectations/archives/struct.rs.1 @@ -5,6 +5,8 @@ pub struct S { } impl S { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 8]} @@ -38,6 +40,7 @@ impl S { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 8 { @@ -50,6 +53,7 @@ impl S { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 8 { @@ -76,6 +80,7 @@ unsafe impl flatdata::NoOverlap for S {} impl S { #[inline] + #[allow(clippy::useless_transmute)] pub fn x(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 64); unsafe { std::mem::transmute::(value) } @@ -148,15 +153,13 @@ impl ::std::fmt::Debug for A { } impl A { + #[allow(unused_imports, unused_variables)] pub fn open(storage: flatdata::StorageHandle) -> ::std::result::Result { - #[allow(unused_imports)] use flatdata::SliceExt; - #[allow(unused_variables)] use flatdata::ResourceStorageError as Error; // extend lifetime since Rust cannot know that we reference a cache here - #[allow(unused_variables)] let extend = |x : Result<&[u8], Error>| -> Result<&'static [u8], Error> {x.map(|x| unsafe{std::mem::transmute(x)})}; storage.read(&Self::signature_name("A"), schema::a::A)?; @@ -165,13 +168,13 @@ impl A { use flatdata::check_resource as check; let max_size = None; let resource = extend(storage.read("data", schema::a::resources::DATA)); - check("data", |_| 0, max_size, resource.and_then(|x| super::n::S::from_bytes_slice(x)))? + check("data", |_| 0, max_size, resource.and_then(super::n::S::from_bytes_slice))? }; let optional_data = { use flatdata::check_optional_resource as check; let max_size = None; let resource = extend(storage.read("optional_data", schema::a::resources::OPTIONAL_DATA)); - check("optional_data", |_| 0, max_size, resource.and_then(|x| super::n::S::from_bytes_slice(x)))? + check("optional_data", |_| 0, max_size, resource.and_then(super::n::S::from_bytes_slice))? }; Ok(Self { @@ -220,4 +223,4 @@ impl ABuilder { flatdata::create_archive("A", schema::a::A, &storage)?; Ok(Self { storage }) } -} \ No newline at end of file +} diff --git a/flatdata-generator/tests/generators/rust_expectations/archives/subarchive.rs.1 b/flatdata-generator/tests/generators/rust_expectations/archives/subarchive.rs.1 index 187aec6f..6ccce287 100644 --- a/flatdata-generator/tests/generators/rust_expectations/archives/subarchive.rs.1 +++ b/flatdata-generator/tests/generators/rust_expectations/archives/subarchive.rs.1 @@ -25,15 +25,13 @@ impl ::std::fmt::Debug for X { } impl X { + #[allow(unused_imports, unused_variables)] pub fn open(storage: flatdata::StorageHandle) -> ::std::result::Result { - #[allow(unused_imports)] use flatdata::SliceExt; - #[allow(unused_variables)] use flatdata::ResourceStorageError as Error; // extend lifetime since Rust cannot know that we reference a cache here - #[allow(unused_variables)] let extend = |x : Result<&[u8], Error>| -> Result<&'static [u8], Error> {x.map(|x| unsafe{std::mem::transmute(x)})}; storage.read(&Self::signature_name("X"), schema::x::X)?; @@ -42,7 +40,7 @@ impl X { use flatdata::check_resource as check; let max_size = None; let resource = extend(storage.read("payload", schema::x::resources::PAYLOAD)); - check("payload", |r| r.len(), max_size, resource.map(|x| flatdata::RawData::new(x)))? + check("payload", |r| r.len(), max_size, resource.map(flatdata::RawData::new))? }; Ok(Self { @@ -119,15 +117,13 @@ impl ::std::fmt::Debug for A { } impl A { + #[allow(unused_imports, unused_variables)] pub fn open(storage: flatdata::StorageHandle) -> ::std::result::Result { - #[allow(unused_imports)] use flatdata::SliceExt; - #[allow(unused_variables)] use flatdata::ResourceStorageError as Error; // extend lifetime since Rust cannot know that we reference a cache here - #[allow(unused_variables)] let extend = |x : Result<&[u8], Error>| -> Result<&'static [u8], Error> {x.map(|x| unsafe{std::mem::transmute(x)})}; storage.read(&Self::signature_name("A"), schema::a::A)?; @@ -187,4 +183,4 @@ impl ABuilder { flatdata::create_archive("A", schema::a::A, &storage)?; Ok(Self { storage }) } -} \ No newline at end of file +} diff --git a/flatdata-generator/tests/generators/rust_expectations/archives/vector.rs.1 b/flatdata-generator/tests/generators/rust_expectations/archives/vector.rs.1 index dc0fb38b..ba127a3c 100644 --- a/flatdata-generator/tests/generators/rust_expectations/archives/vector.rs.1 +++ b/flatdata-generator/tests/generators/rust_expectations/archives/vector.rs.1 @@ -5,6 +5,8 @@ pub struct S { } impl S { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 8]} @@ -38,6 +40,7 @@ impl S { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 8 { @@ -50,6 +53,7 @@ impl S { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 8 { @@ -76,6 +80,7 @@ unsafe impl flatdata::NoOverlap for S {} impl S { #[inline] + #[allow(clippy::useless_transmute)] pub fn x(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 64); unsafe { std::mem::transmute::(value) } @@ -148,15 +153,13 @@ impl ::std::fmt::Debug for A { } impl A { + #[allow(unused_imports, unused_variables)] pub fn open(storage: flatdata::StorageHandle) -> ::std::result::Result { - #[allow(unused_imports)] use flatdata::SliceExt; - #[allow(unused_variables)] use flatdata::ResourceStorageError as Error; // extend lifetime since Rust cannot know that we reference a cache here - #[allow(unused_variables)] let extend = |x : Result<&[u8], Error>| -> Result<&'static [u8], Error> {x.map(|x| unsafe{std::mem::transmute(x)})}; storage.read(&Self::signature_name("A"), schema::a::A)?; @@ -165,13 +168,13 @@ impl A { use flatdata::check_resource as check; let max_size = None; let resource = extend(storage.read("data", schema::a::resources::DATA)); - check("data", |r| r.len(), max_size, resource.and_then(|x| <&[super::n::S]>::from_bytes(x)))? + check("data", |r| r.len(), max_size, resource.and_then(<&[super::n::S]>::from_bytes))? }; let optional_data = { use flatdata::check_optional_resource as check; let max_size = None; let resource = extend(storage.read("optional_data", schema::a::resources::OPTIONAL_DATA)); - check("optional_data", |r| r.len(), max_size, resource.and_then(|x| <&[super::n::S]>::from_bytes(x)))? + check("optional_data", |r| r.len(), max_size, resource.and_then(<&[super::n::S]>::from_bytes))? }; Ok(Self { diff --git a/flatdata-generator/tests/generators/rust_expectations/constants/invalid_value.rs.1 b/flatdata-generator/tests/generators/rust_expectations/constants/invalid_value.rs.1 index e21c3558..e5d6e52e 100644 --- a/flatdata-generator/tests/generators/rust_expectations/constants/invalid_value.rs.1 +++ b/flatdata-generator/tests/generators/rust_expectations/constants/invalid_value.rs.1 @@ -1,5 +1,6 @@ impl Bar { #[inline] + #[allow(clippy::useless_transmute)] pub fn invalid_zero(&self) -> Option { let value = flatdata_read_bytes!(i8, self.data.as_ptr(), 0, 8); let x = unsafe { std::mem::transmute::(value) }; @@ -7,6 +8,7 @@ impl Bar { } #[inline] + #[allow(clippy::useless_transmute)] pub fn invalid_min_int(&self) -> Option { let value = flatdata_read_bytes!(i8, self.data.as_ptr(), 8, 8); let x = unsafe { std::mem::transmute::(value) }; @@ -14,6 +16,7 @@ impl Bar { } #[inline] + #[allow(clippy::useless_transmute)] pub fn invalid_max_int(&self) -> Option { let value = flatdata_read_bytes!(i8, self.data.as_ptr(), 16, 8); let x = unsafe { std::mem::transmute::(value) }; @@ -65,4 +68,4 @@ let value = value.unwrap_or(super::n::INVALID_MAX_INT); flatdata_write_by self.set_invalid_min_int(other.invalid_min_int()); self.set_invalid_max_int(other.invalid_max_int()); } -} \ No newline at end of file +} diff --git a/flatdata-generator/tests/generators/rust_expectations/enums/default_width.rs.1 b/flatdata-generator/tests/generators/rust_expectations/enums/default_width.rs.1 index 4f367337..67aa450f 100644 --- a/flatdata-generator/tests/generators/rust_expectations/enums/default_width.rs.1 +++ b/flatdata-generator/tests/generators/rust_expectations/enums/default_width.rs.1 @@ -5,6 +5,8 @@ pub struct StructEnumI8 { } impl StructEnumI8 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 1]} @@ -38,6 +40,7 @@ impl StructEnumI8 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -50,6 +53,7 @@ impl StructEnumI8 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -76,6 +80,7 @@ unsafe impl flatdata::NoOverlap for StructEnumI8 {} impl StructEnumI8 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> super::n::EnumI8 { let value = flatdata_read_bytes!(i8, self.data.as_ptr(), 0, 1); unsafe { std::mem::transmute::(value) } @@ -118,6 +123,8 @@ pub struct StructEnumU8 { } impl StructEnumU8 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 1]} @@ -151,6 +158,7 @@ impl StructEnumU8 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -163,6 +171,7 @@ impl StructEnumU8 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -189,6 +198,7 @@ unsafe impl flatdata::NoOverlap for StructEnumU8 {} impl StructEnumU8 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> super::n::EnumU8 { let value = flatdata_read_bytes!(u8, self.data.as_ptr(), 0, 1); unsafe { std::mem::transmute::(value) } @@ -231,6 +241,8 @@ pub struct StructEnumI16 { } impl StructEnumI16 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 1]} @@ -264,6 +276,7 @@ impl StructEnumI16 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -276,6 +289,7 @@ impl StructEnumI16 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -302,6 +316,7 @@ unsafe impl flatdata::NoOverlap for StructEnumI16 {} impl StructEnumI16 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> super::n::EnumI16 { let value = flatdata_read_bytes!(i16, self.data.as_ptr(), 0, 1); unsafe { std::mem::transmute::(value) } @@ -344,6 +359,8 @@ pub struct StructEnumU16 { } impl StructEnumU16 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 1]} @@ -377,6 +394,7 @@ impl StructEnumU16 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -389,6 +407,7 @@ impl StructEnumU16 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -415,6 +434,7 @@ unsafe impl flatdata::NoOverlap for StructEnumU16 {} impl StructEnumU16 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> super::n::EnumU16 { let value = flatdata_read_bytes!(u16, self.data.as_ptr(), 0, 1); unsafe { std::mem::transmute::(value) } @@ -457,6 +477,8 @@ pub struct StructEnumI32 { } impl StructEnumI32 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 1]} @@ -490,6 +512,7 @@ impl StructEnumI32 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -502,6 +525,7 @@ impl StructEnumI32 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -528,6 +552,7 @@ unsafe impl flatdata::NoOverlap for StructEnumI32 {} impl StructEnumI32 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> super::n::EnumI32 { let value = flatdata_read_bytes!(i32, self.data.as_ptr(), 0, 1); unsafe { std::mem::transmute::(value) } @@ -570,6 +595,8 @@ pub struct StructEnumU32 { } impl StructEnumU32 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 1]} @@ -603,6 +630,7 @@ impl StructEnumU32 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -615,6 +643,7 @@ impl StructEnumU32 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -641,6 +670,7 @@ unsafe impl flatdata::NoOverlap for StructEnumU32 {} impl StructEnumU32 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> super::n::EnumU32 { let value = flatdata_read_bytes!(u32, self.data.as_ptr(), 0, 1); unsafe { std::mem::transmute::(value) } @@ -683,6 +713,8 @@ pub struct StructEnumI64 { } impl StructEnumI64 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 1]} @@ -716,6 +748,7 @@ impl StructEnumI64 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -728,6 +761,7 @@ impl StructEnumI64 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -754,6 +788,7 @@ unsafe impl flatdata::NoOverlap for StructEnumI64 {} impl StructEnumI64 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> super::n::EnumI64 { let value = flatdata_read_bytes!(i64, self.data.as_ptr(), 0, 1); unsafe { std::mem::transmute::(value) } @@ -796,6 +831,8 @@ pub struct StructEnumU64 { } impl StructEnumU64 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 1]} @@ -829,6 +866,7 @@ impl StructEnumU64 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -841,6 +879,7 @@ impl StructEnumU64 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -867,6 +906,7 @@ unsafe impl flatdata::NoOverlap for StructEnumU64 {} impl StructEnumU64 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> super::n::EnumU64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 1); unsafe { std::mem::transmute::(value) } @@ -989,4 +1029,4 @@ pub enum EnumU64 { impl flatdata::helper::Int for EnumU64 { const IS_SIGNED: bool = false; -} \ No newline at end of file +} diff --git a/flatdata-generator/tests/generators/rust_expectations/enums/namespaces.rs.1 b/flatdata-generator/tests/generators/rust_expectations/enums/namespaces.rs.1 index 93c6eab5..d6dac3c9 100644 --- a/flatdata-generator/tests/generators/rust_expectations/enums/namespaces.rs.1 +++ b/flatdata-generator/tests/generators/rust_expectations/enums/namespaces.rs.1 @@ -53,6 +53,8 @@ pub struct Foo { } impl Foo { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 1]} @@ -86,6 +88,7 @@ impl Foo { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -98,6 +101,7 @@ impl Foo { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -124,6 +128,7 @@ unsafe impl flatdata::NoOverlap for Foo {} impl Foo { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> super::a::Bar { let value = flatdata_read_bytes!(u8, self.data.as_ptr(), 0, 1); unsafe { std::mem::transmute::(value) } @@ -177,6 +182,8 @@ pub struct Foo { } impl Foo { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 1]} @@ -210,6 +217,7 @@ impl Foo { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -222,6 +230,7 @@ impl Foo { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -248,6 +257,7 @@ unsafe impl flatdata::NoOverlap for Foo {} impl Foo { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> super::b::Bar { let value = flatdata_read_bytes!(u8, self.data.as_ptr(), 0, 1); unsafe { std::mem::transmute::(value) } @@ -282,4 +292,4 @@ impl Foo { pub fn fill_from(&mut self, other: &Foo) { self.set_f(other.f()); } -} \ No newline at end of file +} diff --git a/flatdata-generator/tests/generators/rust_expectations/enums/structs.rs.1 b/flatdata-generator/tests/generators/rust_expectations/enums/structs.rs.1 index 27cfa735..67aa450f 100644 --- a/flatdata-generator/tests/generators/rust_expectations/enums/structs.rs.1 +++ b/flatdata-generator/tests/generators/rust_expectations/enums/structs.rs.1 @@ -5,6 +5,8 @@ pub struct StructEnumI8 { } impl StructEnumI8 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 1]} @@ -38,6 +40,7 @@ impl StructEnumI8 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -50,6 +53,7 @@ impl StructEnumI8 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -76,6 +80,7 @@ unsafe impl flatdata::NoOverlap for StructEnumI8 {} impl StructEnumI8 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> super::n::EnumI8 { let value = flatdata_read_bytes!(i8, self.data.as_ptr(), 0, 1); unsafe { std::mem::transmute::(value) } @@ -118,6 +123,8 @@ pub struct StructEnumU8 { } impl StructEnumU8 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 1]} @@ -151,6 +158,7 @@ impl StructEnumU8 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -163,6 +171,7 @@ impl StructEnumU8 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -189,6 +198,7 @@ unsafe impl flatdata::NoOverlap for StructEnumU8 {} impl StructEnumU8 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> super::n::EnumU8 { let value = flatdata_read_bytes!(u8, self.data.as_ptr(), 0, 1); unsafe { std::mem::transmute::(value) } @@ -231,6 +241,8 @@ pub struct StructEnumI16 { } impl StructEnumI16 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 1]} @@ -264,6 +276,7 @@ impl StructEnumI16 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -276,6 +289,7 @@ impl StructEnumI16 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -302,6 +316,7 @@ unsafe impl flatdata::NoOverlap for StructEnumI16 {} impl StructEnumI16 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> super::n::EnumI16 { let value = flatdata_read_bytes!(i16, self.data.as_ptr(), 0, 1); unsafe { std::mem::transmute::(value) } @@ -344,6 +359,8 @@ pub struct StructEnumU16 { } impl StructEnumU16 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 1]} @@ -377,6 +394,7 @@ impl StructEnumU16 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -389,6 +407,7 @@ impl StructEnumU16 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -415,6 +434,7 @@ unsafe impl flatdata::NoOverlap for StructEnumU16 {} impl StructEnumU16 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> super::n::EnumU16 { let value = flatdata_read_bytes!(u16, self.data.as_ptr(), 0, 1); unsafe { std::mem::transmute::(value) } @@ -457,6 +477,8 @@ pub struct StructEnumI32 { } impl StructEnumI32 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 1]} @@ -490,6 +512,7 @@ impl StructEnumI32 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -502,6 +525,7 @@ impl StructEnumI32 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -528,6 +552,7 @@ unsafe impl flatdata::NoOverlap for StructEnumI32 {} impl StructEnumI32 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> super::n::EnumI32 { let value = flatdata_read_bytes!(i32, self.data.as_ptr(), 0, 1); unsafe { std::mem::transmute::(value) } @@ -570,6 +595,8 @@ pub struct StructEnumU32 { } impl StructEnumU32 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 1]} @@ -603,6 +630,7 @@ impl StructEnumU32 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -615,6 +643,7 @@ impl StructEnumU32 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -641,6 +670,7 @@ unsafe impl flatdata::NoOverlap for StructEnumU32 {} impl StructEnumU32 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> super::n::EnumU32 { let value = flatdata_read_bytes!(u32, self.data.as_ptr(), 0, 1); unsafe { std::mem::transmute::(value) } @@ -683,6 +713,8 @@ pub struct StructEnumI64 { } impl StructEnumI64 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 1]} @@ -716,6 +748,7 @@ impl StructEnumI64 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -728,6 +761,7 @@ impl StructEnumI64 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -754,6 +788,7 @@ unsafe impl flatdata::NoOverlap for StructEnumI64 {} impl StructEnumI64 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> super::n::EnumI64 { let value = flatdata_read_bytes!(i64, self.data.as_ptr(), 0, 1); unsafe { std::mem::transmute::(value) } @@ -796,6 +831,8 @@ pub struct StructEnumU64 { } impl StructEnumU64 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 1]} @@ -829,6 +866,7 @@ impl StructEnumU64 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -841,6 +879,7 @@ impl StructEnumU64 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -867,6 +906,7 @@ unsafe impl flatdata::NoOverlap for StructEnumU64 {} impl StructEnumU64 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> super::n::EnumU64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 1); unsafe { std::mem::transmute::(value) } diff --git a/flatdata-generator/tests/generators/rust_expectations/structs/comments.rs.1 b/flatdata-generator/tests/generators/rust_expectations/structs/comments.rs.1 index 3c4e040d..e64bc7e1 100644 --- a/flatdata-generator/tests/generators/rust_expectations/structs/comments.rs.1 +++ b/flatdata-generator/tests/generators/rust_expectations/structs/comments.rs.1 @@ -6,6 +6,8 @@ pub struct Foo { } impl Foo { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 16]} @@ -39,6 +41,7 @@ impl Foo { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 16 { @@ -51,6 +54,7 @@ impl Foo { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 16 { @@ -78,6 +82,7 @@ unsafe impl flatdata::NoOverlap for Foo {} impl Foo { // This is a comment about Foo.a #[inline] + #[allow(clippy::useless_transmute)] pub fn a(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 64); unsafe { std::mem::transmute::(value) } @@ -85,6 +90,7 @@ impl Foo { // This is a comment about Foo.b #[inline] + #[allow(clippy::useless_transmute)] pub fn b(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 64, 64); unsafe { std::mem::transmute::(value) } @@ -138,6 +144,8 @@ pub struct Bar { } impl Bar { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 16]} @@ -171,6 +179,7 @@ impl Bar { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 16 { @@ -183,6 +192,7 @@ impl Bar { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 16 { @@ -210,6 +220,7 @@ unsafe impl flatdata::NoOverlap for Bar {} impl Bar { /// This is a comment about Bar.a #[inline] + #[allow(clippy::useless_transmute)] pub fn a(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 64); unsafe { std::mem::transmute::(value) } @@ -217,6 +228,7 @@ impl Bar { /// This is a comment about Bar.b #[inline] + #[allow(clippy::useless_transmute)] pub fn b(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 64, 64); unsafe { std::mem::transmute::(value) } diff --git a/flatdata-generator/tests/generators/rust_expectations/structs/default_width.rs.1 b/flatdata-generator/tests/generators/rust_expectations/structs/default_width.rs.1 index dee163c6..bc6a7f8f 100644 --- a/flatdata-generator/tests/generators/rust_expectations/structs/default_width.rs.1 +++ b/flatdata-generator/tests/generators/rust_expectations/structs/default_width.rs.1 @@ -5,6 +5,8 @@ pub struct U8 { } impl U8 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 1]} @@ -38,6 +40,7 @@ impl U8 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -50,6 +53,7 @@ impl U8 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -76,6 +80,7 @@ unsafe impl flatdata::NoOverlap for U8 {} impl U8 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> u8 { let value = flatdata_read_bytes!(u8, self.data.as_ptr(), 0, 8); unsafe { std::mem::transmute::(value) } @@ -118,6 +123,8 @@ pub struct I8 { } impl I8 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 1]} @@ -151,6 +158,7 @@ impl I8 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -163,6 +171,7 @@ impl I8 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -189,6 +198,7 @@ unsafe impl flatdata::NoOverlap for I8 {} impl I8 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> i8 { let value = flatdata_read_bytes!(i8, self.data.as_ptr(), 0, 8); unsafe { std::mem::transmute::(value) } @@ -231,6 +241,8 @@ pub struct U16 { } impl U16 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 2]} @@ -264,6 +276,7 @@ impl U16 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 2 { @@ -276,6 +289,7 @@ impl U16 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 2 { @@ -302,6 +316,7 @@ unsafe impl flatdata::NoOverlap for U16 {} impl U16 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> u16 { let value = flatdata_read_bytes!(u16, self.data.as_ptr(), 0, 16); unsafe { std::mem::transmute::(value) } @@ -344,6 +359,8 @@ pub struct I16 { } impl I16 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 2]} @@ -377,6 +394,7 @@ impl I16 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 2 { @@ -389,6 +407,7 @@ impl I16 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 2 { @@ -415,6 +434,7 @@ unsafe impl flatdata::NoOverlap for I16 {} impl I16 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> i16 { let value = flatdata_read_bytes!(i16, self.data.as_ptr(), 0, 16); unsafe { std::mem::transmute::(value) } @@ -457,6 +477,8 @@ pub struct U32 { } impl U32 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 4]} @@ -490,6 +512,7 @@ impl U32 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 4 { @@ -502,6 +525,7 @@ impl U32 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 4 { @@ -528,6 +552,7 @@ unsafe impl flatdata::NoOverlap for U32 {} impl U32 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> u32 { let value = flatdata_read_bytes!(u32, self.data.as_ptr(), 0, 32); unsafe { std::mem::transmute::(value) } @@ -570,6 +595,8 @@ pub struct I32 { } impl I32 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 4]} @@ -603,6 +630,7 @@ impl I32 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 4 { @@ -615,6 +643,7 @@ impl I32 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 4 { @@ -641,6 +670,7 @@ unsafe impl flatdata::NoOverlap for I32 {} impl I32 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> i32 { let value = flatdata_read_bytes!(i32, self.data.as_ptr(), 0, 32); unsafe { std::mem::transmute::(value) } @@ -683,6 +713,8 @@ pub struct U64 { } impl U64 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 8]} @@ -716,6 +748,7 @@ impl U64 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 8 { @@ -728,6 +761,7 @@ impl U64 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 8 { @@ -754,6 +788,7 @@ unsafe impl flatdata::NoOverlap for U64 {} impl U64 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 64); unsafe { std::mem::transmute::(value) } @@ -796,6 +831,8 @@ pub struct I64 { } impl I64 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 8]} @@ -829,6 +866,7 @@ impl I64 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 8 { @@ -841,6 +879,7 @@ impl I64 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 8 { @@ -867,6 +906,7 @@ unsafe impl flatdata::NoOverlap for I64 {} impl I64 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> i64 { let value = flatdata_read_bytes!(i64, self.data.as_ptr(), 0, 64); unsafe { std::mem::transmute::(value) } diff --git a/flatdata-generator/tests/generators/rust_expectations/structs/integers.rs.1 b/flatdata-generator/tests/generators/rust_expectations/structs/integers.rs.1 index dee163c6..bc6a7f8f 100644 --- a/flatdata-generator/tests/generators/rust_expectations/structs/integers.rs.1 +++ b/flatdata-generator/tests/generators/rust_expectations/structs/integers.rs.1 @@ -5,6 +5,8 @@ pub struct U8 { } impl U8 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 1]} @@ -38,6 +40,7 @@ impl U8 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -50,6 +53,7 @@ impl U8 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -76,6 +80,7 @@ unsafe impl flatdata::NoOverlap for U8 {} impl U8 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> u8 { let value = flatdata_read_bytes!(u8, self.data.as_ptr(), 0, 8); unsafe { std::mem::transmute::(value) } @@ -118,6 +123,8 @@ pub struct I8 { } impl I8 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 1]} @@ -151,6 +158,7 @@ impl I8 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -163,6 +171,7 @@ impl I8 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -189,6 +198,7 @@ unsafe impl flatdata::NoOverlap for I8 {} impl I8 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> i8 { let value = flatdata_read_bytes!(i8, self.data.as_ptr(), 0, 8); unsafe { std::mem::transmute::(value) } @@ -231,6 +241,8 @@ pub struct U16 { } impl U16 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 2]} @@ -264,6 +276,7 @@ impl U16 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 2 { @@ -276,6 +289,7 @@ impl U16 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 2 { @@ -302,6 +316,7 @@ unsafe impl flatdata::NoOverlap for U16 {} impl U16 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> u16 { let value = flatdata_read_bytes!(u16, self.data.as_ptr(), 0, 16); unsafe { std::mem::transmute::(value) } @@ -344,6 +359,8 @@ pub struct I16 { } impl I16 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 2]} @@ -377,6 +394,7 @@ impl I16 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 2 { @@ -389,6 +407,7 @@ impl I16 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 2 { @@ -415,6 +434,7 @@ unsafe impl flatdata::NoOverlap for I16 {} impl I16 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> i16 { let value = flatdata_read_bytes!(i16, self.data.as_ptr(), 0, 16); unsafe { std::mem::transmute::(value) } @@ -457,6 +477,8 @@ pub struct U32 { } impl U32 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 4]} @@ -490,6 +512,7 @@ impl U32 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 4 { @@ -502,6 +525,7 @@ impl U32 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 4 { @@ -528,6 +552,7 @@ unsafe impl flatdata::NoOverlap for U32 {} impl U32 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> u32 { let value = flatdata_read_bytes!(u32, self.data.as_ptr(), 0, 32); unsafe { std::mem::transmute::(value) } @@ -570,6 +595,8 @@ pub struct I32 { } impl I32 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 4]} @@ -603,6 +630,7 @@ impl I32 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 4 { @@ -615,6 +643,7 @@ impl I32 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 4 { @@ -641,6 +670,7 @@ unsafe impl flatdata::NoOverlap for I32 {} impl I32 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> i32 { let value = flatdata_read_bytes!(i32, self.data.as_ptr(), 0, 32); unsafe { std::mem::transmute::(value) } @@ -683,6 +713,8 @@ pub struct U64 { } impl U64 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 8]} @@ -716,6 +748,7 @@ impl U64 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 8 { @@ -728,6 +761,7 @@ impl U64 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 8 { @@ -754,6 +788,7 @@ unsafe impl flatdata::NoOverlap for U64 {} impl U64 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 64); unsafe { std::mem::transmute::(value) } @@ -796,6 +831,8 @@ pub struct I64 { } impl I64 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 8]} @@ -829,6 +866,7 @@ impl I64 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 8 { @@ -841,6 +879,7 @@ impl I64 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 8 { @@ -867,6 +906,7 @@ unsafe impl flatdata::NoOverlap for I64 {} impl I64 { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> i64 { let value = flatdata_read_bytes!(i64, self.data.as_ptr(), 0, 64); unsafe { std::mem::transmute::(value) } diff --git a/flatdata-generator/tests/generators/rust_expectations/structs/namespaces.rs.1 b/flatdata-generator/tests/generators/rust_expectations/structs/namespaces.rs.1 index fa951930..c8309a8b 100644 --- a/flatdata-generator/tests/generators/rust_expectations/structs/namespaces.rs.1 +++ b/flatdata-generator/tests/generators/rust_expectations/structs/namespaces.rs.1 @@ -5,6 +5,8 @@ pub struct Foo { } impl Foo { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 4]} @@ -38,6 +40,7 @@ impl Foo { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 4 { @@ -50,6 +53,7 @@ impl Foo { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 4 { @@ -76,6 +80,7 @@ unsafe impl flatdata::NoOverlap for Foo {} impl Foo { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> u32 { let value = flatdata_read_bytes!(u32, self.data.as_ptr(), 0, 32); unsafe { std::mem::transmute::(value) } @@ -129,6 +134,8 @@ pub struct Foo { } impl Foo { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 4]} @@ -162,6 +169,7 @@ impl Foo { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 4 { @@ -174,6 +182,7 @@ impl Foo { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 4 { @@ -200,6 +209,7 @@ unsafe impl flatdata::NoOverlap for Foo {} impl Foo { #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> u32 { let value = flatdata_read_bytes!(u32, self.data.as_ptr(), 0, 32); unsafe { std::mem::transmute::(value) } diff --git a/flatdata-generator/tests/generators/rust_expectations/structs/unaligned.rs.1 b/flatdata-generator/tests/generators/rust_expectations/structs/unaligned.rs.1 index c34dbb08..d7d16ffa 100644 --- a/flatdata-generator/tests/generators/rust_expectations/structs/unaligned.rs.1 +++ b/flatdata-generator/tests/generators/rust_expectations/structs/unaligned.rs.1 @@ -5,6 +5,8 @@ pub struct U8 { } impl U8 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 1]} @@ -38,6 +40,7 @@ impl U8 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -50,6 +53,7 @@ impl U8 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -76,12 +80,14 @@ unsafe impl flatdata::NoOverlap for U8 {} impl U8 { #[inline] + #[allow(clippy::useless_transmute)] pub fn padding(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 3); unsafe { std::mem::transmute::(value) } } #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> u8 { let value = flatdata_read_bytes!(u8, self.data.as_ptr(), 3, 5); unsafe { std::mem::transmute::(value) } @@ -132,6 +138,8 @@ pub struct I8 { } impl I8 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 1]} @@ -165,6 +173,7 @@ impl I8 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -177,6 +186,7 @@ impl I8 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 1 { @@ -203,12 +213,14 @@ unsafe impl flatdata::NoOverlap for I8 {} impl I8 { #[inline] + #[allow(clippy::useless_transmute)] pub fn padding(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 3); unsafe { std::mem::transmute::(value) } } #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> i8 { let value = flatdata_read_bytes!(i8, self.data.as_ptr(), 3, 5); unsafe { std::mem::transmute::(value) } @@ -259,6 +271,8 @@ pub struct U16 { } impl U16 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 2]} @@ -292,6 +306,7 @@ impl U16 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 2 { @@ -304,6 +319,7 @@ impl U16 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 2 { @@ -330,12 +346,14 @@ unsafe impl flatdata::NoOverlap for U16 {} impl U16 { #[inline] + #[allow(clippy::useless_transmute)] pub fn padding(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 3); unsafe { std::mem::transmute::(value) } } #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> u16 { let value = flatdata_read_bytes!(u16, self.data.as_ptr(), 3, 13); unsafe { std::mem::transmute::(value) } @@ -386,6 +404,8 @@ pub struct I16 { } impl I16 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 2]} @@ -419,6 +439,7 @@ impl I16 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 2 { @@ -431,6 +452,7 @@ impl I16 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 2 { @@ -457,12 +479,14 @@ unsafe impl flatdata::NoOverlap for I16 {} impl I16 { #[inline] + #[allow(clippy::useless_transmute)] pub fn padding(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 3); unsafe { std::mem::transmute::(value) } } #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> i16 { let value = flatdata_read_bytes!(i16, self.data.as_ptr(), 3, 13); unsafe { std::mem::transmute::(value) } @@ -513,6 +537,8 @@ pub struct U32 { } impl U32 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 4]} @@ -546,6 +572,7 @@ impl U32 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 4 { @@ -558,6 +585,7 @@ impl U32 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 4 { @@ -584,12 +612,14 @@ unsafe impl flatdata::NoOverlap for U32 {} impl U32 { #[inline] + #[allow(clippy::useless_transmute)] pub fn padding(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 3); unsafe { std::mem::transmute::(value) } } #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> u32 { let value = flatdata_read_bytes!(u32, self.data.as_ptr(), 3, 29); unsafe { std::mem::transmute::(value) } @@ -640,6 +670,8 @@ pub struct I32 { } impl I32 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 4]} @@ -673,6 +705,7 @@ impl I32 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 4 { @@ -685,6 +718,7 @@ impl I32 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 4 { @@ -711,12 +745,14 @@ unsafe impl flatdata::NoOverlap for I32 {} impl I32 { #[inline] + #[allow(clippy::useless_transmute)] pub fn padding(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 3); unsafe { std::mem::transmute::(value) } } #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> i32 { let value = flatdata_read_bytes!(i32, self.data.as_ptr(), 3, 29); unsafe { std::mem::transmute::(value) } @@ -767,6 +803,8 @@ pub struct U64 { } impl U64 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 8]} @@ -800,6 +838,7 @@ impl U64 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 8 { @@ -812,6 +851,7 @@ impl U64 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 8 { @@ -838,12 +878,14 @@ unsafe impl flatdata::NoOverlap for U64 {} impl U64 { #[inline] + #[allow(clippy::useless_transmute)] pub fn padding(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 3); unsafe { std::mem::transmute::(value) } } #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 3, 61); unsafe { std::mem::transmute::(value) } @@ -894,6 +936,8 @@ pub struct I64 { } impl I64 { + /// # Safety + /// /// Unsafe since the struct might not be self-contained pub unsafe fn new_unchecked( ) -> Self { Self{data : [0; 8]} @@ -927,6 +971,7 @@ impl I64 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice(data: &[u8]) -> Result<&Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 8 { @@ -939,6 +984,7 @@ impl I64 { } /// Create reference from byte array + #[allow(clippy::len_zero)] pub fn from_bytes_slice_mut(data: &mut [u8]) -> Result<&mut Self, flatdata::ResourceStorageError> { // We cannot rely on TryFrom here, since it does not yet support > 33 bytes if data.len() < 8 { @@ -965,12 +1011,14 @@ unsafe impl flatdata::NoOverlap for I64 {} impl I64 { #[inline] + #[allow(clippy::useless_transmute)] pub fn padding(&self) -> u64 { let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 3); unsafe { std::mem::transmute::(value) } } #[inline] + #[allow(clippy::useless_transmute)] pub fn f(&self) -> i64 { let value = flatdata_read_bytes!(i64, self.data.as_ptr(), 3, 61); unsafe { std::mem::transmute::(value) } diff --git a/flatdata-generator/tests/generators/test_rust_generator.py b/flatdata-generator/tests/generators/test_rust_generator.py index 08bee924..4f43d0c3 100644 --- a/flatdata-generator/tests/generators/test_rust_generator.py +++ b/flatdata-generator/tests/generators/test_rust_generator.py @@ -31,7 +31,7 @@ def generate_and_compare(test_case): test = test_file.read() expectations = list() - for file in glob.glob(test_case[1] + '*'): + for file in glob.glob(test_case[1] + '*'): with open(file, 'r') as expectation_file: expectations.append(expectation_file.read()) diff --git a/flatdata-rs/lib/src/arrayview.rs b/flatdata-rs/lib/src/arrayview.rs index 67f86caf..74720460 100644 --- a/flatdata-rs/lib/src/arrayview.rs +++ b/flatdata-rs/lib/src/arrayview.rs @@ -66,7 +66,7 @@ mod test { assert_eq!(vec.len(), 3); assert_eq!(vec[0].x(), 10..20); assert_eq!(vec[1].x(), 20..30); - assert_eq!(vec[2].x(), 30..0); + assert!(vec[2].x().is_empty()); assert_eq!(vec[0..1].len(), 1); assert_eq!(vec[0..1][0].x(), 10..20); @@ -90,7 +90,7 @@ mod test { let mut buffer = vec![255_u8; A::SIZE_IN_BYTES]; buffer.extend(vec![0_u8; A::SIZE_IN_BYTES * 10]); let data = &buffer[..]; - let view = <&[A]>::from_bytes(&data).unwrap(); + let view = <&[A]>::from_bytes(data).unwrap(); assert_eq!(11, view.len()); let first = &view[0]; assert_eq!(65535, first.x()); @@ -99,22 +99,6 @@ mod test { assert_eq!(0, x.x()); assert_eq!(0, x.y()); } - - let x = { - // test clone and lifetime of returned reference - let view_copy = view.clone(); - &view_copy[0] - }; - assert_eq!(65535, x.x()); - assert_eq!(65535, x.y()); - - let x = { - // test clone and lifetime of returned reference - let view_copy = view.clone(); - view_copy.iter().next().unwrap() - }; - assert_eq!(65535, x.x()); - assert_eq!(65535, x.y()); } fn create_values(size: usize) -> Vector { @@ -138,11 +122,11 @@ mod test { for _ in 0..size { iter.next().unwrap(); } - if let Some(_) = iter.next() { - assert!(false, "Iterator did not end properly"); + if iter.next().is_some() { + panic!("Iterator did not end properly"); } - if let Some(_) = iter.next() { - assert!(false, "Iterator did not fuse properly"); + if iter.next().is_some() { + panic!("Iterator did not fuse properly"); } } @@ -154,6 +138,7 @@ mod test { } #[test] + #[allow(clippy::iter_next_slice)] fn slice() { let v = create_values(10); let view = v.as_view(); diff --git a/flatdata-rs/lib/src/bytereader.rs b/flatdata-rs/lib/src/bytereader.rs index 99376c53..4b81da5a 100644 --- a/flatdata-rs/lib/src/bytereader.rs +++ b/flatdata-rs/lib/src/bytereader.rs @@ -88,1086 +88,1086 @@ mod tests { #[test] #[rustfmt::skip] fn byte_reader_unsigned_test() { - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 8, 8, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 8, 7, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 8, 6, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 8, 5, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 8, 4, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 8, 3, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 8, 2, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 8, 1, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 7, 8, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 7, 7, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 7, 6, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 7, 5, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 7, 4, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 7, 3, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 7, 2, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 7, 1, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 6, 8, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 6, 7, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 6, 6, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 6, 5, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 6, 4, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 6, 3, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 6, 2, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 6, 1, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 5, 8, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 5, 7, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 5, 6, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 5, 5, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 5, 4, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 5, 3, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 5, 2, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 5, 1, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 4, 8, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 4, 7, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 4, 6, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 4, 5, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 4, 4, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 4, 3, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 4, 2, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 4, 1, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 8, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 7, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 6, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 5, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 4, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 3, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 2, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 1, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 2, 8, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 2, 7, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 2, 6, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 2, 5, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 2, 4, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 2, 3, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 2, 2, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 2, 1, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1, 8, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1, 7, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1, 6, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1, 5, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1, 4, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1, 3, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1, 2, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1, 1, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 8, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 7, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 6, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 5, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 4, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 3, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 2, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 1, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 16, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 15, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 14, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 13, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 12, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 11, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 10, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 9, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 8, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 7, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 6, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 5, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 4, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 3, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 2, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 1, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 16, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 15, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 14, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 13, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 12, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 11, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 10, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 9, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 8, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 7, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 6, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 5, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 4, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 3, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 2, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 1, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 16, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 15, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 14, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 13, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 12, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 11, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 10, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 9, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 8, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 7, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 6, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 5, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 4, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 3, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 2, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 1, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 16, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 15, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 14, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 13, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 12, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 11, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 10, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 9, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 8, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 7, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 6, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 5, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 4, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 3, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 2, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 1, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 16, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 15, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 14, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 13, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 12, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 11, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 10, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 9, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 8, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 7, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 6, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 5, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 4, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 3, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 2, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 1, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 16, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 15, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 14, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 13, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 12, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 11, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 10, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 9, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 8, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 7, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 6, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 5, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 4, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 3, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 2, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 1, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 16, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 15, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 14, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 13, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 12, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 11, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 10, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 9, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 8, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 7, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 6, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 5, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 4, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 3, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 2, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 1, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 16, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 15, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 14, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 13, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 12, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 11, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 10, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 9, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 8, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 7, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 6, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 5, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 4, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 3, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 2, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 1, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 16, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 15, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 14, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 13, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 12, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 11, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 10, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 9, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 8, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 7, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 6, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 5, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 4, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 3, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 2, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 1, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 32, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 31, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 30, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 29, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 28, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 27, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 26, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 25, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 24, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 23, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 22, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 21, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 20, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 19, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 18, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 17, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 16, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 15, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 14, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 13, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 12, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 11, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 10, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 9, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 8, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 7, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 6, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 5, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 4, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 3, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 2, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 1, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 32, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 31, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 30, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 29, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 28, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 27, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 26, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 25, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 24, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 23, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 22, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 21, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 20, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 19, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 18, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 17, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 16, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 15, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 14, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 13, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 12, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 11, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 10, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 9, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 8, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 7, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 6, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 5, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 4, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 3, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 2, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 1, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 32, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 31, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 30, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 29, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 28, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 27, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 26, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 25, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 24, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 23, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 22, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 21, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 20, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 19, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 18, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 17, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 16, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 15, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 14, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 13, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 12, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 11, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 10, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 9, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 8, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 7, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 6, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 5, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 4, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 3, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 2, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 1, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 32, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 31, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 30, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 29, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 28, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 27, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 26, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 25, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 24, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 23, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 22, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 21, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 20, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 19, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 18, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 17, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 16, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 15, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 14, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 13, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 12, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 11, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 10, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 9, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 8, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 7, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 6, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 5, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 4, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 3, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 2, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 1, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 32, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 31, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 30, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 29, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 28, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 27, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 26, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 25, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 24, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 23, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 22, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 21, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 20, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 19, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 18, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 17, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 16, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 15, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 14, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 13, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 12, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 11, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 10, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 9, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 8, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 7, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 6, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 5, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 4, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 3, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 2, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 1, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 32, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 31, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 30, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 29, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 28, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 27, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 26, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 25, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 24, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 23, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 22, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 21, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 20, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 19, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 18, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 17, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 16, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 15, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 14, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 13, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 12, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 11, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 10, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 9, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 8, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 7, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 6, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 5, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 4, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 3, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 2, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 1, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 32, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 31, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 30, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 29, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 28, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 27, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 26, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 25, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 24, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 23, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 22, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 21, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 20, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 19, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 18, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 17, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 16, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 15, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 14, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 13, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 12, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 11, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 10, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 9, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 8, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 7, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 6, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 5, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 4, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 3, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 2, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 1, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 32, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 31, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 30, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 29, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 28, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 27, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 26, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 25, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 24, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 23, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 22, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 21, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 20, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 19, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 18, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 17, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 16, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 15, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 14, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 13, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 12, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 11, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 10, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 9, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 8, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 7, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 6, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 5, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 4, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 3, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 2, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 1, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 32, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 31, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 30, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 29, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 28, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 27, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 26, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 25, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 24, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 23, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 22, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 21, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 20, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 19, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 18, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 17, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 16, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 15, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 14, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 13, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 12, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 11, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 10, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 9, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 8, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 7, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 6, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 5, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 4, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 3, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 2, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 1, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 64, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 63, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 62, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 61, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 60, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 59, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 58, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 57, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 56, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 55, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 54, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 53, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 52, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 51, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 50, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 49, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 48, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 47, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 46, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 45, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 44, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 43, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 42, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 41, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 40, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 39, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 38, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 37, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 36, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 35, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 34, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 33, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 32, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 31, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 30, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 29, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 28, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 27, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 26, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 25, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 24, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 23, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 22, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 21, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 20, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 19, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 18, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 17, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 16, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 15, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 14, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 13, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 12, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 11, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 10, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 9, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 8, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 7, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 6, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 5, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 4, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 3, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 2, 1); - test_reader(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 1, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 64, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 63, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 62, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 61, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 60, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 59, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 58, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 57, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 56, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 55, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 54, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 53, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 52, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 51, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 50, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 49, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 48, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 47, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 46, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 45, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 44, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 43, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 42, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 41, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 40, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 39, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 38, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 37, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 36, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 35, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 34, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 33, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 32, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 31, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 30, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 29, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 28, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 27, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 26, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 25, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 24, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 23, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 22, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 21, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 20, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 19, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 18, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 17, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 16, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 15, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 14, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 13, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 12, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 11, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 10, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 9, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 8, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 7, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 6, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 5, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 4, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 3, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 2, 1); - test_reader(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 1, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 64, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 63, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 62, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 61, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 60, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 59, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 58, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 57, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 56, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 55, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 54, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 53, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 52, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 51, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 50, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 49, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 48, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 47, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 46, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 45, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 44, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 43, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 42, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 41, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 40, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 39, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 38, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 37, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 36, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 35, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 34, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 33, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 32, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 31, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 30, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 29, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 28, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 27, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 26, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 25, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 24, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 23, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 22, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 21, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 20, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 19, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 18, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 17, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 16, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 15, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 14, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 13, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 12, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 11, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 10, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 9, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 8, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 7, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 6, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 5, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 4, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 3, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 2, 1); - test_reader(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 1, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 64, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 63, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 62, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 61, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 60, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 59, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 58, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 57, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 56, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 55, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 54, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 53, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 52, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 51, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 50, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 49, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 48, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 47, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 46, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 45, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 44, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 43, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 42, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 41, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 40, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 39, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 38, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 37, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 36, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 35, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 34, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 33, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 32, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 31, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 30, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 29, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 28, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 27, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 26, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 25, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 24, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 23, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 22, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 21, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 20, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 19, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 18, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 17, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 16, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 15, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 14, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 13, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 12, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 11, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 10, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 9, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 8, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 7, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 6, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 5, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 4, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 3, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 2, 1); - test_reader(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 1, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 64, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 63, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 62, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 61, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 60, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 59, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 58, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 57, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 56, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 55, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 54, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 53, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 52, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 51, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 50, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 49, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 48, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 47, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 46, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 45, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 44, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 43, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 42, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 41, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 40, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 39, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 38, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 37, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 36, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 35, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 34, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 33, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 32, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 31, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 30, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 29, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 28, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 27, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 26, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 25, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 24, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 23, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 22, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 21, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 20, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 19, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 18, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 17, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 16, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 15, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 14, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 13, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 12, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 11, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 10, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 9, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 8, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 7, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 6, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 5, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 4, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 3, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 2, 1); - test_reader(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 1, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 64, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 63, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 62, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 61, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 60, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 59, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 58, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 57, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 56, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 55, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 54, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 53, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 52, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 51, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 50, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 49, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 48, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 47, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 46, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 45, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 44, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 43, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 42, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 41, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 40, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 39, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 38, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 37, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 36, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 35, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 34, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 33, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 32, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 31, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 30, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 29, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 28, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 27, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 26, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 25, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 24, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 23, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 22, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 21, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 20, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 19, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 18, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 17, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 16, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 15, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 14, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 13, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 12, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 11, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 10, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 9, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 8, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 7, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 6, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 5, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 4, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 3, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 2, 1); - test_reader(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 1, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 64, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 63, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 62, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 61, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 60, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 59, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 58, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 57, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 56, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 55, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 54, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 53, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 52, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 51, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 50, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 49, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 48, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 47, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 46, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 45, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 44, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 43, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 42, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 41, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 40, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 39, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 38, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 37, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 36, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 35, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 34, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 33, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 32, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 31, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 30, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 29, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 28, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 27, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 26, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 25, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 24, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 23, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 22, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 21, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 20, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 19, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 18, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 17, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 16, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 15, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 14, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 13, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 12, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 11, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 10, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 9, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 8, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 7, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 6, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 5, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 4, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 3, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 2, 1); - test_reader(&vec![0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 1, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 64, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 63, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 62, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 61, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 60, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 59, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 58, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 57, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 56, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 55, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 54, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 53, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 52, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 51, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 50, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 49, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 48, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 47, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 46, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 45, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 44, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 43, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 42, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 41, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 40, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 39, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 38, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 37, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 36, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 35, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 34, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 33, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 32, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 31, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 30, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 29, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 28, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 27, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 26, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 25, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 24, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 23, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 22, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 21, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 20, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 19, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 18, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 17, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 16, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 15, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 14, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 13, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 12, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 11, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 10, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 9, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 8, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 7, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 6, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 5, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 4, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 3, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 2, 1); - test_reader(&vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 1, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 64, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 63, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 62, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 61, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 60, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 59, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 58, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 57, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 56, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 55, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 54, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 53, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 52, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 51, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 50, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 49, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 48, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 47, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 46, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 45, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 44, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 43, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 42, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 41, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 40, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 39, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 38, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 37, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 36, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 35, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 34, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 33, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 32, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 31, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 30, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 29, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 28, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 27, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 26, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 25, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 24, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 23, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 22, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 21, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 20, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 19, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 18, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 17, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 16, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 15, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 14, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 13, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 12, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 11, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 10, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 9, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 8, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 7, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 6, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 5, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 4, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 3, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 2, 1); - test_reader(&vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 1, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 8, 8, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 8, 7, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 8, 6, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 8, 5, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 8, 4, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 8, 3, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 8, 2, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 8, 1, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 7, 8, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 7, 7, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 7, 6, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 7, 5, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 7, 4, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 7, 3, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 7, 2, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 7, 1, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 6, 8, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 6, 7, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 6, 6, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 6, 5, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 6, 4, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 6, 3, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 6, 2, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 6, 1, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 5, 8, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 5, 7, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 5, 6, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 5, 5, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 5, 4, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 5, 3, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 5, 2, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 5, 1, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 4, 8, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 4, 7, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 4, 6, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 4, 5, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 4, 4, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 4, 3, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 4, 2, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 4, 1, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 8, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 7, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 6, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 5, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 4, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 3, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 2, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 1, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 2, 8, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 2, 7, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 2, 6, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 2, 5, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 2, 4, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 2, 3, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 2, 2, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 2, 1, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1, 8, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1, 7, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1, 6, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1, 5, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1, 4, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1, 3, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1, 2, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 1, 1, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 8, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 7, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 6, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 5, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 4, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 3, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 2, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 1, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 16, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 15, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 14, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 13, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 12, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 11, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 10, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 9, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 8, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 7, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 6, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 5, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 4, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 3, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 2, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 1, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 16, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 15, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 14, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 13, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 12, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 11, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 10, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 9, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 8, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 7, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 6, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 5, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 4, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 3, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 2, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 1, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 16, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 15, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 14, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 13, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 12, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 11, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 10, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 9, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 8, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 7, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 6, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 5, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 4, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 3, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 2, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 1, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 16, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 15, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 14, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 13, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 12, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 11, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 10, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 9, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 8, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 7, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 6, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 5, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 4, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 3, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 2, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 1, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 16, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 15, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 14, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 13, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 12, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 11, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 10, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 9, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 8, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 7, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 6, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 5, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 4, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 3, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 2, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 1, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 16, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 15, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 14, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 13, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 12, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 11, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 10, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 9, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 8, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 7, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 6, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 5, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 4, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 3, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 2, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 1, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 16, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 15, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 14, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 13, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 12, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 11, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 10, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 9, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 8, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 7, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 6, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 5, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 4, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 3, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 2, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 1, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 16, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 15, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 14, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 13, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 12, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 11, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 10, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 9, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 8, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 7, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 6, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 5, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 4, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 3, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 2, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 1, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 16, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 15, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 14, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 13, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 12, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 11, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 10, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 9, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 8, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 7, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 6, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 5, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 4, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 3, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 2, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 0, 1, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 32, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 31, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 30, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 29, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 28, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 27, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 26, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 25, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 24, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 23, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 22, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 21, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 20, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 19, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 18, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 17, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 16, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 15, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 14, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 13, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 12, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 11, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 10, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 9, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 8, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 7, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 6, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 5, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 4, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 3, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 2, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 1, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 32, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 31, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 30, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 29, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 28, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 27, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 26, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 25, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 24, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 23, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 22, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 21, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 20, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 19, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 18, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 17, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 16, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 15, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 14, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 13, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 12, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 11, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 10, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 9, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 8, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 7, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 6, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 5, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 4, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 3, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 2, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 1, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 32, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 31, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 30, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 29, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 28, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 27, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 26, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 25, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 24, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 23, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 22, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 21, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 20, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 19, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 18, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 17, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 16, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 15, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 14, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 13, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 12, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 11, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 10, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 9, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 8, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 7, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 6, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 5, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 4, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 3, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 2, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 1, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 32, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 31, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 30, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 29, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 28, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 27, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 26, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 25, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 24, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 23, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 22, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 21, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 20, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 19, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 18, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 17, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 16, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 15, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 14, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 13, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 12, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 11, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 10, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 9, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 8, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 7, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 6, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 5, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 4, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 3, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 2, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 1, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 32, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 31, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 30, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 29, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 28, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 27, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 26, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 25, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 24, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 23, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 22, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 21, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 20, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 19, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 18, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 17, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 16, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 15, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 14, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 13, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 12, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 11, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 10, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 9, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 8, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 7, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 6, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 5, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 4, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 3, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 2, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 1, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 32, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 31, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 30, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 29, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 28, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 27, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 26, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 25, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 24, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 23, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 22, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 21, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 20, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 19, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 18, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 17, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 16, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 15, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 14, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 13, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 12, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 11, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 10, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 9, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 8, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 7, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 6, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 5, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 4, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 3, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 2, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 1, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 32, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 31, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 30, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 29, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 28, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 27, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 26, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 25, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 24, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 23, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 22, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 21, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 20, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 19, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 18, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 17, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 16, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 15, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 14, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 13, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 12, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 11, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 10, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 9, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 8, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 7, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 6, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 5, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 4, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 3, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 2, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 1, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 32, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 31, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 30, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 29, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 28, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 27, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 26, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 25, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 24, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 23, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 22, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 21, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 20, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 19, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 18, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 17, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 16, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 15, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 14, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 13, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 12, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 11, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 10, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 9, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 8, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 7, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 6, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 5, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 4, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 3, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 2, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 1, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 32, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 31, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 30, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 29, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 28, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 27, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 26, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 25, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 24, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 23, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 22, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 21, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 20, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 19, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 18, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 17, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 16, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 15, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 14, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 13, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 12, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 11, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 10, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 9, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 8, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 7, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 6, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 5, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 4, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 3, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 2, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 1, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 64, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 63, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 62, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 61, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 60, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 59, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 58, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 57, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 56, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 55, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 54, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 53, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 52, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 51, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 50, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 49, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 48, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 47, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 46, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 45, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 44, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 43, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 42, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 41, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 40, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 39, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 38, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 37, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 36, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 35, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 34, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 33, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 32, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 31, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 30, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 29, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 28, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 27, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 26, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 25, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 24, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 23, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 22, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 21, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 20, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 19, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 18, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 17, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 16, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 15, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 14, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 13, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 12, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 11, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 10, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 9, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 8, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 7, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 6, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 5, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 4, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 3, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 2, 1); + test_reader(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 8, 1, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 64, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 63, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 62, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 61, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 60, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 59, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 58, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 57, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 56, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 55, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 54, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 53, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 52, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 51, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 50, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 49, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 48, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 47, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 46, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 45, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 44, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 43, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 42, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 41, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 40, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 39, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 38, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 37, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 36, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 35, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 34, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 33, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 32, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 31, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 30, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 29, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 28, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 27, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 26, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 25, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 24, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 23, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 22, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 21, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 20, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 19, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 18, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 17, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 16, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 15, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 14, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 13, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 12, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 11, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 10, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 9, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 8, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 7, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 6, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 5, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 4, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 3, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 2, 1); + test_reader(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 7, 1, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 64, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 63, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 62, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 61, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 60, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 59, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 58, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 57, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 56, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 55, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 54, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 53, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 52, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 51, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 50, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 49, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 48, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 47, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 46, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 45, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 44, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 43, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 42, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 41, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 40, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 39, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 38, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 37, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 36, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 35, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 34, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 33, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 32, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 31, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 30, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 29, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 28, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 27, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 26, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 25, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 24, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 23, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 22, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 21, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 20, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 19, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 18, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 17, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 16, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 15, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 14, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 13, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 12, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 11, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 10, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 9, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 8, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 7, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 6, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 5, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 4, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 3, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 2, 1); + test_reader(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 6, 1, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 64, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 63, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 62, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 61, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 60, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 59, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 58, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 57, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 56, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 55, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 54, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 53, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 52, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 51, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 50, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 49, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 48, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 47, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 46, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 45, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 44, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 43, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 42, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 41, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 40, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 39, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 38, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 37, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 36, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 35, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 34, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 33, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 32, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 31, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 30, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 29, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 28, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 27, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 26, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 25, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 24, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 23, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 22, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 21, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 20, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 19, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 18, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 17, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 16, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 15, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 14, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 13, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 12, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 11, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 10, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 9, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 8, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 7, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 6, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 5, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 4, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 3, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 2, 1); + test_reader(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 5, 1, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 64, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 63, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 62, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 61, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 60, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 59, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 58, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 57, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 56, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 55, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 54, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 53, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 52, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 51, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 50, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 49, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 48, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 47, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 46, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 45, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 44, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 43, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 42, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 41, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 40, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 39, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 38, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 37, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 36, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 35, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 34, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 33, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 32, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 31, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 30, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 29, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 28, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 27, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 26, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 25, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 24, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 23, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 22, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 21, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 20, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 19, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 18, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 17, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 16, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 15, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 14, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 13, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 12, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 11, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 10, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 9, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 8, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 7, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 6, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 5, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 4, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 3, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 2, 1); + test_reader(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 4, 1, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 64, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 63, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 62, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 61, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 60, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 59, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 58, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 57, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 56, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 55, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 54, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 53, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 52, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 51, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 50, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 49, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 48, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 47, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 46, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 45, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 44, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 43, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 42, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 41, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 40, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 39, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 38, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 37, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 36, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 35, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 34, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 33, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 32, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 31, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 30, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 29, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 28, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 27, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 26, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 25, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 24, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 23, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 22, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 21, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 20, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 19, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 18, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 17, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 16, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 15, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 14, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 13, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 12, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 11, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 10, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 9, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 8, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 7, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 6, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 5, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 4, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 3, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 2, 1); + test_reader(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 3, 1, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 64, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 63, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 62, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 61, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 60, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 59, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 58, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 57, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 56, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 55, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 54, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 53, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 52, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 51, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 50, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 49, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 48, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 47, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 46, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 45, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 44, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 43, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 42, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 41, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 40, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 39, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 38, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 37, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 36, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 35, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 34, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 33, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 32, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 31, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 30, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 29, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 28, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 27, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 26, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 25, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 24, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 23, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 22, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 21, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 20, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 19, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 18, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 17, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 16, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 15, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 14, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 13, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 12, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 11, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 10, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 9, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 8, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 7, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 6, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 5, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 4, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 3, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 2, 1); + test_reader(&[0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 2, 1, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 64, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 63, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 62, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 61, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 60, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 59, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 58, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 57, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 56, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 55, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 54, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 53, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 52, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 51, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 50, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 49, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 48, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 47, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 46, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 45, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 44, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 43, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 42, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 41, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 40, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 39, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 38, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 37, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 36, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 35, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 34, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 33, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 32, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 31, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 30, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 29, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 28, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 27, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 26, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 25, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 24, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 23, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 22, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 21, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 20, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 19, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 18, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 17, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 16, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 15, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 14, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 13, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 12, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 11, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 10, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 9, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 8, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 7, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 6, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 5, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 4, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 3, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 2, 1); + test_reader(&[0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 1, 1, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 64, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 63, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 62, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 61, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 60, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 59, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 58, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 57, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 56, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 55, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 54, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 53, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 52, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 51, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 50, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 49, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 48, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 47, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 46, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 45, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 44, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 43, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 42, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 41, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 40, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 39, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 38, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 37, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 36, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 35, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 34, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 33, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 32, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 31, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 30, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 29, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 28, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 27, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 26, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 25, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 24, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 23, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 22, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 21, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 20, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 19, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 18, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 17, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 16, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 15, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 14, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 13, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 12, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 11, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 10, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 9, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 8, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 7, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 6, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 5, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 4, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 3, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 2, 1); + test_reader(&[0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 0, 1, 1); } fn test_reader_signed(data: &[u8], offset: usize, num_bits: usize, expected: i16) { @@ -1178,51 +1178,51 @@ mod tests { #[test] #[rustfmt::skip] fn test_read_bytes_signed() { - test_reader_signed(&vec![0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 1, 1); - test_reader_signed(&vec![0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 2, -1); - test_reader_signed(&vec![0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 3, -1); - test_reader_signed(&vec![0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 4, -1); - test_reader_signed(&vec![0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 5, -1); - test_reader_signed(&vec![0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 6, -1); - test_reader_signed(&vec![0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 7, -1); - test_reader_signed(&vec![0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 8, -1); - test_reader_signed(&vec![0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 9, -1); - test_reader_signed(&vec![0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 10, -1); - test_reader_signed(&vec![0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 11, -1); - test_reader_signed(&vec![0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 12, -1); - test_reader_signed(&vec![0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 13, -1); - test_reader_signed(&vec![0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 14, -1); - test_reader_signed(&vec![0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 15, -1); - test_reader_signed(&vec![0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -1); - test_reader_signed(&vec![0xf0, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -2); - test_reader_signed(&vec![0xe0, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -4); - test_reader_signed(&vec![0xc0, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -8); - test_reader_signed(&vec![0x80, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -16); - test_reader_signed(&vec![0x00, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -32); - test_reader_signed(&vec![0x00, 0xfe, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -64); - test_reader_signed(&vec![0x00, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -128); - test_reader_signed(&vec![0x00, 0xf8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -256); - test_reader_signed(&vec![0x00, 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -512); - test_reader_signed(&vec![0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -1024); - test_reader_signed(&vec![0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -2048); - test_reader_signed(&vec![0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -4096); - test_reader_signed(&vec![0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -8192); - test_reader_signed(&vec![0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -16384); - test_reader_signed(&vec![0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 1); - test_reader_signed(&vec![0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 2); - test_reader_signed(&vec![0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 4); - test_reader_signed(&vec![0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 8); - test_reader_signed(&vec![0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 16); - test_reader_signed(&vec![0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 32); - test_reader_signed(&vec![0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 64); - test_reader_signed(&vec![0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 128); - test_reader_signed(&vec![0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 256); - test_reader_signed(&vec![0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 512); - test_reader_signed(&vec![0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 1024); - test_reader_signed(&vec![0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 2048); - test_reader_signed(&vec![0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 4096); - test_reader_signed(&vec![0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 8192); - test_reader_signed(&vec![0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 16384); - test_reader_signed(&vec![0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 2, 0); + test_reader_signed(&[0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 1, 1); + test_reader_signed(&[0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 2, -1); + test_reader_signed(&[0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 3, -1); + test_reader_signed(&[0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 4, -1); + test_reader_signed(&[0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 5, -1); + test_reader_signed(&[0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 6, -1); + test_reader_signed(&[0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 7, -1); + test_reader_signed(&[0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 8, -1); + test_reader_signed(&[0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 9, -1); + test_reader_signed(&[0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 10, -1); + test_reader_signed(&[0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 11, -1); + test_reader_signed(&[0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 12, -1); + test_reader_signed(&[0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 13, -1); + test_reader_signed(&[0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 14, -1); + test_reader_signed(&[0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 15, -1); + test_reader_signed(&[0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -1); + test_reader_signed(&[0xf0, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -2); + test_reader_signed(&[0xe0, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -4); + test_reader_signed(&[0xc0, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -8); + test_reader_signed(&[0x80, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -16); + test_reader_signed(&[0x00, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -32); + test_reader_signed(&[0x00, 0xfe, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -64); + test_reader_signed(&[0x00, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -128); + test_reader_signed(&[0x00, 0xf8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -256); + test_reader_signed(&[0x00, 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -512); + test_reader_signed(&[0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -1024); + test_reader_signed(&[0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -2048); + test_reader_signed(&[0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -4096); + test_reader_signed(&[0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -8192); + test_reader_signed(&[0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, -16384); + test_reader_signed(&[0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 1); + test_reader_signed(&[0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 2); + test_reader_signed(&[0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 4); + test_reader_signed(&[0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 8); + test_reader_signed(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 16); + test_reader_signed(&[0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 32); + test_reader_signed(&[0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 64); + test_reader_signed(&[0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 128); + test_reader_signed(&[0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 256); + test_reader_signed(&[0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 512); + test_reader_signed(&[0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 1024); + test_reader_signed(&[0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 2048); + test_reader_signed(&[0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 4096); + test_reader_signed(&[0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 8192); + test_reader_signed(&[0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 16, 16384); + test_reader_signed(&[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 3, 2, 0); } } diff --git a/flatdata-rs/lib/src/bytewriter.rs b/flatdata-rs/lib/src/bytewriter.rs index 2275e14d..83e2cc50 100644 --- a/flatdata-rs/lib/src/bytewriter.rs +++ b/flatdata-rs/lib/src/bytewriter.rs @@ -95,1087 +95,1087 @@ mod test { #[test] #[rustfmt::skip] fn byte_writer_unsigned_test() { - test_writer(1, 8, 8, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 7, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 6, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 5, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 4, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 3, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 2, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 1, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 8, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 7, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 6, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 5, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 4, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 3, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 2, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 1, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 8, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 7, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 6, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 5, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 4, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 3, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 2, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 1, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 8, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 7, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 6, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 5, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 4, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 3, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 2, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 1, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 8, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 7, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 6, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 5, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 4, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 3, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 2, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 1, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 8, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 7, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 6, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 5, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 4, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 3, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 2, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 1, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 8, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 7, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 6, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 5, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 4, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 3, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 2, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 1, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 8, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 7, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 6, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 5, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 4, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 3, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 2, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 1, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 8, &vec![1, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 7, &vec![1, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 6, &vec![1, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 5, &vec![1, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 4, &vec![1, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 3, &vec![1, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 2, &vec![1, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 1, &vec![1, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 16, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 15, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 14, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 13, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 12, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 11, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 10, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 9, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 8, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 7, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 6, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 5, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 4, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 3, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 2, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 1, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 16, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 15, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 14, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 13, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 12, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 11, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 10, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 9, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 8, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 7, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 6, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 5, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 4, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 3, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 2, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 1, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 16, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 15, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 14, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 13, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 12, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 11, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 10, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 9, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 8, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 7, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 6, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 5, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 4, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 3, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 2, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 1, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 16, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 15, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 14, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 13, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 12, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 11, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 10, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 9, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 8, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 7, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 6, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 5, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 4, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 3, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 2, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 1, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 16, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 15, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 14, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 13, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 12, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 11, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 10, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 9, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 8, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 7, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 6, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 5, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 4, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 3, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 2, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 1, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 16, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 15, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 14, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 13, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 12, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 11, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 10, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 9, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 8, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 7, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 6, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 5, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 4, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 3, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 2, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 1, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 16, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 15, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 14, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 13, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 12, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 11, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 10, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 9, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 8, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 7, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 6, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 5, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 4, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 3, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 2, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 1, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 16, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 15, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 14, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 13, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 12, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 11, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 10, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 9, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 8, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 7, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 6, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 5, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 4, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 3, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 2, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 1, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 16, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 15, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 14, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 13, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 12, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 11, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 10, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 9, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 8, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 7, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 6, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 5, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 4, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 3, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 2, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 1, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 32, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 31, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 30, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 29, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 28, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 27, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 26, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 25, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 24, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 23, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 22, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 21, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 20, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 19, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 18, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 17, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 16, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 15, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 14, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 13, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 12, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 11, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 10, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 9, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 8, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 7, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 6, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 5, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 4, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 3, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 2, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 1, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 32, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 31, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 30, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 29, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 28, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 27, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 26, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 25, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 24, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 23, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 22, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 21, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 20, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 19, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 18, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 17, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 16, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 15, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 14, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 13, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 12, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 11, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 10, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 9, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 8, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 7, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 6, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 5, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 4, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 3, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 2, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 1, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 32, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 31, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 30, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 29, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 28, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 27, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 26, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 25, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 24, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 23, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 22, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 21, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 20, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 19, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 18, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 17, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 16, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 15, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 14, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 13, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 12, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 11, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 10, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 9, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 8, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 7, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 6, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 5, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 4, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 3, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 2, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 1, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 32, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 31, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 30, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 29, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 28, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 27, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 26, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 25, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 24, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 23, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 22, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 21, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 20, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 19, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 18, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 17, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 16, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 15, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 14, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 13, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 12, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 11, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 10, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 9, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 8, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 7, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 6, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 5, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 4, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 3, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 2, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 1, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 32, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 31, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 30, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 29, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 28, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 27, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 26, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 25, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 24, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 23, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 22, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 21, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 20, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 19, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 18, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 17, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 16, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 15, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 14, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 13, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 12, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 11, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 10, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 9, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 8, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 7, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 6, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 5, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 4, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 3, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 2, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 1, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 32, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 31, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 30, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 29, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 28, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 27, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 26, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 25, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 24, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 23, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 22, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 21, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 20, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 19, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 18, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 17, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 16, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 15, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 14, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 13, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 12, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 11, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 10, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 9, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 8, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 7, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 6, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 5, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 4, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 3, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 2, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 1, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 32, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 31, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 30, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 29, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 28, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 27, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 26, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 25, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 24, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 23, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 22, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 21, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 20, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 19, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 18, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 17, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 16, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 15, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 14, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 13, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 12, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 11, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 10, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 9, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 8, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 7, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 6, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 5, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 4, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 3, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 2, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 1, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 32, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 31, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 30, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 29, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 28, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 27, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 26, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 25, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 24, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 23, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 22, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 21, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 20, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 19, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 18, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 17, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 16, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 15, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 14, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 13, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 12, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 11, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 10, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 9, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 8, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 7, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 6, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 5, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 4, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 3, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 2, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 1, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 32, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 31, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 30, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 29, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 28, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 27, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 26, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 25, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 24, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 23, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 22, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 21, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 20, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 19, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 18, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 17, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 16, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 15, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 14, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 13, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 12, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 11, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 10, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 9, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 8, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 7, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 6, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 5, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 4, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 3, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 2, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 1, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 64, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 63, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 62, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 61, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 60, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 59, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 58, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 57, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 56, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 55, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 54, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 53, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 52, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 51, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 50, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 49, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 48, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 47, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 46, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 45, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 44, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 43, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 42, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 41, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 40, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 39, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 38, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 37, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 36, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 35, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 34, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 33, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 32, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 31, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 30, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 29, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 28, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 27, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 26, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 25, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 24, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 23, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 22, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 21, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 20, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 19, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 18, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 17, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 16, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 15, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 14, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 13, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 12, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 11, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 10, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 9, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 8, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 7, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 6, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 5, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 4, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 3, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 2, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 8, 1, &vec![0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 64, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 63, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 62, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 61, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 60, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 59, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 58, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 57, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 56, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 55, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 54, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 53, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 52, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 51, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 50, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 49, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 48, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 47, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 46, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 45, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 44, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 43, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 42, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 41, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 40, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 39, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 38, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 37, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 36, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 35, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 34, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 33, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 32, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 31, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 30, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 29, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 28, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 27, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 26, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 25, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 24, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 23, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 22, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 21, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 20, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 19, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 18, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 17, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 16, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 15, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 14, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 13, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 12, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 11, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 10, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 9, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 8, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 7, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 6, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 5, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 4, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 3, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 2, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 7, 1, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 64, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 63, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 62, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 61, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 60, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 59, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 58, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 57, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 56, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 55, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 54, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 53, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 52, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 51, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 50, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 49, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 48, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 47, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 46, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 45, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 44, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 43, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 42, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 41, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 40, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 39, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 38, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 37, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 36, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 35, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 34, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 33, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 32, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 31, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 30, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 29, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 28, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 27, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 26, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 25, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 24, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 23, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 22, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 21, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 20, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 19, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 18, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 17, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 16, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 15, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 14, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 13, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 12, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 11, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 10, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 9, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 8, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 7, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 6, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 5, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 4, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 3, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 2, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 6, 1, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 64, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 63, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 62, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 61, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 60, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 59, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 58, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 57, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 56, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 55, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 54, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 53, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 52, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 51, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 50, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 49, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 48, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 47, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 46, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 45, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 44, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 43, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 42, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 41, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 40, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 39, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 38, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 37, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 36, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 35, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 34, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 33, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 32, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 31, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 30, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 29, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 28, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 27, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 26, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 25, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 24, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 23, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 22, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 21, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 20, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 19, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 18, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 17, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 16, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 15, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 14, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 13, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 12, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 11, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 10, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 9, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 8, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 7, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 6, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 5, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 4, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 3, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 2, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 5, 1, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 64, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 63, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 62, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 61, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 60, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 59, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 58, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 57, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 56, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 55, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 54, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 53, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 52, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 51, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 50, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 49, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 48, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 47, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 46, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 45, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 44, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 43, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 42, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 41, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 40, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 39, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 38, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 37, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 36, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 35, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 34, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 33, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 32, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 31, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 30, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 29, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 28, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 27, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 26, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 25, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 24, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 23, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 22, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 21, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 20, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 19, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 18, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 17, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 16, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 15, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 14, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 13, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 12, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 11, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 10, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 9, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 8, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 7, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 6, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 5, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 4, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 3, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 2, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 4, 1, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 64, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 63, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 62, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 61, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 60, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 59, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 58, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 57, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 56, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 55, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 54, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 53, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 52, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 51, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 50, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 49, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 48, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 47, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 46, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 45, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 44, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 43, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 42, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 41, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 40, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 39, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 38, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 37, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 36, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 35, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 34, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 33, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 32, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 31, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 30, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 29, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 28, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 27, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 26, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 25, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 24, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 23, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 22, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 21, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 20, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 19, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 18, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 17, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 16, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 15, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 14, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 13, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 12, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 11, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 10, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 9, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 8, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 7, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 6, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 5, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 4, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 3, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 2, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 3, 1, &vec![8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 64, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 63, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 62, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 61, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 60, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 59, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 58, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 57, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 56, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 55, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 54, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 53, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 52, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 51, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 50, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 49, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 48, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 47, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 46, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 45, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 44, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 43, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 42, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 41, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 40, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 39, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 38, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 37, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 36, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 35, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 34, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 33, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 32, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 31, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 30, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 29, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 28, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 27, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 26, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 25, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 24, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 23, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 22, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 21, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 20, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 19, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 18, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 17, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 16, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 15, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 14, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 13, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 12, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 11, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 10, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 9, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 8, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 7, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 6, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 5, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 4, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 3, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 2, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 2, 1, &vec![4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 64, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 63, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 62, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 61, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 60, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 59, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 58, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 57, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 56, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 55, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 54, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 53, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 52, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 51, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 50, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 49, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 48, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 47, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 46, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 45, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 44, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 43, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 42, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 41, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 40, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 39, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 38, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 37, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 36, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 35, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 34, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 33, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 32, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 31, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 30, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 29, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 28, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 27, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 26, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 25, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 24, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 23, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 22, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 21, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 20, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 19, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 18, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 17, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 16, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 15, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 14, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 13, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 12, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 11, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 10, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 9, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 8, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 7, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 6, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 5, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 4, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 3, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 2, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 1, 1, &vec![2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 64, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 63, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 62, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 61, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 60, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 59, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 58, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 57, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 56, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 55, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 54, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 53, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 52, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 51, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 50, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 49, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 48, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 47, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 46, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 45, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 44, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 43, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 42, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 41, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 40, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 39, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 38, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 37, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 36, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 35, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 34, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 33, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 32, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 31, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 30, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 29, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 28, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 27, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 26, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 25, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 24, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 23, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 22, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 21, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 20, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 19, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 18, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 17, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 16, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 15, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 14, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 13, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 12, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 11, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 10, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 9, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 8, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 7, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 6, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 5, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 4, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 3, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 2, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(1, 0, 1, &vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_writer(u64::max_value(), 7, 64, &vec![128, 255, 255, 255, 255, 255, 255, 255, 127, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 8, &[0, 1, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 7, &[0, 1, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 6, &[0, 1, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 5, &[0, 1, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 4, &[0, 1, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 3, &[0, 1, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 2, &[0, 1, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 1, &[0, 1, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 8, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 7, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 6, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 5, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 4, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 3, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 2, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 1, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 8, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 7, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 6, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 5, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 4, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 3, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 2, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 1, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 8, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 7, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 6, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 5, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 4, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 3, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 2, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 1, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 8, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 7, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 6, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 5, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 4, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 3, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 2, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 1, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 8, &[8, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 7, &[8, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 6, &[8, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 5, &[8, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 4, &[8, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 3, &[8, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 2, &[8, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 1, &[8, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 8, &[4, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 7, &[4, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 6, &[4, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 5, &[4, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 4, &[4, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 3, &[4, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 2, &[4, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 1, &[4, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 8, &[2, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 7, &[2, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 6, &[2, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 5, &[2, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 4, &[2, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 3, &[2, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 2, &[2, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 1, &[2, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 8, &[1, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 7, &[1, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 6, &[1, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 5, &[1, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 4, &[1, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 3, &[1, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 2, &[1, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 1, &[1, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 16, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 15, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 14, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 13, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 12, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 11, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 10, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 9, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 8, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 7, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 6, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 5, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 4, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 3, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 2, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 1, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 16, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 15, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 14, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 13, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 12, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 11, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 10, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 9, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 8, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 7, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 6, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 5, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 4, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 3, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 2, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 1, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 16, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 15, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 14, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 13, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 12, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 11, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 10, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 9, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 8, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 7, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 6, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 5, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 4, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 3, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 2, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 1, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 16, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 15, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 14, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 13, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 12, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 11, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 10, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 9, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 8, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 7, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 6, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 5, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 4, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 3, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 2, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 1, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 16, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 15, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 14, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 13, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 12, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 11, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 10, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 9, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 8, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 7, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 6, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 5, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 4, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 3, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 2, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 1, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 16, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 15, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 14, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 13, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 12, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 11, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 10, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 9, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 8, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 7, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 6, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 5, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 4, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 3, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 2, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 1, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 16, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 15, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 14, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 13, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 12, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 11, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 10, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 9, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 8, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 7, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 6, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 5, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 4, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 3, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 2, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 1, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 16, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 15, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 14, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 13, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 12, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 11, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 10, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 9, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 8, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 7, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 6, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 5, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 4, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 3, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 2, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 1, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 16, &[1, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 15, &[1, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 14, &[1, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 13, &[1, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 12, &[1, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 11, &[1, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 10, &[1, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 9, &[1, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 8, &[1, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 7, &[1, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 6, &[1, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 5, &[1, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 4, &[1, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 3, &[1, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 2, &[1, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 1, &[1, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 32, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 31, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 30, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 29, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 28, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 27, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 26, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 25, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 24, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 23, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 22, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 21, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 20, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 19, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 18, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 17, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 16, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 15, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 14, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 13, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 12, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 11, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 10, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 9, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 8, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 7, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 6, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 5, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 4, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 3, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 2, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 1, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 32, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 31, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 30, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 29, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 28, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 27, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 26, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 25, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 24, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 23, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 22, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 21, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 20, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 19, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 18, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 17, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 16, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 15, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 14, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 13, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 12, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 11, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 10, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 9, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 8, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 7, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 6, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 5, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 4, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 3, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 2, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 1, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 32, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 31, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 30, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 29, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 28, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 27, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 26, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 25, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 24, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 23, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 22, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 21, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 20, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 19, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 18, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 17, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 16, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 15, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 14, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 13, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 12, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 11, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 10, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 9, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 8, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 7, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 6, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 5, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 4, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 3, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 2, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 1, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 32, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 31, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 30, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 29, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 28, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 27, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 26, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 25, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 24, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 23, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 22, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 21, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 20, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 19, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 18, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 17, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 16, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 15, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 14, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 13, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 12, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 11, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 10, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 9, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 8, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 7, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 6, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 5, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 4, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 3, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 2, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 1, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 32, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 31, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 30, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 29, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 28, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 27, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 26, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 25, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 24, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 23, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 22, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 21, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 20, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 19, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 18, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 17, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 16, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 15, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 14, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 13, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 12, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 11, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 10, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 9, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 8, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 7, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 6, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 5, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 4, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 3, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 2, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 1, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 32, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 31, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 30, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 29, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 28, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 27, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 26, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 25, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 24, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 23, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 22, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 21, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 20, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 19, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 18, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 17, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 16, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 15, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 14, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 13, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 12, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 11, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 10, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 9, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 8, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 7, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 6, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 5, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 4, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 3, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 2, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 1, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 32, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 31, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 30, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 29, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 28, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 27, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 26, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 25, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 24, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 23, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 22, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 21, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 20, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 19, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 18, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 17, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 16, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 15, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 14, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 13, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 12, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 11, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 10, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 9, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 8, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 7, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 6, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 5, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 4, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 3, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 2, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 1, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 32, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 31, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 30, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 29, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 28, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 27, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 26, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 25, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 24, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 23, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 22, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 21, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 20, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 19, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 18, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 17, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 16, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 15, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 14, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 13, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 12, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 11, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 10, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 9, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 8, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 7, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 6, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 5, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 4, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 3, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 2, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 1, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 32, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 31, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 30, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 29, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 28, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 27, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 26, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 25, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 24, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 23, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 22, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 21, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 20, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 19, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 18, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 17, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 16, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 15, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 14, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 13, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 12, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 11, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 10, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 9, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 8, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 7, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 6, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 5, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 4, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 3, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 2, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 1, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 64, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 63, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 62, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 61, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 60, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 59, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 58, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 57, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 56, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 55, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 54, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 53, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 52, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 51, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 50, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 49, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 48, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 47, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 46, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 45, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 44, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 43, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 42, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 41, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 40, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 39, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 38, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 37, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 36, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 35, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 34, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 33, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 32, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 31, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 30, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 29, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 28, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 27, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 26, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 25, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 24, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 23, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 22, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 21, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 20, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 19, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 18, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 17, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 16, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 15, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 14, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 13, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 12, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 11, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 10, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 9, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 8, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 7, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 6, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 5, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 4, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 3, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 2, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 8, 1, &[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 64, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 63, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 62, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 61, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 60, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 59, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 58, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 57, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 56, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 55, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 54, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 53, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 52, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 51, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 50, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 49, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 48, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 47, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 46, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 45, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 44, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 43, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 42, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 41, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 40, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 39, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 38, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 37, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 36, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 35, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 34, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 33, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 32, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 31, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 30, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 29, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 28, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 27, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 26, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 25, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 24, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 23, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 22, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 21, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 20, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 19, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 18, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 17, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 16, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 15, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 14, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 13, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 12, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 11, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 10, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 9, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 8, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 7, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 6, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 5, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 4, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 3, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 2, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 7, 1, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 64, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 63, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 62, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 61, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 60, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 59, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 58, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 57, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 56, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 55, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 54, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 53, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 52, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 51, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 50, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 49, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 48, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 47, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 46, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 45, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 44, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 43, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 42, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 41, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 40, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 39, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 38, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 37, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 36, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 35, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 34, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 33, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 32, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 31, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 30, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 29, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 28, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 27, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 26, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 25, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 24, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 23, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 22, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 21, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 20, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 19, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 18, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 17, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 16, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 15, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 14, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 13, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 12, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 11, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 10, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 9, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 8, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 7, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 6, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 5, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 4, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 3, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 2, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 6, 1, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 64, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 63, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 62, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 61, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 60, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 59, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 58, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 57, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 56, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 55, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 54, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 53, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 52, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 51, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 50, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 49, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 48, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 47, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 46, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 45, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 44, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 43, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 42, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 41, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 40, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 39, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 38, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 37, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 36, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 35, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 34, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 33, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 32, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 31, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 30, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 29, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 28, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 27, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 26, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 25, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 24, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 23, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 22, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 21, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 20, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 19, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 18, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 17, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 16, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 15, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 14, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 13, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 12, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 11, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 10, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 9, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 8, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 7, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 6, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 5, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 4, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 3, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 2, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 5, 1, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 64, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 63, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 62, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 61, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 60, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 59, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 58, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 57, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 56, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 55, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 54, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 53, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 52, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 51, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 50, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 49, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 48, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 47, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 46, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 45, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 44, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 43, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 42, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 41, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 40, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 39, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 38, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 37, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 36, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 35, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 34, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 33, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 32, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 31, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 30, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 29, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 28, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 27, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 26, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 25, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 24, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 23, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 22, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 21, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 20, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 19, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 18, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 17, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 16, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 15, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 14, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 13, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 12, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 11, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 10, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 9, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 8, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 7, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 6, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 5, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 4, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 3, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 2, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 4, 1, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 64, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 63, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 62, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 61, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 60, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 59, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 58, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 57, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 56, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 55, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 54, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 53, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 52, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 51, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 50, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 49, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 48, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 47, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 46, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 45, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 44, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 43, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 42, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 41, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 40, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 39, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 38, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 37, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 36, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 35, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 34, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 33, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 32, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 31, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 30, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 29, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 28, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 27, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 26, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 25, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 24, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 23, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 22, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 21, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 20, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 19, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 18, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 17, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 16, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 15, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 14, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 13, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 12, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 11, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 10, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 9, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 8, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 7, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 6, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 5, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 4, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 3, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 2, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 3, 1, &[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 64, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 63, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 62, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 61, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 60, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 59, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 58, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 57, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 56, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 55, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 54, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 53, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 52, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 51, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 50, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 49, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 48, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 47, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 46, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 45, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 44, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 43, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 42, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 41, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 40, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 39, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 38, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 37, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 36, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 35, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 34, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 33, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 32, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 31, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 30, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 29, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 28, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 27, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 26, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 25, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 24, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 23, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 22, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 21, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 20, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 19, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 18, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 17, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 16, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 15, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 14, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 13, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 12, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 11, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 10, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 9, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 8, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 7, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 6, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 5, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 4, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 3, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 2, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 2, 1, &[4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 64, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 63, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 62, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 61, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 60, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 59, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 58, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 57, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 56, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 55, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 54, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 53, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 52, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 51, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 50, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 49, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 48, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 47, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 46, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 45, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 44, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 43, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 42, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 41, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 40, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 39, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 38, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 37, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 36, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 35, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 34, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 33, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 32, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 31, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 30, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 29, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 28, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 27, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 26, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 25, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 24, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 23, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 22, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 21, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 20, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 19, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 18, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 17, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 16, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 15, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 14, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 13, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 12, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 11, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 10, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 9, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 8, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 7, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 6, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 5, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 4, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 3, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 2, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 1, 1, &[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 64, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 63, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 62, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 61, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 60, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 59, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 58, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 57, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 56, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 55, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 54, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 53, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 52, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 51, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 50, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 49, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 48, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 47, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 46, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 45, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 44, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 43, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 42, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 41, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 40, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 39, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 38, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 37, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 36, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 35, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 34, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 33, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 32, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 31, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 30, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 29, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 28, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 27, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 26, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 25, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 24, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 23, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 22, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 21, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 20, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 19, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 18, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 17, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 16, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 15, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 14, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 13, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 12, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 11, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 10, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 9, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 8, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 7, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 6, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 5, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 4, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 3, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 2, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(1, 0, 1, &[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_writer(u64::max_value(), 7, 64, &[128, 255, 255, 255, 255, 255, 255, 255, 127, 0, 0, 0, 0, 0, 0, 0, 0]); } fn test_reader_unsigned(value: i64, offset: usize, num_bits: usize, expected: &[u8]) { @@ -1187,37 +1187,37 @@ mod test { #[test] #[rustfmt::skip] fn byte_writer_signed_test() { - test_reader_unsigned(-1, 3, 16, &vec![0xf8, 0xff, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(-2, 3, 16, &vec![0xf0, 0xff, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(-4, 3, 16, &vec![0xe0, 0xff, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(-8, 3, 16, &vec![0xc0, 0xff, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(-16, 3, 16, &vec![0x80, 0xff, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(-32, 3, 16, &vec![0, 0xff, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(-64, 3, 16, &vec![0, 0xfe, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(-128, 3, 16, &vec![0, 0xfc, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(-256, 3, 16, &vec![0, 0xf8, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(-512, 3, 16, &vec![0, 0xf0, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(-1024, 3, 16, &vec![0, 0xe0, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(-2048, 3, 16, &vec![0, 0xc0, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(-4096, 3, 16, &vec![0, 0x80, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(-8192, 3, 16, &vec![0, 0, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(-16384, 3, 16, &vec![0, 0, 0x06, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(1, 3, 16, &vec![0x08, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(2, 3, 16, &vec![0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(4, 3, 16, &vec![0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(8, 3, 16, &vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(16, 3, 16, &vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(32, 3, 16, &vec![0, 0x01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(64, 3, 16, &vec![0, 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(128, 3, 16, &vec![0, 0x04, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(256, 3, 16, &vec![0, 0x08, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(512, 3, 16, &vec![0, 0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(1024, 3, 16, &vec![0, 0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(2048, 3, 16, &vec![0, 0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(4096, 3, 16, &vec![0, 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(8192, 3, 16, &vec![0, 0, 0x01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(16384, 3, 16, &vec![0, 0, 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - test_reader_unsigned(0, 3, 2, &vec![0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(-1, 3, 16, &[0xf8, 0xff, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(-2, 3, 16, &[0xf0, 0xff, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(-4, 3, 16, &[0xe0, 0xff, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(-8, 3, 16, &[0xc0, 0xff, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(-16, 3, 16, &[0x80, 0xff, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(-32, 3, 16, &[0, 0xff, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(-64, 3, 16, &[0, 0xfe, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(-128, 3, 16, &[0, 0xfc, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(-256, 3, 16, &[0, 0xf8, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(-512, 3, 16, &[0, 0xf0, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(-1024, 3, 16, &[0, 0xe0, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(-2048, 3, 16, &[0, 0xc0, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(-4096, 3, 16, &[0, 0x80, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(-8192, 3, 16, &[0, 0, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(-16384, 3, 16, &[0, 0, 0x06, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(1, 3, 16, &[0x08, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(2, 3, 16, &[0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(4, 3, 16, &[0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(8, 3, 16, &[0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(16, 3, 16, &[0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(32, 3, 16, &[0, 0x01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(64, 3, 16, &[0, 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(128, 3, 16, &[0, 0x04, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(256, 3, 16, &[0, 0x08, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(512, 3, 16, &[0, 0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(1024, 3, 16, &[0, 0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(2048, 3, 16, &[0, 0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(4096, 3, 16, &[0, 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(8192, 3, 16, &[0, 0, 0x01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(16384, 3, 16, &[0, 0, 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + test_reader_unsigned(0, 3, 2, &[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); } /// We want to test the following situation. Given a binary enum and a struct in flatdata @@ -1248,7 +1248,7 @@ mod test { Y = $val, } - let mut buffer = vec![0; std::mem::size_of::<$type>()]; + let mut buffer = [0; std::mem::size_of::<$type>()]; let value = E::Y; flatdata_write_bytes!($type; value, buffer, 0, 2); let raw_value = flatdata_read_bytes!($type, buffer.as_ptr(), 0, 2); diff --git a/flatdata-rs/lib/src/error.rs b/flatdata-rs/lib/src/error.rs index a2b3af8c..463407bc 100644 --- a/flatdata-rs/lib/src/error.rs +++ b/flatdata-rs/lib/src/error.rs @@ -5,6 +5,7 @@ use std::{error, fmt, io, str::Utf8Error}; /// /// [`Storage`]: trait.Storage.html #[derive(Debug)] +#[non_exhaustive] pub enum ResourceStorageError { /// Wrapper of [`io::Error`] with resource name for which the error /// occurred. @@ -44,8 +45,6 @@ pub enum ResourceStorageError { }, /// A resource / archive is missing completely Missing, - #[doc(hidden)] - __Nonexhaustive, } impl ResourceStorageError { @@ -74,7 +73,6 @@ impl error::Error for ResourceStorageError { ResourceStorageError::WrongSignature { .. } => "schema is not matching expected schema", ResourceStorageError::TooBig { .. } => "resource is too big", ResourceStorageError::Missing => "Missing resource / archive", - ResourceStorageError::__Nonexhaustive => "n/a", } } } diff --git a/flatdata-rs/lib/src/filestorage.rs b/flatdata-rs/lib/src/filestorage.rs index 0664dcd4..8e1e14d9 100644 --- a/flatdata-rs/lib/src/filestorage.rs +++ b/flatdata-rs/lib/src/filestorage.rs @@ -28,7 +28,7 @@ impl MemoryMappedFileStorage { // We cannot prove to Rust that the buffer will live as long as the storage // (we never delete mappings), so we need to manually extend lifetime let extended_lifetime_data = unsafe { slice::from_raw_parts(data.as_ptr(), data.len()) }; - Ok(&extended_lifetime_data) + Ok(extended_lifetime_data) } } diff --git a/flatdata-rs/lib/src/generator.rs b/flatdata-rs/lib/src/generator.rs index 6ef01bb0..ed343852 100644 --- a/flatdata-rs/lib/src/generator.rs +++ b/flatdata-rs/lib/src/generator.rs @@ -59,9 +59,9 @@ use std::{ /// If you are working on the generator, you can make sure your `build.rs` /// script picks up the source by setting `FLATDATA_GENERATOR_PATH` to point to /// the `flatdata-generator` folder. -/// +/// /// ## Build -/// +/// /// This method will try to install flatdata-generator in a python venv automatically /// You can provide your own generator by setting `FLATDATA_GENERATOR_BIN` to point to /// the `flatdata-generator` binary. @@ -184,7 +184,7 @@ pub enum GeneratorError { } impl std::fmt::Display for GeneratorError { - fn fmt(self: &Self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> { + fn fmt(&self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> { match self { GeneratorError::PythonError(err) => { writeln!(f, "{} could not be executed", err)?; diff --git a/flatdata-rs/lib/src/memstorage.rs b/flatdata-rs/lib/src/memstorage.rs index 7d990e72..04fdee21 100644 --- a/flatdata-rs/lib/src/memstorage.rs +++ b/flatdata-rs/lib/src/memstorage.rs @@ -138,7 +138,7 @@ impl ResourceStorage for MemoryResourceStorage { // We cannot prove to Rust that the buffer will live as long as the storage // (we never delete mappings), so we need to manually extend lifetime let extended_lifetime_data = unsafe { slice::from_raw_parts(data.as_ptr(), data.len()) }; - Ok(&extended_lifetime_data) + Ok(extended_lifetime_data) } fn create_output_stream(&self, resource_name: &str) -> Result, io::Error> { diff --git a/flatdata-rs/lib/src/multiarrayview.rs b/flatdata-rs/lib/src/multiarrayview.rs index a0da9f94..2a1d005f 100644 --- a/flatdata-rs/lib/src/multiarrayview.rs +++ b/flatdata-rs/lib/src/multiarrayview.rs @@ -102,7 +102,7 @@ where if !self.data.is_empty() { let type_index = self.data[0]; self.data = &self.data[1..]; - let res = ::create(type_index, &self.data); + let res = ::create(type_index, self.data); self.data = &self.data[res.size_in_bytes()..]; Some(res) } else { @@ -257,8 +257,8 @@ mod tests { test::{Ab, AbRef}, }; - fn create_view<'a>(storage: &'a MemoryResourceStorage, size: usize) -> MultiArrayView<'a, Ab> { - let mut mv = create_multi_vector::(&*storage, "multivector", "Some schema") + fn create_view(storage: &MemoryResourceStorage, size: usize) -> MultiArrayView { + let mut mv = create_multi_vector::(storage, "multivector", "Some schema") .expect("failed to create MultiVector"); for i in 0..size { @@ -351,11 +351,11 @@ mod tests { for _ in 0..size { iter.next().unwrap(); } - if let Some(_) = iter.next() { - assert!(false, "Iterator did not end properly"); + if iter.next().is_some() { + panic!("Iterator did not end properly"); } - if let Some(_) = iter.next() { - assert!(false, "Iterator did not fuse properly"); + if iter.next().is_some() { + panic!("Iterator did not fuse properly"); } } diff --git a/flatdata-rs/lib/src/multivector.rs b/flatdata-rs/lib/src/multivector.rs index 4446a738..c2488ba0 100644 --- a/flatdata-rs/lib/src/multivector.rs +++ b/flatdata-rs/lib/src/multivector.rs @@ -218,7 +218,7 @@ mod tests { let mut item = view.at(0); let a = item.next().unwrap(); match a { - AbRef::A(ref a) => { + AbRef::A(a) => { assert_eq!(a.x(), 1); assert_eq!(a.y(), 2); } @@ -230,17 +230,17 @@ mod tests { .read_and_check_schema("multivector_index", "index(Some schema)") .expect("read_and_check_schema failed"); use crate::SliceExt; - let index = <&[IndexType16]>::from_bytes(&index_resource).expect("Corrupted data"); + let index = <&[IndexType16]>::from_bytes(index_resource).expect("Corrupted data"); let resource = storage .read_and_check_schema("multivector", "Some schema") .expect("read_and_check_schema failed"); - let mv: MultiArrayView = MultiArrayView::new(index, &resource); + let mv: MultiArrayView = MultiArrayView::new(index, resource); assert_eq!(mv.len(), 1); let mut item = mv.at(0); let a = item.next().unwrap(); match a { - AbRef::A(ref a) => { + AbRef::A(a) => { assert_eq!(a.x(), 1); assert_eq!(a.y(), 2); } @@ -248,7 +248,7 @@ mod tests { } let b = item.next().unwrap(); match b { - AbRef::A(ref a) => { + AbRef::A(a) => { assert_eq!(a.x(), 3); assert_eq!(a.y(), 4); } @@ -261,7 +261,7 @@ mod tests { mv_copy.at(0).next().unwrap() }; match x { - AbRef::A(ref a) => { + AbRef::A(a) => { assert_eq!(a.x(), 1); assert_eq!(a.y(), 2); } @@ -274,7 +274,7 @@ mod tests { mv_copy.iter().next().unwrap().next().unwrap() }; match x { - AbRef::A(ref a) => { + AbRef::A(a) => { assert_eq!(a.x(), 1); assert_eq!(a.y(), 2); } diff --git a/flatdata-rs/lib/src/rawdata.rs b/flatdata-rs/lib/src/rawdata.rs index 1b440e2d..8986edcb 100644 --- a/flatdata-rs/lib/src/rawdata.rs +++ b/flatdata-rs/lib/src/rawdata.rs @@ -44,6 +44,10 @@ impl<'a> RawData<'a> { /// Reads a \0 terminated substring starting at specified offset without checking that the /// string contains valid UTF-8. + /// + /// # Safety + /// + /// Same safety guaranties as of `[std::str::from_utf8_unchecked]`. #[inline] pub unsafe fn substring_unchecked(&self, start: usize) -> &'a str { self.substring_with(start, |bytes| str::from_utf8_unchecked(bytes)) diff --git a/flatdata-rs/lib/src/structs.rs b/flatdata-rs/lib/src/structs.rs index 00fe3ba0..c3f0bf95 100644 --- a/flatdata-rs/lib/src/structs.rs +++ b/flatdata-rs/lib/src/structs.rs @@ -52,6 +52,10 @@ pub trait Struct: Debug { } /// Marks structs that can be used stand-alone, e.g. no range +/// +/// # Safety +/// +/// Compiler can't guarantee that the struct does not overlap in the storage (memory) pub unsafe trait NoOverlap {} /// Marks structs that cannot be used stand-alone, e.g. no range pub trait Overlap {} @@ -140,6 +144,6 @@ mod test { #[test] fn test_range() { - assert_eq!(::IS_OVERLAPPING_WITH_NEXT, true); + const _: [(); 0 - !{ ::IS_OVERLAPPING_WITH_NEXT } as usize] = []; } } diff --git a/flatdata-rs/lib/src/test/mod.rs b/flatdata-rs/lib/src/test/mod.rs index 01869db3..c9299862 100644 --- a/flatdata-rs/lib/src/test/mod.rs +++ b/flatdata-rs/lib/src/test/mod.rs @@ -18,6 +18,7 @@ // TODO: Implement missing docs // TODO: Implement missing debugs #![allow(dead_code, missing_debug_implementations, missing_docs)] +#![allow(clippy::module_inception)] include!("test_generated.rs"); diff --git a/flatdata-rs/lib/src/test/test_generated.rs b/flatdata-rs/lib/src/test/test_generated.rs index d6fe29e8..3ffe5079 100644 --- a/flatdata-rs/lib/src/test/test_generated.rs +++ b/flatdata-rs/lib/src/test/test_generated.rs @@ -1,6 +1,122 @@ // Do not edit: This code was generated by flatdata's generator. #[allow(missing_docs)] pub mod test { +#[allow(unused_imports)] +use crate::{flatdata_read_bytes, flatdata_write_bytes}; + + +#[doc(hidden)] +pub mod _builtin { +#[allow(unused_imports)] +use crate::{flatdata_read_bytes, flatdata_write_bytes}; + + +#[allow(missing_docs)] +pub mod multivector { +#[allow(unused_imports)] +use crate::{flatdata_read_bytes, flatdata_write_bytes}; + + +/// Builtin type to for MultiVector index +#[repr(transparent)] +pub struct IndexType16 { + data: [u8; 2], +} + +impl IndexType16 { + /// Unsafe since the struct might not be self-contained + pub unsafe fn new_unchecked( ) -> Self { + Self{data : [0; 2]} + } +} + +impl crate::Struct for IndexType16 { + unsafe fn create_unchecked( ) -> Self { + Self{data : [0; 2]} + } + + const SIZE_IN_BYTES: usize = 2; + const IS_OVERLAPPING_WITH_NEXT : bool = true; +} + +impl crate::Overlap for IndexType16 {} + +impl IndexType16 { + /// First element of the range [`range`]. + /// + /// [`range`]: #method.range + #[inline] + #[allow(clippy::useless_transmute)] + pub fn value(&self) -> u64 { + let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 16); + unsafe { std::mem::transmute::(value) } + } + + #[inline] + #[allow(clippy::identity_op)] + pub fn range(&self) -> std::ops::Range { + let start = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 16); + let end = flatdata_read_bytes!(u64, self.data.as_ptr(), 0 + 2 * 8, 16); + start..end + } + +} + +impl std::fmt::Debug for IndexType16 { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + f.debug_struct("IndexType16") + .field("value", &self.value()) + .finish() + } +} + +impl std::cmp::PartialEq for IndexType16 { + #[inline] + fn eq(&self, other: &Self) -> bool { + self.value() == other.value() } +} + +impl IndexType16 { + /// First element of the range [`range`]. + /// + /// [`range`]: struct.IndexType16Ref.html#method.range + #[inline] + #[allow(missing_docs)] + pub fn set_value(&mut self, value: u64) { + flatdata_write_bytes!(u64; value, self.data, 0, 16) + } + + + /// Copies the data from `other` into this struct. + #[inline] + pub fn fill_from(&mut self, other: &IndexType16) { + self.set_value(other.value()); + } +} + +impl crate::IndexStruct for IndexType16 { + #[inline] + fn range(&self) -> std::ops::Range { + let range = self.range(); + range.start as usize..range.end as usize + } + + #[inline] + fn set_index(&mut self, value: usize) { + self.set_value(value as u64); + } +} + + +#[doc(hidden)] +pub mod schema { +} +} + +#[doc(hidden)] +pub mod schema { +} +} #[repr(transparent)] #[derive(Clone)] pub struct A { @@ -79,18 +195,21 @@ unsafe impl crate::NoOverlap for A {} impl A { #[inline] + #[allow(clippy::useless_transmute)] pub fn x(&self) -> u32 { let value = flatdata_read_bytes!(u32, self.data.as_ptr(), 0, 16); unsafe { std::mem::transmute::(value) } } #[inline] + #[allow(clippy::useless_transmute)] pub fn y(&self) -> u32 { let value = flatdata_read_bytes!(u32, self.data.as_ptr(), 16, 16); unsafe { std::mem::transmute::(value) } } #[inline] + #[allow(clippy::useless_transmute)] pub fn e(&self) -> super::test::E { let value = flatdata_read_bytes!(u32, self.data.as_ptr(), 32, 1); unsafe { std::mem::transmute::(value) } @@ -220,6 +339,7 @@ unsafe impl crate::NoOverlap for B {} impl B { #[inline] + #[allow(clippy::useless_transmute)] pub fn id(&self) -> u32 { let value = flatdata_read_bytes!(u32, self.data.as_ptr(), 0, 16); unsafe { std::mem::transmute::(value) } @@ -283,12 +403,14 @@ impl R { /// /// [`x`]: #method.x #[inline] + #[allow(clippy::useless_transmute)] pub fn first_x(&self) -> u32 { let value = flatdata_read_bytes!(u32, self.data.as_ptr(), 0, 16); unsafe { std::mem::transmute::(value) } } #[inline] + #[allow(clippy::identity_op)] pub fn x(&self) -> std::ops::Range { let start = flatdata_read_bytes!(u32, self.data.as_ptr(), 0, 16); let end = flatdata_read_bytes!(u32, self.data.as_ptr(), 0 + 4 * 8, 16); @@ -296,6 +418,7 @@ impl R { } #[inline] + #[allow(clippy::useless_transmute)] pub fn y(&self) -> u32 { let value = flatdata_read_bytes!(u32, self.data.as_ptr(), 16, 16); unsafe { std::mem::transmute::(value) } @@ -386,12 +509,11 @@ impl S { pub fn open(storage: crate::StorageHandle) -> ::std::result::Result { - #[allow(unused_imports)] + #[allow(unused_imports, unused_variables, clippy::useless_transmute, clippy::identity_op)] + use crate::SliceExt; - #[allow(unused_variables)] use crate::ResourceStorageError as Error; // extend lifetime since Rust cannot know that we reference a cache here - #[allow(unused_variables)] let extend = |x : Result<&[u8], Error>| -> Result<&'static [u8], Error> {x.map(|x| unsafe{std::mem::transmute(x)})}; storage.read(&Self::signature_name("S"), schema::s::S)?; @@ -400,7 +522,7 @@ impl S { use crate::check_resource as check; let max_size = None; let resource = extend(storage.read("data", schema::s::resources::DATA)); - check("data", |_| 0, max_size, resource.and_then(|x| super::test::A::from_bytes_slice(x)))? + check("data", |_| 0, max_size, resource.and_then(super::test::A::from_bytes_slice))? }; Ok(Self { @@ -473,12 +595,11 @@ impl X { pub fn open(storage: crate::StorageHandle) -> ::std::result::Result { - #[allow(unused_imports)] + #[allow(unused_imports, unused_variables, clippy::useless_transmute, clippy::identity_op)] + use crate::SliceExt; - #[allow(unused_variables)] use crate::ResourceStorageError as Error; // extend lifetime since Rust cannot know that we reference a cache here - #[allow(unused_variables)] let extend = |x : Result<&[u8], Error>| -> Result<&'static [u8], Error> {x.map(|x| unsafe{std::mem::transmute(x)})}; storage.read(&Self::signature_name("X"), schema::x::X)?; @@ -487,7 +608,7 @@ impl X { use crate::check_resource as check; let max_size = None; let resource = extend(storage.read("data", schema::x::resources::DATA)); - check("data", |r| r.len(), max_size, resource.and_then(|x| <&[super::test::A]>::from_bytes(x)))? + check("data", |r| r.len(), max_size, resource.and_then(<&[super::test::A]>::from_bytes))? }; Ok(Self { @@ -572,12 +693,11 @@ impl Y { pub fn open(storage: crate::StorageHandle) -> ::std::result::Result { - #[allow(unused_imports)] + #[allow(unused_imports, unused_variables, clippy::useless_transmute, clippy::identity_op)] + use crate::SliceExt; - #[allow(unused_variables)] use crate::ResourceStorageError as Error; // extend lifetime since Rust cannot know that we reference a cache here - #[allow(unused_variables)] let extend = |x : Result<&[u8], Error>| -> Result<&'static [u8], Error> {x.map(|x| unsafe{std::mem::transmute(x)})}; storage.read(&Self::signature_name("Y"), schema::y::Y)?; @@ -586,7 +706,7 @@ impl Y { use crate::check_resource as check; let max_size = None; let resource = extend(storage.read("data", schema::y::resources::DATA)); - check("data", |r| r.len(), max_size, resource.and_then(|x| <&[super::test::R]>::from_bytes(x)))? + check("data", |r| r.len(), max_size, resource.and_then(<&[super::test::R]>::from_bytes))? }; Ok(Self { @@ -684,7 +804,7 @@ impl<'a> AbBuilder<'a> { /// /// [`A`]: struct.A.html #[inline] - pub fn add_a<'b>(&'b mut self) -> &'b mut super::test::A { + pub fn add_a(&mut self) -> &mut super::test::A { let old_len = self.data.len(); let increment = 1 + ::SIZE_IN_BYTES; self.data.resize(old_len + increment, 0); @@ -696,7 +816,7 @@ impl<'a> AbBuilder<'a> { /// /// [`B`]: struct.B.html #[inline] - pub fn add_b<'b>(&'b mut self) -> &'b mut super::test::B { + pub fn add_b(&mut self) -> &mut super::test::B { let old_len = self.data.len(); let increment = 1 + ::SIZE_IN_BYTES; self.data.resize(old_len + increment, 0); @@ -730,7 +850,7 @@ impl<'a> AbBuilder<'a> { pub struct Ab {} impl crate::VariadicIndex for Ab { - type Index = super::_builtin::multivector::IndexType16; + type Index = super::test::_builtin::multivector::IndexType16; } impl<'a> crate::VariadicStruct<'a> for Ab { @@ -740,8 +860,8 @@ impl<'a> crate::VariadicStruct<'a> for Ab { fn create(index: crate::TypeIndex, data: &'a [u8]) -> Self::Item { match index { - 0 => AbRef::A(super::test::A::from_bytes_slice(&data).expect("Corrupted data")), - 1 => AbRef::B(super::test::B::from_bytes_slice(&data).expect("Corrupted data")), + 0 => AbRef::A(super::test::A::from_bytes_slice(data).expect("Corrupted data")), + 1 => AbRef::B(super::test::B::from_bytes_slice(data).expect("Corrupted data")), _ => panic!("invalid type index {} for variadic type AbRef", index), } } @@ -785,12 +905,11 @@ impl Z { pub fn open(storage: crate::StorageHandle) -> ::std::result::Result { - #[allow(unused_imports)] + #[allow(unused_imports, unused_variables, clippy::useless_transmute, clippy::identity_op)] + use crate::SliceExt; - #[allow(unused_variables)] use crate::ResourceStorageError as Error; // extend lifetime since Rust cannot know that we reference a cache here - #[allow(unused_variables)] let extend = |x : Result<&[u8], Error>| -> Result<&'static [u8], Error> {x.map(|x| unsafe{std::mem::transmute(x)})}; storage.read(&Self::signature_name("Z"), schema::z::Z)?; @@ -798,13 +917,13 @@ impl Z { let ab = { use crate::check_resource as check; let max_size = None; - let index_schema = &format!("index({})", schema::z::resources::AB); + let index_schema = format!("index({})", schema::z::resources::AB); let index = extend(storage.read("ab_index", &index_schema)); let data = extend(storage.read("ab", schema::z::resources::AB)); let result = match (index, data) { (Ok(index), Ok(data)) => { Ok(crate::MultiArrayView::new( - <&[super::_builtin::multivector::IndexType16]>::from_bytes(index)?, + <&[super::test::_builtin::multivector::IndexType16]>::from_bytes(index)?, data )) } @@ -891,12 +1010,11 @@ impl W { pub fn open(storage: crate::StorageHandle) -> ::std::result::Result { - #[allow(unused_imports)] + #[allow(unused_imports, unused_variables, clippy::useless_transmute, clippy::identity_op)] + use crate::SliceExt; - #[allow(unused_variables)] use crate::ResourceStorageError as Error; // extend lifetime since Rust cannot know that we reference a cache here - #[allow(unused_variables)] let extend = |x : Result<&[u8], Error>| -> Result<&'static [u8], Error> {x.map(|x| unsafe{std::mem::transmute(x)})}; storage.read(&Self::signature_name("W"), schema::w::W)?; @@ -905,7 +1023,7 @@ impl W { use crate::check_resource as check; let max_size = None; let resource = extend(storage.read("blob", schema::w::resources::BLOB)); - check("blob", |r| r.len(), max_size, resource.map(|x| crate::RawData::new(x)))? + check("blob", |r| r.len(), max_size, resource.map(crate::RawData::new))? }; Ok(Self { @@ -1186,108 +1304,3 @@ archive W } } } - -#[doc(hidden)] -pub mod _builtin { - -#[allow(missing_docs)] -pub mod multivector { - -/// Builtin type to for MultiVector index -#[repr(transparent)] -pub struct IndexType16 { - data: [u8; 2], -} - -impl IndexType16 { - /// Unsafe since the struct might not be self-contained - pub unsafe fn new_unchecked( ) -> Self { - Self{data : [0; 2]} - } -} - -impl crate::Struct for IndexType16 { - unsafe fn create_unchecked( ) -> Self { - Self{data : [0; 2]} - } - - const SIZE_IN_BYTES: usize = 2; - const IS_OVERLAPPING_WITH_NEXT : bool = true; -} - -impl crate::Overlap for IndexType16 {} - -impl IndexType16 { - /// First element of the range [`range`]. - /// - /// [`range`]: #method.range - #[inline] - pub fn value(&self) -> u64 { - let value = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 16); - unsafe { std::mem::transmute::(value) } - } - - #[inline] - pub fn range(&self) -> std::ops::Range { - let start = flatdata_read_bytes!(u64, self.data.as_ptr(), 0, 16); - let end = flatdata_read_bytes!(u64, self.data.as_ptr(), 0 + 2 * 8, 16); - start..end - } - -} - -impl std::fmt::Debug for IndexType16 { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - f.debug_struct("IndexType16") - .field("value", &self.value()) - .finish() - } -} - -impl std::cmp::PartialEq for IndexType16 { - #[inline] - fn eq(&self, other: &Self) -> bool { - self.value() == other.value() } -} - -impl IndexType16 { - /// First element of the range [`range`]. - /// - /// [`range`]: struct.IndexType16Ref.html#method.range - #[inline] - #[allow(missing_docs)] - pub fn set_value(&mut self, value: u64) { - flatdata_write_bytes!(u64; value, self.data, 0, 16) - } - - - /// Copies the data from `other` into this struct. - #[inline] - pub fn fill_from(&mut self, other: &IndexType16) { - self.set_value(other.value()); - } -} - -impl crate::IndexStruct for IndexType16 { - #[inline] - fn range(&self) -> std::ops::Range { - let range = self.range(); - range.start as usize..range.end as usize - } - - #[inline] - fn set_index(&mut self, value: usize) { - self.set_value(value as u64); - } -} - - -#[doc(hidden)] -pub mod schema { -} -} - -#[doc(hidden)] -pub mod schema { -} -} diff --git a/flatdata-rs/lib/src/vector.rs b/flatdata-rs/lib/src/vector.rs index 315f895c..9cf89aef 100644 --- a/flatdata-rs/lib/src/vector.rs +++ b/flatdata-rs/lib/src/vector.rs @@ -138,8 +138,8 @@ where } /// Safety: We must not implement DerefMut if T is not NoOverlap, -/// since it would allow getting a mutable refernce to one element, -/// and refernece to the next: Both use the same memory address for data of ranges +/// since it would allow getting a mutable reference to one element, +/// and reference to the next: Both use the same memory address for data of ranges impl std::ops::DerefMut for Vector where T: Struct + NoOverlap, @@ -296,7 +296,7 @@ where fn flush(&mut self) -> io::Result<()> { self.resource_handle .borrow_mut() - .write(&self.data.as_view().as_bytes())?; + .write(self.data.as_view().as_bytes())?; self.data.clear(); Ok(()) } @@ -349,7 +349,7 @@ mod tests { assert_eq!(v[0].x(), 10..20); assert_eq!(v[1].x(), 20..30); - assert_eq!(v[2].x(), 30..0); + assert!(v[2].x().is_empty()); } #[test] diff --git a/flatdata-rs/tests/coappearances/src/coappearances.rs b/flatdata-rs/tests/coappearances/src/coappearances.rs index 0feab3e2..c341bfbf 100644 --- a/flatdata-rs/tests/coappearances/src/coappearances.rs +++ b/flatdata-rs/tests/coappearances/src/coappearances.rs @@ -1,4 +1,4 @@ -#![allow(dead_code)] +#![allow(dead_code, clippy::module_inception)] include!(concat!(env!("OUT_DIR"), "/coappearances.rs")); diff --git a/flatdata-rs/tests/coappearances/src/lib.rs b/flatdata-rs/tests/coappearances/src/lib.rs index 20f4aa44..cce21dfe 100644 --- a/flatdata-rs/tests/coappearances/src/lib.rs +++ b/flatdata-rs/tests/coappearances/src/lib.rs @@ -1,6 +1,7 @@ #![cfg(test)] -use std::{env, fs, io::Read, path, str}; +use std::path::{Path, PathBuf}; +use std::{env, fs, io::Read, str}; pub mod coappearances; @@ -76,7 +77,7 @@ fn read_and_validate_coappearances( let data: Vec<_> = vertices_data.at(0).collect(); assert_eq!(data.len(), 1); match data[0] { - coappearances::VerticesDataRef::UnaryRelation(ref data) => { + coappearances::VerticesDataRef::UnaryRelation(data) => { assert_eq!(g.strings().substring(data.kind_ref() as usize)?, "maid"); assert_eq!( g.strings() @@ -84,13 +85,13 @@ fn read_and_validate_coappearances( "Anna Arkadyevna Karenina" ); } - _ => assert!(false), + _ => unreachable!(), }; let data: Vec<_> = vertices_data.at(1).collect(); assert_eq!(data.len(), 1); match data[0] { - coappearances::VerticesDataRef::UnaryRelation(ref data) => { + coappearances::VerticesDataRef::UnaryRelation(data) => { assert_eq!( g.strings().substring(data.kind_ref() as usize)?, "housekeeper" @@ -101,13 +102,13 @@ fn read_and_validate_coappearances( "Konstantin Dmitrievitch Levin" ); } - _ => assert!(false), + _ => unreachable!(), }; let data: Vec<_> = vertices_data.at(vertices_data.len() - 1).collect(); assert_eq!(data.len(), 1); match data[0] { - coappearances::VerticesDataRef::UnaryRelation(ref data) => { + coappearances::VerticesDataRef::UnaryRelation(data) => { assert_eq!( g.strings().substring(data.kind_ref() as usize)?, "gambling friend" @@ -118,28 +119,26 @@ fn read_and_validate_coappearances( "Count Alexey Kirillovitch Vronsky" ); } - _ => assert!(false), + _ => unreachable!(), }; Ok(()) } #[test] fn read_and_validate_coappearances_from_file_storage() -> Result<(), std::str::Utf8Error> { - let storage = - flatdata::FileResourceStorage::new(path::PathBuf::from("assets/karenina.archive")); + let storage = flatdata::FileResourceStorage::new("assets/karenina.archive"); read_and_validate_coappearances(storage) } #[test] #[cfg(feature = "tar")] fn read_and_validate_coappearances_from_tar_archive_storage() -> Result<(), std::str::Utf8Error> { - let storage = - flatdata::TarArchiveResourceStorage::new(path::PathBuf::from("assets/karenina.tar")) - .expect("failed to read tar archive"); + let storage = flatdata::TarArchiveResourceStorage::new("assets/karenina.tar") + .expect("failed to read tar archive"); read_and_validate_coappearances(storage) } -fn check_files(name_a: &path::Path, name_b: &path::Path) { +fn check_files(name_a: &Path, name_b: &Path) { let mut fa = fs::File::open(name_a).unwrap(); let mut buf_a = Vec::new(); fa.read_to_end(&mut buf_a).unwrap(); @@ -157,7 +156,7 @@ fn check_files(name_a: &path::Path, name_b: &path::Path) { ); } -fn check_resource(from: &path::PathBuf, to: &path::PathBuf, resource_name: &str) { +fn check_resource(from: &Path, to: &Path, resource_name: &str) { check_files(&from.join(resource_name), &to.join(resource_name)); check_files( &from.join(format!("{}.schema", resource_name)), @@ -168,9 +167,9 @@ fn check_resource(from: &path::PathBuf, to: &path::PathBuf, resource_name: &str) fn copy_coappearances_archive( from_path: &str, to_path: &str, -) -> (path::PathBuf, coappearances::GraphBuilder) { +) -> (PathBuf, coappearances::GraphBuilder) { // open for reading - let source_archive_path = path::PathBuf::from(from_path); + let source_archive_path = PathBuf::from(from_path); let storage = flatdata::FileResourceStorage::new(source_archive_path.clone()); let g = coappearances::Graph::open(storage).expect("invalid archive"); @@ -186,30 +185,30 @@ fn copy_coappearances_archive( // copy data let mut meta = coappearances::Meta::new(); - meta.fill_from(&g.meta()); + meta.fill_from(g.meta()); gb.set_meta(&meta).expect("set_meta failed"); check_resource(&source_archive_path, &archive_path, "meta"); { let mut vertices = gb.start_vertices().expect("start_vertices failed"); - for v in g.vertices().iter() { + for v in g.vertices() { let w = vertices.grow().expect("grow failed"); - w.fill_from(&v); + w.fill_from(v); } vertices.close().expect("close failed"); } check_resource(&source_archive_path, &archive_path, "vertices"); let mut edges = flatdata::Vector::::new(); - for e in g.edges().iter() { - edges.grow().fill_from(&e); + for e in g.edges() { + edges.grow().fill_from(e); } // add final sentinel let sentinel = edges.grow(); sentinel.set_first_chapter_ref(g.edges()[g.edges().len() - 1].chapters_range().end); sentinel.set_a_ref(std::u16::MAX as u32); sentinel.set_b_ref(std::u16::MAX as u32); - gb.set_edges(&edges.as_view()).expect("set_edges failed"); + gb.set_edges(edges.as_view()).expect("set_edges failed"); check_resource(&source_archive_path, &archive_path, "edges"); @@ -221,19 +220,19 @@ fn copy_coappearances_archive( let mut new_item = vertices_data.grow().expect("grow failed"); for element in item { match element { - coappearances::VerticesDataRef::Nickname(ref nickname) => { + coappearances::VerticesDataRef::Nickname(nickname) => { let new_element = new_item.add_nickname(); new_element.fill_from(nickname); } - coappearances::VerticesDataRef::Description(ref desc) => { + coappearances::VerticesDataRef::Description(desc) => { let new_element = new_item.add_description(); new_element.fill_from(desc); } - coappearances::VerticesDataRef::UnaryRelation(ref rel) => { + coappearances::VerticesDataRef::UnaryRelation(rel) => { let new_element = new_item.add_unary_relation(); new_element.fill_from(rel); } - coappearances::VerticesDataRef::BinaryRelation(ref rel) => { + coappearances::VerticesDataRef::BinaryRelation(rel) => { let new_element = new_item.add_binary_relation(); new_element.fill_from(rel); } @@ -247,11 +246,11 @@ fn copy_coappearances_archive( check_resource(&source_archive_path, &archive_path, "vertices_data_index"); let mut chapters = flatdata::Vector::::new(); - for ch in g.chapters().iter() { - chapters.grow().fill_from(&ch); + for ch in g.chapters() { + chapters.grow().fill_from(ch); } - gb.set_chapters(&chapters.as_view()) + gb.set_chapters(chapters.as_view()) .expect("set_chapters failed"); check_resource(&source_archive_path, &archive_path, "chapters"); @@ -338,9 +337,8 @@ fn read_write_statistics_subarchive() { #[test] fn read_and_validate_calculate_data_subarchive() { - let storage = flatdata::FileResourceStorage::new(path::PathBuf::from( - "assets/karenina.archive/statistics", - )); + let storage = + flatdata::FileResourceStorage::new(PathBuf::from("assets/karenina.archive/statistics")); let stats = coappearances::Statistics::open(storage).expect("invalid archive"); println!("{:?}", stats); diff --git a/flatdata-rs/tests/features/src/archives/multivector.rs b/flatdata-rs/tests/features/src/archives/multivector.rs index 31d3f1a5..13324045 100644 --- a/flatdata-rs/tests/features/src/archives/multivector.rs +++ b/flatdata-rs/tests/features/src/archives/multivector.rs @@ -48,11 +48,11 @@ fn test() { let mut iter = data.at(x); match iter.next().expect("Missing item") { n::DataRef::S(s) => assert_eq!(s.x(), x as u64), - _ => assert!(false, "Found wrong item"), + _ => panic!("Found wrong item"), } match iter.next().expect("Missing item") { n::DataRef::T(s) => assert_eq!(s.x(), x as u64), - _ => assert!(false, "Found wrong item"), + _ => panic!("Found wrong item"), } assert!(iter.next().is_none(), "Too many items"); } @@ -70,7 +70,7 @@ fn test() { let mut iter = data_u64_index.at(x); match iter.next().expect("Missing item") { n::DataU64IndexRef::S(s) => assert_eq!(s.x(), x as u64), - _ => assert!(false, "Found wrong item"), + _ => panic!("Found wrong item"), } assert!(iter.next().is_none(), "Too many items"); } diff --git a/flatdata-rs/tests/features/src/archives/ranges.rs b/flatdata-rs/tests/features/src/archives/ranges.rs index 1bfa6742..769d8c6e 100644 --- a/flatdata-rs/tests/features/src/archives/ranges.rs +++ b/flatdata-rs/tests/features/src/archives/ranges.rs @@ -16,7 +16,7 @@ fn test() { let builder = n::ABuilder::new(storage.clone()).expect("Failed to create builder"); builder - .set_data(&data.as_view()) + .set_data(data.as_view()) .expect("Failed to set data"); let archive = n::A::open(storage).expect("Failed to open archive"); diff --git a/flatdata-rs/tests/features/src/archives/subarchive.rs b/flatdata-rs/tests/features/src/archives/subarchive.rs index f420e030..76adae3d 100644 --- a/flatdata-rs/tests/features/src/archives/subarchive.rs +++ b/flatdata-rs/tests/features/src/archives/subarchive.rs @@ -26,7 +26,7 @@ fn test() { let mut stream = storage .create_output_stream("/my_test/optional_data/payload.schema") .expect("Failed to overwrite schema"); - stream + let _ = stream .write(b"broken stuff") .expect("Failed to overwrite schema"); stream.flush().expect("Failed to overwrite schema"); diff --git a/flatdata-rs/tests/features/src/archives/vector.rs b/flatdata-rs/tests/features/src/archives/vector.rs index cccfd653..5114f257 100644 --- a/flatdata-rs/tests/features/src/archives/vector.rs +++ b/flatdata-rs/tests/features/src/archives/vector.rs @@ -14,7 +14,7 @@ fn test() { let builder = n::ABuilder::new(storage.clone()).expect("Failed to create builder"); builder - .set_data(&data.as_view()) + .set_data(data.as_view()) .expect("Failed to set data"); if set_optional { diff --git a/flatdata-rs/tests/features/src/structs/unaligned.rs b/flatdata-rs/tests/features/src/structs/unaligned.rs index b95cc4c6..68f563d7 100644 --- a/flatdata-rs/tests/features/src/structs/unaligned.rs +++ b/flatdata-rs/tests/features/src/structs/unaligned.rs @@ -58,7 +58,7 @@ fn test_max_values() { assert_eq!(value.f(), (1 << (8 - 3)) - 1); let mut value = n::I8::new(); - value.set_f((1 << (8 - 3) - 1) - 1); + value.set_f((1 << (8 - 3 - 1)) - 1); assert_eq!(value.f(), (1 << (8 - 3 - 1)) - 1); let mut value = n::U16::new();