From 26a2212f70c604f9a2d3fdfa723769417f60be4e Mon Sep 17 00:00:00 2001 From: core Date: Tue, 3 Jun 2025 23:11:20 -0400 Subject: [PATCH] feat: optimizing wxbox-ar2 --- .idea/workspace.xml | 24 +- Cargo.lock | 1 - crates/ar2/Cargo.toml | 1 - crates/ar2/benches/parse_benchmark.rs | 19 +- crates/ar2/flamegraph.svg | 491 -------------------------- crates/ar2/src/lib.rs | 2 +- crates/ar2/src/main.rs | 2 +- crates/ar2/src/parse/error.rs | 4 +- crates/ar2/src/parse/mod.rs | 196 ++++++---- crates/ar2/src/parse/scan.rs | 20 +- crates/ar2/src/parse/types.rs | 22 +- crates/ar2/src/parse/util.rs | 14 +- 12 files changed, 190 insertions(+), 606 deletions(-) delete mode 100644 crates/ar2/flamegraph.svg diff --git a/.idea/workspace.xml b/.idea/workspace.xml index c7c4b90..b81758e 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -7,16 +7,19 @@ - - + + + + + - + - @@ -252,6 +263,7 @@ - \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index d857288..c13bfbd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3696,7 +3696,6 @@ dependencies = [ "nexrad-data", "nexrad-decode", "rayon", - "rustc-hash", "serde", "thiserror 2.0.12", "toml", diff --git a/crates/ar2/Cargo.toml b/crates/ar2/Cargo.toml index bec173b..8001913 100644 --- a/crates/ar2/Cargo.toml +++ b/crates/ar2/Cargo.toml @@ -14,7 +14,6 @@ thiserror = "2" bincode = "2" tracing = "0.1" tracing-subscriber = "0.3" -rustc-hash = "2" [dev-dependencies] criterion = { version = "0.5" } diff --git a/crates/ar2/benches/parse_benchmark.rs b/crates/ar2/benches/parse_benchmark.rs index b46e2e7..6c1ccb5 100644 --- a/crates/ar2/benches/parse_benchmark.rs +++ b/crates/ar2/benches/parse_benchmark.rs @@ -1,10 +1,15 @@ +use criterion::{BenchmarkId, Criterion, criterion_group, criterion_main}; use std::io::Cursor; -use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion}; use wxbox_ar2::parse::Ar2v; -const KCRP20170825_235733_V06: (&[u8], &str) = (include_bytes!("KCRP20170825_235733_V06"), "KCRP20170825_235733_V06"); -const KGWX20250518_165333_V06: (&[u8], &str) = (include_bytes!("KGWX20250518_165333_V06"), "KGWX20250518_165333_V06"); - +const KCRP20170825_235733_V06: (&[u8], &str) = ( + include_bytes!("KCRP20170825_235733_V06"), + "KCRP20170825_235733_V06", +); +const KGWX20250518_165333_V06: (&[u8], &str) = ( + include_bytes!("KGWX20250518_165333_V06"), + "KGWX20250518_165333_V06", +); fn criterion_benchmark(c: &mut Criterion) { let mut group = c.benchmark_group("parse"); @@ -15,10 +20,10 @@ fn criterion_benchmark(c: &mut Criterion) { test_file_bytes, |b, bytes| { b.iter(|| { - let mut r= Cursor::new(bytes.to_vec()); + let mut r = Cursor::new(bytes.to_vec()); Ar2v::read(&mut r).unwrap(); }); - } + }, ); } @@ -26,4 +31,4 @@ fn criterion_benchmark(c: &mut Criterion) { } criterion_group!(benches, criterion_benchmark); -criterion_main!(benches); \ No newline at end of file +criterion_main!(benches); diff --git a/crates/ar2/flamegraph.svg b/crates/ar2/flamegraph.svg deleted file mode 100644 index 7ce03f7..0000000 --- a/crates/ar2/flamegraph.svg +++ /dev/null @@ -1,491 +0,0 @@ -Flame Graph Reset ZoomSearch BZ2_decompress (3,602,294 samples, 0.09%)[unknown] (3,602,294 samples, 0.09%)std::io::Read::read_buf (69,569,729 samples, 1.65%)std::io::default_read_buf (69,569,729 samples, 1.65%)std::io::Read::read_buf::_{{closure}} (69,569,729 samples, 1.65%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (69,569,729 samples, 1.65%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (69,569,729 samples, 1.65%)bzip2::mem::Decompress::decompress (69,569,729 samples, 1.65%)BZ2_bzDecompress (69,569,729 samples, 1.65%)nexrad_data::volume::record::Record::decompress (196,512,695 samples, 4.67%)nexra..std::io::Read::read_to_end (196,512,695 samples, 4.67%)std::..std::io::default_read_to_end (196,512,695 samples, 4.67%)std::..std::io::default_read_to_end::small_probe_read (126,942,966 samples, 3.02%)std..<bzip2::read::BzDecoder<R> as std::io::Read>::read (126,942,966 samples, 3.02%)<bz..<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (126,942,966 samples, 3.02%)<bz..bzip2::mem::Decompress::decompress (126,942,966 samples, 3.02%)bzi..BZ2_bzDecompress (126,942,966 samples, 3.02%)BZ2..BZ2_decompress (126,942,966 samples, 3.02%)BZ2..[libc.so.6] (3,515,647 samples, 0.08%)rayon::iter::plumbing::Producer::fold_with (196,878,955 samples, 4.68%)rayon..<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (196,878,955 samples, 4.68%)<rayo..rayon::iter::plumbing::Folder::consume_iter (196,878,955 samples, 4.68%)rayon..<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (196,878,955 samples, 4.68%)<core..core::option::Option<T>::map (196,878,955 samples, 4.68%)core:..core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (196,878,955 samples, 4.68%)core:..core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (196,878,955 samples, 4.68%)core:..wxbox_ar2::parse::_{{closure}} (196,878,955 samples, 4.68%)wxbox..core::io::borrowed_buf::BorrowedCursor::ensure_init (3,832,171 samples, 0.09%)core::intrinsics::write_bytes (3,832,171 samples, 0.09%)[libc.so.6] (3,832,171 samples, 0.09%)std::io::Read::read_buf (57,909,334 samples, 1.38%)std::io::default_read_buf (57,909,334 samples, 1.38%)std::io::Read::read_buf::_{{closure}} (54,077,163 samples, 1.29%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (54,077,163 samples, 1.29%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (54,077,163 samples, 1.29%)bzip2::mem::Decompress::decompress (54,077,163 samples, 1.29%)BZ2_bzDecompress (54,077,163 samples, 1.29%)nexrad_data::volume::record::Record::decompress (161,035,774 samples, 3.83%)nexr..std::io::Read::read_to_end (161,035,774 samples, 3.83%)std:..std::io::default_read_to_end (161,035,774 samples, 3.83%)std:..std::io::default_read_to_end::small_probe_read (103,126,440 samples, 2.45%)st..<bzip2::read::BzDecoder<R> as std::io::Read>::read (103,126,440 samples, 2.45%)<b..<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (103,126,440 samples, 2.45%)<b..bzip2::mem::Decompress::decompress (103,126,440 samples, 2.45%)bz..BZ2_bzDecompress (103,126,440 samples, 2.45%)BZ..BZ2_decompress (103,126,440 samples, 2.45%)BZ..[libc.so.6] (3,603,693 samples, 0.09%)rayon::iter::plumbing::Producer::fold_with (165,062,113 samples, 3.93%)rayo..<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (165,062,113 samples, 3.93%)<ray..rayon::iter::plumbing::Folder::consume_iter (165,062,113 samples, 3.93%)rayo..<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (165,062,113 samples, 3.93%)<cor..core::option::Option<T>::map (165,062,113 samples, 3.93%)core..core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (165,062,113 samples, 3.93%)core..core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (165,062,113 samples, 3.93%)core..wxbox_ar2::parse::_{{closure}} (165,062,113 samples, 3.93%)wxbo..nexrad_data::volume::record::Record::messages (4,026,339 samples, 0.10%)nexrad_decode::messages::decode_messages (4,026,339 samples, 0.10%)nexrad_decode::messages::decode_message_contents (4,026,339 samples, 0.10%)nexrad_decode::messages::digital_radar_data::decode_digital_radar_data (4,026,339 samples, 0.10%)nexrad_decode::messages::digital_radar_data::generic_data_block::GenericDataBlock::new (4,026,339 samples, 0.10%)alloc::vec::from_elem (4,026,339 samples, 0.10%)<u8 as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (4,026,339 samples, 0.10%)alloc::raw_vec::RawVec<T,A>::with_capacity_zeroed_in (4,026,339 samples, 0.10%)alloc::raw_vec::RawVecInner<A>::with_capacity_zeroed_in (4,026,339 samples, 0.10%)alloc::raw_vec::RawVecInner<A>::try_allocate_in (4,026,339 samples, 0.10%)<alloc::alloc::Global as core::alloc::Allocator>::allocate_zeroed (4,026,339 samples, 0.10%)alloc::alloc::Global::alloc_impl (4,026,339 samples, 0.10%)alloc::alloc::alloc_zeroed (4,026,339 samples, 0.10%)__rdl_alloc_zeroed (4,026,339 samples, 0.10%)std::sys::alloc::unix::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc_zeroed (4,026,339 samples, 0.10%)__libc_calloc (4,026,339 samples, 0.10%)[libc.so.6] (4,026,339 samples, 0.10%)std::io::Read::read_buf (10,919,821 samples, 0.26%)std::io::default_read_buf (10,919,821 samples, 0.26%)std::io::Read::read_buf::_{{closure}} (10,919,821 samples, 0.26%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (10,919,821 samples, 0.26%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (10,919,821 samples, 0.26%)bzip2::mem::Decompress::decompress (10,919,821 samples, 0.26%)BZ2_bzDecompress (10,919,821 samples, 0.26%)rayon_core::job::StackJob<L,F,R>::run_inline (31,773,610 samples, 0.76%)rayon_core::join::join_context::call_b::_{{closure}} (31,773,610 samples, 0.76%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (31,773,610 samples, 0.76%)rayon::iter::plumbing::bridge_producer_consumer::helper (31,773,610 samples, 0.76%)rayon::iter::plumbing::Producer::fold_with (31,773,610 samples, 0.76%)<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (31,773,610 samples, 0.76%)rayon::iter::plumbing::Folder::consume_iter (31,773,610 samples, 0.76%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (31,773,610 samples, 0.76%)core::option::Option<T>::map (31,773,610 samples, 0.76%)core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (31,773,610 samples, 0.76%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (31,773,610 samples, 0.76%)wxbox_ar2::parse::_{{closure}} (31,773,610 samples, 0.76%)nexrad_data::volume::record::Record::decompress (31,773,610 samples, 0.76%)std::io::Read::read_to_end (31,773,610 samples, 0.76%)std::io::default_read_to_end (31,773,610 samples, 0.76%)std::io::default_read_to_end::small_probe_read (20,853,789 samples, 0.50%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (20,853,789 samples, 0.50%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (20,853,789 samples, 0.50%)bzip2::mem::Decompress::decompress (20,853,789 samples, 0.50%)BZ2_bzDecompress (20,853,789 samples, 0.50%)BZ2_decompress (20,853,789 samples, 0.50%)[libc.so.6] (3,392,988 samples, 0.08%)rayon::iter::plumbing::Producer::fold_with (3,929,723 samples, 0.09%)<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (3,929,723 samples, 0.09%)rayon::iter::plumbing::Folder::consume_iter (3,929,723 samples, 0.09%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (3,929,723 samples, 0.09%)core::option::Option<T>::map (3,929,723 samples, 0.09%)core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (3,929,723 samples, 0.09%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (3,929,723 samples, 0.09%)wxbox_ar2::parse::_{{closure}} (3,929,723 samples, 0.09%)nexrad_data::volume::record::Record::decompress (3,929,723 samples, 0.09%)std::io::Read::read_to_end (3,929,723 samples, 0.09%)std::io::default_read_to_end (3,929,723 samples, 0.09%)std::io::default_read_to_end::small_probe_read (3,929,723 samples, 0.09%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (3,929,723 samples, 0.09%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (3,929,723 samples, 0.09%)bzip2::mem::Decompress::decompress (3,929,723 samples, 0.09%)BZ2_bzDecompress (3,929,723 samples, 0.09%)BZ2_decompress (3,929,723 samples, 0.09%)<alloc::boxed::Box<T,A> as core::clone::Clone>::clone (3,958,709 samples, 0.09%)<T as core::clone::CloneToUninit>::clone_to_uninit (3,958,709 samples, 0.09%)<T as core::clone::uninit::CopySpec>::clone_one (3,958,709 samples, 0.09%)<nexrad_decode::messages::digital_radar_data::message::Message as core::clone::Clone>::clone (3,958,709 samples, 0.09%)<core::option::Option<T> as core::clone::Clone>::clone (3,958,709 samples, 0.09%)<nexrad_decode::messages::digital_radar_data::generic_data_block::GenericDataBlock as core::clone::Clone>::clone (3,958,709 samples, 0.09%)<alloc::vec::Vec<T,A> as core::clone::Clone>::clone (3,958,709 samples, 0.09%)alloc::slice::<impl [T]>::to_vec_in (3,958,709 samples, 0.09%)alloc::slice::hack::to_vec (3,958,709 samples, 0.09%)<T as alloc::slice::hack::ConvertVec>::to_vec (3,958,709 samples, 0.09%)alloc::vec::Vec<T,A>::with_capacity_in (3,958,709 samples, 0.09%)alloc::raw_vec::RawVec<T,A>::with_capacity_in (3,958,709 samples, 0.09%)alloc::raw_vec::RawVecInner<A>::with_capacity_in (3,958,709 samples, 0.09%)alloc::raw_vec::RawVecInner<A>::try_allocate_in (3,958,709 samples, 0.09%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (3,958,709 samples, 0.09%)alloc::alloc::Global::alloc_impl (3,958,709 samples, 0.09%)alloc::alloc::alloc (3,958,709 samples, 0.09%)__rdl_alloc (3,958,709 samples, 0.09%)std::sys::alloc::unix::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (3,958,709 samples, 0.09%)malloc (3,958,709 samples, 0.09%)std::io::Read::read_buf (24,382,333 samples, 0.58%)std::io::default_read_buf (24,382,333 samples, 0.58%)std::io::Read::read_buf::_{{closure}} (24,382,333 samples, 0.58%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (24,382,333 samples, 0.58%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (24,382,333 samples, 0.58%)bzip2::mem::Decompress::decompress (24,382,333 samples, 0.58%)BZ2_bzDecompress (24,382,333 samples, 0.58%)rayon_core::registry::WorkerThread::wait_until (69,596,485 samples, 1.66%)rayon_core::registry::WorkerThread::wait_until_cold (69,596,485 samples, 1.66%)rayon_core::registry::WorkerThread::execute (69,596,485 samples, 1.66%)rayon_core::job::JobRef::execute (69,596,485 samples, 1.66%)<rayon_core::job::StackJob<L,F,R> as rayon_core::job::Job>::execute (69,596,485 samples, 1.66%)rayon_core::job::JobResult<T>::call (69,596,485 samples, 1.66%)rayon_core::unwind::halt_unwinding (69,596,485 samples, 1.66%)std::panic::catch_unwind (69,596,485 samples, 1.66%)std::panicking::try (69,596,485 samples, 1.66%)std::panicking::try::do_call (69,596,485 samples, 1.66%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (69,596,485 samples, 1.66%)rayon_core::job::JobResult<T>::call::_{{closure}} (69,596,485 samples, 1.66%)rayon_core::join::join_context::call_b::_{{closure}} (69,596,485 samples, 1.66%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (69,596,485 samples, 1.66%)rayon::iter::plumbing::bridge_producer_consumer::helper (69,596,485 samples, 1.66%)rayon_core::join::join_context (65,666,762 samples, 1.56%)rayon_core::registry::in_worker (65,666,762 samples, 1.56%)rayon_core::join::join_context::_{{closure}} (65,666,762 samples, 1.56%)rayon_core::unwind::halt_unwinding (65,666,762 samples, 1.56%)std::panic::catch_unwind (65,666,762 samples, 1.56%)std::panicking::try (65,666,762 samples, 1.56%)std::panicking::try::do_call (65,666,762 samples, 1.56%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (65,666,762 samples, 1.56%)rayon_core::join::join_context::call_a::_{{closure}} (65,666,762 samples, 1.56%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (65,666,762 samples, 1.56%)rayon::iter::plumbing::bridge_producer_consumer::helper (65,666,762 samples, 1.56%)rayon::iter::plumbing::Producer::fold_with (65,666,762 samples, 1.56%)<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (65,666,762 samples, 1.56%)rayon::iter::plumbing::Folder::consume_iter (65,666,762 samples, 1.56%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (65,666,762 samples, 1.56%)core::option::Option<T>::map (65,666,762 samples, 1.56%)core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (65,666,762 samples, 1.56%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (65,666,762 samples, 1.56%)wxbox_ar2::parse::_{{closure}} (65,666,762 samples, 1.56%)nexrad_data::volume::record::Record::decompress (61,708,053 samples, 1.47%)std::io::Read::read_to_end (61,708,053 samples, 1.47%)std::io::default_read_to_end (61,708,053 samples, 1.47%)std::io::default_read_to_end::small_probe_read (37,325,720 samples, 0.89%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (37,325,720 samples, 0.89%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (37,325,720 samples, 0.89%)bzip2::mem::Decompress::decompress (37,325,720 samples, 0.89%)BZ2_bzDecompress (37,325,720 samples, 0.89%)BZ2_decompress (37,325,720 samples, 0.89%)std::io::Read::read_buf (34,273,058 samples, 0.82%)std::io::default_read_buf (34,273,058 samples, 0.82%)std::io::Read::read_buf::_{{closure}} (34,273,058 samples, 0.82%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (34,273,058 samples, 0.82%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (34,273,058 samples, 0.82%)bzip2::mem::Decompress::decompress (34,273,058 samples, 0.82%)BZ2_bzDecompress (34,273,058 samples, 0.82%)nexrad_data::volume::record::Record::decompress (93,161,064 samples, 2.22%)n..std::io::Read::read_to_end (93,161,064 samples, 2.22%)s..std::io::default_read_to_end (93,161,064 samples, 2.22%)s..std::io::default_read_to_end::small_probe_read (58,888,006 samples, 1.40%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (58,888,006 samples, 1.40%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (58,888,006 samples, 1.40%)bzip2::mem::Decompress::decompress (58,888,006 samples, 1.40%)BZ2_bzDecompress (58,888,006 samples, 1.40%)BZ2_decompress (58,888,006 samples, 1.40%)nexrad_decode::messages::decode_message_contents (3,633,494 samples, 0.09%)nexrad_decode::messages::digital_radar_data::decode_digital_radar_data (3,633,494 samples, 0.09%)nexrad_decode::util::deserialize (3,633,494 samples, 0.09%)bincode::config::Options::deserialize_from (3,633,494 samples, 0.09%)bincode::internal::deserialize_from (3,633,494 samples, 0.09%)bincode::internal::deserialize_from_seed (3,633,494 samples, 0.09%)bincode::internal::deserialize_from_custom_seed (3,633,494 samples, 0.09%)<core::marker::PhantomData<T> as serde::de::DeserializeSeed>::deserialize (3,633,494 samples, 0.09%)nexrad_decode::messages::digital_radar_data::data_block_id::_::<impl serde::de::Deserialize for nexrad_decode::messages::digital_radar_data::data_block_id::DataBlockId>::deserialize (3,633,494 samples, 0.09%)<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_struct (3,633,494 samples, 0.09%)<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_tuple (3,633,494 samples, 0.09%)<nexrad_decode::messages::digital_radar_data::data_block_id::_::<impl serde::de::Deserialize for nexrad_decode::messages::digital_radar_data::data_block_id::DataBlockId>::deserialize::__Visitor as serde::de::Visitor>::visit_seq (3,633,494 samples, 0.09%)rayon_core::job::StackJob<L,F,R>::run_inline (367,234,880 samples, 8.73%)rayon_core::..rayon_core::join::join_context::call_b::_{{closure}} (367,234,880 samples, 8.73%)rayon_core::..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (367,234,880 samples, 8.73%)rayon::iter:..rayon::iter::plumbing::bridge_producer_consumer::helper (367,234,880 samples, 8.73%)rayon::iter:..rayon_core::join::join_context (202,172,767 samples, 4.81%)rayon_..rayon_core::registry::in_worker (202,172,767 samples, 4.81%)rayon_..rayon_core::join::join_context::_{{closure}} (202,172,767 samples, 4.81%)rayon_..rayon_core::unwind::halt_unwinding (100,802,672 samples, 2.40%)ra..std::panic::catch_unwind (100,802,672 samples, 2.40%)st..std::panicking::try (100,802,672 samples, 2.40%)st..std::panicking::try::do_call (100,802,672 samples, 2.40%)st..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (100,802,672 samples, 2.40%)<c..rayon_core::join::join_context::call_a::_{{closure}} (100,802,672 samples, 2.40%)ra..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (100,802,672 samples, 2.40%)ra..rayon::iter::plumbing::bridge_producer_consumer::helper (100,802,672 samples, 2.40%)ra..rayon::iter::plumbing::Producer::fold_with (100,802,672 samples, 2.40%)ra..<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (100,802,672 samples, 2.40%)<r..rayon::iter::plumbing::Folder::consume_iter (100,802,672 samples, 2.40%)ra..<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (100,802,672 samples, 2.40%)<c..core::option::Option<T>::map (100,802,672 samples, 2.40%)co..core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (100,802,672 samples, 2.40%)co..core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (100,802,672 samples, 2.40%)co..wxbox_ar2::parse::_{{closure}} (100,802,672 samples, 2.40%)wx..nexrad_data::volume::record::Record::messages (7,641,608 samples, 0.18%)nexrad_decode::messages::decode_messages (7,641,608 samples, 0.18%)nexrad_decode::messages::decode_message_header (4,008,114 samples, 0.10%)nexrad_decode::util::deserialize (4,008,114 samples, 0.10%)bincode::config::Options::deserialize_from (4,008,114 samples, 0.10%)bincode::internal::deserialize_from (4,008,114 samples, 0.10%)bincode::internal::deserialize_from_seed (4,008,114 samples, 0.10%)bincode::internal::deserialize_from_custom_seed (4,008,114 samples, 0.10%)<core::marker::PhantomData<T> as serde::de::DeserializeSeed>::deserialize (4,008,114 samples, 0.10%)nexrad_decode::messages::message_header::_::<impl serde::de::Deserialize for nexrad_decode::messages::message_header::MessageHeader>::deserialize (4,008,114 samples, 0.10%)<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_struct (4,008,114 samples, 0.10%)<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_tuple (4,008,114 samples, 0.10%)<nexrad_decode::messages::message_header::_::<impl serde::de::Deserialize for nexrad_decode::messages::message_header::MessageHeader>::deserialize::__Visitor as serde::de::Visitor>::visit_seq (4,008,114 samples, 0.10%)std::io::Read::read_buf (42,677,761 samples, 1.02%)std::io::default_read_buf (42,677,761 samples, 1.02%)std::io::Read::read_buf::_{{closure}} (42,677,761 samples, 1.02%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (42,677,761 samples, 1.02%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (42,677,761 samples, 1.02%)bzip2::mem::Decompress::decompress (42,677,761 samples, 1.02%)BZ2_bzDecompress (42,677,761 samples, 1.02%)rayon_core::job::StackJob<L,F,R>::run_inline (94,399,595 samples, 2.25%)r..rayon_core::join::join_context::call_b::_{{closure}} (94,399,595 samples, 2.25%)r..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (94,399,595 samples, 2.25%)r..rayon::iter::plumbing::bridge_producer_consumer::helper (94,399,595 samples, 2.25%)r..rayon_core::join::join_context (94,399,595 samples, 2.25%)r..rayon_core::registry::in_worker (94,399,595 samples, 2.25%)r..rayon_core::join::join_context::_{{closure}} (94,399,595 samples, 2.25%)r..rayon_core::unwind::halt_unwinding (94,399,595 samples, 2.25%)r..std::panic::catch_unwind (94,399,595 samples, 2.25%)s..std::panicking::try (94,399,595 samples, 2.25%)s..std::panicking::try::do_call (94,399,595 samples, 2.25%)s..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (94,399,595 samples, 2.25%)<..rayon_core::join::join_context::call_a::_{{closure}} (94,399,595 samples, 2.25%)r..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (94,399,595 samples, 2.25%)r..rayon::iter::plumbing::bridge_producer_consumer::helper (94,399,595 samples, 2.25%)r..rayon::iter::plumbing::Producer::fold_with (94,399,595 samples, 2.25%)r..<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (94,399,595 samples, 2.25%)<..rayon::iter::plumbing::Folder::consume_iter (94,399,595 samples, 2.25%)r..<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (94,399,595 samples, 2.25%)<..core::option::Option<T>::map (94,399,595 samples, 2.25%)c..core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (94,399,595 samples, 2.25%)c..core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (94,399,595 samples, 2.25%)c..wxbox_ar2::parse::_{{closure}} (94,399,595 samples, 2.25%)w..nexrad_data::volume::record::Record::decompress (94,399,595 samples, 2.25%)n..std::io::Read::read_to_end (94,399,595 samples, 2.25%)s..std::io::default_read_to_end (94,399,595 samples, 2.25%)s..std::io::default_read_to_end::small_probe_read (51,721,834 samples, 1.23%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (51,721,834 samples, 1.23%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (51,721,834 samples, 1.23%)bzip2::mem::Decompress::decompress (51,721,834 samples, 1.23%)BZ2_bzDecompress (51,721,834 samples, 1.23%)BZ2_decompress (51,721,834 samples, 1.23%)[unknown] (3,816,284 samples, 0.09%)std::io::Read::read_buf (14,861,140 samples, 0.35%)std::io::default_read_buf (14,861,140 samples, 0.35%)std::io::Read::read_buf::_{{closure}} (14,861,140 samples, 0.35%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (14,861,140 samples, 0.35%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (14,861,140 samples, 0.35%)bzip2::mem::Decompress::decompress (14,861,140 samples, 0.35%)BZ2_bzDecompress (14,861,140 samples, 0.35%)rayon_core::registry::WorkerThread::wait_until (140,545,087 samples, 3.34%)ray..rayon_core::registry::WorkerThread::wait_until_cold (140,545,087 samples, 3.34%)ray..rayon_core::registry::WorkerThread::execute (140,545,087 samples, 3.34%)ray..rayon_core::job::JobRef::execute (140,545,087 samples, 3.34%)ray..<rayon_core::job::StackJob<L,F,R> as rayon_core::job::Job>::execute (140,545,087 samples, 3.34%)<ra..rayon_core::job::JobResult<T>::call (140,545,087 samples, 3.34%)ray..rayon_core::unwind::halt_unwinding (140,545,087 samples, 3.34%)ray..std::panic::catch_unwind (140,545,087 samples, 3.34%)std..std::panicking::try (140,545,087 samples, 3.34%)std..std::panicking::try::do_call (140,545,087 samples, 3.34%)std..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (140,545,087 samples, 3.34%)<co..rayon_core::job::JobResult<T>::call::_{{closure}} (140,545,087 samples, 3.34%)ray..rayon_core::join::join_context::call_b::_{{closure}} (140,545,087 samples, 3.34%)ray..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (140,545,087 samples, 3.34%)ray..rayon::iter::plumbing::bridge_producer_consumer::helper (140,545,087 samples, 3.34%)ray..rayon_core::join::join_context (140,545,087 samples, 3.34%)ray..rayon_core::registry::in_worker (140,545,087 samples, 3.34%)ray..rayon_core::join::join_context::_{{closure}} (140,545,087 samples, 3.34%)ray..rayon_core::unwind::halt_unwinding (140,545,087 samples, 3.34%)ray..std::panic::catch_unwind (140,545,087 samples, 3.34%)std..std::panicking::try (140,545,087 samples, 3.34%)std..std::panicking::try::do_call (140,545,087 samples, 3.34%)std..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (140,545,087 samples, 3.34%)<co..rayon_core::join::join_context::call_a::_{{closure}} (140,545,087 samples, 3.34%)ray..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (140,545,087 samples, 3.34%)ray..rayon::iter::plumbing::bridge_producer_consumer::helper (140,545,087 samples, 3.34%)ray..rayon_core::join::join_context (140,545,087 samples, 3.34%)ray..rayon_core::registry::in_worker (140,545,087 samples, 3.34%)ray..rayon_core::join::join_context::_{{closure}} (140,545,087 samples, 3.34%)ray..rayon_core::unwind::halt_unwinding (46,145,492 samples, 1.10%)std::panic::catch_unwind (46,145,492 samples, 1.10%)std::panicking::try (46,145,492 samples, 1.10%)std::panicking::try::do_call (46,145,492 samples, 1.10%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (46,145,492 samples, 1.10%)rayon_core::join::join_context::call_a::_{{closure}} (46,145,492 samples, 1.10%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (46,145,492 samples, 1.10%)rayon::iter::plumbing::bridge_producer_consumer::helper (46,145,492 samples, 1.10%)rayon::iter::plumbing::Producer::fold_with (46,145,492 samples, 1.10%)<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (46,145,492 samples, 1.10%)rayon::iter::plumbing::Folder::consume_iter (46,145,492 samples, 1.10%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (46,145,492 samples, 1.10%)core::option::Option<T>::map (46,145,492 samples, 1.10%)core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (46,145,492 samples, 1.10%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (46,145,492 samples, 1.10%)wxbox_ar2::parse::_{{closure}} (46,145,492 samples, 1.10%)nexrad_data::volume::record::Record::decompress (46,145,492 samples, 1.10%)std::io::Read::read_to_end (46,145,492 samples, 1.10%)std::io::default_read_to_end (46,145,492 samples, 1.10%)std::io::default_read_to_end::small_probe_read (31,284,352 samples, 0.74%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (31,284,352 samples, 0.74%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (31,284,352 samples, 0.74%)bzip2::mem::Decompress::decompress (31,284,352 samples, 0.74%)BZ2_bzDecompress (31,284,352 samples, 0.74%)BZ2_decompress (31,284,352 samples, 0.74%)<alloc::boxed::Box<T,A> as core::clone::Clone>::clone (3,870,338 samples, 0.09%)<T as core::clone::CloneToUninit>::clone_to_uninit (3,870,338 samples, 0.09%)<T as core::clone::uninit::CopySpec>::clone_one (3,870,338 samples, 0.09%)<nexrad_decode::messages::digital_radar_data::message::Message as core::clone::Clone>::clone (3,870,338 samples, 0.09%)<core::option::Option<T> as core::clone::Clone>::clone (3,870,338 samples, 0.09%)<nexrad_decode::messages::digital_radar_data::generic_data_block::GenericDataBlock as core::clone::Clone>::clone (3,870,338 samples, 0.09%)<alloc::vec::Vec<T,A> as core::clone::Clone>::clone (3,870,338 samples, 0.09%)alloc::slice::<impl [T]>::to_vec_in (3,870,338 samples, 0.09%)alloc::slice::hack::to_vec (3,870,338 samples, 0.09%)<T as alloc::slice::hack::ConvertVec>::to_vec (3,870,338 samples, 0.09%)core::ptr::const_ptr::<impl *const T>::copy_to_nonoverlapping (3,870,338 samples, 0.09%)core::intrinsics::copy_nonoverlapping (3,870,338 samples, 0.09%)[libc.so.6] (3,870,338 samples, 0.09%)core::ptr::drop_in_place<nexrad_decode::messages::message::Message> (3,650,069 samples, 0.09%)core::ptr::drop_in_place<nexrad_decode::messages::message::MessageContents> (3,650,069 samples, 0.09%)core::ptr::drop_in_place<alloc::boxed::Box<nexrad_decode::messages::digital_radar_data::message::Message>> (3,650,069 samples, 0.09%)core::ptr::drop_in_place<nexrad_decode::messages::digital_radar_data::message::Message> (3,650,069 samples, 0.09%)core::ptr::drop_in_place<core::option::Option<nexrad_decode::messages::digital_radar_data::generic_data_block::GenericDataBlock>> (3,650,069 samples, 0.09%)core::ptr::drop_in_place<nexrad_decode::messages::digital_radar_data::generic_data_block::GenericDataBlock> (3,650,069 samples, 0.09%)core::ptr::drop_in_place<alloc::vec::Vec<u8>> (3,650,069 samples, 0.09%)core::ptr::drop_in_place<alloc::raw_vec::RawVec<u8>> (3,650,069 samples, 0.09%)<alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop (3,650,069 samples, 0.09%)alloc::raw_vec::RawVecInner<A>::deallocate (3,650,069 samples, 0.09%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (3,650,069 samples, 0.09%)alloc::alloc::dealloc (3,650,069 samples, 0.09%)__rdl_dealloc (3,650,069 samples, 0.09%)std::sys::alloc::unix::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (3,650,069 samples, 0.09%)cfree (3,650,069 samples, 0.09%)[libc.so.6] (3,650,069 samples, 0.09%)std::io::Read::read_buf (123,935,720 samples, 2.95%)st..std::io::default_read_buf (123,935,720 samples, 2.95%)st..std::io::Read::read_buf::_{{closure}} (123,935,720 samples, 2.95%)st..<bzip2::read::BzDecoder<R> as std::io::Read>::read (123,935,720 samples, 2.95%)<b..<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (123,935,720 samples, 2.95%)<b..bzip2::mem::Decompress::decompress (123,935,720 samples, 2.95%)bz..BZ2_bzDecompress (123,935,720 samples, 2.95%)BZ..nexrad_data::volume::record::Record::decompress (326,826,094 samples, 7.77%)nexrad_data..std::io::Read::read_to_end (326,826,094 samples, 7.77%)std::io::Re..std::io::default_read_to_end (326,826,094 samples, 7.77%)std::io::de..std::io::default_read_to_end::small_probe_read (202,890,374 samples, 4.83%)std::i..<bzip2::read::BzDecoder<R> as std::io::Read>::read (202,890,374 samples, 4.83%)<bzip2..<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (202,890,374 samples, 4.83%)<bzip2..bzip2::mem::Decompress::decompress (202,890,374 samples, 4.83%)bzip2:..BZ2_bzDecompress (202,890,374 samples, 4.83%)BZ2_bz..BZ2_decompress (202,890,374 samples, 4.83%)BZ2_de..[unknown] (3,872,198 samples, 0.09%)[unknown] (3,872,198 samples, 0.09%)rayon::iter::plumbing::Producer::fold_with (338,158,467 samples, 8.04%)rayon::iter..<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (338,158,467 samples, 8.04%)<rayon::ite..rayon::iter::plumbing::Folder::consume_iter (338,158,467 samples, 8.04%)rayon::iter..<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (338,158,467 samples, 8.04%)<core::iter..core::option::Option<T>::map (338,158,467 samples, 8.04%)core::optio..core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (338,158,467 samples, 8.04%)core::ops::..core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (338,158,467 samples, 8.04%)core::ops::..wxbox_ar2::parse::_{{closure}} (338,158,467 samples, 8.04%)wxbox_ar2::..nexrad_data::volume::record::Record::messages (3,811,966 samples, 0.09%)nexrad_decode::messages::decode_messages (3,811,966 samples, 0.09%)nexrad_decode::messages::decode_message_contents (3,811,966 samples, 0.09%)nexrad_decode::messages::digital_radar_data::decode_digital_radar_data (3,811,966 samples, 0.09%)nexrad_decode::messages::digital_radar_data::data_block_id::DataBlockId::data_block_name (3,811,966 samples, 0.09%)alloc::string::String::from_utf8_lossy (3,811,966 samples, 0.09%)std::io::Read::read_buf (7,797,159 samples, 0.19%)std::io::default_read_buf (7,797,159 samples, 0.19%)std::io::Read::read_buf::_{{closure}} (7,797,159 samples, 0.19%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (7,797,159 samples, 0.19%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (7,797,159 samples, 0.19%)bzip2::mem::Decompress::decompress (7,797,159 samples, 0.19%)BZ2_bzDecompress (7,797,159 samples, 0.19%)nexrad_data::volume::record::Record::decompress (26,283,523 samples, 0.63%)std::io::Read::read_to_end (26,283,523 samples, 0.63%)std::io::default_read_to_end (26,283,523 samples, 0.63%)std::io::default_read_to_end::small_probe_read (18,486,364 samples, 0.44%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (18,486,364 samples, 0.44%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (18,486,364 samples, 0.44%)bzip2::mem::Decompress::decompress (18,486,364 samples, 0.44%)BZ2_bzDecompress (18,486,364 samples, 0.44%)BZ2_decompress (18,486,364 samples, 0.44%)rayon_core::job::StackJob<L,F,R>::run_inline (30,151,703 samples, 0.72%)rayon_core::join::join_context::call_b::_{{closure}} (30,151,703 samples, 0.72%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (30,151,703 samples, 0.72%)rayon::iter::plumbing::bridge_producer_consumer::helper (30,151,703 samples, 0.72%)rayon::iter::plumbing::Producer::fold_with (30,151,703 samples, 0.72%)<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (30,151,703 samples, 0.72%)rayon::iter::plumbing::Folder::consume_iter (30,151,703 samples, 0.72%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (30,151,703 samples, 0.72%)core::option::Option<T>::map (30,151,703 samples, 0.72%)core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (30,151,703 samples, 0.72%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (30,151,703 samples, 0.72%)wxbox_ar2::parse::_{{closure}} (30,151,703 samples, 0.72%)nexrad_data::volume::record::Record::messages (3,868,180 samples, 0.09%)nexrad_decode::messages::decode_messages (3,868,180 samples, 0.09%)nexrad_decode::messages::decode_message_contents (3,868,180 samples, 0.09%)nexrad_decode::messages::digital_radar_data::decode_digital_radar_data (3,868,180 samples, 0.09%)nexrad_decode::util::deserialize (3,868,180 samples, 0.09%)bincode::config::Options::deserialize_from (3,868,180 samples, 0.09%)bincode::internal::deserialize_from (3,868,180 samples, 0.09%)bincode::internal::deserialize_from_seed (3,868,180 samples, 0.09%)bincode::internal::deserialize_from_custom_seed (3,868,180 samples, 0.09%)<core::marker::PhantomData<T> as serde::de::DeserializeSeed>::deserialize (3,868,180 samples, 0.09%)nexrad_decode::messages::digital_radar_data::generic_data_block::_::<impl serde::de::Deserialize for nexrad_decode::messages::digital_radar_data::generic_data_block::GenericDataBlockHeader>::deserialize (3,868,180 samples, 0.09%)<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_struct (3,868,180 samples, 0.09%)<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_tuple (3,868,180 samples, 0.09%)<nexrad_decode::messages::digital_radar_data::generic_data_block::_::<impl serde::de::Deserialize for nexrad_decode::messages::digital_radar_data::generic_data_block::GenericDataBlockHeader>::deserialize::__Visitor as serde::de::Visitor>::visit_seq (3,868,180 samples, 0.09%)serde::de::SeqAccess::next_element (3,868,180 samples, 0.09%)<<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_tuple::Access<R,O> as serde::de::SeqAccess>::next_element_seed (3,868,180 samples, 0.09%)<core::marker::PhantomData<T> as serde::de::DeserializeSeed>::deserialize (3,868,180 samples, 0.09%)nexrad_decode::messages::digital_radar_data::data_block_id::_::<impl serde::de::Deserialize for nexrad_decode::messages::digital_radar_data::data_block_id::DataBlockId>::deserialize (3,868,180 samples, 0.09%)<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_struct (3,868,180 samples, 0.09%)<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_tuple (3,868,180 samples, 0.09%)<nexrad_decode::messages::digital_radar_data::data_block_id::_::<impl serde::de::Deserialize for nexrad_decode::messages::digital_radar_data::data_block_id::DataBlockId>::deserialize::__Visitor as serde::de::Visitor>::visit_seq (3,868,180 samples, 0.09%)serde::de::SeqAccess::next_element (3,868,180 samples, 0.09%)<<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_tuple::Access<R,O> as serde::de::SeqAccess>::next_element_seed (3,868,180 samples, 0.09%)<core::marker::PhantomData<T> as serde::de::DeserializeSeed>::deserialize (3,868,180 samples, 0.09%)serde::de::impls::<impl serde::de::Deserialize for u8>::deserialize (3,868,180 samples, 0.09%)<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_u8 (3,868,180 samples, 0.09%)bincode::de::Deserializer<R,O>::deserialize_byte (3,868,180 samples, 0.09%)bincode::byteorder::ReadBytesExt::read_u8 (3,868,180 samples, 0.09%)<bincode::de::read::IoReader<R> as std::io::Read>::read_exact (3,868,180 samples, 0.09%)std::io::impls::<impl std::io::Read for &mut R>::read_exact (3,868,180 samples, 0.09%)<std::io::cursor::Cursor<T> as std::io::Read>::read_exact (3,868,180 samples, 0.09%)std::io::cursor::Cursor<T>::split (3,868,180 samples, 0.09%)std::io::Read::read_buf (7,450,810 samples, 0.18%)std::io::default_read_buf (7,450,810 samples, 0.18%)std::io::Read::read_buf::_{{closure}} (7,450,810 samples, 0.18%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (7,450,810 samples, 0.18%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (7,450,810 samples, 0.18%)bzip2::mem::Decompress::decompress (7,450,810 samples, 0.18%)BZ2_bzDecompress (7,450,810 samples, 0.18%)rayon_core::job::StackJob<L,F,R>::run_inline (48,307,067 samples, 1.15%)rayon_core::join::join_context::call_b::_{{closure}} (48,307,067 samples, 1.15%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (48,307,067 samples, 1.15%)rayon::iter::plumbing::bridge_producer_consumer::helper (48,307,067 samples, 1.15%)rayon_core::join::join_context (48,307,067 samples, 1.15%)rayon_core::registry::in_worker (48,307,067 samples, 1.15%)rayon_core::join::join_context::_{{closure}} (48,307,067 samples, 1.15%)rayon_core::unwind::halt_unwinding (18,155,364 samples, 0.43%)std::panic::catch_unwind (18,155,364 samples, 0.43%)std::panicking::try (18,155,364 samples, 0.43%)std::panicking::try::do_call (18,155,364 samples, 0.43%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (18,155,364 samples, 0.43%)rayon_core::join::join_context::call_a::_{{closure}} (18,155,364 samples, 0.43%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (18,155,364 samples, 0.43%)rayon::iter::plumbing::bridge_producer_consumer::helper (18,155,364 samples, 0.43%)rayon::iter::plumbing::Producer::fold_with (18,155,364 samples, 0.43%)<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (18,155,364 samples, 0.43%)rayon::iter::plumbing::Folder::consume_iter (18,155,364 samples, 0.43%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (18,155,364 samples, 0.43%)core::option::Option<T>::map (18,155,364 samples, 0.43%)core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (18,155,364 samples, 0.43%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (18,155,364 samples, 0.43%)wxbox_ar2::parse::_{{closure}} (18,155,364 samples, 0.43%)nexrad_data::volume::record::Record::decompress (18,155,364 samples, 0.43%)std::io::Read::read_to_end (18,155,364 samples, 0.43%)std::io::default_read_to_end (18,155,364 samples, 0.43%)std::io::default_read_to_end::small_probe_read (10,704,554 samples, 0.25%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (10,704,554 samples, 0.25%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (10,704,554 samples, 0.25%)bzip2::mem::Decompress::decompress (10,704,554 samples, 0.25%)BZ2_bzDecompress (10,704,554 samples, 0.25%)BZ2_decompress (10,704,554 samples, 0.25%)std::io::Read::read_buf (7,489,209 samples, 0.18%)std::io::default_read_buf (7,489,209 samples, 0.18%)std::io::Read::read_buf::_{{closure}} (7,489,209 samples, 0.18%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (7,489,209 samples, 0.18%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (7,489,209 samples, 0.18%)bzip2::mem::Decompress::decompress (7,489,209 samples, 0.18%)BZ2_bzDecompress (7,489,209 samples, 0.18%)rayon_core::registry::WorkerThread::wait_until (29,155,457 samples, 0.69%)rayon_core::registry::WorkerThread::wait_until_cold (29,155,457 samples, 0.69%)rayon_core::registry::WorkerThread::execute (29,155,457 samples, 0.69%)rayon_core::job::JobRef::execute (29,155,457 samples, 0.69%)<rayon_core::job::StackJob<L,F,R> as rayon_core::job::Job>::execute (29,155,457 samples, 0.69%)rayon_core::job::JobResult<T>::call (29,155,457 samples, 0.69%)rayon_core::unwind::halt_unwinding (29,155,457 samples, 0.69%)std::panic::catch_unwind (29,155,457 samples, 0.69%)std::panicking::try (29,155,457 samples, 0.69%)std::panicking::try::do_call (29,155,457 samples, 0.69%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (29,155,457 samples, 0.69%)rayon_core::job::JobResult<T>::call::_{{closure}} (29,155,457 samples, 0.69%)rayon_core::join::join_context::call_b::_{{closure}} (29,155,457 samples, 0.69%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (29,155,457 samples, 0.69%)rayon::iter::plumbing::bridge_producer_consumer::helper (29,155,457 samples, 0.69%)rayon::iter::plumbing::Producer::fold_with (29,155,457 samples, 0.69%)<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (29,155,457 samples, 0.69%)rayon::iter::plumbing::Folder::consume_iter (29,155,457 samples, 0.69%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (29,155,457 samples, 0.69%)core::option::Option<T>::map (29,155,457 samples, 0.69%)core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (29,155,457 samples, 0.69%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (29,155,457 samples, 0.69%)wxbox_ar2::parse::_{{closure}} (29,155,457 samples, 0.69%)nexrad_data::volume::record::Record::decompress (29,155,457 samples, 0.69%)std::io::Read::read_to_end (29,155,457 samples, 0.69%)std::io::default_read_to_end (29,155,457 samples, 0.69%)std::io::default_read_to_end::small_probe_read (21,666,248 samples, 0.52%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (21,666,248 samples, 0.52%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (21,666,248 samples, 0.52%)bzip2::mem::Decompress::decompress (21,666,248 samples, 0.52%)BZ2_bzDecompress (21,666,248 samples, 0.52%)BZ2_decompress (21,666,248 samples, 0.52%)[libc.so.6] (3,471,128 samples, 0.08%)std::io::Read::read_buf (22,405,576 samples, 0.53%)std::io::default_read_buf (22,405,576 samples, 0.53%)std::io::Read::read_buf::_{{closure}} (22,405,576 samples, 0.53%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (22,405,576 samples, 0.53%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (22,405,576 samples, 0.53%)bzip2::mem::Decompress::decompress (22,405,576 samples, 0.53%)BZ2_bzDecompress (22,405,576 samples, 0.53%)rayon_core::job::StackJob<L,F,R>::run_inline (986,068,678 samples, 23.45%)rayon_core::job::StackJob<L,F,R>::run..rayon_core::join::join_context::call_b::_{{closure}} (986,068,678 samples, 23.45%)rayon_core::join::join_context::call_..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (986,068,678 samples, 23.45%)rayon::iter::plumbing::bridge_produce..rayon::iter::plumbing::bridge_producer_consumer::helper (986,068,678 samples, 23.45%)rayon::iter::plumbing::bridge_produce..rayon_core::join::join_context (986,068,678 samples, 23.45%)rayon_core::join::join_contextrayon_core::registry::in_worker (986,068,678 samples, 23.45%)rayon_core::registry::in_workerrayon_core::join::join_context::_{{closure}} (986,068,678 samples, 23.45%)rayon_core::join::join_context::_{{cl..rayon_core::unwind::halt_unwinding (478,288,711 samples, 11.38%)rayon_core::unwin..std::panic::catch_unwind (478,288,711 samples, 11.38%)std::panic::catch..std::panicking::try (478,288,711 samples, 11.38%)std::panicking::t..std::panicking::try::do_call (478,288,711 samples, 11.38%)std::panicking::t..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (478,288,711 samples, 11.38%)<core::panic::unw..rayon_core::join::join_context::call_a::_{{closure}} (478,288,711 samples, 11.38%)rayon_core::join:..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (478,288,711 samples, 11.38%)rayon::iter::plum..rayon::iter::plumbing::bridge_producer_consumer::helper (478,288,711 samples, 11.38%)rayon::iter::plum..rayon_core::join::join_context (140,130,244 samples, 3.33%)ray..rayon_core::registry::in_worker (140,130,244 samples, 3.33%)ray..rayon_core::join::join_context::_{{closure}} (140,130,244 samples, 3.33%)ray..rayon_core::unwind::halt_unwinding (62,667,720 samples, 1.49%)std::panic::catch_unwind (62,667,720 samples, 1.49%)std::panicking::try (62,667,720 samples, 1.49%)std::panicking::try::do_call (62,667,720 samples, 1.49%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (62,667,720 samples, 1.49%)rayon_core::join::join_context::call_a::_{{closure}} (62,667,720 samples, 1.49%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (62,667,720 samples, 1.49%)rayon::iter::plumbing::bridge_producer_consumer::helper (62,667,720 samples, 1.49%)rayon::iter::plumbing::Producer::fold_with (62,667,720 samples, 1.49%)<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (62,667,720 samples, 1.49%)rayon::iter::plumbing::Folder::consume_iter (62,667,720 samples, 1.49%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (62,667,720 samples, 1.49%)core::option::Option<T>::map (62,667,720 samples, 1.49%)core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (62,667,720 samples, 1.49%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (62,667,720 samples, 1.49%)wxbox_ar2::parse::_{{closure}} (62,667,720 samples, 1.49%)nexrad_data::volume::record::Record::decompress (62,667,720 samples, 1.49%)std::io::Read::read_to_end (62,667,720 samples, 1.49%)std::io::default_read_to_end (62,667,720 samples, 1.49%)std::io::default_read_to_end::small_probe_read (40,262,144 samples, 0.96%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (40,262,144 samples, 0.96%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (40,262,144 samples, 0.96%)bzip2::mem::Decompress::decompress (40,262,144 samples, 0.96%)BZ2_bzDecompress (40,262,144 samples, 0.96%)BZ2_decompress (40,262,144 samples, 0.96%)[libc.so.6] (7,298,197 samples, 0.17%)std::io::Read::read_buf (19,604,744 samples, 0.47%)std::io::default_read_buf (19,604,744 samples, 0.47%)std::io::Read::read_buf::_{{closure}} (19,604,744 samples, 0.47%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (19,604,744 samples, 0.47%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (19,604,744 samples, 0.47%)bzip2::mem::Decompress::decompress (19,604,744 samples, 0.47%)BZ2_bzDecompress (19,604,744 samples, 0.47%)nexrad_data::volume::record::Record::decompress (53,359,053 samples, 1.27%)std::io::Read::read_to_end (53,359,053 samples, 1.27%)std::io::default_read_to_end (53,359,053 samples, 1.27%)std::io::default_read_to_end::small_probe_read (33,754,309 samples, 0.80%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (33,754,309 samples, 0.80%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (33,754,309 samples, 0.80%)bzip2::mem::Decompress::decompress (33,754,309 samples, 0.80%)BZ2_bzDecompress (33,754,309 samples, 0.80%)BZ2_decompress (33,754,309 samples, 0.80%)rayon::iter::plumbing::Producer::fold_with (57,253,242 samples, 1.36%)<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (57,253,242 samples, 1.36%)rayon::iter::plumbing::Folder::consume_iter (57,253,242 samples, 1.36%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (57,253,242 samples, 1.36%)core::option::Option<T>::map (57,253,242 samples, 1.36%)core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (57,253,242 samples, 1.36%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (57,253,242 samples, 1.36%)wxbox_ar2::parse::_{{closure}} (57,253,242 samples, 1.36%)nexrad_data::volume::record::Record::messages (3,894,189 samples, 0.09%)nexrad_decode::messages::decode_messages (3,894,189 samples, 0.09%)nexrad_decode::messages::decode_message_contents (3,894,189 samples, 0.09%)nexrad_decode::messages::digital_radar_data::decode_digital_radar_data (3,894,189 samples, 0.09%)nexrad_decode::messages::digital_radar_data::data_block_id::DataBlockId::data_block_name (3,894,189 samples, 0.09%)alloc::string::String::from_utf8_lossy (3,894,189 samples, 0.09%)std::io::Read::read_buf (3,739,468 samples, 0.09%)std::io::default_read_buf (3,739,468 samples, 0.09%)std::io::Read::read_buf::_{{closure}} (3,739,468 samples, 0.09%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (3,739,468 samples, 0.09%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (3,739,468 samples, 0.09%)bzip2::mem::Decompress::decompress (3,739,468 samples, 0.09%)BZ2_bzDecompress (3,739,468 samples, 0.09%)nexrad_data::volume::record::Record::decompress (16,569,475 samples, 0.39%)std::io::Read::read_to_end (16,569,475 samples, 0.39%)std::io::default_read_to_end (16,569,475 samples, 0.39%)std::io::default_read_to_end::small_probe_read (12,830,007 samples, 0.31%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (12,830,007 samples, 0.31%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (12,830,007 samples, 0.31%)bzip2::mem::Decompress::decompress (12,830,007 samples, 0.31%)BZ2_bzDecompress (12,830,007 samples, 0.31%)BZ2_decompress (12,830,007 samples, 0.31%)rayon_core::registry::WorkerThread::execute (77,636,121 samples, 1.85%)r..rayon_core::job::JobRef::execute (77,636,121 samples, 1.85%)r..<rayon_core::job::StackJob<L,F,R> as rayon_core::job::Job>::execute (77,636,121 samples, 1.85%)<..rayon_core::job::JobResult<T>::call (77,636,121 samples, 1.85%)r..rayon_core::unwind::halt_unwinding (77,636,121 samples, 1.85%)r..std::panic::catch_unwind (77,636,121 samples, 1.85%)s..std::panicking::try (77,636,121 samples, 1.85%)s..std::panicking::try::do_call (77,636,121 samples, 1.85%)s..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (77,636,121 samples, 1.85%)<..rayon_core::job::JobResult<T>::call::_{{closure}} (77,636,121 samples, 1.85%)r..rayon_core::join::join_context::call_b::_{{closure}} (77,636,121 samples, 1.85%)r..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (77,636,121 samples, 1.85%)r..rayon::iter::plumbing::bridge_producer_consumer::helper (77,636,121 samples, 1.85%)r..rayon_core::join::join_context (20,382,879 samples, 0.48%)rayon_core::registry::in_worker (20,382,879 samples, 0.48%)rayon_core::join::join_context::_{{closure}} (20,382,879 samples, 0.48%)rayon_core::unwind::halt_unwinding (20,382,879 samples, 0.48%)std::panic::catch_unwind (20,382,879 samples, 0.48%)std::panicking::try (20,382,879 samples, 0.48%)std::panicking::try::do_call (20,382,879 samples, 0.48%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (20,382,879 samples, 0.48%)rayon_core::join::join_context::call_a::_{{closure}} (20,382,879 samples, 0.48%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (20,382,879 samples, 0.48%)rayon::iter::plumbing::bridge_producer_consumer::helper (20,382,879 samples, 0.48%)rayon::iter::plumbing::Producer::fold_with (20,382,879 samples, 0.48%)<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (20,382,879 samples, 0.48%)rayon::iter::plumbing::Folder::consume_iter (20,382,879 samples, 0.48%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (20,382,879 samples, 0.48%)core::option::Option<T>::map (20,382,879 samples, 0.48%)core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (20,382,879 samples, 0.48%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (20,382,879 samples, 0.48%)wxbox_ar2::parse::_{{closure}} (20,382,879 samples, 0.48%)nexrad_data::volume::record::Record::messages (3,813,404 samples, 0.09%)nexrad_decode::messages::decode_messages (3,813,404 samples, 0.09%)nexrad_decode::messages::decode_message_contents (3,813,404 samples, 0.09%)nexrad_decode::messages::digital_radar_data::decode_digital_radar_data (3,813,404 samples, 0.09%)nexrad_decode::messages::digital_radar_data::data_block_id::DataBlockId::data_block_name (3,813,404 samples, 0.09%)<T as alloc::string::ToString>::to_string (3,813,404 samples, 0.09%)<alloc::borrow::Cow<str> as alloc::string::SpecToString>::spec_to_string (3,813,404 samples, 0.09%)alloc::str::<impl alloc::borrow::ToOwned for str>::to_owned (3,813,404 samples, 0.09%)alloc::slice::<impl alloc::borrow::ToOwned for [T]>::to_owned (3,813,404 samples, 0.09%)alloc::slice::<impl [T]>::to_vec (3,813,404 samples, 0.09%)alloc::slice::<impl [T]>::to_vec_in (3,813,404 samples, 0.09%)alloc::slice::hack::to_vec (3,813,404 samples, 0.09%)<T as alloc::slice::hack::ConvertVec>::to_vec (3,813,404 samples, 0.09%)alloc::vec::Vec<T,A>::with_capacity_in (3,813,404 samples, 0.09%)alloc::raw_vec::RawVec<T,A>::with_capacity_in (3,813,404 samples, 0.09%)alloc::raw_vec::RawVecInner<A>::with_capacity_in (3,813,404 samples, 0.09%)alloc::raw_vec::RawVecInner<A>::try_allocate_in (3,813,404 samples, 0.09%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (3,813,404 samples, 0.09%)alloc::alloc::Global::alloc_impl (3,813,404 samples, 0.09%)alloc::alloc::alloc (3,813,404 samples, 0.09%)__rdl_alloc (3,813,404 samples, 0.09%)std::sys::alloc::unix::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (3,813,404 samples, 0.09%)malloc (3,813,404 samples, 0.09%)rayon_core::registry::WorkerThread::wait_until (77,636,624 samples, 1.85%)r..rayon_core::registry::WorkerThread::wait_until_cold (77,636,624 samples, 1.85%)r..core::io::borrowed_buf::BorrowedCursor::ensure_init (3,556,060 samples, 0.08%)core::intrinsics::write_bytes (3,556,060 samples, 0.08%)[libc.so.6] (3,556,060 samples, 0.08%)[unknown] (3,556,060 samples, 0.08%)std::io::Read::read_buf (76,253,568 samples, 1.81%)s..std::io::default_read_buf (76,253,568 samples, 1.81%)s..std::io::Read::read_buf::_{{closure}} (72,697,508 samples, 1.73%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (72,697,508 samples, 1.73%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (72,697,508 samples, 1.73%)bzip2::mem::Decompress::decompress (72,697,508 samples, 1.73%)BZ2_bzDecompress (72,697,508 samples, 1.73%)BZ2_hbCreateDecodeTables (688,307 samples, 0.02%)nexrad_data::volume::record::Record::decompress (183,828,499 samples, 4.37%)nexra..std::io::Read::read_to_end (183,828,499 samples, 4.37%)std::..std::io::default_read_to_end (183,828,499 samples, 4.37%)std::..std::io::default_read_to_end::small_probe_read (107,574,931 samples, 2.56%)st..<bzip2::read::BzDecoder<R> as std::io::Read>::read (107,574,931 samples, 2.56%)<b..<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (107,574,931 samples, 2.56%)<b..bzip2::mem::Decompress::decompress (107,574,931 samples, 2.56%)bz..BZ2_bzDecompress (107,574,931 samples, 2.56%)BZ..BZ2_decompress (107,574,931 samples, 2.56%)BZ..rayon::iter::plumbing::Producer::fold_with (186,946,057 samples, 4.45%)rayon..<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (186,946,057 samples, 4.45%)<rayo..rayon::iter::plumbing::Folder::consume_iter (186,946,057 samples, 4.45%)rayon..<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (186,946,057 samples, 4.45%)<core..core::option::Option<T>::map (186,946,057 samples, 4.45%)core:..core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (186,946,057 samples, 4.45%)core:..core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (186,946,057 samples, 4.45%)core:..wxbox_ar2::parse::_{{closure}} (186,946,057 samples, 4.45%)wxbox..nexrad_data::volume::record::Record::messages (3,117,558 samples, 0.07%)nexrad_decode::messages::decode_messages (3,117,558 samples, 0.07%)nexrad_decode::messages::decode_message_contents (3,117,558 samples, 0.07%)nexrad_decode::messages::digital_radar_data::decode_digital_radar_data (3,117,558 samples, 0.07%)nexrad_decode::messages::digital_radar_data::data_block_id::DataBlockId::data_block_name (3,117,558 samples, 0.07%)std::io::Read::read_buf (26,666,391 samples, 0.63%)std::io::default_read_buf (26,666,391 samples, 0.63%)std::io::Read::read_buf::_{{closure}} (26,666,391 samples, 0.63%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (26,666,391 samples, 0.63%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (26,666,391 samples, 0.63%)bzip2::mem::Decompress::decompress (26,666,391 samples, 0.63%)BZ2_bzDecompress (26,666,391 samples, 0.63%)rayon::iter::plumbing::Producer::fold_with (79,235,809 samples, 1.88%)r..<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (79,235,809 samples, 1.88%)<..rayon::iter::plumbing::Folder::consume_iter (79,235,809 samples, 1.88%)r..<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (79,235,809 samples, 1.88%)<..core::option::Option<T>::map (79,235,809 samples, 1.88%)c..core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (79,235,809 samples, 1.88%)c..core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (79,235,809 samples, 1.88%)c..wxbox_ar2::parse::_{{closure}} (79,235,809 samples, 1.88%)w..nexrad_data::volume::record::Record::decompress (79,235,809 samples, 1.88%)n..std::io::Read::read_to_end (79,235,809 samples, 1.88%)s..std::io::default_read_to_end (79,235,809 samples, 1.88%)s..std::io::default_read_to_end::small_probe_read (52,569,418 samples, 1.25%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (52,569,418 samples, 1.25%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (52,569,418 samples, 1.25%)bzip2::mem::Decompress::decompress (52,569,418 samples, 1.25%)BZ2_bzDecompress (52,569,418 samples, 1.25%)BZ2_decompress (52,569,418 samples, 1.25%)core::ptr::drop_in_place<nexrad_decode::messages::message::Message> (3,687,391 samples, 0.09%)core::ptr::drop_in_place<nexrad_decode::messages::message::MessageContents> (3,687,391 samples, 0.09%)core::ptr::drop_in_place<alloc::boxed::Box<nexrad_decode::messages::digital_radar_data::message::Message>> (3,687,391 samples, 0.09%)core::ptr::drop_in_place<nexrad_decode::messages::digital_radar_data::message::Message> (3,687,391 samples, 0.09%)core::ptr::drop_in_place<core::option::Option<nexrad_decode::messages::digital_radar_data::generic_data_block::GenericDataBlock>> (3,687,391 samples, 0.09%)core::ptr::drop_in_place<nexrad_decode::messages::digital_radar_data::generic_data_block::GenericDataBlock> (3,687,391 samples, 0.09%)core::ptr::drop_in_place<alloc::vec::Vec<u8>> (3,687,391 samples, 0.09%)core::ptr::drop_in_place<alloc::raw_vec::RawVec<u8>> (3,687,391 samples, 0.09%)<alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop (3,687,391 samples, 0.09%)alloc::raw_vec::RawVecInner<A>::deallocate (3,687,391 samples, 0.09%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (3,687,391 samples, 0.09%)alloc::alloc::dealloc (3,687,391 samples, 0.09%)__rdl_dealloc (3,687,391 samples, 0.09%)std::sys::alloc::unix::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (3,687,391 samples, 0.09%)cfree (3,687,391 samples, 0.09%)std::io::Read::read_buf (45,798,045 samples, 1.09%)std::io::default_read_buf (45,798,045 samples, 1.09%)std::io::Read::read_buf::_{{closure}} (45,798,045 samples, 1.09%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (45,798,045 samples, 1.09%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (45,798,045 samples, 1.09%)bzip2::mem::Decompress::decompress (45,798,045 samples, 1.09%)BZ2_bzDecompress (45,798,045 samples, 1.09%)rayon_core::job::StackJob<L,F,R>::run_inline (135,516,983 samples, 3.22%)ray..rayon_core::join::join_context::call_b::_{{closure}} (135,516,983 samples, 3.22%)ray..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (135,516,983 samples, 3.22%)ray..rayon::iter::plumbing::bridge_producer_consumer::helper (135,516,983 samples, 3.22%)ray..rayon::iter::plumbing::Producer::fold_with (135,516,983 samples, 3.22%)ray..<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (135,516,983 samples, 3.22%)<ra..rayon::iter::plumbing::Folder::consume_iter (135,516,983 samples, 3.22%)ray..<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (135,516,983 samples, 3.22%)<co..core::option::Option<T>::map (135,516,983 samples, 3.22%)cor..core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (135,516,983 samples, 3.22%)cor..core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (135,516,983 samples, 3.22%)cor..wxbox_ar2::parse::_{{closure}} (135,516,983 samples, 3.22%)wxb..nexrad_data::volume::record::Record::decompress (131,829,592 samples, 3.14%)nex..std::io::Read::read_to_end (131,829,592 samples, 3.14%)std..std::io::default_read_to_end (131,829,592 samples, 3.14%)std..std::io::default_read_to_end::small_probe_read (86,031,547 samples, 2.05%)s..<bzip2::read::BzDecoder<R> as std::io::Read>::read (86,031,547 samples, 2.05%)<..<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (86,031,547 samples, 2.05%)<..bzip2::mem::Decompress::decompress (86,031,547 samples, 2.05%)b..BZ2_bzDecompress (86,031,547 samples, 2.05%)B..BZ2_decompress (86,031,547 samples, 2.05%)B..std::io::Read::read_buf (57,891,891 samples, 1.38%)std::io::default_read_buf (57,891,891 samples, 1.38%)std::io::Read::read_buf::_{{closure}} (57,891,891 samples, 1.38%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (57,891,891 samples, 1.38%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (57,891,891 samples, 1.38%)bzip2::mem::Decompress::decompress (57,891,891 samples, 1.38%)BZ2_bzDecompress (57,891,891 samples, 1.38%)nexrad_data::volume::record::Record::decompress (148,300,562 samples, 3.53%)nex..std::io::Read::read_to_end (148,300,562 samples, 3.53%)std..std::io::default_read_to_end (148,300,562 samples, 3.53%)std..std::io::default_read_to_end::small_probe_read (90,408,671 samples, 2.15%)s..<bzip2::read::BzDecoder<R> as std::io::Read>::read (90,408,671 samples, 2.15%)<..<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (90,408,671 samples, 2.15%)<..bzip2::mem::Decompress::decompress (90,408,671 samples, 2.15%)b..BZ2_bzDecompress (90,408,671 samples, 2.15%)B..BZ2_decompress (90,408,671 samples, 2.15%)B..[libc.so.6] (3,692,081 samples, 0.09%)rayon_core::job::StackJob<L,F,R>::run_inline (367,167,114 samples, 8.73%)rayon_core::..rayon_core::join::join_context::call_b::_{{closure}} (367,167,114 samples, 8.73%)rayon_core::..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (367,167,114 samples, 8.73%)rayon::iter:..rayon::iter::plumbing::bridge_producer_consumer::helper (367,167,114 samples, 8.73%)rayon::iter:..rayon_core::join::join_context (287,931,305 samples, 6.85%)rayon_cor..rayon_core::registry::in_worker (287,931,305 samples, 6.85%)rayon_cor..rayon_core::join::join_context::_{{closure}} (287,931,305 samples, 6.85%)rayon_cor..rayon_core::unwind::halt_unwinding (152,414,322 samples, 3.63%)rayo..std::panic::catch_unwind (152,414,322 samples, 3.63%)std:..std::panicking::try (152,414,322 samples, 3.63%)std:..std::panicking::try::do_call (152,414,322 samples, 3.63%)std:..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (152,414,322 samples, 3.63%)<cor..rayon_core::join::join_context::call_a::_{{closure}} (152,414,322 samples, 3.63%)rayo..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (152,414,322 samples, 3.63%)rayo..rayon::iter::plumbing::bridge_producer_consumer::helper (152,414,322 samples, 3.63%)rayo..rayon::iter::plumbing::Producer::fold_with (152,414,322 samples, 3.63%)rayo..<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (152,414,322 samples, 3.63%)<ray..rayon::iter::plumbing::Folder::consume_iter (152,414,322 samples, 3.63%)rayo..<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (152,414,322 samples, 3.63%)<cor..core::option::Option<T>::map (152,414,322 samples, 3.63%)core..core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (152,414,322 samples, 3.63%)core..core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (152,414,322 samples, 3.63%)core..wxbox_ar2::parse::_{{closure}} (152,414,322 samples, 3.63%)wxbo..nexrad_data::volume::record::Record::messages (4,113,760 samples, 0.10%)nexrad_decode::messages::decode_messages (4,113,760 samples, 0.10%)nexrad_decode::messages::decode_message_contents (4,113,760 samples, 0.10%)nexrad_decode::messages::digital_radar_data::decode_digital_radar_data (4,113,760 samples, 0.10%)nexrad_decode::util::deserialize (4,113,760 samples, 0.10%)bincode::config::Options::deserialize_from (4,113,760 samples, 0.10%)bincode::internal::deserialize_from (4,113,760 samples, 0.10%)bincode::internal::deserialize_from_seed (4,113,760 samples, 0.10%)bincode::internal::deserialize_from_custom_seed (4,113,760 samples, 0.10%)<core::marker::PhantomData<T> as serde::de::DeserializeSeed>::deserialize (4,113,760 samples, 0.10%)nexrad_decode::messages::digital_radar_data::header::_::<impl serde::de::Deserialize for nexrad_decode::messages::digital_radar_data::header::Header>::deserialize (4,113,760 samples, 0.10%)<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_struct (4,113,760 samples, 0.10%)<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_tuple (4,113,760 samples, 0.10%)<nexrad_decode::messages::digital_radar_data::header::_::<impl serde::de::Deserialize for nexrad_decode::messages::digital_radar_data::header::Header>::deserialize::__Visitor as serde::de::Visitor>::visit_seq (4,113,760 samples, 0.10%)serde::de::SeqAccess::next_element (4,113,760 samples, 0.10%)<<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_tuple::Access<R,O> as serde::de::SeqAccess>::next_element_seed (4,113,760 samples, 0.10%)<core::marker::PhantomData<T> as serde::de::DeserializeSeed>::deserialize (4,113,760 samples, 0.10%)serde::de::impls::<impl serde::de::Deserialize for u8>::deserialize (4,113,760 samples, 0.10%)<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_u8 (4,113,760 samples, 0.10%)bincode::de::Deserializer<R,O>::deserialize_byte (4,113,760 samples, 0.10%)bincode::byteorder::ReadBytesExt::read_u8 (4,113,760 samples, 0.10%)<bincode::de::read::IoReader<R> as std::io::Read>::read_exact (4,113,760 samples, 0.10%)std::io::impls::<impl std::io::Read for &mut R>::read_exact (4,113,760 samples, 0.10%)<std::io::cursor::Cursor<T> as std::io::Read>::read_exact (4,113,760 samples, 0.10%)std::io::cursor::Cursor<T>::split (4,113,760 samples, 0.10%)std::io::Read::read_buf (103,263,286 samples, 2.46%)st..std::io::default_read_buf (103,263,286 samples, 2.46%)st..std::io::Read::read_buf::_{{closure}} (103,263,286 samples, 2.46%)st..<bzip2::read::BzDecoder<R> as std::io::Read>::read (103,263,286 samples, 2.46%)<b..<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (103,263,286 samples, 2.46%)<b..bzip2::mem::Decompress::decompress (103,263,286 samples, 2.46%)bz..BZ2_bzDecompress (103,263,286 samples, 2.46%)BZ..nexrad_data::volume::record::Record::decompress (288,186,829 samples, 6.85%)nexrad_da..std::io::Read::read_to_end (288,186,829 samples, 6.85%)std::io::..std::io::default_read_to_end (288,186,829 samples, 6.85%)std::io::..std::io::default_read_to_end::small_probe_read (184,923,543 samples, 4.40%)std::..<bzip2::read::BzDecoder<R> as std::io::Read>::read (184,923,543 samples, 4.40%)<bzip..<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (184,923,543 samples, 4.40%)<bzip..bzip2::mem::Decompress::decompress (184,923,543 samples, 4.40%)bzip2..BZ2_bzDecompress (184,923,543 samples, 4.40%)BZ2_b..BZ2_decompress (184,923,543 samples, 4.40%)BZ2_d..[libc.so.6] (3,766,595 samples, 0.09%)<std::io::cursor::Cursor<T> as std::io::Read>::read_exact (3,843,308 samples, 0.09%)std::io::impls::<impl std::io::Read for &[u8]>::read_exact (3,843,308 samples, 0.09%)core::slice::<impl [T]>::copy_from_slice (3,843,308 samples, 0.09%)core::intrinsics::copy_nonoverlapping (3,843,308 samples, 0.09%)[libc.so.6] (3,843,308 samples, 0.09%)nexrad_decode::messages::decode_message_contents (7,575,217 samples, 0.18%)nexrad_decode::messages::digital_radar_data::decode_digital_radar_data (7,575,217 samples, 0.18%)nexrad_decode::util::deserialize (3,731,909 samples, 0.09%)bincode::config::Options::deserialize_from (3,731,909 samples, 0.09%)bincode::internal::deserialize_from (3,731,909 samples, 0.09%)bincode::internal::deserialize_from_seed (3,731,909 samples, 0.09%)bincode::internal::deserialize_from_custom_seed (3,731,909 samples, 0.09%)<core::marker::PhantomData<T> as serde::de::DeserializeSeed>::deserialize (3,731,909 samples, 0.09%)nexrad_decode::messages::digital_radar_data::generic_data_block::_::<impl serde::de::Deserialize for nexrad_decode::messages::digital_radar_data::generic_data_block::GenericDataBlockHeader>::deserialize (3,731,909 samples, 0.09%)<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_struct (3,731,909 samples, 0.09%)<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_tuple (3,731,909 samples, 0.09%)<nexrad_decode::messages::digital_radar_data::generic_data_block::_::<impl serde::de::Deserialize for nexrad_decode::messages::digital_radar_data::generic_data_block::GenericDataBlockHeader>::deserialize::__Visitor as serde::de::Visitor>::visit_seq (3,731,909 samples, 0.09%)rayon_core::job::StackJob<L,F,R>::run_inline (666,640,729 samples, 15.86%)rayon_core::job::StackJo..rayon_core::join::join_context::call_b::_{{closure}} (666,640,729 samples, 15.86%)rayon_core::join::join_c..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (666,640,729 samples, 15.86%)rayon::iter::plumbing::b..rayon::iter::plumbing::bridge_producer_consumer::helper (666,640,729 samples, 15.86%)rayon::iter::plumbing::b..rayon_core::join::join_context (666,640,729 samples, 15.86%)rayon_core::join::join_c..rayon_core::registry::in_worker (666,640,729 samples, 15.86%)rayon_core::registry::in..rayon_core::join::join_context::_{{closure}} (666,640,729 samples, 15.86%)rayon_core::join::join_c..rayon_core::unwind::halt_unwinding (299,473,615 samples, 7.12%)rayon_core..std::panic::catch_unwind (299,473,615 samples, 7.12%)std::panic..std::panicking::try (299,473,615 samples, 7.12%)std::panic..std::panicking::try::do_call (299,473,615 samples, 7.12%)std::panic..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (299,473,615 samples, 7.12%)<core::pan..rayon_core::join::join_context::call_a::_{{closure}} (299,473,615 samples, 7.12%)rayon_core..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (299,473,615 samples, 7.12%)rayon::ite..rayon::iter::plumbing::bridge_producer_consumer::helper (299,473,615 samples, 7.12%)rayon::ite..rayon::iter::plumbing::Producer::fold_with (299,473,615 samples, 7.12%)rayon::ite..<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (299,473,615 samples, 7.12%)<rayon::it..rayon::iter::plumbing::Folder::consume_iter (299,473,615 samples, 7.12%)rayon::ite..<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (299,473,615 samples, 7.12%)<core::ite..core::option::Option<T>::map (299,473,615 samples, 7.12%)core::opti..core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (299,473,615 samples, 7.12%)core::ops:..core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (299,473,615 samples, 7.12%)core::ops:..wxbox_ar2::parse::_{{closure}} (299,473,615 samples, 7.12%)wxbox_ar2:..nexrad_data::volume::record::Record::messages (11,286,786 samples, 0.27%)nexrad_decode::messages::decode_messages (11,286,786 samples, 0.27%)nexrad_decode::messages::decode_message_header (3,711,569 samples, 0.09%)nexrad_decode::util::deserialize (3,711,569 samples, 0.09%)bincode::config::Options::deserialize_from (3,711,569 samples, 0.09%)bincode::internal::deserialize_from (3,711,569 samples, 0.09%)bincode::internal::deserialize_from_seed (3,711,569 samples, 0.09%)bincode::internal::deserialize_from_custom_seed (3,711,569 samples, 0.09%)<core::marker::PhantomData<T> as serde::de::DeserializeSeed>::deserialize (3,711,569 samples, 0.09%)nexrad_decode::messages::message_header::_::<impl serde::de::Deserialize for nexrad_decode::messages::message_header::MessageHeader>::deserialize (3,711,569 samples, 0.09%)<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_struct (3,711,569 samples, 0.09%)<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_tuple (3,711,569 samples, 0.09%)<nexrad_decode::messages::message_header::_::<impl serde::de::Deserialize for nexrad_decode::messages::message_header::MessageHeader>::deserialize::__Visitor as serde::de::Visitor>::visit_seq (3,711,569 samples, 0.09%)serde::de::SeqAccess::next_element (3,711,569 samples, 0.09%)<<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_tuple::Access<R,O> as serde::de::SeqAccess>::next_element_seed (3,711,569 samples, 0.09%)<core::marker::PhantomData<T> as serde::de::DeserializeSeed>::deserialize (3,711,569 samples, 0.09%)serde::de::impls::_<impl serde::de::Deserialize for [T: 12]>::deserialize (3,711,569 samples, 0.09%)<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_tuple (3,711,569 samples, 0.09%)<serde::de::impls::ArrayVisitor<[T: 12]> as serde::de::Visitor>::visit_seq (3,711,569 samples, 0.09%)serde::de::SeqAccess::next_element (3,711,569 samples, 0.09%)<<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_tuple::Access<R,O> as serde::de::SeqAccess>::next_element_seed (3,711,569 samples, 0.09%)<core::marker::PhantomData<T> as serde::de::DeserializeSeed>::deserialize (3,711,569 samples, 0.09%)serde::de::impls::<impl serde::de::Deserialize for u8>::deserialize (3,711,569 samples, 0.09%)<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_u8 (3,711,569 samples, 0.09%)bincode::de::Deserializer<R,O>::deserialize_byte (3,711,569 samples, 0.09%)bincode::byteorder::ReadBytesExt::read_u8 (3,711,569 samples, 0.09%)<bincode::de::read::IoReader<R> as std::io::Read>::read_exact (3,711,569 samples, 0.09%)std::io::impls::<impl std::io::Read for &mut R>::read_exact (3,711,569 samples, 0.09%)<std::io::cursor::Cursor<T> as std::io::Read>::read_exact (3,711,569 samples, 0.09%)std::io::cursor::Cursor<T>::split (3,711,569 samples, 0.09%)std::io::Read::read_buf (27,442,014 samples, 0.65%)std::io::default_read_buf (27,442,014 samples, 0.65%)std::io::Read::read_buf::_{{closure}} (27,440,253 samples, 0.65%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (27,440,253 samples, 0.65%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (27,440,253 samples, 0.65%)bzip2::mem::Decompress::decompress (27,440,253 samples, 0.65%)BZ2_bzDecompress (27,440,253 samples, 0.65%)rayon_core::registry::WorkerThread::wait_until (85,075,707 samples, 2.02%)r..rayon_core::registry::WorkerThread::wait_until_cold (85,075,707 samples, 2.02%)r..rayon_core::registry::WorkerThread::execute (85,075,707 samples, 2.02%)r..rayon_core::job::JobRef::execute (85,075,707 samples, 2.02%)r..<rayon_core::job::StackJob<L,F,R> as rayon_core::job::Job>::execute (85,075,707 samples, 2.02%)<..rayon_core::job::JobResult<T>::call (85,075,707 samples, 2.02%)r..rayon_core::unwind::halt_unwinding (85,075,707 samples, 2.02%)r..std::panic::catch_unwind (85,075,707 samples, 2.02%)s..std::panicking::try (85,075,707 samples, 2.02%)s..std::panicking::try::do_call (85,075,707 samples, 2.02%)s..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (85,075,707 samples, 2.02%)<..rayon_core::job::JobResult<T>::call::_{{closure}} (85,075,707 samples, 2.02%)r..rayon_core::join::join_context::call_b::_{{closure}} (85,075,707 samples, 2.02%)r..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (85,075,707 samples, 2.02%)r..rayon::iter::plumbing::bridge_producer_consumer::helper (85,075,707 samples, 2.02%)r..rayon_core::join::join_context (85,075,707 samples, 2.02%)r..rayon_core::registry::in_worker (85,075,707 samples, 2.02%)r..rayon_core::join::join_context::_{{closure}} (85,075,707 samples, 2.02%)r..rayon_core::unwind::halt_unwinding (85,075,707 samples, 2.02%)r..std::panic::catch_unwind (85,075,707 samples, 2.02%)s..std::panicking::try (85,075,707 samples, 2.02%)s..std::panicking::try::do_call (85,075,707 samples, 2.02%)s..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (85,075,707 samples, 2.02%)<..rayon_core::join::join_context::call_a::_{{closure}} (85,075,707 samples, 2.02%)r..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (85,075,707 samples, 2.02%)r..rayon::iter::plumbing::bridge_producer_consumer::helper (85,075,707 samples, 2.02%)r..rayon::iter::plumbing::Producer::fold_with (85,075,707 samples, 2.02%)r..<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (85,075,707 samples, 2.02%)<..rayon::iter::plumbing::Folder::consume_iter (85,075,707 samples, 2.02%)r..<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (85,075,707 samples, 2.02%)<..core::option::Option<T>::map (85,075,707 samples, 2.02%)c..core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (85,075,707 samples, 2.02%)c..core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (85,075,707 samples, 2.02%)c..wxbox_ar2::parse::_{{closure}} (85,075,707 samples, 2.02%)w..nexrad_data::volume::record::Record::decompress (85,075,707 samples, 2.02%)n..std::io::Read::read_to_end (85,075,707 samples, 2.02%)s..std::io::default_read_to_end (85,075,707 samples, 2.02%)s..std::io::default_read_to_end::small_probe_read (57,633,693 samples, 1.37%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (57,633,693 samples, 1.37%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (57,633,693 samples, 1.37%)bzip2::mem::Decompress::decompress (57,633,693 samples, 1.37%)BZ2_bzDecompress (57,633,693 samples, 1.37%)BZ2_decompress (57,633,693 samples, 1.37%)std::io::Read::read_buf (3,956,457 samples, 0.09%)std::io::default_read_buf (3,956,457 samples, 0.09%)std::io::Read::read_buf::_{{closure}} (3,956,457 samples, 0.09%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (3,956,457 samples, 0.09%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (3,956,457 samples, 0.09%)bzip2::mem::Decompress::decompress (3,956,457 samples, 0.09%)BZ2_bzDecompress (3,956,457 samples, 0.09%)nexrad_data::volume::record::Record::decompress (15,509,674 samples, 0.37%)std::io::Read::read_to_end (15,509,674 samples, 0.37%)std::io::default_read_to_end (15,509,674 samples, 0.37%)std::io::default_read_to_end::small_probe_read (11,553,217 samples, 0.27%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (11,553,217 samples, 0.27%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (11,553,217 samples, 0.27%)bzip2::mem::Decompress::decompress (11,553,217 samples, 0.27%)BZ2_bzDecompress (11,553,217 samples, 0.27%)BZ2_decompress (11,553,217 samples, 0.27%)rayon_core::job::StackJob<L,F,R>::run_inline (104,571,551 samples, 2.49%)ra..rayon_core::join::join_context::call_b::_{{closure}} (104,571,551 samples, 2.49%)ra..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (104,571,551 samples, 2.49%)ra..rayon::iter::plumbing::bridge_producer_consumer::helper (104,571,551 samples, 2.49%)ra..rayon_core::join::join_context (104,571,551 samples, 2.49%)ra..rayon_core::registry::in_worker (104,571,551 samples, 2.49%)ra..rayon_core::join::join_context::_{{closure}} (104,571,551 samples, 2.49%)ra..rayon_core::unwind::halt_unwinding (19,495,844 samples, 0.46%)std::panic::catch_unwind (19,495,844 samples, 0.46%)std::panicking::try (19,495,844 samples, 0.46%)std::panicking::try::do_call (19,495,844 samples, 0.46%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (19,495,844 samples, 0.46%)rayon_core::join::join_context::call_a::_{{closure}} (19,495,844 samples, 0.46%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (19,495,844 samples, 0.46%)rayon::iter::plumbing::bridge_producer_consumer::helper (19,495,844 samples, 0.46%)rayon::iter::plumbing::Producer::fold_with (19,495,844 samples, 0.46%)<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (19,495,844 samples, 0.46%)rayon::iter::plumbing::Folder::consume_iter (19,495,844 samples, 0.46%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (19,495,844 samples, 0.46%)core::option::Option<T>::map (19,495,844 samples, 0.46%)core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (19,495,844 samples, 0.46%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (19,495,844 samples, 0.46%)wxbox_ar2::parse::_{{closure}} (19,495,844 samples, 0.46%)nexrad_data::volume::record::Record::messages (3,986,170 samples, 0.09%)nexrad_decode::messages::decode_messages (3,986,170 samples, 0.09%)nexrad_decode::messages::decode_message_contents (3,986,170 samples, 0.09%)nexrad_decode::messages::digital_radar_data::decode_digital_radar_data (3,986,170 samples, 0.09%)nexrad_decode::messages::digital_radar_data::generic_data_block::GenericDataBlock::new (3,986,170 samples, 0.09%)alloc::vec::from_elem (3,986,170 samples, 0.09%)<u8 as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (3,986,170 samples, 0.09%)alloc::raw_vec::RawVec<T,A>::with_capacity_zeroed_in (3,986,170 samples, 0.09%)alloc::raw_vec::RawVecInner<A>::with_capacity_zeroed_in (3,986,170 samples, 0.09%)alloc::raw_vec::RawVecInner<A>::try_allocate_in (3,986,170 samples, 0.09%)<alloc::alloc::Global as core::alloc::Allocator>::allocate_zeroed (3,986,170 samples, 0.09%)alloc::alloc::Global::alloc_impl (3,986,170 samples, 0.09%)alloc::alloc::alloc_zeroed (3,986,170 samples, 0.09%)__rdl_alloc_zeroed (3,986,170 samples, 0.09%)std::sys::alloc::unix::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc_zeroed (3,986,170 samples, 0.09%)[libc.so.6] (3,986,170 samples, 0.09%)std::io::Read::read_buf (7,292,548 samples, 0.17%)std::io::default_read_buf (7,292,548 samples, 0.17%)std::io::Read::read_buf::_{{closure}} (7,292,548 samples, 0.17%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (7,292,548 samples, 0.17%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (7,292,548 samples, 0.17%)bzip2::mem::Decompress::decompress (7,292,548 samples, 0.17%)BZ2_bzDecompress (7,292,548 samples, 0.17%)rayon::iter::plumbing::Producer::fold_with (17,900,069 samples, 0.43%)<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (17,900,069 samples, 0.43%)rayon::iter::plumbing::Folder::consume_iter (17,900,069 samples, 0.43%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (17,900,069 samples, 0.43%)core::option::Option<T>::map (17,900,069 samples, 0.43%)core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (17,900,069 samples, 0.43%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (17,900,069 samples, 0.43%)wxbox_ar2::parse::_{{closure}} (17,900,069 samples, 0.43%)nexrad_data::volume::record::Record::decompress (17,900,069 samples, 0.43%)std::io::Read::read_to_end (17,900,069 samples, 0.43%)std::io::default_read_to_end (17,900,069 samples, 0.43%)std::io::default_read_to_end::small_probe_read (10,607,521 samples, 0.25%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (10,607,521 samples, 0.25%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (10,607,521 samples, 0.25%)bzip2::mem::Decompress::decompress (10,607,521 samples, 0.25%)BZ2_bzDecompress (10,607,521 samples, 0.25%)BZ2_decompress (10,607,521 samples, 0.25%)std::io::Read::read_buf (23,322,660 samples, 0.55%)std::io::default_read_buf (23,322,660 samples, 0.55%)std::io::Read::read_buf::_{{closure}} (23,322,660 samples, 0.55%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (23,322,660 samples, 0.55%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (23,322,660 samples, 0.55%)bzip2::mem::Decompress::decompress (23,322,660 samples, 0.55%)BZ2_bzDecompress (23,322,660 samples, 0.55%)nexrad_data::volume::record::Record::decompress (63,871,222 samples, 1.52%)std::io::Read::read_to_end (63,871,222 samples, 1.52%)std::io::default_read_to_end (63,871,222 samples, 1.52%)std::io::default_read_to_end::small_probe_read (40,548,562 samples, 0.96%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (40,548,562 samples, 0.96%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (40,548,562 samples, 0.96%)bzip2::mem::Decompress::decompress (40,548,562 samples, 0.96%)BZ2_bzDecompress (40,548,562 samples, 0.96%)BZ2_decompress (40,548,562 samples, 0.96%)[libc.so.6] (3,529,652 samples, 0.08%)rayon_core::job::StackJob<L,F,R>::run_inline (67,494,334 samples, 1.61%)rayon_core::join::join_context::call_b::_{{closure}} (67,494,334 samples, 1.61%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (67,494,334 samples, 1.61%)rayon::iter::plumbing::bridge_producer_consumer::helper (67,494,334 samples, 1.61%)rayon_core::join::join_context (67,494,334 samples, 1.61%)rayon_core::registry::in_worker (67,494,334 samples, 1.61%)rayon_core::join::join_context::_{{closure}} (67,494,334 samples, 1.61%)rayon_core::unwind::halt_unwinding (67,494,334 samples, 1.61%)std::panic::catch_unwind (67,494,334 samples, 1.61%)std::panicking::try (67,494,334 samples, 1.61%)std::panicking::try::do_call (67,494,334 samples, 1.61%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (67,494,334 samples, 1.61%)rayon_core::join::join_context::call_a::_{{closure}} (67,494,334 samples, 1.61%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (67,494,334 samples, 1.61%)rayon::iter::plumbing::bridge_producer_consumer::helper (67,494,334 samples, 1.61%)rayon::iter::plumbing::Producer::fold_with (67,494,334 samples, 1.61%)<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (67,494,334 samples, 1.61%)rayon::iter::plumbing::Folder::consume_iter (67,494,334 samples, 1.61%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (67,494,334 samples, 1.61%)core::option::Option<T>::map (67,494,334 samples, 1.61%)core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (67,494,334 samples, 1.61%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (67,494,334 samples, 1.61%)wxbox_ar2::parse::_{{closure}} (67,494,334 samples, 1.61%)nexrad_data::volume::record::Record::messages (3,623,112 samples, 0.09%)nexrad_decode::messages::decode_messages (3,623,112 samples, 0.09%)nexrad_decode::messages::decode_message_contents (3,623,112 samples, 0.09%)nexrad_decode::messages::digital_radar_data::decode_digital_radar_data (3,623,112 samples, 0.09%)<std::io::cursor::Cursor<T> as std::io::Read>::read_exact (3,623,112 samples, 0.09%)std::io::impls::<impl std::io::Read for &[u8]>::read_exact (3,623,112 samples, 0.09%)core::slice::<impl [T]>::copy_from_slice (3,623,112 samples, 0.09%)core::intrinsics::copy_nonoverlapping (3,623,112 samples, 0.09%)[libc.so.6] (3,623,112 samples, 0.09%)std::io::Read::read_buf (45,773,873 samples, 1.09%)std::io::default_read_buf (45,773,873 samples, 1.09%)std::io::Read::read_buf::_{{closure}} (45,773,873 samples, 1.09%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (45,773,873 samples, 1.09%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (45,773,873 samples, 1.09%)bzip2::mem::Decompress::decompress (45,773,873 samples, 1.09%)BZ2_bzDecompress (45,773,873 samples, 1.09%)nexrad_data::volume::record::Record::decompress (106,340,800 samples, 2.53%)ne..std::io::Read::read_to_end (106,340,800 samples, 2.53%)st..std::io::default_read_to_end (106,340,800 samples, 2.53%)st..std::io::default_read_to_end::small_probe_read (60,566,927 samples, 1.44%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (60,566,927 samples, 1.44%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (60,566,927 samples, 1.44%)bzip2::mem::Decompress::decompress (60,566,927 samples, 1.44%)BZ2_bzDecompress (60,566,927 samples, 1.44%)BZ2_decompress (60,566,927 samples, 1.44%)[libc.so.6] (3,949,871 samples, 0.09%)rayon_core::registry::WorkerThread::wait_until (300,093,448 samples, 7.14%)rayon_core..rayon_core::registry::WorkerThread::wait_until_cold (300,093,448 samples, 7.14%)rayon_core..rayon_core::registry::WorkerThread::execute (300,093,448 samples, 7.14%)rayon_core..rayon_core::job::JobRef::execute (300,093,448 samples, 7.14%)rayon_core..<rayon_core::job::StackJob<L,F,R> as rayon_core::job::Job>::execute (300,093,448 samples, 7.14%)<rayon_cor..rayon_core::job::JobResult<T>::call (300,093,448 samples, 7.14%)rayon_core..rayon_core::unwind::halt_unwinding (300,093,448 samples, 7.14%)rayon_core..std::panic::catch_unwind (300,093,448 samples, 7.14%)std::panic..std::panicking::try (300,093,448 samples, 7.14%)std::panic..std::panicking::try::do_call (300,093,448 samples, 7.14%)std::panic..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (300,093,448 samples, 7.14%)<core::pan..rayon_core::job::JobResult<T>::call::_{{closure}} (300,093,448 samples, 7.14%)rayon_core..rayon_core::join::join_context::call_b::_{{closure}} (300,093,448 samples, 7.14%)rayon_core..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (300,093,448 samples, 7.14%)rayon::ite..rayon::iter::plumbing::bridge_producer_consumer::helper (300,093,448 samples, 7.14%)rayon::ite..rayon_core::join::join_context (300,093,448 samples, 7.14%)rayon_core..rayon_core::registry::in_worker (300,093,448 samples, 7.14%)rayon_core..rayon_core::join::join_context::_{{closure}} (300,093,448 samples, 7.14%)rayon_core..rayon_core::unwind::halt_unwinding (195,521,897 samples, 4.65%)rayon..std::panic::catch_unwind (195,521,897 samples, 4.65%)std::..std::panicking::try (195,521,897 samples, 4.65%)std::..std::panicking::try::do_call (195,521,897 samples, 4.65%)std::..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (195,521,897 samples, 4.65%)<core..rayon_core::join::join_context::call_a::_{{closure}} (195,521,897 samples, 4.65%)rayon..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (195,521,897 samples, 4.65%)rayon..rayon::iter::plumbing::bridge_producer_consumer::helper (195,521,897 samples, 4.65%)rayon..rayon_core::join::join_context (177,621,828 samples, 4.22%)rayon..rayon_core::registry::in_worker (177,621,828 samples, 4.22%)rayon..rayon_core::join::join_context::_{{closure}} (177,621,828 samples, 4.22%)rayon..rayon_core::unwind::halt_unwinding (110,127,494 samples, 2.62%)ra..std::panic::catch_unwind (110,127,494 samples, 2.62%)st..std::panicking::try (110,127,494 samples, 2.62%)st..std::panicking::try::do_call (110,127,494 samples, 2.62%)st..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (110,127,494 samples, 2.62%)<c..rayon_core::join::join_context::call_a::_{{closure}} (110,127,494 samples, 2.62%)ra..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (110,127,494 samples, 2.62%)ra..rayon::iter::plumbing::bridge_producer_consumer::helper (110,127,494 samples, 2.62%)ra..rayon::iter::plumbing::Producer::fold_with (110,127,494 samples, 2.62%)ra..<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (110,127,494 samples, 2.62%)<r..rayon::iter::plumbing::Folder::consume_iter (110,127,494 samples, 2.62%)ra..<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (110,127,494 samples, 2.62%)<c..core::option::Option<T>::map (110,127,494 samples, 2.62%)co..core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (110,127,494 samples, 2.62%)co..core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (110,127,494 samples, 2.62%)co..wxbox_ar2::parse::_{{closure}} (110,127,494 samples, 2.62%)wx..nexrad_data::volume::record::Record::messages (3,786,694 samples, 0.09%)nexrad_decode::messages::decode_messages (3,786,694 samples, 0.09%)nexrad_decode::messages::decode_message_contents (3,786,694 samples, 0.09%)nexrad_decode::messages::digital_radar_data::decode_digital_radar_data (3,786,694 samples, 0.09%)<std::io::cursor::Cursor<T> as std::io::Read>::read_exact (3,786,694 samples, 0.09%)std::io::impls::<impl std::io::Read for &[u8]>::read_exact (3,786,694 samples, 0.09%)core::slice::<impl [T]>::copy_from_slice (3,786,694 samples, 0.09%)core::intrinsics::copy_nonoverlapping (3,786,694 samples, 0.09%)[libc.so.6] (3,786,694 samples, 0.09%)<alloc::boxed::Box<T,A> as core::clone::Clone>::clone (3,637,549 samples, 0.09%)<T as core::clone::CloneToUninit>::clone_to_uninit (3,637,549 samples, 0.09%)<T as core::clone::uninit::CopySpec>::clone_one (3,637,549 samples, 0.09%)<nexrad_decode::messages::digital_radar_data::message::Message as core::clone::Clone>::clone (3,637,549 samples, 0.09%)<core::option::Option<T> as core::clone::Clone>::clone (3,637,549 samples, 0.09%)<nexrad_decode::messages::digital_radar_data::generic_data_block::GenericDataBlock as core::clone::Clone>::clone (3,637,549 samples, 0.09%)<alloc::vec::Vec<T,A> as core::clone::Clone>::clone (3,637,549 samples, 0.09%)alloc::slice::<impl [T]>::to_vec_in (3,637,549 samples, 0.09%)alloc::slice::hack::to_vec (3,637,549 samples, 0.09%)<T as alloc::slice::hack::ConvertVec>::to_vec (3,637,549 samples, 0.09%)alloc::vec::Vec<T,A>::with_capacity_in (3,637,549 samples, 0.09%)alloc::raw_vec::RawVec<T,A>::with_capacity_in (3,637,549 samples, 0.09%)alloc::raw_vec::RawVecInner<A>::with_capacity_in (3,637,549 samples, 0.09%)alloc::raw_vec::RawVecInner<A>::try_allocate_in (3,637,549 samples, 0.09%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (3,637,549 samples, 0.09%)alloc::alloc::Global::alloc_impl (3,637,549 samples, 0.09%)alloc::alloc::alloc (3,637,549 samples, 0.09%)__rdl_alloc (3,637,549 samples, 0.09%)std::sys::alloc::unix::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (3,637,549 samples, 0.09%)malloc (3,637,549 samples, 0.09%)[libc.so.6] (3,637,549 samples, 0.09%)std::io::Read::read_buf (40,949,426 samples, 0.97%)std::io::default_read_buf (40,949,426 samples, 0.97%)std::io::Read::read_buf::_{{closure}} (40,939,853 samples, 0.97%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (40,939,853 samples, 0.97%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (40,939,853 samples, 0.97%)bzip2::mem::Decompress::decompress (40,939,853 samples, 0.97%)BZ2_bzDecompress (40,939,853 samples, 0.97%)nexrad_data::volume::record::Record::decompress (110,219,129 samples, 2.62%)ne..std::io::Read::read_to_end (110,219,129 samples, 2.62%)st..std::io::default_read_to_end (110,219,129 samples, 2.62%)st..std::io::default_read_to_end::small_probe_read (69,269,703 samples, 1.65%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (69,269,703 samples, 1.65%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (69,269,703 samples, 1.65%)bzip2::mem::Decompress::decompress (69,269,703 samples, 1.65%)BZ2_bzDecompress (69,269,703 samples, 1.65%)BZ2_decompress (69,269,703 samples, 1.65%)rayon::iter::plumbing::Producer::fold_with (117,399,516 samples, 2.79%)ra..<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (117,399,516 samples, 2.79%)<r..rayon::iter::plumbing::Folder::consume_iter (117,399,516 samples, 2.79%)ra..<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (117,399,516 samples, 2.79%)<c..core::option::Option<T>::map (117,399,516 samples, 2.79%)co..core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (117,399,516 samples, 2.79%)co..core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (117,399,516 samples, 2.79%)co..wxbox_ar2::parse::_{{closure}} (117,399,516 samples, 2.79%)wx..nexrad_data::volume::record::Record::messages (3,542,838 samples, 0.08%)nexrad_decode::messages::decode_messages (3,542,838 samples, 0.08%)nexrad_decode::messages::decode_message_contents (3,542,838 samples, 0.08%)nexrad_decode::messages::digital_radar_data::decode_digital_radar_data (3,542,838 samples, 0.08%)nexrad_decode::messages::digital_radar_data::data_block_id::DataBlockId::data_block_name (3,542,838 samples, 0.08%)alloc::string::String::from_utf8_lossy (3,542,838 samples, 0.08%)<core::str::lossy::Utf8Chunks as core::iter::traits::iterator::Iterator>::next (3,542,838 samples, 0.08%)core::io::borrowed_buf::BorrowedCursor::ensure_init (3,742,528 samples, 0.09%)core::intrinsics::write_bytes (3,742,528 samples, 0.09%)[libc.so.6] (3,742,528 samples, 0.09%)std::io::Read::read_buf (88,000,753 samples, 2.09%)s..std::io::default_read_buf (88,000,753 samples, 2.09%)s..std::io::Read::read_buf::_{{closure}} (84,258,225 samples, 2.00%)s..<bzip2::read::BzDecoder<R> as std::io::Read>::read (84,258,225 samples, 2.00%)<..<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (84,258,225 samples, 2.00%)<..bzip2::mem::Decompress::decompress (84,258,225 samples, 2.00%)b..BZ2_bzDecompress (84,258,225 samples, 2.00%)B..BZ2_hbCreateDecodeTables (3,418,164 samples, 0.08%)nexrad_data::volume::record::Record::decompress (213,871,716 samples, 5.09%)nexrad..std::io::Read::read_to_end (213,871,716 samples, 5.09%)std::i..std::io::default_read_to_end (213,871,716 samples, 5.09%)std::i..std::io::default_read_to_end::small_probe_read (125,870,963 samples, 2.99%)std..<bzip2::read::BzDecoder<R> as std::io::Read>::read (125,870,963 samples, 2.99%)<bz..<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (125,870,963 samples, 2.99%)<bz..bzip2::mem::Decompress::decompress (125,870,963 samples, 2.99%)bzi..BZ2_bzDecompress (125,870,963 samples, 2.99%)BZ2..BZ2_decompress (125,870,963 samples, 2.99%)BZ2..[libc.so.6] (3,764,877 samples, 0.09%)<std::io::cursor::Cursor<T> as std::io::Read>::read_exact (8,074,948 samples, 0.19%)std::io::impls::<impl std::io::Read for &[u8]>::read_exact (8,074,948 samples, 0.19%)core::slice::<impl [T]>::copy_from_slice (8,074,948 samples, 0.19%)core::intrinsics::copy_nonoverlapping (8,074,948 samples, 0.19%)[libc.so.6] (8,074,948 samples, 0.19%)core::str::traits::<impl core::cmp::PartialEq for str>::eq (3,775,641 samples, 0.09%)core::cmp::impls::<impl core::cmp::PartialEq<&B> for &A>::eq (3,775,641 samples, 0.09%)core::slice::cmp::<impl core::cmp::PartialEq<[U]> for [T]>::eq (3,775,641 samples, 0.09%)<[A] as core::slice::cmp::SlicePartialEq<B>>::equal (3,775,641 samples, 0.09%)rayon::iter::plumbing::Producer::fold_with (229,647,323 samples, 5.46%)rayon::..<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (229,647,323 samples, 5.46%)<rayon:..rayon::iter::plumbing::Folder::consume_iter (229,647,323 samples, 5.46%)rayon::..<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (229,647,323 samples, 5.46%)<core::..core::option::Option<T>::map (229,647,323 samples, 5.46%)core::o..core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (229,647,323 samples, 5.46%)core::o..core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (229,647,323 samples, 5.46%)core::o..wxbox_ar2::parse::_{{closure}} (229,647,323 samples, 5.46%)wxbox_a..nexrad_data::volume::record::Record::messages (15,775,607 samples, 0.38%)nexrad_decode::messages::decode_messages (15,775,607 samples, 0.38%)nexrad_decode::messages::decode_message_contents (15,775,607 samples, 0.38%)nexrad_decode::messages::digital_radar_data::decode_digital_radar_data (15,775,607 samples, 0.38%)nexrad_decode::util::deserialize (3,925,018 samples, 0.09%)bincode::config::Options::deserialize_from (3,925,018 samples, 0.09%)bincode::internal::deserialize_from (3,925,018 samples, 0.09%)bincode::internal::deserialize_from_seed (3,925,018 samples, 0.09%)bincode::internal::deserialize_from_custom_seed (3,925,018 samples, 0.09%)<core::marker::PhantomData<T> as serde::de::DeserializeSeed>::deserialize (3,925,018 samples, 0.09%)nexrad_decode::messages::digital_radar_data::generic_data_block::_::<impl serde::de::Deserialize for nexrad_decode::messages::digital_radar_data::generic_data_block::GenericDataBlockHeader>::deserialize (3,925,018 samples, 0.09%)<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_struct (3,925,018 samples, 0.09%)<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_tuple (3,925,018 samples, 0.09%)<nexrad_decode::messages::digital_radar_data::generic_data_block::_::<impl serde::de::Deserialize for nexrad_decode::messages::digital_radar_data::generic_data_block::GenericDataBlockHeader>::deserialize::__Visitor as serde::de::Visitor>::visit_seq (3,925,018 samples, 0.09%)<core::result::Result<T,E> as core::ops::try_trait::Try>::branch (3,925,018 samples, 0.09%)core::ptr::drop_in_place<nexrad_decode::messages::message::Message> (3,671,917 samples, 0.09%)core::ptr::drop_in_place<nexrad_decode::messages::message::MessageContents> (3,671,917 samples, 0.09%)core::ptr::drop_in_place<alloc::boxed::Box<nexrad_decode::messages::digital_radar_data::message::Message>> (3,671,917 samples, 0.09%)cfree (3,671,917 samples, 0.09%)std::io::Read::read_buf (15,337,621 samples, 0.36%)std::io::default_read_buf (15,337,621 samples, 0.36%)std::io::Read::read_buf::_{{closure}} (15,337,621 samples, 0.36%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (15,337,621 samples, 0.36%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (15,337,621 samples, 0.36%)bzip2::mem::Decompress::decompress (15,337,621 samples, 0.36%)BZ2_bzDecompress (15,337,621 samples, 0.36%)<std::io::buffered::bufreader::BufReader<R> as std::io::BufRead>::fill_buf (3,965,720 samples, 0.09%)std::io::buffered::bufreader::buffer::Buffer::fill_buf (3,965,720 samples, 0.09%)std::io::impls::<impl std::io::Read for &mut R>::read_buf (3,965,720 samples, 0.09%)std::io::impls::<impl std::io::Read for &[u8]>::read_buf (3,965,720 samples, 0.09%)core::io::borrowed_buf::BorrowedCursor::append (3,965,720 samples, 0.09%)<[core::mem::maybe_uninit::MaybeUninit<T>]>::write_copy_of_slice (3,965,720 samples, 0.09%)core::slice::<impl [T]>::copy_from_slice (3,965,720 samples, 0.09%)core::intrinsics::copy_nonoverlapping (3,965,720 samples, 0.09%)[libc.so.6] (3,965,720 samples, 0.09%)rayon_core::job::StackJob<L,F,R>::run_inline (46,341,119 samples, 1.10%)rayon_core::join::join_context::call_b::_{{closure}} (46,341,119 samples, 1.10%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (46,341,119 samples, 1.10%)rayon::iter::plumbing::bridge_producer_consumer::helper (46,341,119 samples, 1.10%)rayon::iter::plumbing::Producer::fold_with (46,341,119 samples, 1.10%)<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (46,341,119 samples, 1.10%)rayon::iter::plumbing::Folder::consume_iter (46,341,119 samples, 1.10%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (46,341,119 samples, 1.10%)core::option::Option<T>::map (46,341,119 samples, 1.10%)core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (46,341,119 samples, 1.10%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (46,341,119 samples, 1.10%)wxbox_ar2::parse::_{{closure}} (46,341,119 samples, 1.10%)nexrad_data::volume::record::Record::decompress (42,669,202 samples, 1.01%)std::io::Read::read_to_end (42,669,202 samples, 1.01%)std::io::default_read_to_end (42,669,202 samples, 1.01%)std::io::default_read_to_end::small_probe_read (27,331,581 samples, 0.65%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (27,331,581 samples, 0.65%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (27,331,581 samples, 0.65%)bzip2::mem::Decompress::decompress (23,365,861 samples, 0.56%)BZ2_bzDecompress (23,365,861 samples, 0.56%)BZ2_decompress (23,365,861 samples, 0.56%)[libc.so.6] (3,941,929 samples, 0.09%)std::io::Read::read_buf (22,932,350 samples, 0.55%)std::io::default_read_buf (22,932,350 samples, 0.55%)std::io::Read::read_buf::_{{closure}} (22,932,350 samples, 0.55%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (22,932,350 samples, 0.55%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (22,932,350 samples, 0.55%)bzip2::mem::Decompress::decompress (22,932,350 samples, 0.55%)BZ2_bzDecompress (22,932,350 samples, 0.55%)rayon_core::job::StackJob<L,F,R>::run_inline (328,017,523 samples, 7.80%)rayon_core:..rayon_core::join::join_context::call_b::_{{closure}} (328,017,523 samples, 7.80%)rayon_core:..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (328,017,523 samples, 7.80%)rayon::iter..rayon::iter::plumbing::bridge_producer_consumer::helper (328,017,523 samples, 7.80%)rayon::iter..rayon_core::join::join_context (98,370,200 samples, 2.34%)r..rayon_core::registry::in_worker (98,370,200 samples, 2.34%)r..rayon_core::join::join_context::_{{closure}} (98,370,200 samples, 2.34%)r..rayon_core::unwind::halt_unwinding (52,029,081 samples, 1.24%)std::panic::catch_unwind (52,029,081 samples, 1.24%)std::panicking::try (52,029,081 samples, 1.24%)std::panicking::try::do_call (52,029,081 samples, 1.24%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (52,029,081 samples, 1.24%)rayon_core::join::join_context::call_a::_{{closure}} (52,029,081 samples, 1.24%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (52,029,081 samples, 1.24%)rayon::iter::plumbing::bridge_producer_consumer::helper (52,029,081 samples, 1.24%)rayon::iter::plumbing::Producer::fold_with (52,029,081 samples, 1.24%)<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (52,029,081 samples, 1.24%)rayon::iter::plumbing::Folder::consume_iter (52,029,081 samples, 1.24%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (52,029,081 samples, 1.24%)core::option::Option<T>::map (52,029,081 samples, 1.24%)core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (52,029,081 samples, 1.24%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (52,029,081 samples, 1.24%)wxbox_ar2::parse::_{{closure}} (52,029,081 samples, 1.24%)nexrad_data::volume::record::Record::decompress (52,029,081 samples, 1.24%)std::io::Read::read_to_end (52,029,081 samples, 1.24%)std::io::default_read_to_end (52,029,081 samples, 1.24%)std::io::default_read_to_end::small_probe_read (29,096,731 samples, 0.69%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (29,096,731 samples, 0.69%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (29,096,731 samples, 0.69%)bzip2::mem::Decompress::decompress (29,096,731 samples, 0.69%)BZ2_bzDecompress (29,096,731 samples, 0.69%)BZ2_decompress (29,096,731 samples, 0.69%)std::io::Read::read_buf (7,581,569 samples, 0.18%)std::io::default_read_buf (7,581,569 samples, 0.18%)std::io::Read::read_buf::_{{closure}} (7,581,569 samples, 0.18%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (7,581,569 samples, 0.18%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (7,581,569 samples, 0.18%)bzip2::mem::Decompress::decompress (7,581,569 samples, 0.18%)BZ2_bzDecompress (7,581,569 samples, 0.18%)rayon_core::registry::WorkerThread::wait_until (26,769,413 samples, 0.64%)rayon_core::registry::WorkerThread::wait_until_cold (26,769,413 samples, 0.64%)rayon_core::registry::WorkerThread::execute (26,769,413 samples, 0.64%)rayon_core::job::JobRef::execute (26,769,413 samples, 0.64%)<rayon_core::job::StackJob<L,F,R> as rayon_core::job::Job>::execute (26,769,413 samples, 0.64%)rayon_core::job::JobResult<T>::call (26,769,413 samples, 0.64%)rayon_core::unwind::halt_unwinding (26,769,413 samples, 0.64%)std::panic::catch_unwind (26,769,413 samples, 0.64%)std::panicking::try (26,769,413 samples, 0.64%)std::panicking::try::do_call (26,769,413 samples, 0.64%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (26,769,413 samples, 0.64%)rayon_core::job::JobResult<T>::call::_{{closure}} (26,769,413 samples, 0.64%)rayon_core::join::join_context::call_b::_{{closure}} (26,769,413 samples, 0.64%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (26,769,413 samples, 0.64%)rayon::iter::plumbing::bridge_producer_consumer::helper (26,769,413 samples, 0.64%)rayon::iter::plumbing::Producer::fold_with (26,769,413 samples, 0.64%)<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (26,769,413 samples, 0.64%)rayon::iter::plumbing::Folder::consume_iter (26,769,413 samples, 0.64%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (26,769,413 samples, 0.64%)core::option::Option<T>::map (26,769,413 samples, 0.64%)core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (26,769,413 samples, 0.64%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (26,769,413 samples, 0.64%)wxbox_ar2::parse::_{{closure}} (26,769,413 samples, 0.64%)nexrad_data::volume::record::Record::decompress (26,769,413 samples, 0.64%)std::io::Read::read_to_end (26,769,413 samples, 0.64%)std::io::default_read_to_end (26,769,413 samples, 0.64%)std::io::default_read_to_end::small_probe_read (19,187,844 samples, 0.46%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (19,187,844 samples, 0.46%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (19,187,844 samples, 0.46%)bzip2::mem::Decompress::decompress (19,187,844 samples, 0.46%)BZ2_bzDecompress (19,187,844 samples, 0.46%)BZ2_decompress (19,187,844 samples, 0.46%)std::io::Read::read_buf (75,657,744 samples, 1.80%)s..std::io::default_read_buf (75,657,744 samples, 1.80%)s..std::io::Read::read_buf::_{{closure}} (75,657,744 samples, 1.80%)s..<bzip2::read::BzDecoder<R> as std::io::Read>::read (75,657,744 samples, 1.80%)<..<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (75,657,744 samples, 1.80%)<..bzip2::mem::Decompress::decompress (75,657,744 samples, 1.80%)b..BZ2_bzDecompress (75,657,744 samples, 1.80%)B..nexrad_data::volume::record::Record::decompress (240,591,687 samples, 5.72%)nexrad_..std::io::Read::read_to_end (240,591,687 samples, 5.72%)std::io..std::io::default_read_to_end (240,591,687 samples, 5.72%)std::io..std::io::default_read_to_end::small_probe_read (164,933,943 samples, 3.92%)std:..<bzip2::read::BzDecoder<R> as std::io::Read>::read (164,933,943 samples, 3.92%)<bzi..<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (164,933,943 samples, 3.92%)<bzi..bzip2::mem::Decompress::decompress (164,933,943 samples, 3.92%)bzip..BZ2_bzDecompress (164,933,943 samples, 3.92%)BZ2_..BZ2_decompress (164,933,943 samples, 3.92%)BZ2_..[libc.so.6] (3,666,584 samples, 0.09%)alloc::boxed::Box<T>::new (3,589,529 samples, 0.09%)[libc.so.6] (3,589,529 samples, 0.09%)nexrad_decode::messages::digital_radar_data::data_block_id::DataBlockId::data_block_name (3,682,321 samples, 0.09%)alloc::string::String::from_utf8_lossy (3,682,321 samples, 0.09%)<core::str::lossy::Utf8Chunks as core::iter::traits::iterator::Iterator>::next (3,682,321 samples, 0.09%)<core::result::Result<T,E> as core::ops::try_trait::Try>::branch (4,861,296 samples, 0.12%)rayon_core::job::StackJob<L,F,R>::run_inline (610,852,034 samples, 14.53%)rayon_core::job::Stack..rayon_core::join::join_context::call_b::_{{closure}} (610,852,034 samples, 14.53%)rayon_core::join::join..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (610,852,034 samples, 14.53%)rayon::iter::plumbing:..rayon::iter::plumbing::bridge_producer_consumer::helper (610,852,034 samples, 14.53%)rayon::iter::plumbing:..rayon_core::join::join_context (610,852,034 samples, 14.53%)rayon_core::join::join..rayon_core::registry::in_worker (610,852,034 samples, 14.53%)rayon_core::registry::..rayon_core::join::join_context::_{{closure}} (610,852,034 samples, 14.53%)rayon_core::join::join..rayon_core::unwind::halt_unwinding (256,065,098 samples, 6.09%)rayon_co..std::panic::catch_unwind (256,065,098 samples, 6.09%)std::pan..std::panicking::try (256,065,098 samples, 6.09%)std::pan..std::panicking::try::do_call (256,065,098 samples, 6.09%)std::pan..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (256,065,098 samples, 6.09%)<core::p..rayon_core::join::join_context::call_a::_{{closure}} (256,065,098 samples, 6.09%)rayon_co..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (256,065,098 samples, 6.09%)rayon::i..rayon::iter::plumbing::bridge_producer_consumer::helper (256,065,098 samples, 6.09%)rayon::i..rayon::iter::plumbing::Producer::fold_with (256,065,098 samples, 6.09%)rayon::i..<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (256,065,098 samples, 6.09%)<rayon::..rayon::iter::plumbing::Folder::consume_iter (256,065,098 samples, 6.09%)rayon::i..<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (256,065,098 samples, 6.09%)<core::i..core::option::Option<T>::map (256,065,098 samples, 6.09%)core::op..core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (256,065,098 samples, 6.09%)core::op..core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (256,065,098 samples, 6.09%)core::op..wxbox_ar2::parse::_{{closure}} (256,065,098 samples, 6.09%)wxbox_ar..nexrad_data::volume::record::Record::messages (15,473,411 samples, 0.37%)nexrad_decode::messages::decode_messages (15,473,411 samples, 0.37%)nexrad_decode::messages::decode_message_contents (15,473,411 samples, 0.37%)nexrad_decode::messages::digital_radar_data::decode_digital_radar_data (11,883,882 samples, 0.28%)nexrad_decode::util::deserialize (8,201,561 samples, 0.20%)bincode::config::Options::deserialize_from (3,340,265 samples, 0.08%)bincode::internal::deserialize_from (3,340,265 samples, 0.08%)bincode::internal::deserialize_from_seed (3,340,265 samples, 0.08%)bincode::internal::deserialize_from_custom_seed (3,340,265 samples, 0.08%)<core::marker::PhantomData<T> as serde::de::DeserializeSeed>::deserialize (3,340,265 samples, 0.08%)nexrad_decode::messages::digital_radar_data::generic_data_block::_::<impl serde::de::Deserialize for nexrad_decode::messages::digital_radar_data::generic_data_block::GenericDataBlockHeader>::deserialize (3,340,265 samples, 0.08%)<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_struct (3,340,265 samples, 0.08%)<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_tuple (3,340,265 samples, 0.08%)<nexrad_decode::messages::digital_radar_data::generic_data_block::_::<impl serde::de::Deserialize for nexrad_decode::messages::digital_radar_data::generic_data_block::GenericDataBlockHeader>::deserialize::__Visitor as serde::de::Visitor>::visit_seq (3,340,265 samples, 0.08%)serde::de::SeqAccess::next_element (3,340,265 samples, 0.08%)<<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_tuple::Access<R,O> as serde::de::SeqAccess>::next_element_seed (3,340,265 samples, 0.08%)<core::marker::PhantomData<T> as serde::de::DeserializeSeed>::deserialize (3,340,265 samples, 0.08%)serde::de::impls::<impl serde::de::Deserialize for u8>::deserialize (3,340,265 samples, 0.08%)<&mut bincode::de::Deserializer<R,O> as serde::de::Deserializer>::deserialize_u8 (3,340,265 samples, 0.08%)bincode::de::Deserializer<R,O>::deserialize_byte (3,340,265 samples, 0.08%)bincode::byteorder::ReadBytesExt::read_u8 (3,340,265 samples, 0.08%)<bincode::de::read::IoReader<R> as std::io::Read>::read_exact (3,340,265 samples, 0.08%)std::io::impls::<impl std::io::Read for &mut R>::read_exact (3,340,265 samples, 0.08%)<std::io::cursor::Cursor<T> as std::io::Read>::read_exact (3,340,265 samples, 0.08%)std::io::cursor::Cursor<T>::split (3,340,265 samples, 0.08%)std::io::Read::read_buf (3,962,420 samples, 0.09%)std::io::default_read_buf (3,962,420 samples, 0.09%)std::io::Read::read_buf::_{{closure}} (3,962,420 samples, 0.09%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (3,962,420 samples, 0.09%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (3,962,420 samples, 0.09%)bzip2::mem::Decompress::decompress (3,962,420 samples, 0.09%)BZ2_bzDecompress (3,962,420 samples, 0.09%)rayon_core::job::StackJob<L,F,R>::run_inline (23,735,871 samples, 0.56%)rayon_core::join::join_context::call_b::_{{closure}} (23,735,871 samples, 0.56%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (23,735,871 samples, 0.56%)rayon::iter::plumbing::bridge_producer_consumer::helper (23,735,871 samples, 0.56%)rayon::iter::plumbing::Producer::fold_with (23,735,871 samples, 0.56%)<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (23,735,871 samples, 0.56%)rayon::iter::plumbing::Folder::consume_iter (23,735,871 samples, 0.56%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (23,735,871 samples, 0.56%)core::option::Option<T>::map (23,735,871 samples, 0.56%)core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (23,735,871 samples, 0.56%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (23,735,871 samples, 0.56%)wxbox_ar2::parse::_{{closure}} (23,735,871 samples, 0.56%)nexrad_data::volume::record::Record::decompress (23,735,871 samples, 0.56%)std::io::Read::read_to_end (23,735,871 samples, 0.56%)std::io::default_read_to_end (23,735,871 samples, 0.56%)std::io::default_read_to_end::small_probe_read (19,773,451 samples, 0.47%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (19,773,451 samples, 0.47%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (19,773,451 samples, 0.47%)bzip2::mem::Decompress::decompress (19,773,451 samples, 0.47%)BZ2_bzDecompress (19,773,451 samples, 0.47%)BZ2_decompress (19,773,451 samples, 0.47%)std::io::Read::read_buf (7,635,480 samples, 0.18%)std::io::default_read_buf (7,635,480 samples, 0.18%)std::io::Read::read_buf::_{{closure}} (7,635,480 samples, 0.18%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (7,635,480 samples, 0.18%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (7,635,480 samples, 0.18%)bzip2::mem::Decompress::decompress (7,635,480 samples, 0.18%)BZ2_bzDecompress (7,635,480 samples, 0.18%)rayon_core::job::StackJob<L,F,R>::run_inline (42,990,745 samples, 1.02%)rayon_core::join::join_context::call_b::_{{closure}} (42,990,745 samples, 1.02%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (42,990,745 samples, 1.02%)rayon::iter::plumbing::bridge_producer_consumer::helper (42,990,745 samples, 1.02%)rayon_core::join::join_context (42,990,745 samples, 1.02%)rayon_core::registry::in_worker (42,990,745 samples, 1.02%)rayon_core::join::join_context::_{{closure}} (42,990,745 samples, 1.02%)rayon_core::unwind::halt_unwinding (19,254,874 samples, 0.46%)std::panic::catch_unwind (19,254,874 samples, 0.46%)std::panicking::try (19,254,874 samples, 0.46%)std::panicking::try::do_call (19,254,874 samples, 0.46%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (19,254,874 samples, 0.46%)rayon_core::join::join_context::call_a::_{{closure}} (19,254,874 samples, 0.46%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (19,254,874 samples, 0.46%)rayon::iter::plumbing::bridge_producer_consumer::helper (19,254,874 samples, 0.46%)rayon::iter::plumbing::Producer::fold_with (19,254,874 samples, 0.46%)<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (19,254,874 samples, 0.46%)rayon::iter::plumbing::Folder::consume_iter (19,254,874 samples, 0.46%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (19,254,874 samples, 0.46%)core::option::Option<T>::map (19,254,874 samples, 0.46%)core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (19,254,874 samples, 0.46%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (19,254,874 samples, 0.46%)wxbox_ar2::parse::_{{closure}} (19,254,874 samples, 0.46%)nexrad_data::volume::record::Record::decompress (19,254,874 samples, 0.46%)std::io::Read::read_to_end (19,254,874 samples, 0.46%)std::io::default_read_to_end (19,254,874 samples, 0.46%)std::io::default_read_to_end::small_probe_read (11,619,394 samples, 0.28%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (11,619,394 samples, 0.28%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (11,619,394 samples, 0.28%)bzip2::mem::Decompress::decompress (11,619,394 samples, 0.28%)BZ2_bzDecompress (11,619,394 samples, 0.28%)BZ2_decompress (11,619,394 samples, 0.28%)std::io::Read::read_buf (7,880,071 samples, 0.19%)std::io::default_read_buf (7,880,071 samples, 0.19%)std::io::Read::read_buf::_{{closure}} (7,880,071 samples, 0.19%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (7,880,071 samples, 0.19%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (7,880,071 samples, 0.19%)bzip2::mem::Decompress::decompress (7,880,071 samples, 0.19%)BZ2_bzDecompress (7,880,071 samples, 0.19%)rayon_core::registry::WorkerThread::wait_until (30,760,123 samples, 0.73%)rayon_core::registry::WorkerThread::wait_until_cold (30,760,123 samples, 0.73%)rayon_core::registry::WorkerThread::execute (30,760,123 samples, 0.73%)rayon_core::job::JobRef::execute (30,760,123 samples, 0.73%)<rayon_core::job::StackJob<L,F,R> as rayon_core::job::Job>::execute (30,760,123 samples, 0.73%)rayon_core::job::JobResult<T>::call (30,760,123 samples, 0.73%)rayon_core::unwind::halt_unwinding (30,760,123 samples, 0.73%)std::panic::catch_unwind (30,760,123 samples, 0.73%)std::panicking::try (30,760,123 samples, 0.73%)std::panicking::try::do_call (30,760,123 samples, 0.73%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (30,760,123 samples, 0.73%)rayon_core::job::JobResult<T>::call::_{{closure}} (30,760,123 samples, 0.73%)rayon_core::join::join_context::call_b::_{{closure}} (30,760,123 samples, 0.73%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (30,760,123 samples, 0.73%)rayon::iter::plumbing::bridge_producer_consumer::helper (30,760,123 samples, 0.73%)rayon_core::join::join_context (30,760,123 samples, 0.73%)rayon_core::registry::in_worker (30,760,123 samples, 0.73%)rayon_core::join::join_context::_{{closure}} (30,760,123 samples, 0.73%)rayon_core::unwind::halt_unwinding (30,760,123 samples, 0.73%)std::panic::catch_unwind (30,760,123 samples, 0.73%)std::panicking::try (30,760,123 samples, 0.73%)std::panicking::try::do_call (30,760,123 samples, 0.73%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (30,760,123 samples, 0.73%)rayon_core::join::join_context::call_a::_{{closure}} (30,760,123 samples, 0.73%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (30,760,123 samples, 0.73%)rayon::iter::plumbing::bridge_producer_consumer::helper (30,760,123 samples, 0.73%)rayon::iter::plumbing::Producer::fold_with (30,760,123 samples, 0.73%)<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (30,760,123 samples, 0.73%)rayon::iter::plumbing::Folder::consume_iter (30,760,123 samples, 0.73%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (30,760,123 samples, 0.73%)core::option::Option<T>::map (30,760,123 samples, 0.73%)core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (30,760,123 samples, 0.73%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (30,760,123 samples, 0.73%)wxbox_ar2::parse::_{{closure}} (30,760,123 samples, 0.73%)nexrad_data::volume::record::Record::decompress (30,760,123 samples, 0.73%)std::io::Read::read_to_end (30,760,123 samples, 0.73%)std::io::default_read_to_end (30,760,123 samples, 0.73%)std::io::default_read_to_end::small_probe_read (22,880,052 samples, 0.54%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (22,880,052 samples, 0.54%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (22,880,052 samples, 0.54%)bzip2::mem::Decompress::decompress (22,880,052 samples, 0.54%)BZ2_bzDecompress (22,880,052 samples, 0.54%)BZ2_decompress (22,880,052 samples, 0.54%)std::io::Read::read_buf (16,073,877 samples, 0.38%)std::io::default_read_buf (16,073,877 samples, 0.38%)std::io::Read::read_buf::_{{closure}} (16,073,877 samples, 0.38%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (16,073,877 samples, 0.38%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (16,073,877 samples, 0.38%)bzip2::mem::Decompress::decompress (16,073,877 samples, 0.38%)BZ2_bzDecompress (16,073,877 samples, 0.38%)rayon_core::registry::WorkerThread::wait_until (129,296,784 samples, 3.08%)ray..rayon_core::registry::WorkerThread::wait_until_cold (129,296,784 samples, 3.08%)ray..rayon_core::registry::WorkerThread::execute (129,296,784 samples, 3.08%)ray..rayon_core::job::JobRef::execute (129,296,784 samples, 3.08%)ray..<rayon_core::job::StackJob<L,F,R> as rayon_core::job::Job>::execute (129,296,784 samples, 3.08%)<ra..rayon_core::job::JobResult<T>::call (129,296,784 samples, 3.08%)ray..rayon_core::unwind::halt_unwinding (129,296,784 samples, 3.08%)ray..std::panic::catch_unwind (129,296,784 samples, 3.08%)std..std::panicking::try (129,296,784 samples, 3.08%)std..std::panicking::try::do_call (129,296,784 samples, 3.08%)std..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (129,296,784 samples, 3.08%)<co..rayon_core::job::JobResult<T>::call::_{{closure}} (129,296,784 samples, 3.08%)ray..rayon_core::join::join_context::call_b::_{{closure}} (129,296,784 samples, 3.08%)ray..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (129,296,784 samples, 3.08%)ray..rayon::iter::plumbing::bridge_producer_consumer::helper (129,296,784 samples, 3.08%)ray..rayon_core::join::join_context (129,296,784 samples, 3.08%)ray..rayon_core::registry::in_worker (129,296,784 samples, 3.08%)ray..rayon_core::join::join_context::_{{closure}} (129,296,784 samples, 3.08%)ray..rayon_core::unwind::halt_unwinding (55,545,916 samples, 1.32%)std::panic::catch_unwind (55,545,916 samples, 1.32%)std::panicking::try (55,545,916 samples, 1.32%)std::panicking::try::do_call (55,545,916 samples, 1.32%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (55,545,916 samples, 1.32%)rayon_core::join::join_context::call_a::_{{closure}} (55,545,916 samples, 1.32%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (55,545,916 samples, 1.32%)rayon::iter::plumbing::bridge_producer_consumer::helper (55,545,916 samples, 1.32%)rayon::iter::plumbing::Producer::fold_with (55,545,916 samples, 1.32%)<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (55,545,916 samples, 1.32%)rayon::iter::plumbing::Folder::consume_iter (55,545,916 samples, 1.32%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (55,545,916 samples, 1.32%)core::option::Option<T>::map (55,545,916 samples, 1.32%)core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (55,545,916 samples, 1.32%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (55,545,916 samples, 1.32%)wxbox_ar2::parse::_{{closure}} (55,545,916 samples, 1.32%)nexrad_data::volume::record::Record::decompress (55,545,916 samples, 1.32%)std::io::Read::read_to_end (55,545,916 samples, 1.32%)std::io::default_read_to_end (55,545,916 samples, 1.32%)std::io::default_read_to_end::small_probe_read (39,472,039 samples, 0.94%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (39,472,039 samples, 0.94%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (39,472,039 samples, 0.94%)bzip2::mem::Decompress::decompress (39,472,039 samples, 0.94%)BZ2_bzDecompress (39,472,039 samples, 0.94%)BZ2_decompress (39,472,039 samples, 0.94%)[libc.so.6] (3,884,454 samples, 0.09%)<alloc::boxed::Box<T,A> as core::clone::Clone>::clone (4,580,409 samples, 0.11%)<T as core::clone::CloneToUninit>::clone_to_uninit (4,580,409 samples, 0.11%)<T as core::clone::uninit::CopySpec>::clone_one (4,580,409 samples, 0.11%)<nexrad_decode::messages::digital_radar_data::message::Message as core::clone::Clone>::clone (4,580,409 samples, 0.11%)<core::option::Option<T> as core::clone::Clone>::clone (4,580,409 samples, 0.11%)<nexrad_decode::messages::digital_radar_data::generic_data_block::GenericDataBlock as core::clone::Clone>::clone (4,580,409 samples, 0.11%)<alloc::vec::Vec<T,A> as core::clone::Clone>::clone (4,580,409 samples, 0.11%)alloc::slice::<impl [T]>::to_vec_in (4,580,409 samples, 0.11%)alloc::slice::hack::to_vec (4,580,409 samples, 0.11%)<T as alloc::slice::hack::ConvertVec>::to_vec (4,580,409 samples, 0.11%)alloc::vec::Vec<T,A>::with_capacity_in (4,580,409 samples, 0.11%)alloc::raw_vec::RawVec<T,A>::with_capacity_in (4,580,409 samples, 0.11%)alloc::raw_vec::RawVecInner<A>::with_capacity_in (4,580,409 samples, 0.11%)alloc::raw_vec::RawVecInner<A>::try_allocate_in (4,580,409 samples, 0.11%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (4,580,409 samples, 0.11%)alloc::alloc::Global::alloc_impl (4,580,409 samples, 0.11%)alloc::alloc::alloc (4,580,409 samples, 0.11%)__rdl_alloc (4,580,409 samples, 0.11%)std::sys::alloc::unix::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (4,580,409 samples, 0.11%)malloc (4,580,409 samples, 0.11%)std::io::Read::read_buf (40,926,888 samples, 0.97%)std::io::default_read_buf (40,926,888 samples, 0.97%)std::io::Read::read_buf::_{{closure}} (40,921,884 samples, 0.97%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (40,921,884 samples, 0.97%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (40,921,884 samples, 0.97%)bzip2::mem::Decompress::decompress (40,921,884 samples, 0.97%)BZ2_bzDecompress (40,921,884 samples, 0.97%)nexrad_data::volume::record::Record::decompress (72,960,242 samples, 1.74%)std::io::Read::read_to_end (72,960,242 samples, 1.74%)std::io::default_read_to_end (72,960,242 samples, 1.74%)std::io::default_read_to_end::small_probe_read (32,032,952 samples, 0.76%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (32,032,952 samples, 0.76%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (32,032,952 samples, 0.76%)bzip2::mem::Decompress::decompress (32,032,952 samples, 0.76%)BZ2_bzDecompress (32,032,952 samples, 0.76%)BZ2_decompress (32,032,952 samples, 0.76%)rayon::iter::plumbing::Producer::fold_with (77,657,718 samples, 1.85%)r..<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (77,657,718 samples, 1.85%)<..rayon::iter::plumbing::Folder::consume_iter (77,657,718 samples, 1.85%)r..<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (77,657,718 samples, 1.85%)<..core::option::Option<T>::map (77,657,718 samples, 1.85%)c..core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (77,657,718 samples, 1.85%)c..core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (77,657,718 samples, 1.85%)c..wxbox_ar2::parse::_{{closure}} (77,657,718 samples, 1.85%)w..std::io::Read::read_buf (115,295,558 samples, 2.74%)st..std::io::default_read_buf (115,295,558 samples, 2.74%)st..std::io::Read::read_buf::_{{closure}} (115,295,558 samples, 2.74%)st..<bzip2::read::BzDecoder<R> as std::io::Read>::read (115,295,558 samples, 2.74%)<b..<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (115,295,558 samples, 2.74%)<b..bzip2::mem::Decompress::decompress (115,295,558 samples, 2.74%)bz..BZ2_bzDecompress (115,295,558 samples, 2.74%)BZ..rayon_core::job::StackJob<L,F,R>::run_inline (269,960,769 samples, 6.42%)rayon_co..rayon_core::join::join_context::call_b::_{{closure}} (269,960,769 samples, 6.42%)rayon_co..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (269,960,769 samples, 6.42%)rayon::i..rayon::iter::plumbing::bridge_producer_consumer::helper (269,960,769 samples, 6.42%)rayon::i..rayon::iter::plumbing::Producer::fold_with (269,960,769 samples, 6.42%)rayon::i..<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (269,960,769 samples, 6.42%)<rayon::..rayon::iter::plumbing::Folder::consume_iter (269,960,769 samples, 6.42%)rayon::i..<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (269,960,769 samples, 6.42%)<core::i..core::option::Option<T>::map (269,960,769 samples, 6.42%)core::op..core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (269,960,769 samples, 6.42%)core::op..core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (269,960,769 samples, 6.42%)core::op..wxbox_ar2::parse::_{{closure}} (269,960,769 samples, 6.42%)wxbox_ar..nexrad_data::volume::record::Record::decompress (269,960,769 samples, 6.42%)nexrad_d..std::io::Read::read_to_end (269,960,769 samples, 6.42%)std::io:..std::io::default_read_to_end (269,960,769 samples, 6.42%)std::io:..std::io::default_read_to_end::small_probe_read (154,665,211 samples, 3.68%)std:..<bzip2::read::BzDecoder<R> as std::io::Read>::read (154,665,211 samples, 3.68%)<bzi..<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (154,665,211 samples, 3.68%)<bzi..bzip2::mem::Decompress::decompress (154,665,211 samples, 3.68%)bzip..BZ2_bzDecompress (154,665,211 samples, 3.68%)BZ2_..BZ2_decompress (154,665,211 samples, 3.68%)BZ2_..<alloc::vec::into_iter::IntoIter<T,A> as core::iter::traits::iterator::Iterator>::next (3,735,369 samples, 0.09%)core::ptr::non_null::NonNull<T>::read (3,735,369 samples, 0.09%)core::ptr::read (3,735,369 samples, 0.09%)std::io::Read::read_buf (56,333,933 samples, 1.34%)std::io::default_read_buf (56,333,933 samples, 1.34%)std::io::Read::read_buf::_{{closure}} (56,333,933 samples, 1.34%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (56,333,933 samples, 1.34%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (56,333,933 samples, 1.34%)bzip2::mem::Decompress::decompress (56,333,933 samples, 1.34%)BZ2_bzDecompress (56,333,933 samples, 1.34%)nexrad_data::volume::record::Record::decompress (156,256,263 samples, 3.72%)nexr..std::io::Read::read_to_end (156,256,263 samples, 3.72%)std:..std::io::default_read_to_end (156,256,263 samples, 3.72%)std:..std::io::default_read_to_end::small_probe_read (99,922,330 samples, 2.38%)st..<bzip2::read::BzDecoder<R> as std::io::Read>::read (99,922,330 samples, 2.38%)<b..<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (99,922,330 samples, 2.38%)<b..bzip2::mem::Decompress::decompress (99,922,330 samples, 2.38%)bz..BZ2_bzDecompress (99,922,330 samples, 2.38%)BZ..BZ2_decompress (99,922,330 samples, 2.38%)BZ..[libc.so.6] (2,460,562 samples, 0.06%)rayon_core::job::StackJob<L,F,R>::run_inline (433,587,683 samples, 10.31%)rayon_core::job..rayon_core::join::join_context::call_b::_{{closure}} (433,587,683 samples, 10.31%)rayon_core::joi..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (433,587,683 samples, 10.31%)rayon::iter::pl..rayon::iter::plumbing::bridge_producer_consumer::helper (433,587,683 samples, 10.31%)rayon::iter::pl..rayon_core::join::join_context (433,587,683 samples, 10.31%)rayon_core::joi..rayon_core::registry::in_worker (433,587,683 samples, 10.31%)rayon_core::reg..rayon_core::join::join_context::_{{closure}} (433,587,683 samples, 10.31%)rayon_core::joi..rayon_core::unwind::halt_unwinding (163,626,914 samples, 3.89%)rayo..std::panic::catch_unwind (163,626,914 samples, 3.89%)std:..std::panicking::try (163,626,914 samples, 3.89%)std:..std::panicking::try::do_call (163,626,914 samples, 3.89%)std:..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (163,626,914 samples, 3.89%)<cor..rayon_core::join::join_context::call_a::_{{closure}} (163,626,914 samples, 3.89%)rayo..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (163,626,914 samples, 3.89%)rayo..rayon::iter::plumbing::bridge_producer_consumer::helper (163,626,914 samples, 3.89%)rayo..rayon::iter::plumbing::Producer::fold_with (163,626,914 samples, 3.89%)rayo..<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (163,626,914 samples, 3.89%)<ray..rayon::iter::plumbing::Folder::consume_iter (163,626,914 samples, 3.89%)rayo..<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (163,626,914 samples, 3.89%)<cor..core::option::Option<T>::map (163,626,914 samples, 3.89%)core..core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (163,626,914 samples, 3.89%)core..core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (163,626,914 samples, 3.89%)core..wxbox_ar2::parse::_{{closure}} (163,626,914 samples, 3.89%)wxbo..nexrad_data::volume::record::Record::messages (3,635,282 samples, 0.09%)nexrad_decode::messages::decode_messages (3,635,282 samples, 0.09%)nexrad_decode::messages::decode_message_contents (3,635,282 samples, 0.09%)nexrad_decode::messages::digital_radar_data::decode_digital_radar_data (3,635,282 samples, 0.09%)nexrad_decode::messages::digital_radar_data::data_block_id::DataBlockId::data_block_name (3,635,282 samples, 0.09%)alloc::string::String::from_utf8_lossy (3,635,282 samples, 0.09%)<alloc::boxed::Box<T,A> as core::clone::Clone>::clone (3,939,770 samples, 0.09%)<T as core::clone::CloneToUninit>::clone_to_uninit (3,939,770 samples, 0.09%)<T as core::clone::uninit::CopySpec>::clone_one (3,939,770 samples, 0.09%)<nexrad_decode::messages::digital_radar_data::message::Message as core::clone::Clone>::clone (3,939,770 samples, 0.09%)<core::option::Option<T> as core::clone::Clone>::clone (3,939,770 samples, 0.09%)<nexrad_decode::messages::digital_radar_data::generic_data_block::GenericDataBlock as core::clone::Clone>::clone (3,939,770 samples, 0.09%)<alloc::vec::Vec<T,A> as core::clone::Clone>::clone (3,939,770 samples, 0.09%)alloc::slice::<impl [T]>::to_vec_in (3,939,770 samples, 0.09%)alloc::slice::hack::to_vec (3,939,770 samples, 0.09%)<T as alloc::slice::hack::ConvertVec>::to_vec (3,939,770 samples, 0.09%)core::ptr::const_ptr::<impl *const T>::copy_to_nonoverlapping (3,939,770 samples, 0.09%)core::intrinsics::copy_nonoverlapping (3,939,770 samples, 0.09%)[libc.so.6] (3,939,770 samples, 0.09%)core::io::borrowed_buf::BorrowedCursor::ensure_init (4,245,724 samples, 0.10%)core::intrinsics::write_bytes (4,245,724 samples, 0.10%)[libc.so.6] (4,245,724 samples, 0.10%)std::io::Read::read_buf (63,526,591 samples, 1.51%)std::io::default_read_buf (63,526,591 samples, 1.51%)std::io::Read::read_buf::_{{closure}} (59,280,867 samples, 1.41%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (59,280,867 samples, 1.41%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (59,280,867 samples, 1.41%)bzip2::mem::Decompress::decompress (59,280,867 samples, 1.41%)BZ2_bzDecompress (59,280,867 samples, 1.41%)rayon::iter::plumbing::Producer::fold_with (105,491,991 samples, 2.51%)ra..<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (105,491,991 samples, 2.51%)<r..rayon::iter::plumbing::Folder::consume_iter (105,491,991 samples, 2.51%)ra..<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (105,491,991 samples, 2.51%)<c..core::option::Option<T>::map (105,491,991 samples, 2.51%)co..core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (105,491,991 samples, 2.51%)co..core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (105,491,991 samples, 2.51%)co..wxbox_ar2::parse::_{{closure}} (105,491,991 samples, 2.51%)wx..nexrad_data::volume::record::Record::decompress (101,552,221 samples, 2.42%)ne..std::io::Read::read_to_end (101,552,221 samples, 2.42%)st..std::io::default_read_to_end (101,552,221 samples, 2.42%)st..std::io::default_read_to_end::small_probe_read (38,025,630 samples, 0.90%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (38,025,630 samples, 0.90%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (38,025,630 samples, 0.90%)bzip2::mem::Decompress::decompress (38,025,630 samples, 0.90%)BZ2_bzDecompress (38,025,630 samples, 0.90%)BZ2_decompress (38,025,630 samples, 0.90%)std::io::Read::read_buf (8,391,213 samples, 0.20%)std::io::default_read_buf (8,391,213 samples, 0.20%)std::io::Read::read_buf::_{{closure}} (8,391,213 samples, 0.20%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (8,391,213 samples, 0.20%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (8,391,213 samples, 0.20%)bzip2::mem::Decompress::decompress (8,391,213 samples, 0.20%)BZ2_bzDecompress (8,391,213 samples, 0.20%)rayon_core::job::StackJob<L,F,R>::run_inline (37,605,235 samples, 0.89%)rayon_core::join::join_context::call_b::_{{closure}} (37,605,235 samples, 0.89%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (37,605,235 samples, 0.89%)rayon::iter::plumbing::bridge_producer_consumer::helper (37,605,235 samples, 0.89%)rayon::iter::plumbing::Producer::fold_with (37,605,235 samples, 0.89%)<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (37,605,235 samples, 0.89%)rayon::iter::plumbing::Folder::consume_iter (37,605,235 samples, 0.89%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (37,605,235 samples, 0.89%)core::option::Option<T>::map (37,605,235 samples, 0.89%)core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (37,605,235 samples, 0.89%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (37,605,235 samples, 0.89%)wxbox_ar2::parse::_{{closure}} (37,605,235 samples, 0.89%)nexrad_data::volume::record::Record::decompress (37,605,235 samples, 0.89%)std::io::Read::read_to_end (37,605,235 samples, 0.89%)std::io::default_read_to_end (37,605,235 samples, 0.89%)std::io::default_read_to_end::small_probe_read (29,214,022 samples, 0.69%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (29,214,022 samples, 0.69%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (29,214,022 samples, 0.69%)bzip2::mem::Decompress::decompress (29,214,022 samples, 0.69%)BZ2_bzDecompress (29,214,022 samples, 0.69%)BZ2_decompress (29,214,022 samples, 0.69%)std::io::Read::read_buf (8,691,540 samples, 0.21%)std::io::default_read_buf (8,691,540 samples, 0.21%)std::io::Read::read_buf::_{{closure}} (8,691,540 samples, 0.21%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (8,691,540 samples, 0.21%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (8,691,540 samples, 0.21%)bzip2::mem::Decompress::decompress (8,691,540 samples, 0.21%)BZ2_bzDecompress (8,691,540 samples, 0.21%)rayon_core::join::join_context::call_b::_{{closure}} (3,936,717,791 samples, 93.64%)rayon_core::join::join_context::call_b::_{{closure}}rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (3,936,717,791 samples, 93.64%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}}rayon::iter::plumbing::bridge_producer_consumer::helper (3,936,717,791 samples, 93.64%)rayon::iter::plumbing::bridge_producer_consumer::helperrayon_core::join::join_context (3,739,838,836 samples, 88.95%)rayon_core::join::join_contextrayon_core::registry::in_worker (3,739,838,836 samples, 88.95%)rayon_core::registry::in_workerrayon_core::join::join_context::_{{closure}} (3,739,838,836 samples, 88.95%)rayon_core::join::join_context::_{{closure}}rayon_core::unwind::halt_unwinding (2,676,130,699 samples, 63.65%)rayon_core::unwind::halt_unwindingstd::panic::catch_unwind (2,676,130,699 samples, 63.65%)std::panic::catch_unwindstd::panicking::try (2,676,130,699 samples, 63.65%)std::panicking::trystd::panicking::try::do_call (2,676,130,699 samples, 63.65%)std::panicking::try::do_call<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (2,676,130,699 samples, 63.65%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_oncerayon_core::join::join_context::call_a::_{{closure}} (2,676,130,699 samples, 63.65%)rayon_core::join::join_context::call_a::_{{closure}}rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (2,676,130,699 samples, 63.65%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}}rayon::iter::plumbing::bridge_producer_consumer::helper (2,676,130,699 samples, 63.65%)rayon::iter::plumbing::bridge_producer_consumer::helperrayon_core::join::join_context (2,489,184,642 samples, 59.21%)rayon_core::join::join_contextrayon_core::registry::in_worker (2,489,184,642 samples, 59.21%)rayon_core::registry::in_workerrayon_core::join::join_context::_{{closure}} (2,489,184,642 samples, 59.21%)rayon_core::join::join_context::_{{closure}}rayon_core::unwind::halt_unwinding (1,522,450,465 samples, 36.21%)rayon_core::unwind::halt_unwindingstd::panic::catch_unwind (1,522,450,465 samples, 36.21%)std::panic::catch_unwindstd::panicking::try (1,522,450,465 samples, 36.21%)std::panicking::trystd::panicking::try::do_call (1,522,450,465 samples, 36.21%)std::panicking::try::do_call<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (1,522,450,465 samples, 36.21%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops..rayon_core::join::join_context::call_a::_{{closure}} (1,522,450,465 samples, 36.21%)rayon_core::join::join_context::call_a::_{{closure}}rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (1,522,450,465 samples, 36.21%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{..rayon::iter::plumbing::bridge_producer_consumer::helper (1,522,450,465 samples, 36.21%)rayon::iter::plumbing::bridge_producer_consumer::helperrayon_core::join::join_context (1,405,050,949 samples, 33.42%)rayon_core::join::join_contextrayon_core::registry::in_worker (1,405,050,949 samples, 33.42%)rayon_core::registry::in_workerrayon_core::join::join_context::_{{closure}} (1,405,050,949 samples, 33.42%)rayon_core::join::join_context::_{{closure}}rayon_core::unwind::halt_unwinding (664,902,131 samples, 15.82%)rayon_core::unwind::halt..std::panic::catch_unwind (664,902,131 samples, 15.82%)std::panic::catch_unwindstd::panicking::try (664,902,131 samples, 15.82%)std::panicking::trystd::panicking::try::do_call (664,902,131 samples, 15.82%)std::panicking::try::do_..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (664,902,131 samples, 15.82%)<core::panic::unwind_saf..rayon_core::join::join_context::call_a::_{{closure}} (664,902,131 samples, 15.82%)rayon_core::join::join_c..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (664,902,131 samples, 15.82%)rayon::iter::plumbing::b..rayon::iter::plumbing::bridge_producer_consumer::helper (664,902,131 samples, 15.82%)rayon::iter::plumbing::b..rayon_core::join::join_context (587,241,215 samples, 13.97%)rayon_core::join::joi..rayon_core::registry::in_worker (587,241,215 samples, 13.97%)rayon_core::registry:..rayon_core::join::join_context::_{{closure}} (587,241,215 samples, 13.97%)rayon_core::join::joi..rayon_core::unwind::halt_unwinding (153,653,532 samples, 3.65%)rayo..std::panic::catch_unwind (153,653,532 samples, 3.65%)std:..std::panicking::try (153,653,532 samples, 3.65%)std:..std::panicking::try::do_call (153,653,532 samples, 3.65%)std:..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (153,653,532 samples, 3.65%)<cor..rayon_core::join::join_context::call_a::_{{closure}} (153,653,532 samples, 3.65%)rayo..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (153,653,532 samples, 3.65%)rayo..rayon::iter::plumbing::bridge_producer_consumer::helper (153,653,532 samples, 3.65%)rayo..rayon_core::join::join_context (48,161,541 samples, 1.15%)rayon_core::registry::in_worker (48,161,541 samples, 1.15%)rayon_core::join::join_context::_{{closure}} (48,161,541 samples, 1.15%)rayon_core::unwind::halt_unwinding (10,556,306 samples, 0.25%)std::panic::catch_unwind (10,556,306 samples, 0.25%)std::panicking::try (10,556,306 samples, 0.25%)std::panicking::try::do_call (10,556,306 samples, 0.25%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (10,556,306 samples, 0.25%)rayon_core::join::join_context::call_a::_{{closure}} (10,556,306 samples, 0.25%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (10,556,306 samples, 0.25%)rayon::iter::plumbing::bridge_producer_consumer::helper (10,556,306 samples, 0.25%)rayon::iter::plumbing::Producer::fold_with (10,556,306 samples, 0.25%)<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (10,556,306 samples, 0.25%)rayon::iter::plumbing::Folder::consume_iter (10,556,306 samples, 0.25%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (10,556,306 samples, 0.25%)core::option::Option<T>::map (10,556,306 samples, 0.25%)core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (10,556,306 samples, 0.25%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (10,556,306 samples, 0.25%)wxbox_ar2::parse::_{{closure}} (10,556,306 samples, 0.25%)nexrad_data::volume::record::Record::decompress (10,556,306 samples, 0.25%)std::io::Read::read_to_end (10,556,306 samples, 0.25%)std::io::default_read_to_end (10,556,306 samples, 0.25%)std::io::default_read_to_end::small_probe_read (1,864,766 samples, 0.04%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (1,864,766 samples, 0.04%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (1,864,766 samples, 0.04%)bzip2::mem::Decompress::decompress (1,864,766 samples, 0.04%)BZ2_bzDecompress (1,864,766 samples, 0.04%)BZ2_decompress (1,864,766 samples, 0.04%)std::io::Read::read_buf (52,615,672 samples, 1.25%)std::io::default_read_buf (52,615,672 samples, 1.25%)std::io::Read::read_buf::_{{closure}} (52,615,672 samples, 1.25%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (52,615,672 samples, 1.25%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (52,615,672 samples, 1.25%)bzip2::mem::Decompress::decompress (52,615,672 samples, 1.25%)BZ2_bzDecompress (52,615,672 samples, 1.25%)rayon_core::job::StackJob<L,F,R>::run_inline (88,860,075 samples, 2.11%)r..rayon_core::join::join_context::call_b::_{{closure}} (88,860,075 samples, 2.11%)r..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (88,860,075 samples, 2.11%)r..rayon::iter::plumbing::bridge_producer_consumer::helper (88,860,075 samples, 2.11%)r..rayon_core::join::join_context (88,860,075 samples, 2.11%)r..rayon_core::registry::in_worker (88,860,075 samples, 2.11%)r..rayon_core::join::join_context::_{{closure}} (88,860,075 samples, 2.11%)r..rayon_core::unwind::halt_unwinding (88,860,075 samples, 2.11%)r..std::panic::catch_unwind (88,860,075 samples, 2.11%)s..std::panicking::try (88,860,075 samples, 2.11%)s..std::panicking::try::do_call (88,860,075 samples, 2.11%)s..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (88,860,075 samples, 2.11%)<..rayon_core::join::join_context::call_a::_{{closure}} (88,860,075 samples, 2.11%)r..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (88,860,075 samples, 2.11%)r..rayon::iter::plumbing::bridge_producer_consumer::helper (88,860,075 samples, 2.11%)r..rayon::iter::plumbing::Producer::fold_with (88,860,075 samples, 2.11%)r..<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (88,860,075 samples, 2.11%)<..rayon::iter::plumbing::Folder::consume_iter (88,860,075 samples, 2.11%)r..<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (88,860,075 samples, 2.11%)<..core::option::Option<T>::map (88,860,075 samples, 2.11%)c..core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (88,860,075 samples, 2.11%)c..core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (88,860,075 samples, 2.11%)c..wxbox_ar2::parse::_{{closure}} (88,860,075 samples, 2.11%)w..nexrad_data::volume::record::Record::decompress (88,860,075 samples, 2.11%)n..std::io::Read::read_to_end (88,860,075 samples, 2.11%)s..std::io::default_read_to_end (88,860,075 samples, 2.11%)s..std::io::default_read_to_end::small_probe_read (36,244,403 samples, 0.86%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (36,244,403 samples, 0.86%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (36,244,403 samples, 0.86%)bzip2::mem::Decompress::decompress (36,244,403 samples, 0.86%)BZ2_bzDecompress (36,244,403 samples, 0.86%)BZ2_decompress (36,244,403 samples, 0.86%)std::io::Read::read_buf (19,041,579 samples, 0.45%)std::io::default_read_buf (19,041,579 samples, 0.45%)std::io::Read::read_buf::_{{closure}} (19,041,579 samples, 0.45%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (19,041,579 samples, 0.45%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (19,041,579 samples, 0.45%)bzip2::mem::Decompress::decompress (19,041,579 samples, 0.45%)BZ2_bzDecompress (19,041,579 samples, 0.45%)rayon_core::registry::WorkerThread::wait_until (131,466,598 samples, 3.13%)ray..rayon_core::registry::WorkerThread::wait_until_cold (131,466,598 samples, 3.13%)ray..rayon_core::registry::WorkerThread::execute (131,466,598 samples, 3.13%)ray..rayon_core::job::JobRef::execute (131,466,598 samples, 3.13%)ray..<rayon_core::job::StackJob<L,F,R> as rayon_core::job::Job>::execute (131,466,598 samples, 3.13%)<ra..rayon_core::job::JobResult<T>::call (131,466,598 samples, 3.13%)ray..rayon_core::unwind::halt_unwinding (131,466,598 samples, 3.13%)ray..std::panic::catch_unwind (131,466,598 samples, 3.13%)std..std::panicking::try (131,466,598 samples, 3.13%)std..std::panicking::try::do_call (131,466,598 samples, 3.13%)std..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (131,466,598 samples, 3.13%)<co..rayon_core::job::JobResult<T>::call::_{{closure}} (131,466,598 samples, 3.13%)ray..rayon_core::join::join_context::call_b::_{{closure}} (131,466,598 samples, 3.13%)ray..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (131,466,598 samples, 3.13%)ray..rayon::iter::plumbing::bridge_producer_consumer::helper (131,466,598 samples, 3.13%)ray..rayon_core::join::join_context (131,466,598 samples, 3.13%)ray..rayon_core::registry::in_worker (131,466,598 samples, 3.13%)ray..rayon_core::join::join_context::_{{closure}} (131,466,598 samples, 3.13%)ray..rayon_core::unwind::halt_unwinding (131,466,598 samples, 3.13%)ray..std::panic::catch_unwind (131,466,598 samples, 3.13%)std..std::panicking::try (131,466,598 samples, 3.13%)std..std::panicking::try::do_call (131,466,598 samples, 3.13%)std..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (131,466,598 samples, 3.13%)<co..rayon_core::join::join_context::call_a::_{{closure}} (131,466,598 samples, 3.13%)ray..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (131,466,598 samples, 3.13%)ray..rayon::iter::plumbing::bridge_producer_consumer::helper (131,466,598 samples, 3.13%)ray..rayon_core::join::join_context (131,466,598 samples, 3.13%)ray..rayon_core::registry::in_worker (131,466,598 samples, 3.13%)ray..rayon_core::join::join_context::_{{closure}} (131,466,598 samples, 3.13%)ray..rayon_core::unwind::halt_unwinding (42,606,523 samples, 1.01%)std::panic::catch_unwind (42,606,523 samples, 1.01%)std::panicking::try (42,606,523 samples, 1.01%)std::panicking::try::do_call (42,606,523 samples, 1.01%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (42,606,523 samples, 1.01%)rayon_core::join::join_context::call_a::_{{closure}} (42,606,523 samples, 1.01%)rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (42,606,523 samples, 1.01%)rayon::iter::plumbing::bridge_producer_consumer::helper (42,606,523 samples, 1.01%)rayon::iter::plumbing::Producer::fold_with (42,606,523 samples, 1.01%)<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (42,606,523 samples, 1.01%)rayon::iter::plumbing::Folder::consume_iter (42,606,523 samples, 1.01%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (42,606,523 samples, 1.01%)core::option::Option<T>::map (42,606,523 samples, 1.01%)core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (42,606,523 samples, 1.01%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (42,606,523 samples, 1.01%)wxbox_ar2::parse::_{{closure}} (42,606,523 samples, 1.01%)nexrad_data::volume::record::Record::decompress (42,606,523 samples, 1.01%)std::io::Read::read_to_end (42,606,523 samples, 1.01%)std::io::default_read_to_end (42,606,523 samples, 1.01%)std::io::default_read_to_end::small_probe_read (23,564,944 samples, 0.56%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (23,564,944 samples, 0.56%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (23,564,944 samples, 0.56%)bzip2::mem::Decompress::decompress (23,564,944 samples, 0.56%)BZ2_bzDecompress (23,564,944 samples, 0.56%)BZ2_decompress (23,564,944 samples, 0.56%)std::io::Read::read_buf (56,121,531 samples, 1.33%)std::io::default_read_buf (56,121,531 samples, 1.33%)std::io::Read::read_buf::_{{closure}} (56,121,531 samples, 1.33%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (56,121,531 samples, 1.33%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (56,121,531 samples, 1.33%)bzip2::mem::Decompress::decompress (56,121,531 samples, 1.33%)BZ2_bzDecompress (56,121,531 samples, 1.33%)nexrad_data::volume::record::Record::decompress (114,555,159 samples, 2.72%)ne..std::io::Read::read_to_end (114,555,159 samples, 2.72%)st..std::io::default_read_to_end (114,555,159 samples, 2.72%)st..std::io::default_read_to_end::small_probe_read (58,433,628 samples, 1.39%)<bzip2::read::BzDecoder<R> as std::io::Read>::read (58,433,628 samples, 1.39%)<bzip2::bufread::BzDecoder<R> as std::io::Read>::read (58,433,628 samples, 1.39%)bzip2::mem::Decompress::decompress (58,433,628 samples, 1.39%)BZ2_bzDecompress (58,433,628 samples, 1.39%)BZ2_decompress (58,433,628 samples, 1.39%)rayon_core::registry::WorkerThread::execute (4,186,585,252 samples, 99.58%)rayon_core::registry::WorkerThread::executerayon_core::job::JobRef::execute (4,186,585,252 samples, 99.58%)rayon_core::job::JobRef::execute<rayon_core::job::StackJob<L,F,R> as rayon_core::job::Job>::execute (4,186,585,252 samples, 99.58%)<rayon_core::job::StackJob<L,F,R> as rayon_core::job::Job>::executerayon_core::job::JobResult<T>::call (4,186,585,252 samples, 99.58%)rayon_core::job::JobResult<T>::callrayon_core::unwind::halt_unwinding (4,186,585,252 samples, 99.58%)rayon_core::unwind::halt_unwindingstd::panic::catch_unwind (4,186,585,252 samples, 99.58%)std::panic::catch_unwindstd::panicking::try (4,186,585,252 samples, 99.58%)std::panicking::trystd::panicking::try::do_call (4,186,585,252 samples, 99.58%)std::panicking::try::do_call<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (4,186,585,252 samples, 99.58%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_oncerayon_core::job::JobResult<T>::call::_{{closure}} (4,186,585,252 samples, 99.58%)rayon_core::job::JobResult<T>::call::_{{closure}}rayon_core::registry::Registry::in_worker_cold::_{{closure}}::_{{closure}} (249,867,461 samples, 5.94%)rayon_co..rayon_core::join::join_context::_{{closure}} (249,867,461 samples, 5.94%)rayon_co..rayon_core::unwind::halt_unwinding (249,867,461 samples, 5.94%)rayon_co..std::panic::catch_unwind (249,867,461 samples, 5.94%)std::pan..std::panicking::try (249,867,461 samples, 5.94%)std::pan..std::panicking::try::do_call (249,867,461 samples, 5.94%)std::pan..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (249,867,461 samples, 5.94%)<core::p..rayon_core::join::join_context::call_a::_{{closure}} (249,867,461 samples, 5.94%)rayon_co..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (249,867,461 samples, 5.94%)rayon::i..rayon::iter::plumbing::bridge_producer_consumer::helper (249,867,461 samples, 5.94%)rayon::i..rayon_core::join::join_context (249,867,461 samples, 5.94%)rayon_co..rayon_core::registry::in_worker (249,867,461 samples, 5.94%)rayon_co..rayon_core::join::join_context::_{{closure}} (249,867,461 samples, 5.94%)rayon_co..rayon_core::unwind::halt_unwinding (249,867,461 samples, 5.94%)rayon_co..std::panic::catch_unwind (249,867,461 samples, 5.94%)std::pan..std::panicking::try (249,867,461 samples, 5.94%)std::pan..std::panicking::try::do_call (249,867,461 samples, 5.94%)std::pan..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (249,867,461 samples, 5.94%)<core::p..rayon_core::join::join_context::call_a::_{{closure}} (249,867,461 samples, 5.94%)rayon_co..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (249,867,461 samples, 5.94%)rayon::i..rayon::iter::plumbing::bridge_producer_consumer::helper (249,867,461 samples, 5.94%)rayon::i..rayon_core::join::join_context (249,867,461 samples, 5.94%)rayon_co..rayon_core::registry::in_worker (249,867,461 samples, 5.94%)rayon_co..rayon_core::join::join_context::_{{closure}} (249,867,461 samples, 5.94%)rayon_co..rayon_core::unwind::halt_unwinding (249,867,461 samples, 5.94%)rayon_co..std::panic::catch_unwind (249,867,461 samples, 5.94%)std::pan..std::panicking::try (249,867,461 samples, 5.94%)std::pan..std::panicking::try::do_call (249,867,461 samples, 5.94%)std::pan..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (249,867,461 samples, 5.94%)<core::p..rayon_core::join::join_context::call_a::_{{closure}} (249,867,461 samples, 5.94%)rayon_co..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (249,867,461 samples, 5.94%)rayon::i..rayon::iter::plumbing::bridge_producer_consumer::helper (249,867,461 samples, 5.94%)rayon::i..rayon_core::join::join_context (249,867,461 samples, 5.94%)rayon_co..rayon_core::registry::in_worker (249,867,461 samples, 5.94%)rayon_co..rayon_core::join::join_context::_{{closure}} (249,867,461 samples, 5.94%)rayon_co..rayon_core::unwind::halt_unwinding (249,867,461 samples, 5.94%)rayon_co..std::panic::catch_unwind (249,867,461 samples, 5.94%)std::pan..std::panicking::try (249,867,461 samples, 5.94%)std::pan..std::panicking::try::do_call (249,867,461 samples, 5.94%)std::pan..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (249,867,461 samples, 5.94%)<core::p..rayon_core::join::join_context::call_a::_{{closure}} (249,867,461 samples, 5.94%)rayon_co..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (249,867,461 samples, 5.94%)rayon::i..rayon::iter::plumbing::bridge_producer_consumer::helper (249,867,461 samples, 5.94%)rayon::i..rayon_core::join::join_context (249,867,461 samples, 5.94%)rayon_co..rayon_core::registry::in_worker (249,867,461 samples, 5.94%)rayon_co..rayon_core::join::join_context::_{{closure}} (249,867,461 samples, 5.94%)rayon_co..rayon_core::unwind::halt_unwinding (118,400,863 samples, 2.82%)ra..std::panic::catch_unwind (118,400,863 samples, 2.82%)st..std::panicking::try (118,400,863 samples, 2.82%)st..std::panicking::try::do_call (118,400,863 samples, 2.82%)st..<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (118,400,863 samples, 2.82%)<c..rayon_core::join::join_context::call_a::_{{closure}} (118,400,863 samples, 2.82%)ra..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (118,400,863 samples, 2.82%)ra..rayon::iter::plumbing::bridge_producer_consumer::helper (118,400,863 samples, 2.82%)ra..rayon_core::join::join_context (118,400,863 samples, 2.82%)ra..rayon_core::registry::in_worker (118,400,863 samples, 2.82%)ra..rayon_core::join::join_context::_{{closure}} (118,400,863 samples, 2.82%)ra..rayon_core::job::StackJob<L,F,R>::run_inline (118,400,863 samples, 2.82%)ra..rayon_core::join::join_context::call_b::_{{closure}} (118,400,863 samples, 2.82%)ra..rayon::iter::plumbing::bridge_producer_consumer::helper::_{{closure}} (118,400,863 samples, 2.82%)ra..rayon::iter::plumbing::bridge_producer_consumer::helper (118,400,863 samples, 2.82%)ra..rayon::iter::plumbing::Producer::fold_with (118,400,863 samples, 2.82%)ra..<rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter (118,400,863 samples, 2.82%)<r..rayon::iter::plumbing::Folder::consume_iter (118,400,863 samples, 2.82%)ra..<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (118,400,863 samples, 2.82%)<c..core::option::Option<T>::map (118,400,863 samples, 2.82%)co..core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (118,400,863 samples, 2.82%)co..core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut (118,400,863 samples, 2.82%)co..wxbox_ar2::parse::_{{closure}} (118,400,863 samples, 2.82%)wx..nexrad_data::volume::record::Record::messages (3,845,704 samples, 0.09%)nexrad_decode::messages::decode_messages (3,845,704 samples, 0.09%)nexrad_decode::messages::decode_message_contents (3,845,704 samples, 0.09%)nexrad_decode::messages::digital_radar_data::decode_digital_radar_data (3,845,704 samples, 0.09%)nexrad_decode::messages::digital_radar_data::generic_data_block::GenericDataBlock::new (3,845,704 samples, 0.09%)alloc::vec::from_elem (3,845,704 samples, 0.09%)<u8 as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (3,845,704 samples, 0.09%)alloc::raw_vec::RawVec<T,A>::with_capacity_zeroed_in (3,845,704 samples, 0.09%)alloc::raw_vec::RawVecInner<A>::with_capacity_zeroed_in (3,845,704 samples, 0.09%)alloc::raw_vec::RawVecInner<A>::try_allocate_in (3,845,704 samples, 0.09%)<alloc::alloc::Global as core::alloc::Allocator>::allocate_zeroed (3,845,704 samples, 0.09%)alloc::alloc::Global::alloc_impl (3,845,704 samples, 0.09%)alloc::alloc::alloc_zeroed (3,845,704 samples, 0.09%)__rdl_alloc_zeroed (3,845,704 samples, 0.09%)std::sys::alloc::unix::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc_zeroed (3,845,704 samples, 0.09%)[libc.so.6] (3,845,704 samples, 0.09%)<alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once (4,186,644,966 samples, 99.58%)<alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once<alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once (4,186,638,234 samples, 99.58%)<alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_oncecore::ops::function::FnOnce::call_once{{vtable.shim}} (4,186,638,234 samples, 99.58%)core::ops::function::FnOnce::call_once{{vtable.shim}}std::thread::Builder::spawn_unchecked_::_{{closure}} (4,186,638,234 samples, 99.58%)std::thread::Builder::spawn_unchecked_::_{{closure}}std::panic::catch_unwind (4,186,638,234 samples, 99.58%)std::panic::catch_unwindstd::panicking::try (4,186,638,234 samples, 99.58%)std::panicking::trystd::panicking::try::do_call (4,186,638,234 samples, 99.58%)std::panicking::try::do_call<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (4,186,638,234 samples, 99.58%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_oncestd::thread::Builder::spawn_unchecked_::_{{closure}}::_{{closure}} (4,186,638,234 samples, 99.58%)std::thread::Builder::spawn_unchecked_::_{{closure}}::_{{closure}}std::sys::backtrace::__rust_begin_short_backtrace (4,186,638,234 samples, 99.58%)std::sys::backtrace::__rust_begin_short_backtrace<rayon_core::registry::DefaultSpawn as rayon_core::registry::ThreadSpawn>::spawn::_{{closure}} (4,186,638,234 samples, 99.58%)<rayon_core::registry::DefaultSpawn as rayon_core::registry::ThreadSpawn>::spawn::_{{closure}}rayon_core::registry::ThreadBuilder::run (4,186,638,234 samples, 99.58%)rayon_core::registry::ThreadBuilder::runrayon_core::registry::main_loop (4,186,638,234 samples, 99.58%)rayon_core::registry::main_looprayon_core::registry::WorkerThread::wait_until_out_of_work (4,186,618,378 samples, 99.58%)rayon_core::registry::WorkerThread::wait_until_out_of_workrayon_core::registry::WorkerThread::wait_until (4,186,618,378 samples, 99.58%)rayon_core::registry::WorkerThread::wait_untilrayon_core::registry::WorkerThread::wait_until_cold (4,186,618,378 samples, 99.58%)rayon_core::registry::WorkerThread::wait_until_cold[libc.so.6] (4,186,670,699 samples, 99.58%)[libc.so.6][libc.so.6] (4,186,670,699 samples, 99.58%)[libc.so.6]std::sys::pal::unix::thread::Thread::new::thread_start (4,186,665,668 samples, 99.58%)std::sys::pal::unix::thread::Thread::new::thread_startcore::ptr::drop_in_place<core::result::Result<wxbox_ar2::Scan,nexrad_data::result::Error>> (11,356,332 samples, 0.27%)core::ptr::drop_in_place<wxbox_ar2::Scan> (11,356,332 samples, 0.27%)core::ptr::drop_in_place<alloc::vec::Vec<wxbox_ar2::Sweep>> (11,356,332 samples, 0.27%)<alloc::vec::Vec<T,A> as core::ops::drop::Drop>::drop (11,356,332 samples, 0.27%)core::ptr::drop_in_place<[wxbox_ar2::Sweep]> (11,356,332 samples, 0.27%)core::ptr::drop_in_place<wxbox_ar2::Sweep> (11,356,332 samples, 0.27%)core::ptr::drop_in_place<alloc::vec::Vec<wxbox_ar2::Radial>> (11,356,332 samples, 0.27%)<alloc::vec::Vec<T,A> as core::ops::drop::Drop>::drop (11,356,332 samples, 0.27%)core::ptr::drop_in_place<[wxbox_ar2::Radial]> (11,356,332 samples, 0.27%)core::ptr::drop_in_place<wxbox_ar2::Radial> (11,356,024 samples, 0.27%)core::ptr::drop_in_place<core::option::Option<wxbox_ar2::MomentData>> (11,356,024 samples, 0.27%)core::ptr::drop_in_place<wxbox_ar2::MomentData> (11,356,024 samples, 0.27%)core::ptr::drop_in_place<alloc::vec::Vec<u8>> (11,356,024 samples, 0.27%)core::ptr::drop_in_place<alloc::raw_vec::RawVec<u8>> (11,356,024 samples, 0.27%)<alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop (11,356,024 samples, 0.27%)alloc::raw_vec::RawVecInner<A>::deallocate (11,356,024 samples, 0.27%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (11,356,024 samples, 0.27%)alloc::alloc::dealloc (11,356,024 samples, 0.27%)__rdl_dealloc (11,356,024 samples, 0.27%)std::sys::alloc::unix::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (11,356,024 samples, 0.27%)cfree (11,356,024 samples, 0.27%)[libc.so.6] (9,118,227 samples, 0.22%)all (4,204,234,770 samples, 100%)wxbox-ar2 (4,204,234,770 samples, 100.00%)wxbox-ar2_start (13,816,894 samples, 0.33%)__libc_start_main (13,816,894 samples, 0.33%)[libc.so.6] (13,816,894 samples, 0.33%)main (13,816,894 samples, 0.33%)std::sys::backtrace::__rust_begin_short_backtrace (13,816,894 samples, 0.33%)core::ops::function::FnOnce::call_once (13,816,894 samples, 0.33%)wxbox_ar2::main (13,816,894 samples, 0.33%)wxbox_ar2::parse (2,460,562 samples, 0.06%)wxbox_ar2::Sweep::from_radials (2,460,562 samples, 0.06%)[libc.so.6] (2,460,562 samples, 0.06%) \ No newline at end of file diff --git a/crates/ar2/src/lib.rs b/crates/ar2/src/lib.rs index 1a09ca3..7cad846 100644 --- a/crates/ar2/src/lib.rs +++ b/crates/ar2/src/lib.rs @@ -8,8 +8,8 @@ use rayon::prelude::*; use serde::{Deserialize, Serialize}; use std::fmt::{Debug, Formatter}; -pub mod sites; pub mod parse; +pub mod sites; #[derive(Serialize, Deserialize, Clone)] pub struct Scan { diff --git a/crates/ar2/src/main.rs b/crates/ar2/src/main.rs index 8022994..4c88765 100644 --- a/crates/ar2/src/main.rs +++ b/crates/ar2/src/main.rs @@ -1,4 +1,4 @@ -use std::{env}; +use std::env; use std::fs::File; use tracing::Level; use tracing_subscriber::fmt::format::FmtSpan; diff --git a/crates/ar2/src/parse/error.rs b/crates/ar2/src/parse/error.rs index 797c7a8..2d2351a 100644 --- a/crates/ar2/src/parse/error.rs +++ b/crates/ar2/src/parse/error.rs @@ -10,5 +10,5 @@ pub enum Ar2vError { #[error("unknown compression record")] UnknownCompressionRecord, #[error("m31 missing required field")] - Message31MissingRequiredField -} \ No newline at end of file + Message31MissingRequiredField, +} diff --git a/crates/ar2/src/parse/mod.rs b/crates/ar2/src/parse/mod.rs index aac1e41..e6c447b 100644 --- a/crates/ar2/src/parse/mod.rs +++ b/crates/ar2/src/parse/mod.rs @@ -1,24 +1,26 @@ -use std::collections::HashMap; -use std::fmt::Debug; -use std::io::{Cursor, ErrorKind, Read, Seek, SeekFrom}; +use crate::parse::error::Ar2vError; +use crate::parse::scan::{Elevation, Gate, MomentaryProduct, Radial, Scan}; +use crate::parse::types::{ + DataBlock, GenericDataMoment, Message, Message31, Message31Header, MessageHeader, + VolumeHeaderRecord, +}; +use crate::parse::util::unpack_structure; use bincode::error::DecodeError; use bzip2::read::BzDecoder; use rayon::iter::{IntoParallelRefIterator, ParallelIterator}; -use tracing::{debug, Level, span}; -use crate::parse::error::Ar2vError; -use crate::parse::scan::{Elevation, Gate, MomentaryProduct, Radial, Scan}; -use crate::parse::types::{DataBlock, GenericDataMoment, Message, Message31, Message31Header, MessageHeader, VolumeHeaderRecord}; -use crate::parse::util::unpack_structure; +use std::collections::HashMap; +use std::fmt::Debug; +use std::io::{Cursor, ErrorKind, Read, Seek, SeekFrom}; +use tracing::{Level, debug, span}; -pub mod types; pub mod error; -pub mod util; pub mod scan; +pub mod types; +pub mod util; const DEFAULT_MESSAGE_SIZE: usize = 2432; const MESSAGE_BODY_SIZE: usize = DEFAULT_MESSAGE_SIZE - 12 - 16; - #[derive(Debug)] pub struct Ar2v { pub volume_header: VolumeHeaderRecord, @@ -43,12 +45,12 @@ impl Ar2v { Err(e) => match e { DecodeError::UnexpectedEnd { .. } => { break; - }, + } DecodeError::Io { inner, .. } if inner.kind() == ErrorKind::UnexpectedEof => { break; } - _ => return Err(e.into()) - } + _ => return Err(e.into()), + }, }; let size: usize = size.unsigned_abs() as usize; @@ -58,7 +60,8 @@ impl Ar2v { records.push(record_content); } - let rs: Vec, Ar2vError>> = records.par_iter() + let rs: Vec, Ar2vError>> = records + .par_iter() .map(|record_content| { let mut r = decompress_record(record_content)?; @@ -74,17 +77,20 @@ impl Ar2v { Err(e) => match e { DecodeError::UnexpectedEnd { .. } => { break; - }, - DecodeError::Io { inner, .. } if inner.kind() == ErrorKind::UnexpectedEof => { + } + DecodeError::Io { inner, .. } + if inner.kind() == ErrorKind::UnexpectedEof => + { break; } - _ => return Err(e.into()) - } + _ => return Err(e.into()), + }, }; let mut msg_size = hdr.message_size as usize; if msg_size == 65535 { - msg_size = ((hdr.num_message_segments as usize) << 16) | hdr.message_segment_num as usize; + msg_size = ((hdr.num_message_segments as usize) << 16) + | hdr.message_segment_num as usize; } if hdr.message_type == 0 { @@ -100,9 +106,17 @@ impl Ar2v { } if hdr.num_message_segments > 100 { eprintln!("{:?}", hdr); - panic!("very large number of segments {}...", hdr.num_message_segments); + panic!( + "very large number of segments {}...", + hdr.num_message_segments + ); } - if ![1_u8,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,31,32,33].contains(&hdr.message_type) { + if ![ + 1_u8, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 31, 32, + 33, + ] + .contains(&hdr.message_type) + { panic!("invalid message type"); } @@ -128,24 +142,26 @@ impl Ar2v { match d.data_name.as_str().as_str() { "VOL" => { vol = Some(unpack_structure(&mut r)?); - }, + } "ELV" => { elv = Some(unpack_structure(&mut r)?); - }, + } "RAD" => { rad = Some(unpack_structure(&mut r)?); - }, + } "REF" | "VEL" | "CFP" | "SW " | "ZDR" | "PHI" | "RHO" => { let moment: GenericDataMoment = unpack_structure(&mut r)?; - let ldm = moment.number_data_moment_gates as usize * moment.data_word_size as usize / 8; + let ldm = moment.number_data_moment_gates as usize + * moment.data_word_size as usize + / 8; let mut data = vec![0u8; ldm]; r.read_exact(&mut data)?; datablocks.insert(d.data_name.as_str(), (moment, data)); - }, + } - _ => panic!("unknown data block type") + _ => panic!("unknown data block type"), } } @@ -157,7 +173,7 @@ impl Ar2v { elevation: elv.ok_or(Ar2vError::Message31MissingRequiredField)?, radial: rad.ok_or(Ar2vError::Message31MissingRequiredField)?, datablocks, - } + }, ) } else { let mut data = vec![0u8; msg_size]; @@ -168,7 +184,9 @@ impl Ar2v { r.seek(SeekFrom::Current(DEFAULT_MESSAGE_SIZE as i64))?; } else { r.seek(SeekFrom::Start(start))?; - r.seek(SeekFrom::Current((DEFAULT_MESSAGE_SIZE as i64 + msg_size as i64) as i64))?; + r.seek(SeekFrom::Current( + (DEFAULT_MESSAGE_SIZE as i64 + msg_size as i64) as i64, + ))?; } Message::OtherMessage(hdr, data) @@ -189,7 +207,7 @@ impl Ar2v { debug!("extracted raw packet data"); drop(_ldm_extract_span); - debug!(msgs=messages.len(), "extracted messages"); + debug!(msgs = messages.len(), "extracted messages"); let scan_process_span = span!(Level::DEBUG, "process_scan"); let _scan_process_span = scan_process_span.enter(); @@ -198,59 +216,93 @@ impl Ar2v { let mut scan = Scan { elevations: Default::default(), }; - messages.iter() - .for_each(|u| { + + let (tx, rx) = std::sync::mpsc::channel::<(usize, f64, usize, f64, String, MomentaryProduct)>(); + + std::thread::spawn(move || { + messages.par_iter().for_each(|u| { if let Message::Message31(_hdr, m31) = u { - let elevation_num = m31.header.elevation_number as usize; - let azimuth_num = m31.header.azimuth_number as usize; + let elevation_num = m31.header.elevation_number as usize; + let azimuth_num = m31.header.azimuth_number as usize; - let elevation = scan.elevations.entry(elevation_num) - .or_insert_with(|| { Elevation { - elevation_number: elevation_num, - elevation_angle: m31.header.elevation_angle as f64, - radials: Default::default(), - }}); + for (product, data) in &m31.datablocks { + match product.as_str() { + "REF" | "VEL" | "CFP" | "SW " | "ZDR" | "PHI" | "RHO" => (), + _ => continue, + } - let radial = elevation.radials.entry(azimuth_num) - .or_insert_with(|| { Radial { - radial_number: azimuth_num, - azimuth_angle: m31.header.azimuth_angle as f64, - products: Default::default(), - }}); - - for (product, data) in m31.datablocks.iter() { - // scale the data - let chunks = data.1.chunks(data.0.data_word_size as usize / 8); - - radial.products.insert(product.clone(), MomentaryProduct { - start_range_meters: data.0.data_moment_range as isize, - data_spacing_meters: data.0.data_moment_range_sample_interval as isize, - data: chunks.map(|u| { - let mut result = [0u8; 8]; - result[..u.len()].copy_from_slice(u); - usize::from_be_bytes(result) - }).map(|u| { + // scale the data + let chunks = data.1.chunks(data.0.data_word_size as usize / 8); + let mp = MomentaryProduct { + start_range_meters: data.0.data_moment_range as isize, + data_spacing_meters: data.0.data_moment_range_sample_interval as isize, + data: chunks + .map(|u| { + let mut result = [0u8; 8]; + result[..u.len()].copy_from_slice(u); + usize::from_be_bytes(result) + }) + .map(|u| { if u == 0 { Gate::BelowThreshold } else if u == 1 { Gate::RangeFolded } else if data.0.scale == 0.0 { - Gate::Data(u as f64) - } else { - Gate::Data((u as f64) - data.0.offset as f64 / data.0.scale as f64) - } - - }).collect(), - }); - } + Gate::Data(u as f64) + } else { + Gate::Data( + (u as f64) - data.0.offset as f64 / data.0.scale as f64, + ) + } + }) + .collect(), + }; + tx.send((elevation_num, m31.header.elevation_angle as f64, azimuth_num, m31.header.azimuth_angle as f64, product.clone(), mp)).unwrap(); } + } }); + drop(tx); + }); + while let Ok((elevation, elevation_angle, azimuth, azimuth_angle, product, mp)) = rx.recv() { + let elevation = scan + .elevations + .entry(elevation) + .or_insert_with(|| Elevation { + elevation_number: elevation, + elevation_angle, + radials: Default::default(), + }); - Ok(Self { - volume_header: vhr - }) + let radial = elevation + .radials + .entry(azimuth) + .or_insert_with(|| Radial { + radial_number: azimuth, + azimuth_angle, + refl: None, + vel: None, + cfp: None, + sw: None, + zdr: None, + phi: None, + rho: None, + }); + + match product.as_str() { + "REF" => { radial.refl = Some(mp); }, + "VEL" => { radial.vel = Some(mp); }, + "SW " => { radial.sw = Some(mp); }, + "CFP" => { radial.cfp = Some(mp); }, + "ZDR" => { radial.zdr = Some(mp); }, + "PHI" => { radial.phi = Some(mp); }, + "RHO" => { radial.rho = Some(mp); }, + _ => panic!() + }; + } + + Ok(Self { volume_header: vhr }) } } @@ -266,4 +318,4 @@ fn decompress_record(compressed_data: &[u8]) -> Result>, Ar2vErro bz2_reader.read_to_end(&mut buf)?; Ok(Cursor::new(buf)) -} \ No newline at end of file +} diff --git a/crates/ar2/src/parse/scan.rs b/crates/ar2/src/parse/scan.rs index 4a9a32b..edd7889 100644 --- a/crates/ar2/src/parse/scan.rs +++ b/crates/ar2/src/parse/scan.rs @@ -1,27 +1,33 @@ -use rustc_hash::FxHashMap; +use std::collections::BTreeMap; pub struct Scan { - pub elevations: FxHashMap + pub elevations: BTreeMap, } pub struct Elevation { pub elevation_number: usize, pub elevation_angle: f64, - pub radials: FxHashMap + pub radials: BTreeMap, } pub struct Radial { pub radial_number: usize, pub azimuth_angle: f64, - pub products: FxHashMap + pub refl: Option, + pub vel: Option, + pub cfp: Option, + pub sw: Option, + pub zdr: Option, + pub phi: Option, + pub rho: Option, } pub struct MomentaryProduct { pub start_range_meters: isize, pub data_spacing_meters: isize, - pub data: Vec + pub data: Vec, } pub enum Gate { BelowThreshold, RangeFolded, - Data(f64) -} \ No newline at end of file + Data(f64), +} diff --git a/crates/ar2/src/parse/types.rs b/crates/ar2/src/parse/types.rs index 0d7ae67..b59bf1d 100644 --- a/crates/ar2/src/parse/types.rs +++ b/crates/ar2/src/parse/types.rs @@ -1,6 +1,6 @@ -use std::collections::HashMap; -use bincode::Decode; use crate::parse::util::ExactLengthString; +use bincode::Decode; +use std::collections::HashMap; #[derive(Decode, Debug)] #[allow(dead_code)] @@ -21,7 +21,7 @@ pub struct MessageHeader { pub julian_date: u16, pub millis_of_day: u32, pub num_message_segments: u16, - pub message_segment_num: u16 + pub message_segment_num: u16, } #[derive(Decode, Debug)] @@ -42,14 +42,14 @@ pub struct Message31Header { pub elevation_angle: f32, pub radial_spot_blanking_status: u8, pub azimuth_indexing_mode: u8, - pub data_block_count: u16 + pub data_block_count: u16, } #[derive(Decode, Debug)] #[allow(dead_code)] pub struct DataBlock { pub data_block_type: ExactLengthString<1>, - pub data_name: ExactLengthString<3> + pub data_name: ExactLengthString<3>, } #[derive(Decode, Debug)] @@ -70,7 +70,7 @@ pub struct VolumeData { pub system_differential_reflectivity: f32, pub initial_system_differential_phase: f32, pub vcp_number: u16, - pub processing_status: u16 + pub processing_status: u16, } #[derive(Decode, Debug)] #[allow(dead_code)] @@ -94,7 +94,7 @@ pub struct RadialData { pub nyquist_velocity: u16, pub radial_flags: u16, pub calib_const_horz_chan: f32, - pub calib_const_vert_chan: f32 + pub calib_const_vert_chan: f32, } #[derive(Decode, Debug)] @@ -111,7 +111,7 @@ pub struct GenericDataMoment { pub control_flags: u8, pub data_word_size: u8, pub scale: f32, - pub offset: f32 + pub offset: f32, } #[allow(dead_code)] pub struct Message31 { @@ -119,11 +119,11 @@ pub struct Message31 { pub volume: VolumeData, pub elevation: ElevationData, pub radial: RadialData, - pub datablocks: HashMap)> + pub datablocks: HashMap)>, } #[allow(dead_code)] pub enum Message { Message31(MessageHeader, Message31), - OtherMessage(MessageHeader, Vec) -} \ No newline at end of file + OtherMessage(MessageHeader, Vec), +} diff --git a/crates/ar2/src/parse/util.rs b/crates/ar2/src/parse/util.rs index f4eca28..4fffff2 100644 --- a/crates/ar2/src/parse/util.rs +++ b/crates/ar2/src/parse/util.rs @@ -1,12 +1,14 @@ -use std::fmt::{Debug, Display, Formatter}; -use std::io::Read; use bincode::Decode; use bincode::error::DecodeError; +use std::fmt::{Debug, Display, Formatter}; +use std::io::Read; pub(crate) fn unpack_structure, R: Read>(r: &mut R) -> Result { - bincode::decode_from_std_read(r, bincode::config::standard() - .with_big_endian() - .with_fixed_int_encoding() + bincode::decode_from_std_read( + r, + bincode::config::standard() + .with_big_endian() + .with_fixed_int_encoding(), ) } @@ -27,4 +29,4 @@ impl Debug for ExactLengthString { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { write!(f, "{}", self) } -} \ No newline at end of file +}