rustz#rustc 1.72.0 (5680fa18f 2023-08-23) }ޱL{ :-8f88c761e33f2651ՆQ4-46a989d0e2cef827e$ɛDp>-b114db70ea0690b1rustc_std_workspace_core ūu sR-13da980d6c74fec5YnFmZܝ--649be05783c8912epWĪ9/-f002c8f83a289c4b &c~~*ĽVa-682387162b570769cfg_ifz$kdgK!--05a2cedbb78c1d4f miniz_oxidePnzn )m-9c3df673b2797081adlerA%lon  2-c6afbee8d1102512 hashbrown8*^| -356231f77d1e268arustc_std_workspace_allocL%gqG-80ed5799bf463787 std_detecta^Ʒc -1bccb7a942e1b311rustc_demanglekŗ,N/ST%L)-bc6864da821ce9a2 addr2line2Ȃ']51:.-4930b3dc482158f7gimli~2)F25˼-65bea4bb6af40828object^]UVW-919f89587cbed68dmemchrk/YO+-c6624cb4360306cdBhnge],Q-f9018f9cee1cc5ffimpbaaaaaacritical-sectionaabbbb  bbba7a?cbbbbbb  bbbb parking_lot b bb-b5testsLLLL LLL $       with_valueis_initialized initialize F E wait get_uncheckedget_mut into_inner INCOMPLETERUNNINGCOMPLETEINCOMPLETE_PTR COMPLETE_PTR STATE_MASKWaiter. .signaled.Guard2'a2queue2 new_queue67 initialize_or_wait9  ; ; strict>addr?> with_addrA>map_addrCunsyncEEEEEEEEEE E E EOnceCellRRinnerEUEWEYY<E\\E___EccEfEhhEkkk kgetk ksetk try_insertk get_or_inits sVoids kget_or_try_initw w ktakek ELazy|| |cell|initE  E  E   into_value  E  force  force_mut  E  E E<   <                            <_dummyrace         to_usizeOnceRefghost<     once_boxOnceBox<    valueOnceNonZeroUsize<OnceBool< 7 7$7%7&767779797;7C ^7^7^7a7b7b7e7e7o7p7q7r7s7w7z77777777777777777777777777777777777777777777777777777777777777777777G!sY((@(@(2245C7@RRTEHr.(@))G))))))(@||EEҦjgPb( G***||EEҦjgPb( (  oq(G+++(+++Gb|iL&(*,@,,,b|iL&(+!%CYG-"z&G-xw(Gxw(.xw(.G`%RH(///fRUR|\R|62_RcR|WRhR||YR@ G <    @   OnceCell queue3DDVDpDd@{i../ 01@M Gvalue3 "" UnsafeCell"!_ {-P(   4 H    'w z* ( GGGEGEGEG EGEGbufEQ ! >S334 334  59   D4 + 4   (   "5  P (  ( 3 5 5   +:     : +:     (    :   P (     ( 3 5 5   +:      : ,:      (  :  U (     ( ( 3 5 5 (  !   ,:         : ,:         (     :   U (       ( ( 3 5 5 (  !   ,:"3 " D42 ,:  7 :"9"BA(O    ,: * 7 75 "5 3  #(*I 7  {-P*  5    'w7I     77 L  9  K 7*KKK979  {-PLL #(*IKKKPKKKresslot K ?*  ?* *77   I 7I K  (  ( K   K 7  5U  U KU U 5U U K  K    #&yi!P*K   'w(I* (5 IKKKKKKKKKKKUUUUUUUUUUKPKPK!err _ref__f _ref__slot _ref__res 3 L%M%$P777%9 OP ?Y?YS?Y (?Y V?Y?Y?Y A'assertion failed: self.is_initialized()''3?Y5J U  U 5 U U   ? (     >( %Md7S?YV?Y?Y 5K9d  {-Pd UUUUUP5JU U 5U    U * >(&!  {-P ( (  5K9UUUUU  5   "5  '5 (5 ""U!(!U"!0""U")"U""1""U"*"U""2"" (U:">+">:" ">" (UINCOMPLETE as *mut Waiter##*U:#:,#::# #:#*UCOMPLETE as *mut Waiter$$U$-$U$$3*  * -U* *8*U*8 UU7*U*U* q*** -U2  2 -U2 2 2)U2:2U2:ss72U2U2U2 s222 -U2)U:  : -U: :<:U:<ss7:U:U: s::: -U;  U; ; <=;U;=ssw;U;U; w;s; curr_state8 w;_ref__curr_stateC UC?AC$UA (AAAGG  ?(GG[H [H!H  HJ J J(J { JJ2zJADGGH zDzDUD[G UG[G [H{J({J[JDD self_addrG  dest_addrG HDKKLLLL LzL L  L L L L impl FnOnce(usize) -> usizesL LLK"K A(K"LJLLCJzKzKKUL LsL UL LKKJn n  m(n o[n8)nn8p p o(pp  pq qOnceCell(Uninit)3qq  H qp pdp  p OnceCell3pp  H pp" p 4p"p E pp+p+p Epq^op6 7p )o8ofp [pdp EE DebugTupleEEE EEfieldsEE empty_nameE= 1p+p"p"p3p 4p3qoovpor rrr  rss sr rdr r (rr#r n(r#sarr2)r rfr [r dr(r r!rr tt p(t t ttt t jt$uu ) ut ft$tjkt fdtt  (  tuu u u subst5 7s )s sjftjtft [t [t ktdt)us sourcesthistt sv vvv v vvv vv ffvveuTvvv fv fv v fv vvuTwwЋwwjwM)w(w!wwMy (yy:yx) R(ymxc)x 5y5yxcyyy (y yy:yyx) R(yyxcmxc)x 5y5yxcz  (zz:zz0 R(znyy)z (y5z5z !yyyzz zzz  (zz zz:zzz0 R(zzyynyy)z (y5z5z (z!yyy~5~~J~~U~ U~ 5~~U~  ~  ~U~ ~~~&~e~o{~ f{ {f~K~9~U~U~U~U~U~~{{5JU U 5U    U *jp! jΐ kK9UUUUU   r( ܊d((  7( 7(7qɉԊ   'w7( ԉ(ۉ   'wdԥ[(܊ԉ!ۉ!܊ɉWWWWΏ ӏ ӏ   Ǐd   dԥ  5ŐJ  Ő U U 5U U ے   e ے ے  d   / dԥ        ( ےrُ9!+(fΏ [ dǏԥ (kK95 (d+d f f UUUUU!oldǏP v(*s 7   'w(uIMF@*+ w(v(*sߴȴ&+ 1+dsd*   'wdȴ+[ voidȴ˚*˚˚R7˚ (ȴϚv(˚*˚*MMMMMM    d dI/ʤʤʤ ʤʤR 7ʤdʤdʤ Zdʤdʤ dʤ ʤ l(ʤʤʤ   q( eͤ c   'w,kIdʤeͤ    'wdI  dʤ B7( 0 ħ f0  w(*I 3U  3""Z""Z G""Z!@Z!Z A!@Zߧ ߧdߧӧ, dIħޢwޢ/eͤeͤʤʤ֧(ܿ *f [ d(Ĥl c uty(dʤZʤ*ʤ[eͤeͤ(ʤf0  (!@ZIpiecesEEE4&w\NF""Zd֧(dߧfߧ   Ĥ eͤ  ʤ ޢ 3reentrant init3w   )ɱ  {(ɱ ߱zX5 ΐ ) X 5 l {5 )5  Lazy3  H 0˾ ˾cell3Ӿ )Ӿ  40ž E  žE init3(* 34E߾ ߾NN E7 *8 EE DebugStructEEE EE has_fieldsED˄NEE0033˾4Ӿ Ӿ 34..33   *   K; |(*{{* *)  Cell !L~ mKK *{     *  ; |(*{{* *)K *{ )   vv (*s 7*   ?(*(*s   'w(* *)5vv   !KS >*(*s7Gv*vK vv _ref__init,,(*,'"Z'"Z'"Z&@Z&Z&@Z7*7&@Z'"Z,,7, 3,*Lazy instance has previously been poisoned**3,,7,,,) (*s 7(  s((*sdd   , ,(*, +"Z+"Z+"Z*R7*@Z*Z*@Z (K[**@Z+"Z,, _ref__this, 3,*Lazy instance has previously been poisoned**3,,,,,55)  >k g  !K   R   ,,(*,/"Z/"Z /"Z *R 7 Ћ .@Z.Z .@Z )   ) )) 5 >k(*s 7k7!5k *g jjΐ(KKK [*.@Z/"Z,)(k5jΐ,! , 3,*Lazy instance has previously been poisoned**3,,,,,2DZ2Zb2*Z(internal error: entered unreachable code((32DZk2DZ)Sf S) cjΐc  (*?dd? (*Ok k O   (+  (+E*+ E  (C+ C  (   OnceCell(Uninit)3   d   OnceCell3 ݅ "  4" ++6 7 +8f [d+""3 43ވ Ȉ    ۇ  d  (.+ f [ d( !  (  Ȉ  j$ +  f$jk fd      5 7 + jf [ [ kd+  I+(!I Ȉ  Ȉ [ f  f [  (  (N+ ( N     (N+ ( N ( (i+ ((!i  (ii+ (((!i(ah  (% d df h7dd (a i (  $(4?Y4?Yk?Y (Ȃa Ȃ5?Y  n?Y5?Y5?Yb)assertion failed: self.0.is_initialized()))3 5?Y š  ؃ d́7݁Ii77 k?Yn?Y75?Yd(ĉ &(ĉ ׉Tj k Tތ(ތ  %(ތWd͌Ìdތ7ތÌW  ( ޓԥ(  7( 7(7Ó˒֓ ֒(ݒ[(ޓ֒!ݒ!ޓ˒٘  (-- (sk?  ((s:ϙ ə  (      dԥ ϙ dԥɘ  (5͘ d-k-[d(ԥ d!!͘ P!  k  ?( ?(-*(-5 k-!јk- _ref__value (*s 7   'w(VsTߴڣ+ߣ ((*sߴߣ&ڣ+ ԣ1ڣ+dТd*   'wdڣ+˸[ Т*R7 (ķ˸(**QQQQ Ȉ   d֮  dI1(   (*I  oo Koo o 8?Y 8?Yr?Y  p copֿ oܯ(ܯa 9?Y u?Y  9?Y9?Yb)assertion failed: self.0.is_initialized()))39?Y š # dIo1ppܿ *f [ dl c uty7oK7*[ppr?Yu?Yܯ7ܯ9?Ydd! p  7۹۹   +۹۹  ( X5ù  +۹ X(  '( P5˾ +¾(¾P Lazy3  0 cell3 +  40  E init3(*4E NN7 ,8NEE00334  34..33 ۇ * 8 (*uu, *+K*u  ۇ *  8 (*uu, *+K*u +   vv (*s  ?(*(*s ,+5vv  S >*(*s7Gv*vK vv,,(*,>"Z>"Z>"Z=@Z=Z=@Z7*7=@Z>"Z,,7, 3,*Lazy instance has previously been poisoned**3,,7,,,+ (*s  ((*sdd   , ,(*, B"ZB"ZB"Z*R7A@ZAZA@Z (K[*A@ZB"Z,,, 3,*Lazy instance has previously been poisoned**3,,,,,55+ґ  v    R   ,,(*,F"ZF"Z F"Z *R 7  E@ZEZ E@Z +   + ++ґ 5 >k(*s7!5k ,vj(KKK[*E@ZF"Z,+(k5j,! , 3,*Lazy instance has previously been poisoned**3,,,,,IDZIZbI*Z(internal error: entered unreachable code((3IDZkIDZ+ȈSf S+ґ cjc  (*?dd? (*Ok k O  +  (+E,+ EJ J  \ވD?,J J  J J -J J J     U  /   f-   f      U  /    f-   f "   "    ϭ  R {-P NonZeroUsize  G9!  - U   "H U   P  Э  P UE  777 777    'w77݇   'wUUPU HH[!exchange   s 7   'w݇MQ%ߎ6 ߎsЏ16 <6݇݇ ߎ6 [ ߎ ߎ77 ݇  ݇ߎߎ " "چ  7  ݇ ww    'w݇  ww w  l݇   x c   'wwx wH   HU =     U  M      έ  ݇w   xx2 + ߎU"H݇U[݇Ul c uty݇wߎ[xx݇HUHH[U U݇  Pit    x   LL -LL LL-L-LL     +  Z-- Z     ̤  +   Z-- Z!-!! !!*! ?݇ !!! \ {-P!  -!!!! \#)-## ##)# ##"j#Ǩ###)݇##!#"j&2-' ߎs 7݇Џ&2'  ߎsЏ''&H&&H'&&Ǩ&ߎ&݇&2&2'&&&'ߎ''7''''''݇'''ߎ'&ߎ'+:-+ ߎs 7Џ+:+ ߎsЏ+/+T+ B݇+++*   'w*Ǩ*ߎ*+:+:+***+ߎ++7+++ B݇+++++++ߎ+*ߎ+, ,,,,U,,K,݇,U, !,,Ky---U---U--6--6-,z-A݇, ,U-!,,z0 0. 3U0 O1  DDVD2Dd@{i.O1O1 G O1OY G!G formatterG1 2 7eOYOY  OYOY GOYN.YN Y HN)Y10{ 70 xw(.080OY0ֺOY UOYOYO1 O1 ˸0000{0 30OnceRef(30)3000{˸0͸001 1  .1 21011033  .333 D.32F . PhantomData<ɏ""4"!_ .32{23 .32{333 33 33 33333 3  2F .3332{2333 2{4"4 4"4 D.444 4 .4434S4 {-P4 444"H44443667V77 77 7 7V7 D. 7K8 7 8 777888 77788666 6666 .6   'w77V7H7H7[86!6676< . s 7   'wIys;/; ..s;*;/ ;5;/<<:<<;;;;/<[<;; <<:<<< 77<< <<<<<<;<@@@@@"@ @"@@AA A .A zA  BBB BB 7 B{B{B    'w  {B{B {B B lBB BBB  B{B|B  c   'w{B|B  {BCC C BB BD D DD CE DUD UD .DDUD DDUDD?D DDDD D {B  ?@|B|BBBBD*D@?@@@"H@zA ABl c uty{BBB[|B|BBBBBCHCHC[DDDDUDUDUDUDUDD?@@ |B  BBD?HG7HGL L(˸L L" DDVD2Dd@{i(L L"L D(  LQL"  QLQL Gz QLQY QYQYֺQYQYQYP.YP YP)YLK7K /K8KQYLֺQYQYQYQL zQL"zL" L"HL˸LKKKL 3LOnceBox(3L)3LLK˸L͸LLM M  (M MM8/MM8NNN D(N NN N (N N }NOO  (ON#N  Box  l*(666Global 7C\ wN#ONNN7N /N zN zN N}NN NN NNPP  (PPP D(PPF (<ɏ {-PPO/P PzPOPPP PP PP PPPPP P  PF (PPPO/P PzPP OQ"R Q"RRRR RR ~R R dSRUR  UR (R  RUR  R  RUR  SRR dSQQRfQ QzQQ"HR~R zRdRURURURURURRQQQ UU  (UUUU UVV V UU D( UV VV Bzz VV W WW  WW W  7XW 77XXTUUW[W   'w7TTTzU   'wzzUUzUzVHVHVV VWzWWT!TUU!W T[ (*s 7   'w':@ݦߴ[0[ ((*sߴ߀[+[0 [6[0\d\Z\\dZZ*Z   'wd߀[0[[\ZZ \\߀Z\*\\R7\[ ߀\[[[\*\Z*[aaaaaaa"a a"aaaa aa a aaa aaR 7 aaa    'wI aa a a laaabbbbb  baa  caaֿ  aeeebbbb  bcc c bb bd d dzd d d dd#dd#d deeae Ue  Ue ! (e "!eUe # "e $#eUe $! e_eeeeee e dIe _aaaaaabdkde%ܿ` `*`zaa"Haa zaal c utyaa*a[aaazbbbbzbzcHcHc[dzd7d#dzddeeeUe Ue Ue Ue Ue e ``a a a  abd_ (+( (+(E a # OverviewG `once_cell` provides two new cell-like types, [`unsync::OnceCell`] andJM [`sync::OnceCell`]. A `OnceCell` might store arbitrary non-`Copy` types, can^PE be assigned to at most once and provides direct access to the storedHH contents. The core API looks *roughly* like this (and there's much moreK inside, read on!): ```rust,ignore impl OnceCell {* const fn new() -> OnceCell { ... }-5 fn set(&self, value: T) -> Result<(), T> { ... }8( fn get(&self) -> Option<&T> { ... }+ } ```J Note that, like with [`RefCell`] and [`Mutex`], the `set` method requiresML only a shared reference. Because of the single assignment restriction `get`O: can return a `&T` instead of `Ref` or `MutexGuard`.=K The `sync` flavor is thread-safe (that is, implements the [`Sync`] trait),N while the `unsync` one is not."2 [`unsync::OnceCell`]: unsync/struct.OnceCell.html5. [`sync::OnceCell`]: sync/struct.OnceCell.html1D [`RefCell`]: https://doc.rust-lang.org/std/cell/struct.RefCell.htmlG@ [`Mutex`]: https://doc.rust-lang.org/std/sync/struct.Mutex.htmlC? [`Sync`]: https://doc.rust-lang.org/std/marker/trait.Sync.htmlB  # Recipes  6 `OnceCell` might be useful for a variety of patterns. 9 & ## Safe Initialization of Global Data )  ```rust  use std::{env, io};   use once_cell::sync::OnceCell; "  #[derive(Debug)]  pub struct Logger {  // ...  5 static INSTANCE: OnceCell = OnceCell::new(); 8  impl Logger { ) pub fn global() -> &'static Logger { ,; INSTANCE.get().expect("logger is not initialized") > }  E fn from_cli(args: env::Args) -> Result { H // ...  # Ok(Logger {})   fn main() {9 let logger = Logger::from_cli(env::args()).unwrap();<# INSTANCE.set(logger).unwrap();&* // use `Logger::global()` from now on- ## Lazy Initialized Global Data#C This is essentially the `lazy_static!` macro, but without a macro.F . use std::{sync::Mutex, collections::HashMap};1"; fn global_data() -> &'static Mutex> {>N static INSTANCE: OnceCell>> = OnceCell::new();Q INSTANCE.get_or_init(|| {!$ let mut m = HashMap::new();'+ m.insert(13, "Spica".to_string());., m.insert(74, "Hoyten".to_string());/ Mutex::new(m) }) L There are also the [`sync::Lazy`] and [`unsync::Lazy`] convenience types toO streamline this pattern: ɭ1 use once_cell::sync::Lazy;G static GLOBAL_DATA: Lazy>> = Lazy::new(|| {J let mut m = HashMap::new();#' m.insert(13, "Spica".to_string());*( m.insert(74, "Hoyten".to_string());+ Mutex::new(m) });Ī3 println!("{:?}", GLOBAL_DATA.lock().unwrap());6H Note that the variable that holds `Lazy` is declared as `static`, *not*KM `const`. This is important: using `const` instead compiles, but works wrong.P& [`sync::Lazy`]: sync/struct.Lazy.html)* [`unsync::Lazy`]: unsync/struct.Lazy.html-# ## General purpose lazy evaluation&: Unlike `lazy_static!`, `Lazy` works with local variables.=  use once_cell::unsync::Lazy; Ī let ctx = vec![1, 2, 3];  let thunk = Lazy::new(|| {" ctx.iter().sum::()# });  assert_eq!(*thunk, 6);I If you need a lazy field in a struct, you probably should use `OnceCell`L> directly, because that will allow you to access `self` duringA initialization.  use std::{fs, path::PathBuf};!! use once_cell::unsync::OnceCell;$ struct Ctx { config_path: PathBuf, config: OnceCell,! impl Ctx {? pub fn get_config(&self) -> Result<&str, std::io::Error> {B3 let cfg = self.config.get_or_try_init(|| { 62 fs::read_to_string(&self.config_path) 5 })?;! Ok(cfg.as_str())!! !!! ## Lazily Compiled Regex!"E This is a `regex!` macro which takes a string literal and returns an"H3 *expression* that evaluates to a `&'static Regex`:"6## macro_rules! regex {# ($re:literal $(,)?) => {{#!_ static RE: once_cell::sync::OnceCell = once_cell::sync::OnceCell::new();#b; RE.get_or_init(|| regex::Regex::new($re).unwrap())$> }};$ %%%C This macro can be useful to avoid the "compile regex on every loop%F iteration" problem.%% ## Runtime `include_bytes!`%&L The `include_bytes` macro is useful to include test resources, but it slows&OH down test compilation a lot. An alternative is to load the resources at&K runtime:' '' use std::path::Path;'''"( pub struct TestResource {( path: &'static str,( cell: OnceCell>,( (( impl TestResource {(; pub const fn new(path: &'static str) -> TestResource {)>5 TestResource { path, cell: OnceCell::new() })8* # pub fn bytes(&self) -> &[u8] {*&# self.cell.get_or_init(|| {*&D let dir = std::env::var("CARGO_MANIFEST_DIR").unwrap();*G@ let path = Path::new(dir.as_str()).join(self.path);+C9 std::fs::read(&path).unwrap_or_else(|_err| {+<K panic!("failed to load test resource: {}", path.display()),N }), }).as_slice()-- --K static TEST_IMAGE: TestResource = TestResource::new("test_data/lena.png");-N. #[test].  fn test_sobel_filter() {.) let rgb: &[u8] = TEST_IMAGE.bytes();.,. # drop(rgb);./// ## `lateinit`//J `LateInit` type for delayed initialization. It is reminiscent of Kotlin's/MF `lateinit` keyword and allows construction of cyclic data structures:/I0000"0- pub struct LateInit { cell: OnceCell }001 impl LateInit {1# pub fn init(&self, value: T) {1&. assert!(self.cell.set(value).is_ok())112 22" impl Default for LateInit {2%D fn default() -> Self { LateInit { cell: OnceCell::default() } }2G33* impl std::ops::Deref for LateInit {3- type Target = T;3 fn deref(&self) -> &T {3! self.cell.get().unwrap()4$4 44 #[derive(Default)]4 struct A<'a> {4 b: LateInit<&'a B<'a>>,4555 struct B<'a> {5 a: LateInit<&'a A<'a>>5555 fn build_cycle() {5 let a = A::default();6 let b = B::default();6 a.b.init(&b);6 b.a.init(&a);66 let _a = &a.b.a.b.a;6777 # Comparison with std77b |`!Sync` types | Access Mode | Drawbacks |7eb |----------------------|------------------------|-----------------------------------------------|8eb |`Cell` | `T` | requires `T: Copy` for `get` |9eb |`RefCell` | `RefMut` / `Ref` | may panic at runtime |9eb |`unsync::OnceCell` | `&T` | assignable only once |:e;b |`Sync` types | Access Mode | Drawbacks |;e` | `MutexGuard` | may deadlock at runtime, may block the thread |=eb |`sync::OnceCell` | `&T` | assignable only once, may block the thread |>e?L Technically, calling `get_or_init` will also cause a panic or a deadlock if?OM it recursively calls itself. However, because the assignment can happen only@PI once, such cases should be more rare than equivalents with `RefCell` and@L `Mutex`.A A$ # Minimum Supported `rustc` VersionA'A< This crate's minimum supported `rustc` version is `1.56.0`.A?BK If only the `std` feature is enabled, MSRV will be updated conservatively,BNH supporting at least latest 8 versions of the compiler. When using otherCKK features, like `parking_lot`, MSRV might be updated more frequently, up toCNH the latest stable. In both cases, increasing MSRV is *not* considered aDK semver-breaking change.DE # Implementation detailsEE# The implementation is based on theE&J [`lazy_static`](https://github.com/rust-lang-nursery/lazy-static.rs/) andEM> [`lazy_cell`](https://github.com/indiv0/lazycell/) crates andFAM [`std::sync::Once`]. In some sense, `once_cell` just streamlines and unifiesFP those APIs.GGK To implement a sync flavor of `OnceCell`, this crates uses either a customGNH re-implementation of `std::sync::Once` or `parking_lot::Mutex`. This isHKK controlled by the `parking_lot` feature (disabled by default). PerformanceHNI is the same for both cases, but the `parking_lot` based `OnceCell` isIL smaller by up to 16 bytes.JJ This crate uses `unsafe`.JJI [`std::sync::Once`]: https://doc.rust-lang.org/std/sync/struct.Once.htmlJLK # F.A.Q.K K, **Should I use the sync or unsync flavor?**K/KG Because Rust compiler checks thread safety for you, it's impossible toKJH accidentally use `unsync` where `sync` is required. So, use `unsync` inLKG single-threaded code and `sync` in multi-threaded. It's easy to switchLJ6 between the two if code becomes multi-threaded later.M9MA At the moment, `unsync` has an additional benefit that reentrantNDE initialization causes a panic, which might be easier to debug than aNH deadlock.O O# **Does this crate support async?**O&O No, but you can useOG [`async_once_cell`](https://crates.io/crates/async_once_cell) instead.OJP& **Does this crate support `no_std`?**P)PG Yes, but with caveats. `OnceCell` is a synchronization primitive whichPJJ _semantically_ relies on blocking. `OnceCell` guarantees that at most oneQMJ `f` will be called to compute the value. If two threads of execution callQM5 `get_or_init` concurrently, one of them has to wait.R8SJ Waiting fundamentally requires OS support. Execution environment needs toSMM understand who waits on whom to prevent deadlocks due to priority inversion.SPJ You _could_ make code to compile by blindly using pure spinlocks, but theTM( runtime behavior would be subtly wrong.T+UE Given these constraints, `once_cell` provides the following options:UHUM - The `race` module provides similar, but distinct synchronization primitiveUPJ which is compatible with `no_std`. With `race`, the `f` function can beVMK called multiple times by different threads, but only one thread will winWN to install the value.WK - `critical-section` feature (with a `-`, not `_`) uses `critical_section`WN to implement blocking.XX **Can I bring my own mutex?**X!YL There is [generic_once_cell](https://crates.io/crates/generic_once_cell) toYO allow just that.YYG **Should I use `std::cell::OnceCell`, `once_cell`, or `lazy_static`?**YJZM If you can use `std` version (your MSRV is at least 1.70, and you don't needZPM extra features `once_cell` provides), use `std`. Otherwise, use `once_cell`.[P Don't use `lazy_static`.[\ # Related crates\\I * Most of this crate's functionality is available in `std` starting with\LB Rust 1.70. See `std::cell::OnceCell` and `std::sync::OnceLock`.\EH * [double-checked-cell](https://github.com/niklasf/double-checked-cell)]K2 * [lazy-init](https://crates.io/crates/lazy-init)^50 * [lazycell](https://crates.io/crates/lazycell)^38 * [mitochondria](https://crates.io/crates/mitochondria)^;6 * [lazy_static](https://crates.io/crates/lazy_static)_9> * [async_once_cell](https://crates.io/crates/async_once_cell)_AI * [generic_once_cell](https://crates.io/crates/generic_once_cell) (bring`L your own mutex)`E aaaccc cc ccc cc cc ccc cc c c:cc c imp_std.rsc cc()*+,-.29;> 4 " RefUnwindSafe @ UnwindSafe @ O D V D Thread;          0(((()(A@( @( ( .  (    ( $%&'   ( ( 7 ((!  + 7 7( a k 7 7(*K ! "!"*I*7*7Z  #### P7 7(7/ 7 7( 7(27 7( {-P 7(ҩ+ (5!! U""U""U"!":## :$$ U& &4@M/01&&..   !L~ m {-P;;; 쿫 y&&..DDODވDD't&&..:''332245C3C45''''22 33(( 22:(7)7((7 7)76(6 77(*788887s.\.77 73 {-P 77777.M./29::::9u7?77 73:78 ;8 curr_queue8 :;<<<<;w;;====;x@ @?ACAGAAA AzU@@AAzAAADZCCC D zUzBBDDDDDDJlJJJ JzzDDKKKsKsUK C(KKKKd' Single-threaded version of `OnceCell`.c*dR|d EH4d "EIdEEJmemd EKueEMDerefMuteENe @EPe @EQddddd d dddddeeeede e e e jA A cell which can be written to only once. It is not thread safe.eDf@ Unlike [`std::cell::RefCell`], a `OnceCell` provides simple `&`fC references to the contents.fgO [`std::cell::RefCell`]: https://doc.rust-lang.org/std/cell/struct.RefCell.htmlgRg # Exampleg hh$h let cell = OnceCell::new();h assert!(cell.get().is_none());h"i+ let value: &String = cell.get_or_init(|| {i. "Hello, World!".to_string()i#µi$ assert_eq!(value, "Hello, World!");i' assert!(cell.get().is_some());j"jjSSj)Hr.TjjkkERR5mAVVmm m )mmm.XXmn )mmnZZn)[nnnn)YY [(o.]]oG(o )^ooo4o777 7) 7GGGEGEGEG EGEG7EQ ! >S77\o\ ^(ooq$``q(q)abqqrr7 7))_r_ a(rs's 77 7) 7)7_s_ b(ssu,ddu((u )euuu"u77 7) 7)cvc e(vvvggv(v)vvwiiw)jwwww()hh j(!wxllx)mnopqrswz{xxx! Creates a new empty cell.xx)kky0 Creates a new initialized cell.y#y ()kkЋ!y{* Gets a reference to the underlying value.z-{% Returns `None` if the cell is empty.{({7 7) {-P 7(k{k{+2 Gets a mutable reference to the underlying value.~5(K This method is allowed to violate the invariant of writing to a `OnceCell`NF at most once because it requires `&mut` access to `self`. As with allIC interior mutability, `&mut` access permits arbitrary modification:F߁$/ let mut cell: OnceCell = OnceCell::new();2 cell.set(92).unwrap(); *cell.get_mut().unwrap() = 93;"# assert_eq!(cell.get(), Some(&93));&7 7) {-P 7(kkɉ,+ Sets the contents of this cell to `value`..B Returns `Ok(())` if the cell was empty and `Err(value)` if it wasE full.Ɇ ۆ $Ƈֲ"" assert_eq!(cell.set(92), Ok(()));%# assert_eq!(cell.set(62), Err(62));ӈ&"Љ7 7)(kԉkՉ!ۉ9O Like [`set`](Self::set), but also returns a reference to the final cell value.R $Όڌֲ"* assert_eq!(cell.try_insert(92), Ok(&92));-1 assert_eq!(cell.try_insert(62), Err((&92, 62)));4" 7 7)(   'w 7((kk!T8 Gets the contents of the cell, initializing it with `f`; if the cell was empty. # Panics ǔC If `f` panics, the panic is propagated to the caller, and the cellӔF remains uninitialized.ŕB It is an error to reentrantly initialize the cell from `f`. DoingѕE so results in a panic.–Ζ $% let value = cell.get_or_init(|| 92);՗( assert_eq!(value, &92);1 let value = cell.get_or_init(|| unreachable!());4 7 7)* 7(k ttk̙ *7( s(* EȴIMF@svvvvsޢq; Gets the contents of the cell, initializing it with `f` if>= the cell was empty. If the cell was empty and `f` failed, an@ error is returned.М FE $7 assert_eq!(cell.get_or_try_init(|| Err(())), Err(()));:ֲ"9 let value = cell.get_or_try_init(|| -> Result {< Ok(92)ѡµ assert_eq!(value, Ok(&92));" assert_eq!(cell.get(), Some(&92))%΢7 7)*   'w 7(Ik x yxyk̙£ w(*I#R Takes the value out of this `OnceCell`, moving it back to an uninitialized state.UL Has no effect and returns `None` if the `OnceCell` hasn't been initialized.Oթ # Examples$2 let mut cell: OnceCell = OnceCell::new();ͪ5 assert_eq!(cell.take(), None);" let mut cell = OnceCell::new();«#( cell.set("hello".to_string()).unwrap();+4 assert_eq!(cell.take(), Some("hello".to_string()));7 assert_eq!(cell.get(), None);!NIѮF$2 cell = OnceCell::new();Ӱ7 7)5kk z($6 Consumes the `OnceCell`, returning the wrapped value.9& Returns `None` if the cell was empty.)$ճ. let cell: OnceCell = OnceCell::new();1% assert_eq!(cell.into_inner(), None);(̴ش+: assert_eq!(cell.into_inner(), Some("hello".to_string()));= )5kk!2 A value which is initialized on the first access.5ٸ  % let lazy: Lazy = Lazy::new(|| {( println!("initializing");ٹ! 92 µ println!("ready"); println!("{}", *lazy);Ժ // Prints: // ready // initializing // 92 ˻ ۻ} ~}~ *ҦjgPb +E||)E||м6 ռؼ@*ۼ @) *ռռؼؼ0 Ľ *ĽĽ4777 7* 7GGGEGEGEG EGEG7EQ ! >S77 (* *'? Creates a new lazy value with the given initializing function.B  # fn main() { ) let hello = "Hello, World!".to_string();,/ let lazy = Lazy::new(|| hello.to_uppercase());2% assert_eq!(&*lazy, "HELLO, WORLD!");( # }** (*31 Consumes this `Lazy` returning the stored value.4E Returns `Ok(value)` if `Lazy` is initialized and `Err(f)` otherwise.H * (*$ ̙ *%D Forces the evaluation of this lazy value and returns a reference toG the result.9 This is equivalent to the `Deref` impl, but is explicit.<   let lazy = Lazy::new(|| 92); % assert_eq!(Lazy::force(&lazy), &92);( assert_eq!(&*lazy, &92);7 7* 7(ك1L Forces the evaluation of this lazy value and returns a mutable reference toO< This is equivalent to the `DerefMut` impl, but is explicit.?  ! let mut lazy = Lazy::new(|| 92);$- assert_eq!(Lazy::force_mut(&mut lazy), &92);0 assert_eq!(*lazy, 92); 7 7* 7(+7 Gets the reference to the result of this lazy value if:. it was initialized, otherwise returns `None`.1   $ assert_eq!(Lazy::get(&lazy), None);') assert_eq!(Lazy::get(&lazy), Some(&92));,7 7* {-P 7( (*7? Gets the mutable reference to the result of this lazy value ifB1  Ӆ$, assert_eq!(Lazy::get_mut(&mut lazy), None);/dž5 assert_eq!(Lazy::get_mut(&mut lazy), Some(&mut 92));87 7* {-P 7( (*. ̙ * (7 7* 7( (*1 ̙ *! 7 7* 7( (*$(*G Creates a new lazy value using `Default` as the initializing function.J* ( - Thread-safe, blocking version of `OnceCell`.0    : E u @Impq q 6 A thread-safe cell which can be written to only once.9H `OnceCell` provides `&` references to the contents without RAII guards.K; Reading a non-`None` value out of `OnceCell` establishes a>H happens-before relationship with a corresponding write. For example, ifKB thread A initializes the cell with `get_or_init(f)`, and thread BEI subsequently reads the result of this call, B also observes all the sideL effects of `f`. "1 static CELL: OnceCell = OnceCell::new();4 assert!(CELL.get().is_none());" std::thread::spawn(|| {/ let value: &String = CELL.get_or_init(|| {2$ "Hello, World!".to_string()'һ ( assert_eq!(value, "Hello, World!");+ }).join().unwrap();) let value: Option<&String> = CELL.get();, assert!(value.is_some());6 assert_eq!(value.unwrap().as_str(), "Hello, World!");9+oq(+(+ ((++ (. +4777 7+ 7GGGEGEGEG EGEG7EQ ! >S77 ($ѻ+7 7++ (' 77 7+ 7+7 (+(+ (!, +)77 7+ 7+ (Ŀ++!+ۇ0# (+!, Gets the reference to the underlying value./@ Returns `None` if the cell is empty, or being initialized. ThisC method never blocks.7 7+ {-P 7(ȈA Gets the reference to the underlying value, blocking the currentD thread until it is set."5 let mut cell = std::sync::Arc::new(OnceCell::new());8 let t = std::thread::spawn({ - let cell = std::sync::Arc::clone(&cell);0" move || cell.set(92).unwrap()%µ/ // Returns immediately, but might return None.2! let _value_or_none = cell.get();$G // Will return 92, but might block until the other thread does `.set`.J let value: &u32 = cell.wait();" assert_eq!(*value, 92);À t.join().unwrap();  7 7+ 7( (Á+4 Gets the mutable reference to the underlying value.7˄ׄ(NIF"Ӈ߇27 7+ {-P 7(ґ(C Get the reference to the underlying value, without checking if theF cell is initialized.ъ # Safety݊ C Caller must ensure that the cell is in initialized state, and thatF< the contents are acquired by (synchronized to) this thread.͋? 7 7+ 7(ÌšČ˒,.ˍE  َ͎". static CELL: OnceCell = OnceCell::new();1ڏĪ# assert!(CELL.get().is_none());& std::thread::spawn(|| {* assert_eq!(CELL.set(92), Ok(()));- }).join().unwrap();' assert_eq!(CELL.set(62), Err(62));Ǒ*' assert_eq!(CELL.get(), Some(&92));*Ғ7 7+(֒ (ג!ݒ9R $ܕֲ"ǖ-4Ɨ" 7 7+(   'w 7((!ТTD Gets the contents of the cell, initializing it with `f` if the cell˚G was empty.@ Many threads may call `get_or_init` concurrently with differentCD initializing functions, but it is guaranteed that only one functionG will be executed.ڜ F@ It is an error to reentrantly initialize the cell from `f`. TheCD exact outcome is unspecified. Current implementation deadlocks, butG. this may be changed to a panic in the future.1 "֠(ߡ4ע 7 7+* 7( ̙  (* VsT˸q>@ Ŧ: If `f` panics, the panic is propagated to the caller, andѦ= the cell remains uninitialized.#ç< It is an error to reentrantly initialize the cell from `f`.ϧ?9 The exact outcome is unspecified. Current implementation<= deadlocks, but this may be changed to a panic in the future.ܨ@ ǩש":ֲ"<µ%7 7+*   'w 7(I  ̙έڭ (*I#UO"5"ڳ#+ƴ7!̵NIFķз"2Ҹ7 7+5 ($> Consumes the `OnceCell`, returning the wrapped value. ReturnsA `None` if the cell was empty.պ!"1(+Ƚ= +5¾!5ƿ5 This type is thread-safe and can be used in statics.ο8  use std::collections::HashMap;"< static HASHMAP: Lazy> = Lazy::new(|| {?!#*+ m µĪ println!("ready");, println!("{:?}", HASHMAP.get(&13));/( println!("{:?}", HASHMAP.get(&74));+ // Prints: // ready // initializing // Some("Spica") // Some("Hoyten")  ,b|iL& ++0  ,4777 7, 7GGGEGEGEG EGEG7EQ ! >S77 (*+ *+,6  @+ , ,$5 Creates a new lazy value with the given initializing8 function. *, (*34H , (*$ ̙ ,%- Forces the evaluation of this lazy value and06 returns a reference to the result. This is equivalent9& to the `Deref` impl, but is explicit.)  (7 7, 7(10> returns a mutable reference to the result. This is equivalentA) Ӆ$1 assert_eq!(Lazy::force_mut(&mut lazy), &mut 92);4 7 7, 7(+:1  'ˊ,7 7, {-P 7( (*7:1 Ӆ$/87 7, {-P 7( (*. ̙ , (7 7, 7( (*1 ̙ ,! 7 7, 7( (*$,J, ( 7   B Thread-safe, non-blocking, "first one wins" flavor of `OnceCell`.EFF If two threads race to initialize a type from the `race` module, theyJIG don't block, execute initialization function together, but only one ofJ them stores the result., This module does not require `std` feature./ # Atomic orderings5 All types in this module use `Acquire` and `Release`8I [atomic orderings](Ordering) for all their operations. While this is notLM strictly necessary for types other than `OnceBox`, it is useful for users asPJ it allows them to be certain that after `get` or `get_or_init` returns onMG one thread, any side-effects caused by the setter thread prior to themJL calling `set` or `get_or_init` will be made visible to that thread; withoutOL it, it's possible for it to appear as if they haven't happened yet from theOJ getter thread's perspective. This is an acceptable tradeoff to make sinceMF `Acquire` and `Release` have very little performance overhead on mostI architectures versus `Relaxed`.# DV D\  4 "     H   *               - &  -̤ ) Gets the underlying value.  7 7-  8.? Returns `Ok(())` if the cell was empty and `Err(())` if it wasB 7 7-݇!aH Gets the contents of the cell, initializing it with `f` if the cell wasK empty. I If several threads concurrently run `get_or_init`, more than one `f` canLH be called. However, all threads will return the same value, produced byK some `f`.  7 7-ߎ݇ ߎߎ7ߎ7݇  ߎ MQ%~>@LKӘ 7 7-ߎ  Ӛ#ߎ7 ߎ --  ! !7 7-! !"0!.""B" #7 7-# #!#&Q#K$ $$L%KӘ% & 7 7-ߎ &&Ӛ&ߎ7& ߎ&&&&'*n'>'@(((L)KӘ* *7 7-ߎ  ***Ӛ*ߎ7* ߎ******+,*, ݇!,,(,݇!,.-9.....%xw(.xw(.......%.<ɏ""4"!_ ./0/././//////.////0D0777 7. 7GGGEGEGEG EGEG7EQ ! >S770 .001&1/111111/ .22xw(.22222$22ְ .3"3-47 7ְ {-P .4 .4615.55E6 67 7ְ6 .6!6:S8K9 99L:KӘ: : 7 7ְ ;;7;7; .;;;;; ;Iys<?p<>=@>>>L>KӘ? ?7 7ְ   'w  ???@7@ .?@????G H7 .HHH HH HH HHHHHVI DII I I IH$I I III II IIIIJI9JJ/`%RHJJJJJ"JK'K/KKKDK777 7/ 7GGGEGEGEG EGEG7EQ ! >S77K (KKLL/LLMM/ (MM/MMNN7 7/7N (NOO/OOO OP/QQ-Q7 7/ {-P 7(Q (QT6S.SSET T7 7/T (T!TZYXKX YYLYKӘZ Z 7 7/* 7( ZZ̙[*7[ (*ZZZZ[ [߀':@ݦ[_v\>]@^^^L_KӘ_ _7 7/*   'w 7(I  ```̙`*7` (*I``````e/eee/eeg g7 (sY35#(777 7( 7GGGEGEGEG EGEG7EQ ! >S77 (  9 -%CY  J J J &J .-J J - K K K &K /-K K 777 7- 7GGGEGEGEG EGEG7EQ ! >S77K   K 9-z&-LLL&L0-LL- MMM&M1-MM777 7- 7GGGEGEGEG EGEG7EQ ! >S77M M ((./8KKooo rssvv{ԉ  Ì֒  !#&*00046;?KKKNQTZ`K K K MMMk3sync/struct.Lazy.html4https://doc.rust-lang.org/std/marker/trait.Sync.html(https://crates.io/crates/async_once_cellunsync/struct.OnceCell.htmlunsync/struct.Lazy.html.https://github.com/niklasf/double-checked-cell6https://doc.rust-lang.org/std/cell/struct.RefCell.html*https://crates.io/crates/generic_once_cell4https://github.com/rust-lang-nursery/lazy-static.rs/"https://crates.io/crates/lazy-init3https://doc.rust-lang.org/std/sync/struct.Once.html%https://crates.io/crates/mitochondria!https://crates.io/crates/lazycell$https://crates.io/crates/lazy_static#https://github.com/indiv0/lazycell/sync/struct.OnceCell.html4https://doc.rust-lang.org/std/sync/struct.Mutex.html Self::set@899889,@@899889,":HA&AOU":HA&YUY":HA&:H?":HA&fs":HA&4Ư":HA&w ":HA&O!c":HA& VoTc":HA&:')":HA&,o!H":HA& K":HA&Ȗ":HA&OuEU":HA&ByH":HA&X_2@":HA&ٹO ":HA&1KyW":HA&Ō8M":HA&XS ) ":HA&X z`":HA&=u W":HA&`n$9R":HA&KY 6":HA&Aƌ!~":HA&HxM/":HA&*u":HA&g ":HA&R~TQ ":HA&7S":HA&f":HA&hP._":HA&:e|0 :":HA&HA ":HA&єAyChF":HA&•":HA&":HA& dfz":HA&6A$":HA&Q2O":HA&w͇٫k":HA&p:s ":HA&/vD":HA&^1a{":HA&]-":HA&q":HA&|P":HA&^ h":HA&@):":HA& SG@- ":HA&":HA&j7":HA&Pyi":HA&r%13":HA&%:":HA&_s$":HA&*8k":HA&[ C<":HA&[6Ǽ%},":HA&NC":HA&v>":HA&)Hp":HA&2Lmk":HA&+CLq":HA&Ŧ!s":HA&vz":HA&ч+6":HA&W ;?":HA&xVi"x":HA&.x":HA&|߇O ":HA&S/>?":HA& D@m":HA&f˟,":HA&'vM":HA&"2(":HA&u-_":HA&ƫ6":HA&![":HA&Ƞw":HA&yK":HA&84+I":HA&"QH՞":HA&>?>>*":HA&',I":HA&`4":HA&cZ ?":HA&`5":HA&;Qk-":HA&>a4":HA&Mߊ":HA&덼":HA&ήVu(":HA&#g":HA&":HA&ylKls":HA&O_ն":HA&@WV":HA&Q9Œ":HA&c)t&c":HA&k,":HA&z":HA&ju@OԮ":HA&EVie":HA&# M]z":HA&JH1":HA& ":HA&K5[":HA&T%[":HA&E@PVf":HA&q0%":HA&RGS%":HA&YtKp":HA&=]":HA&UbmO":HA&w7":HA&j@,":HA&Q4ΧY":HA&d?|$":HA&s\":HA&_CsR":HA&L 2":HA&ye":HA&gЮ":HA&<9iUS":HA&l.":HA&c} ":HA&KA\] ":HA&":HA&b˻f":HA&SD =":HA&!1":HA&"h":HA&^@8]":HA&$m":HA&M[?fwk":HA&'^һP":HA&Nj!":HA&!pxhC":HA&yS":HA&PY":HA&(#":HA&r a I":HA&R}":HA&%-n":HA&o4":HA&CQ*":HA&2i":HA&m\!͒{":HA&w̭F":HA&6-G:H":HA&L/nT":HA&x]S L":HA&I1":HA&=2Kb":HA&EC":HA&֯O-":HA&3LJ1":HA&7X":HA&>:صF":HA& );J>":HA&{HL":HA&tSRy&r":HA&\w":HA&yr56":HA&Srx":HA&-$":HA&V\":HA&ٝq":HA&*":HA&d*" ":HA&1M/":HA&swE{":HA& f":HA&g8_":HA&湝 =":HA&g g":HA&/7b,":HA&FCl=":HA&2ɚ":HA&' `":HA&`JœZ":HA&k^":HA&k":HA&`oVE\":HA&3":HA&(G?B_":HA&"cMN":HA&>mZb-*P":HA&rz"":HA&L:oՐ`L":HA&\k":HA&ϟ`":HA&`~":HA&2c_~ڸ":HA&(5P":HA&H +":HA&Í":HA&PiZ":HA&[":HA&sS7":HA&`|D*V":HA&dát1":HA&eyq]":HA&ґ@Y=":HA&[9":HA&vA":HA&D5":HA&4C;E":HA&wget":HA&GOFI":HA& dXX":HA&Dc7,wv":HA&Ԃ-Y":HA&SD7":HA&KttZ":HA&s":HA&t3+":HA&9^/":HA&9j$=>":HA&gR":HA&A9Kv":HA&o_i}i>":HA&Q"n":HA&N!\":HA&K":HA&בC":HA&o":HA&O ":HA&q_O]y":HA&QO<Ў":HA&,7NXL":HA&L3lŘ˗":HA&6Ã":HA&NdpT":HA&`J"":HA&PC>>":HA&>$؉":HA&kCҮ^":HA&6)":HA&vR(":HA&07":HA&x{P":HA&QA[s":HA&kvϨ":HA& ":HA&d":HA&^QP":HA&`bW>֑":HA&Cޛ.|i":HA&E ]@":HA&8#":HA& A,pS;":HA&S1q":HA&@I":HA&{":HA&,jb2":HA&Se":HA&tEPDd":HA&Bt|`˼":HA&7v3":HA& k":HA&MqF"Ι":HA&F>y~*J":HA&N- ݡ":HA&bC":HA&TpF":HA&o":HA&J1'":HA&ۄ,+(5f":HA&r"Mq":HA&J^~QV":HA&2(":HA&-dw":HA&nd͠":HA&Ȟi\":HA&ک,i}":HA&Rɚ[5":HA&vS2":HA& K0K9F":HA&1":HA&X_$g":HA&59R/":HA&6 '":HA&HR":HA&~u":HA&b4y ;-x":HA&M84":HA&>^ np":HA&n|":HA&9\$":HA&qLN":HA& lluy.":HA& vY ":HA&]0":HA&$˚r":HA&'5=jL":HA&YPʲK":HA&̣^<X":HA&^p61NXA":HA&}@>I":HA&df":HA&D@":HA&c+3":HA&9Ҙ ":HA&CNS":HA&[ =C":HA&q)":HA&Q}Q=E":HA&0#= k X":HA&VBv":HA&":HA&0/":HA&bw]":HA&\IEmZ":HA&Oc|A":HA&FIԣH":HA&ɇ":HA&V":HA&.8>":HA&kG\k":HA&anpw uM":HA&Ze:U=":HA&Վ7X":HA&*S{":HA&5v5l":HA&];":HA&Y$":HA&-":HA&(&m":HA&p~~":HA&z\H|":HA&Z":HA&.޵+":HA&0 Ea":HA&0'":HA&RKk":HA&yߨ":HA&Zb ":HA&• z":HA&>;qWE":HA&Ũ":HA&}pGO7D5@<84>:FG tVA- p mFGIIJgJJJ1KpKKLMYMM[NNNNNNO/OaOPVPsPPQ2QTQQQR StSSTTTAU6VWZZ1[}[[[L\,]]]R^^_s___D``abeg6illmpQtKvxxxy&z{{`}J~~~ҁ߃. = ;ψ^_Lj:wΔ.?dė ZW06Ȯ.!':ҶPk  @ V  ;<b56a#fadHE_IY*UNPq;+m!G;m}`)_>z<FG TrVl9%[OIIKJJJXOPMQZ[a[[/\d]^W__` xhyyU{A(ݒn֕sE ubqp50c_Wr4                              !                                          ~FGKEKKKMmMMoNNNNNOO7OgOP\P{PPQhQ R S THTTtUqViZZ[`\]]^_~``adfhklo t v2xxx;z)}~/ֈ%8OC ,#iHآ  è}O ô2|$z>D\'sj_2bVwLgOuusSPi FFFFHHHHHHHHHII I)I5IAIIIIIKJaJJJJJ+KjKKLLLLSMMUNNNNNNO)O[O PPPmPPPQ,QNQQQRSnSSSTTT%U;UV0V)W2W;WGWSW_WkWtWWWWWWZZZ[+[a[w[[[[0\F\&]f]|]]L^^^_W_m____(`>``abe g/illlllpppJtDvxxxxxhyyyyzz {Y{q{{Y}C~~~Iay|ˁ؃'64ȈWщXE"+9GUc3sߒ3ppǔ'ؕ8u E]SP)/ì۬'۳ w3˶1Idj9Ou45r"*6BNZfr~\/0[`[H^B? 7CY!-CS$O2H4Jk5e{%gA5gawZ#Y8t6%-5=EMU]e{ &/8AJS\enw"+4<DLT\dlt| $,FFFGHHHHHHHHIII'I/I;IIIIIIJQJiJJJJJ1KpKKLLMYMM[NNNNNNO1OaOPVPuPPPQ4QTQQ ST4TTT+U`U VkV0W9WAWMWYWeWrWzWWWWWcZZZZ[3[g[[[[[6\L\.]l]]]T^^^!_]_u____.`j``yasdfwhksllopps v+xxxxxyoyyyyz&z{`{x{}}~Phv=ψ`؉a1 )2@N\:z<wyΔ.ߕA|LfҗT3âʬhHȳ)~ "<Զ 8 q׺g|=>y(0<HT`lx f 80sN HG=I_'3VK,"8N:Pq=k8zS%;o/g}oJ_Mz'<#+3;CKS[ck $-6?HQZclu~ )2:BJRZbjrz "*2_IIIIJ^JJJJJ$KZKK#LLLLDMMFNNNNNN O%O@OrO"PgPPQ&QIQQQRSLSSShTTT8UU-VZZZZ([I[t[[[[\C\ ]D]y]]/^j^^^7_j____`;```befillllEppp6t4vVxxxxx(y}yyyzzz;{n{{?}(~~~^viÁŃdň>Ή?y8fΒ&TPĔǕ!Y+Z~A: Wͨ'YجwֳPpõ0cȶ.FԷI2&GAdVL-Hl V@[o:rl 'V@5!</ExGc(Ux"_f9X2`Gt<}S[0xKIIIIJWJkJJJJKQKKKLLL5MM7N{NNNNNOO9OiOP^P~PPQ6QQQRR?SSSTTTT1UU&VkZZZZ![5[m[[[[[<\\0]r]] ^V^^^#_c_w____4```adfilzlllppp&t+v5xxxxxyvyyyyzz{g{{5}~X~~~WoX ?׈-blj߉.c.\>~?{tCٖSh7)ўpǤ7ƨ*Ѭ Rϳ+_)>ֶ'?ʷ?yȸ xNܼ ? @<&Ao>L0TrAhIO}9u%5c(>n@Yz?qUG*+Yx1m,vL T)qIIIJJJ(K^KKvLLHMMJNNNNNNO'OBOvO&PkPPQ*QKQQQRSNSSS~TUUZZ[_[[[-\]b]]3^^_U___```befiOlllup:t8vnxxxxfyyzS{D}-~~~?nȁʃ$ CD=kے+lUԕ&qCF?}Ϩ,سsuٷN`+Lo !nQJ [E.?w,3:>}h-ad >b]AU"]2KGKKKMoMMqN9O}PiQR"SJTTvUjZ[a\]]^_``adfhklo t!v3xz,}~2'*SE.%kJڢƴ5 |E"_*vmcgNiRtQK7KvKKL M_MMaNZQQQRStSS:TTfU[R\]]^_p``azdf~hklosv-z}~J~~!}߃AՔ5ٗ[:ʢo$k޺@ nla6ydNe\QUT>YAeB:gnu|.cjq{]$RYII`JJJLLT:U/VZ*[v[[E\{]^l__=`lppxxyyzzp{{`xLjЉƔ\¬ڬڳ2ʶ0H/] XB#1GIz$4vz"1$`()//3599:n;]<<>@PAzD FHIrJLMOQT]Y[\ewf gj5oqqrtux0As C;،ۏ]%֔C"pUݤK\ _ Q5|b ksY. s66977!88KLl lώЪ< /$^(//35q69:l;H<<>@NAxDFHIpJKLOQT[Y[\eufgujloqrsux~?A 9~֌kΎ[#ԔAnPۤwϪNZ W,; O0vz` giqq  "0$_((//35r66877 8899:m;\<<>@OAyD FHIqJKMOQT\Y[\evfgvj4opqrsu"x~@B> :׌ڏ\$ՔB!oTܤxS[ X^- P4w{a hjrr  60778886577889+KaKKyLKMMMNNQRRSTUV[]]:^__`` befiYlpAt;vzO}8~q̓+)NOE3].IGY.+,T `J7zK 5ggI#'j  #  #R S _   #  #R S _  # # j # # #|FGGIIJgJJ/OsP2QTiVaZZ1[}[[,]R^_s__l)xxy{~;^_/:w?dF':Ҷ ;<6E*;m-mHK%QOPZl|xިYwM(kDOPZlpxҨMkA_ #'+/37;?CJNUY`dkov}%4I\mz"29HO\`dhlptx|     ! ( / 3 : A H R Y c t     ! ) 1 5 = E M _ d i m u }       # ( - 2 7 < D I Q Y ^ f m r z    # ( 0 8 @ E M U ] e m u }     ( - 5 : B J O W _ g o t |   (08=EMU]ejrz !&.6>FNV^fks{  (-5=EMU]ejrz %,19?EKQW]ciouy  '.5<CJQX_fmt{#*18?FMT[bipw~SOPZx z+mH7V!l U-7LInneridparkerqPeǑ2245C488f8$/uZ  l* {--F---phantom-=˃ --Weak--5H=2R>˃  {-Pل 4$unOJɅ ""4"!_ !D:D{D{D4D4D4D:>AUU.˃ 7.˃ /˃  ?9'=OUFml++C5UTP.JJV(>>P%88Jts"2GD&3QQ/KK+EWQ&77KH''?!0LL,FFRL#44 .Ejjj@""4RRR1MM)ASM$33Iqqq!//AN*BBTN*B2OO-Ipcore_intrinsicsfmt_helpers_for_deriveGG":HA&=6;$crate::panic::panic_2021C4 ZA@":HA&E $crate::cfg 7?YY$":HA&Q/W1$crate::const_format_args*"ZY fmt_internalsconst_fmt_arguments_new":HA&Xa  ":HA&o.@(write0&Y":HA&s j)aB  ":HA&Ο@79?Y":HA&2:,pa":HA&a4a%":HA&]?',$crate::format_argsNYY ":HA&jU +E"ZY  ":HA& {_$crate::assert 7?YYgeneric_assert_internals&":HA&#w ,4 ZA@":HA&ĂK 0 ZA@":HA&a  ":HA&@j L>Y":HA&!d0B  ":HA&Y":HA& 094?Y":HA&*|l Y)":HA&bZ-_ ʤ  ":HA&G;4P PYY ":HA&zY`M`$crate::panic::unreachable_2021GZA@":HA&BN&˓) ;4 ZA@":HA&KyCH: ."ZY  ":HA&}vj !"ZY  ":HA&/ ۮp  GG":HA&ôbJN":HA&(  ":HA&OPt5?Y":HA&7qqͤ  ":HA& !_?Y":HA&% %t "b ":HA&pF`{ '="ZY  ":HA&+TS 0ZA@":HA&IS $4 ZA@":HA&|!ImV ?YY$":HA&nzR ":HA&!N g  ":HA& *@  ":HA&T%20":HA&Q &%?Y":HA&mcU~p   GG":HA&ƿr ?4 ZA@":HA&% 3?YY$":HA&z* &"ZY  ":HA&8 #} ?YY &":HA&Mm2V":HA&* Y)":HA&)-":HA&\J@  ":HA&♕":HA&ɁNt"b ":HA&|Uo )A"ZY  ":HA&CWuh_ 3?YY &":HA&sQ+> (4 ZA@":HA&?'2%Qa ":HA&OGY)":HA&-@%>A ":HA&J5Z< D`8?Y":HA&_K0Y &":HA&Ɉc":HA&S\]a( 7T&ss%8qq 3 7s$ll#4jj  TTRR 3l 4  ":HA&p debug_assert&>Y":HA& É!4  ":HA&wrG Y":HA&L&4  ":HA&U7 Y":HA&.W)E4  ":HA&),KzY4  ":HA& Aس ί&>Y":HA&+374  ":HA&ľd\ $>Y":HA&,͛˚Yg E^M4d4ayWpN mV=zE}u=,j,$r$` (S}<i  q s Y5)o 7 !2f   *   ym  gA ^ BT? 9 (q  F  d> q1 M/xCm ,6  .  aT c I%_ ' "V      |] z WiT N 2D ) a  xY ODHT ":HA&QO<Ў ":HA&Dh ":HA&XS ) ":HA&>a4X":HA& dXX":HA&@WV`":HA&k^":HA&6 'D":HA&8.f":HA&fG+^?c":HA&HRE":HA&)Hp<":HA&Dr":HA&2(9":HA&V":HA&^ h.":HA&xVi"xC":HA&d*" ":HA&F":HA&dát1":HA&FIԣH":HA&+CLq>":HA&`4T":HA&x9`%1":HA&KY 6":HA&0/":HA&Cޛ.|i":HA&u]":HA&8#":HA&4Ư":HA&O_ն_":HA&":HA&9Ҙ ":HA&L:oՐ`L":HA&:H?":HA&Ȗ ":HA&n|J":HA&D@":HA&1M/":HA&KA\] ~":HA&$m":HA&s\v":HA&k":HA&R~TQ ":HA&ȠwN":HA&j@,s":HA&g8_":HA&ک,i}=":HA&z\H|":HA&w͇٫k'":HA& <Y^":HA&`oVE\":HA&bQ":HA&":HA&\#":HA&vz@":HA&ZI 5 3":HA&=u W":HA&x]S L՗":HA&:e|0 :":HA&湝 =":HA&6à ":HA&*u":HA&d?|$u":HA&[9":HA&Y$":HA&rz"":HA&`n$9R":HA&vR(":HA&H +":HA&c[,A":HA&c+3ݫ":HA&1A":HA&s:y":HA&4C;E":HA&SD =ہ":HA&X_2@":HA&euA=$":HA&`J"":HA& K0K9F@":HA&=gFK":HA&;iMi":HA&NC:":HA&֯O-Û":HA&tSRy&r":HA& VoTc":HA&YUY":HA&EVief":HA&+UQ":HA&PY":HA& vY N":HA&9\$K":HA&Z2\\":HA&hP._":HA&>mZb-*P":HA&nd͠;":HA& fɽ":HA& (g]":HA&g2":HA&o_i}i>":HA&>df":HA&k,c":HA&FCl=":HA& Fm":HA&։m}":HA& lluy.M":HA&anpw uM":HA&*S{":HA& ":HA&E ]@":HA&~uF":HA&`~":HA&Š!":HA&wget":HA&`5V":HA&2i":HA&-$":HA&2ɚ":HA&u9 \":HA&fs":HA&•"":HA&":HA&Zb ":HA&[ =C":HA&$؉":HA&9G":HA&~_e":HA&0 Ea":HA&w ":HA&ґ@Y=":HA&HxM/":HA&]-+":HA&-A-":HA&';}u":HA&# M]zg":HA&[ C<8":HA&PV>k":HA&~/1 b":HA&S/>?F":HA&? ":HA&c} }":HA&f":HA&E@PVfl":HA&o":HA&@I"":HA&JOo":HA&ٹO ":HA&\IEmZ":HA&(\Sy":HA&5( ͌":HA&yS":HA& ŝ":HA&r a I":HA&X z`":HA&HA  ":HA&#":HA&CQ*":HA&߬ H":HA&>^ npI":HA&]oy"":HA&|߇O E":HA&iYsJ ":HA&MqF"Ι*":HA&(#":HA&bw]":HA&TpF.":HA&*":HA&- m":HA&p~~":HA&Nj!漈":HA&%$.%S":HA&T%[k":HA&=+f":HA&/7b,":HA&%-n":HA&`;-X|":HA&^p61NXAv":HA&_3 d":HA&5v5l":HA&yr56":HA&Վ7X":HA&.8>":HA&9^/":HA&w:z":HA& D@mG":HA&6A$%":HA&(@vg":HA&PC>>":HA&RW\EBv؝":HA&1YI>o4":HA&=2Kb":HA&q_O]y":HA&|P-":HA& (RHU":HA&vS2?":HA&U> ":HA&VBv":HA&kWA":HA&C9ZF":HA&\y~*J+":HA& dfz$":HA&v#ȭ":HA&a؍~":HA&5JTR":HA&p.&w`":HA&-":HA&tC":HA&|];qWE":HA&3":HA&X^6:e":HA&ƫ6L":HA&D5":HA& 1ǯ‡'k":HA&%ڱ]":HA&59R/C":HA&Ŧ!s?":HA&vA":HA&`bW>֑":HA&l.|":HA&d":HA&_9,{":HA&Kyd>Z":HA&yey":HA& k)":HA&Rɚ[5>":HA&YPʲKt":HA&m\!͒{":HA&kCҮ^":HA&/vD)":HA&V*kV~n":HA&K":HA&MߊY":HA& );J>":HA&CNS":HA&ɇ":HA&.xD":HA&}@>Iw":HA&#g\":HA&O^g":HA&ήVu([":HA&Q"n":HA&0瘝{":HA&EdBiU":HA&:_":HA&UbmOq":HA&w̭Fה":HA&"oCc":HA&0#= k X":HA&b4y ;-xG":HA&+ ~j":HA&q)":HA&Se%":HA&8":HA&{#":HA&yKO":HA&"h":HA&J1'5":HA&O!c":HA&![M":HA&n<"a":HA&$/p":HA&c)t&cb":HA&0'":HA&@):/":HA&,o!H ":HA& 0%,; ":HA&]n/τ":HA&07":HA&!1":HA&L 2x":HA&)s1,ۗ":HA&(5P":HA&w7r":HA&*8k7":HA&7":HA&p7l":HA&̣^<Xu":HA&'5=jLs":HA&;Qk-W":HA&gR":HA&J^~QV8":HA&L/nT":HA&Ze:U=":HA&V\":HA&K5[j":HA&[":HA&u-_K":HA&:MaGm":HA&bC-":HA&_iD":HA&j72":HA&НPk]3":HA& A,pS; ":HA&S1q!":HA&_s$6":HA&YtKpo":HA&OuEU ":HA&kvϨ":HA&auST":HA&єAyChF!":HA&eyq]":HA&>?>>*R":HA&q,":HA&swE{":HA&Oc|A":HA&:')":HA&v>;":HA&ͤ ":HA&Q9Œa":HA&Í":HA&בC":HA&N ָZ":HA&g ":HA&]":HA&AOU":HA&C WW":HA& i":HA&Aƌ!~":HA&v?U":HA&p:s (":HA&kG\k":HA&0~ ":HA& Cnq":HA&mXF":HA&84+IP":HA&t3+":HA& K ":HA&+у[":HA&RKk":HA&7S":HA&cZ ?U":HA&3LJ1":HA&EC":HA&• z":HA&b˻f":HA&x{P":HA&s":HA&N4WDϓg":HA&r%134":HA&'^һPч":HA&1KyW":HA&+W":HA&NT":HA&sS7":HA&\w":HA&덼Z":HA&,f'Oh":HA&AY@w;*":HA&Uϊ":HA&QA[s":HA&%:5":HA&壧":HA&1":HA&_2":HA&Q2O&":HA&M[?fwk":HA&yߨ":HA&Y;\U":HA&}pGO":HA&[UmE;Ky":HA&O ":HA&RGS%n":HA&s sG,+a3RcTwm^F8$3hI; {+GO9fGH&d3pkz-! LVRFAg.6sif Y0S- VT z|Lfg[$'x#-^KSe/G&Yv&OKa ^Hy5Jw>>5Fh([ rj}qAGje) @nlmv# ?a912^Mwj( d.VWR&Qp OHv:sNB9 tl!4o :=@`Ui5Z>ng^#}et~rw:5J p3Qd'-XF}N$0RiQqL.HD ?^-eo7f 6zk3Glh[<{*|Hr #:AA$8 qM%=d?X;Hq0sGwn2Iv\9fHwo=-2QzV]` %j\CO#62HDC:* #9-? I ='.$G 2#?R"(/0 P 2K$+,7LQ*.'> !!#$ MB "%"C76 I7"c? G PL #!?9 ''HD=O O -NJ#1'2 &H. %  ffffffffffPQM (@OLOL'NBQOLOMM 0KLK:EI'K*KNN9NQN,IQNOO"PKQQMFL64<:BM+@ 6 ; +" ,IH$W )$'3( ,' /&CBKI6& 5?H9 +)D) 23G- 3-& &&$( &,6 ,;= 6 1*QOI&3 > 1 WRO - ;#+/627 7 N - (+ ./ +7+!/ [ - (+ 6= +D,*:FED2!< D#  O# N# - (1$=$1 @ , GI  O# N# - (C+E(.C) , PQNJ>9 ^ X  - >+ ,4@* WRO - ;#$.) B 2  - :1 (4F/\Y$ : %-&  (_7?[ K ) 5 ; 12H = Q>"".d +P E ) ) 1%0> N X H ) - 9#PCPJQ '9' 7,01"> $&& 5?H9 +)@% 23G- &$$ 34& &&,! ,;- 8 L!*)26 M$ + A)9. ;- S+$ #*4K&, @ 1 WRO + ;#$6 O!  OH3# 7 N  + : / (6$ 337+!/ [  - (+ 6= +D)W!2 P LP  O# LP: + (1$=$1 @ , GI  F, HEI + (C+E(.C) ."#.40 ^ X  + >+ ,4@* WRO + ;#$.) J*  + :1 (4F/ := '#D&(/0 $4 0 (7?[ MOJ K'_A/E = Q>"".d +9B2 ' ) 1%0> N 9J2 ' - =P"4354-E2/Y>^O2QIM1;MP A %-5@#8"(  /PKD6.')<-9-3?.2O73 U?;M!Q=N"6"G6$K&+?C! 1M+_8 @(%*7 S''3,L43)<' B< 8.E 8/6 +D$ 7 EL> 0 Z\-C Z LQC2'8@,.OK % "- 4 &+S 6*:# 7 NA,8!"##;# T UT1# E , GI UTC. > *<%&'-9! 7"$6 QT\/?\ouwx86_64-unknown-linux-gnu``sN̘ once_cell-241bb06069d00240":HA&  );;           & *