Files
boc/aamos-ledger-rust/target/debug/deps/libsharded_slab-4351dc85f44ef205.rmeta
T

976 lines
379 KiB
Plaintext
Raw Normal View History

rust
üê#rustc 1.96.0 (ac68faa20 2026-05-25)ÁÀ뉊]!ÜÛê(¹Þ—šên-5be7b69c3ff7b5b8ÁíàÄTËŸ ÜJîÄ)'ß\¥!-3d1337db07d0b3aeÁ¤²XctÔ'ÐÓ©z¨ɽÓ-a4945860e1c53b00Á¤°ð ¾ä-±($²ï=©Ã-7e98a21bfd32b0edÁòÖÀH•‘PIÓHã#£-055f30b747f859b6Árustc_std_workspace_coreÁ­Cçß^ò½èÝ$­Çÿ+Cé-c4878ee60b2242c9ÁŸÃï+Ñ]ŠqB<ÏïW#-8dd1dd90e70d0b6aÁ miniz_oxideÁ€š»J(P>àö÷g\K-1eb618da2918ab7fÁadler2ÁÆ;+Þ®5¥Ìýݰ¦ÛLˆ-f7919172d268e069Á hashbrownÁPäV9ÒÆèÜ"ÊÖVŽ\-0fc2184a5da6723aÁrustc_std_workspace_allocÁs&ØòØy¯s•bæ!‰ýŠ-97e4bf30be240674Á
std_detectÁhŠBîÙºÌI®ËÅš-9dbbf8346ba7ac8bÁrustc_demangleÁûë9´Ç×@Œ’ùXFº-f33013f239bf9f14Ácfg_ifÁÜLhž§Œaã¯>­-0a71c8f33a838301Á addr2lineÁ׎Þ!]8V$É@@-e618e6be60e87ba2ÁgimliÁ¸
°µ~Î1‹Ñt ðÁ€w-1f7768a68858f670ÁobjectÁ
áPÃ?­À¶¼QHJ¥-914cd6a4dbe590d1ÁmemchrÁ›º«8Ór­2Ù $¨ûib-cf21ca6f2bb15dcdÁë
‹ás«LÖ€îâƒ×ɯŒ-ee6f3747e38367f0Á lazy_staticÁ)]šÆÛ!y»á=½.°ù-2e560d709532b2e5Átest_dbgÁDÜÔtestsÁ,ò+$ç+innerÁ,SloomÁ$*ºÐ$á[$Ö[withÁ$…$$ä# test_utilÁL¹ÀmacrosÁ test_printlnÁ
panic_in_dropÁdebug_assert_eq_in_dropÁimplementationÁpoolÁ 
  
PoolÁ¥shardsÁ_cfgÁRefÁ'aÁ¥®shardÁkeyÁRefMutÁ$´ $¥$$®$Ò $Þ OwnedRefÁ+¥++®+²
+Þ  OwnedRefMutÁ1¥11®1²
1Þ 7¥7æ 7new_with_configÁ:<¥<< USED_BITSÁ<createÁ@ < create_ownedÁB < create_withÁDimpl FnOnce(&mut T)Á<getÁF < get_ownedÁH <clearÁJ J M¥MP¥PS¥S>V¥VV×Z´ Z¥ZZÞ Z»`´ `¥``å`´f´ f¥ffã k´ k¥kk×
p´ p¥pp u´ u¥uuÞ u downgradeÁu» |´ |¥||å|´
´ ¥´ ¥ãŒ´ Œ¥ŒŒ×´ ¥¥Þ »¥å´ ¥  ã¤¥¤¤×¨¥¨¨¬¥¬¯¥¯²¥²²Þ ²ý²Ò ²»¹¥¹¹å¹´¾¥¾¾Â¥ÂÂãÆ¥ÆÆ×Ê¥ÊÊÎ¥ÎÑ¥ÑâÔÔÔÔÔÔÔÔÔÔConfigÁÞ MAX_THREADSÁÞ MAX_PAGESÁÞINITIAL_PAGE_SIZEÁÞ
RESERVED_BITSÁÔ
CfgPrivate狂
ã
INITIAL_SZÁã
MAX_SHARDSÁãADDR_INDEX_SHIFTÁã page_sizeÁããvalidateÁãunpackÁëã unpack_addrÁã
unpack_tidÁã
unpack_genÁÔðÔ DebugConfigÁòòŸ ÔWIDTHÁÔ next_pow2ÁÔ÷æ÷Â÷ÕÔû×Ôýý×ç®hintÁŠ spin_loopÁŒ¥Œæ Œñ£Œwith_mutÁ£¤¥æ get_refÁget_mutÁ
into_innerÁÍœœœœœœClearÁ¢Íœ¤¥¤Íœ§¥§Íœª¥ªÍœ­œ­§­¤­Íœ²¥²¤²ÍœÍœ¸¥¸Íœ»¥»Íù¾¾¾¾¾¾¾¾Æ´ Æ¥ÆÆÆó Ë ¾Í¥ÍpageÁÐÐÐÐÐÐÐslotÁ×××××××××× ×
× × ×
×××××SlotÁê¥êê lifecycleÁêó ê÷êŸ ×
GenerationÁññ»ñŸ ×RefCountÁõõ»õŸ × LifecycleÁùùºùŸ × LifecycleGenÁý
ýýˆ×LENÁPrevÁas_usizeÁ׿ ׊¥ŠŠó  Š» Šset_nextÁ ЫРmark_releaseÁŠ release_withÁž£ ŠinitÁ×¥is_emptyÁž insertÁtry_remove_valueÁ¡ remove_valueÁ££ צ¥¦¦æ ¦try_clear_storageÁª¦
clear_storageÁ¬¬ ® ×°¥°°releaseÁ×´¥´´×׸¸××»»advanceÁ× ¾¾×
Á× ÃÃï
× ÆÆ×
ÉɃ×Ì×Î¥ÎÎ’%ÎâÎ»Ó ×ÕÕMARKEDÁÕREMOVINGÁÕPRESENTÁ×ÚÚ¾!ÚÉ!ÚÚÝ!×àà×ã×åå××èè¾!èÉ!èèÝ!×îîMAXÁîincrÁîdecrÁ×óó××öö×ù×ûûï
×þþ׃××¾!É!Ý!׌¥ŒŒ
generationÁŒ» Œ value_mutÁ Œ%ŒýŒrelease2Á×exponential_backoffÁ MAX_EXPONENTÁÐstackÁ
TransferStackÁ¡¡headÁ¡Ÿ ¥¥æ ¥pop_allÁ¥pushÁ©impl Fn(usize)Á««Ø,­¥­ °°×ÐÐÐÐ ÐAddrÁ··addrÁ·Ÿ л»NULLÁ»Ö»ž
ÐFreeListÁÀÀØ,Â¥ÐÄľ!ÄÉ!ÄÝ!ÄÐIterÁÊ´ Ê¥ÊÐLocalÁΠ,ÐSharedÁÐ¥ÐÐremoteÁÐÐprev_szÁÐslabÁÐSlotsÁ×¥×ÐÚæ Ú ,Ü Úset_headÁÞ ÐààØ,â¥Ðä¥ääú-äæ äpopÁäis_unallocatedÁê ä with_slotÁì´ ì¦ì(impl FnOnce(&'a Slot<T, C>) -> Option<U>Áì ä free_listÁñÐó´ ó¥óótakeÁ÷÷ óremoveÁúú ü ómake_refÁóùÿ ÿ Ð¥ init_withÁ¦,impl FnOnce(usize, &Slot<T, C>) -> Option<U>Á allocateÁ 
mark_clearÁ  Í  Ð× Ð¥×Ð šš×Ð
Ð  Ð ¢¢ï
Ð
¥¥Ð¨¨ƒÐ«ÐindicesÁ­Ò ¯¯¯¯¯¯¯¯¯¯ ¯
¯ ¯ ¯
¯¯¯¯¯¯¯ShardÁÄ¥ÄÄtidÁÄ®ÄsharedÁ¯MÊ¥ÊÊ ÊmaxÁ¯Ï¥Ïϧ1Ò´ Ò¦Ò.impl FnOnce(&'a page::Slot<T, C>) -> Option<U>ÁÏæ Ö Ö ¯Ù¥ÙÙ
take_localÁÙ take_remoteÁÙ remove_localÁÙ
remove_remoteÁÙù¯á¥áá 3ä¦ä1impl FnMut(usize, &page::Slot<T, C>) -> Option<U>Áámark_clear_localÁámark_clear_remoteÁáclear_after_releaseÁá clear_localÁá clear_remoteÁᮯí¥ííׯñ¥ññæ ñ«ñcurrentÁö ñú¯ù¥ùùã¯ý¥ýýׯ¥
¬setÁ¯´ ¥ó –7 
  
TidÁ¢¢idÁ¢ _not_sendÁ¢Ÿ RegistryÁ§ó §freeÁªª¾!ªÉ!ªÝ!ª°°Ü;² °
is_currentÁ´ °æ ··poisonedÁ· is_poisonedÁ»»×¾¾ÁÃÃÆÈæ ÈÜ;ÊÈregisterÁÌÌ Ì  ÐãÑ 
  
SlabÁâ¥ââ ⟠EntryÁç´ ç¥çç®ç»çÒ çÞ 
OwnedEntryÁï¥ïï®ï»ïç/ïÞ ö¥öæ ö˜
ùû¥ûûÇ
ûÉ#ÿ ÿ û vacant_entryÁ ûÉ2  û°2û«ˆ û¹Š ûcontainsÁû unique_iterÁŽ¥Ž>¥×¥˜¥˜´ ¥Þ »¡´ ¡¥¡¡å¡´§´ §¥§§ã ¬´ ¬¥¬¬×
±´ ±¥±± ´ ¥É#Þ  ¼¥¼¼Þ ¼»
Á¥ÁÁåÁ´Æ¥ÆÆãÊ¥ÊÊ×Î¥ÎÎÒ¥ÒÕ¥ÕPackÁØØ¾!ØÉ!ØBITSÁØSHIFTÁØMASKÁØÝ!ØØpackÁØ from_packedÁããðHã¾!ãüHã‰IãÉ!ãÝ!ãã¥Iã±IÔ
DefaultConfigÁî_pÁÔÔÔòƒ
UnsafeCellÁô
ô¥ôˆø¥ø×TrackÁû¥û»þ¥þ×¥>¾
UniqueIterÁ´ ¥ pagesÁslotsÁ¾´ ¥××GuardÁ¥â× ¥×× InitGuardÁ˜¥˜˜â˜curr_lifecycleÁ˜releasedÁ×!ž¥žž××StateÁ¢PresentÁ£
£ ¢MarkedÁ¦
¦ ¢RemovingÁ©
© ×"¬××#®Ö×$×%±×&×'×(µƒ¯PtrÁ·
·¥··ˆ¯ ¼¥¼¼×¯IterMutÁÀ
À´ À¥ÀÀˆ¯
Æ´ Æ¥ÆÆ× RegistrationÁË
ˈ
Î×REGISTRYÁÐ__private_fieldÁÖP ÓåÓ´Õ__static_ref_initializeÁÕ __stabilityÁ Ø
initializeÁ×LAZYÁ REGISTRATIONÁÛ__rust_std_internal_init_fnÁÛ Ý Þ__RUST_STD_INTERNAL_VALÁÝ à°R VacantEntryÁâ´ â¥ââ®âÞ â_ltÁé´ é¥éé×@
D
D
F
J
Y
Y
Y
^
_
e
j
o
o
o
t
t
y
{









š
Ÿ
£
§
§
§
«
«
µ
·
¸
½
Á
Å
É
É
É
Í
Í
ü
ü
ü
ÿ
ÿ
ÿ



š
£
¦
©
¬
±
µ
·
º
½
Ë
Í









š
ž
 
 
¡
¡
£
£
ª
ª
¬
¬
³
·
·
·
º
º
º
À
À
Å
Å
È
È
Ë
Ñ
Ò
Ó
ß
â
â
ç
ç
ç
í
õ
õ
õ
ø
ø
ý
ý


ƒ








¨
©
­
­
²
²
²
Â
Â
È
Ü
Þ
â
â
é
é
ê
ñ
÷
÷
ú
ú
ÿ














œ
œ
œ
Ÿ
Ÿ
¤
¤
§
§
ª
Ü
Ý
Þ
ß
à
ä
ä
ç
è
é
ê
ë
ì
ð
ð
ð
õ
ö
ø
ü





Œ
®
º
½
½
½
À
À
Å
Ê
Ì
Ñ
ÿ



ˆ
Œ




Ÿ
 
¦
«
°
°
°
µ
µ
»
¿
À
Å
É
Í
Í
Í
Ñ
Ñ
ß
á
ê
ì
ó
ú
ú
ú









¡
¡
¡
­
­
­
¯
²
²

¿
¿
¿
Ê
Ê
Ê
Ï
Ï
Ï
Õ
Ù
í
í
í
Þã¢ÀØÌìù
 Ÿ KŽ€NՀ Î_³ù
 Ÿ KŽ€NՀ`îî˜Jï­JÔÜí%–YÜ¿cÎ_é!ª !®"Ò #Þ ò@÷¾À¹ü·´ ¥Œ"•a¿c•aµß•aÙaé!$$è (®)Ò *Þ ðï=®~M3&´ Ùaßaö!ŽbŒ"Žb¿cŽbµßŽbÙaé!++Ÿ .®/²
0Þ XÒÐX7`ˆ`Œ"c¿ccµß‹c‚` ‹cÌì‹cé!11Ñ 4®5²
6Þ ..Öã¦ð ‚`ˆ`ö!dŒ"d¿cdµßd‚` dÌìd㊠Ö`ÛÖ`ØÖ`ÞÖ`¿cÖ`¿còòíôŸ ÔìõéÑ3%~‘™e¿côôõÎJ÷ˆ Ÿ´6@~’‚`¿cûûŠKý»cÙcÎ4
!‚`³Ìf¢Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ‚`¢žBoxÁ¡ˆˆ¢ˆl }.xÏ`çEçEèEGlobalÁ ¿±‡§í#¢ªBªBö­BbufÁ÷<®B÷<9)
-ÜnL‚`¡h¢ððõbaseÁÜ¿¦p<JÔÏÏœ§¤¡h¢¡
¡
¥
±hŒ
šI¼²'‡Õï‚`¤¡h¢úHúHßûHÁ‘4Ý­f‰úM÷¢µ>µ>¤·>®£>¸>poisonÁ£>¹>dataÁ£>Ë»™z™g—‚`¢°?°?Ò²?®?³?j?´?“j?R£W„ôÌ‚`¿cÐKˆ ‚LŠLÒ Otõ¨ˆ´ ÙaßaùMŒlòPÐKˆ ‚LŠLÒ Otõ¨ˆ8Ùaßa¿cÁLâ×—¹þWÄS®‚`ˆ`¿c˜˜ƒMâל¬M×ÂM×29¨°Ñë‚`ˆ`¿c¢£¤üM¥¦§•N¨©ª­N«hX¤Çt0¶ÏnÐìÏnµßÏnÏnŠ ÏnÛÏnØÏnØññ ó»×ôŸ ×_H5“h^o™e™e¿cêêÈíä×îó ×ï÷×ðŸ ×Áqq8<g`ˆ`¿cåoµßåoåoåoíßåoåoºåoØåoŠ åoØùùß ûº×üŸ ×Nǃy"™e™eµßÙqÙqÙq¿cÙqØõõ· ÷»×øŸ ×$¶ùˆs6>Ιe™e¿cÂrµßÂrÂrÂríßÂrÂrºÂrØÂrŠ ÂrØýýþˆ!ˆ× 2h m8õ»™e™eÀ¡¡ƒ,£ ,¤Ÿ f
Ú5*¶\\™e™e¿c–tØ··Å-¹Ù-кŸ ЛÅ]ᱎ>Ç™e™eÀÎÎ/Ï ,ÐÇî;z©}™e¿c®u¿cÐФ/ÓÂ/ÐÔÐÕØ/ÐÖç/ÐÚp.IDï_ï™eÙa¿cçtµßçtçtçtíßçtçtºçtØçtŠ çt¿c··¸ŠO»ˆ¯ ³¢…`SÇ{‚`ˆ`¿cÀÀÁÏOň¯ É6¼3쥚á´ Ùaßa¿cÄÄù6Ç–7È®¯É©7¯`D!β+6û`ˆ`Œ"ÊÊMÍ ¯ÎÖ7¯,+3m^;®`ˆ`¿cóxùMÜw¿cËĘ̈P͈ 5Ë>dð„Šé!ÐÐÖPÑæPÁÇDDÖuL—†zØ¢¢ú=¤>¥—>¦Ÿ 9ɯñž¯‘C™e™e¿cÄzµßÄzÄzÄzØÄzŠ ÄzŒ"Íy¿cââÛRæ®çÞ è–S¯Ñ¤ð*ñ ‰´ Ùaßa³ââÏAå æŸ >[t䯹c`Ö`¿cââÏAå æŸ >[t䯹c`ˆ`Ììò| ò|é!ççúAë®ì»íÒ îÞ Ö»¶
ž!ú8´ ÙaßaŒ"Ì}¿cÌ}µßÌ}Ùaé!ïï¾Bò®ó»ôç/õÞ Tò\hبúj`ˆ`Œ"Ï~¿cÏ~µßÏ~‚` Ï~ÌìÏ~Ø™eM¯1•âÕïP¬âÒïSûŽâVkŒîýòøôþûž˜¬¢´ê¸ñåùóõ°¡ÎК·¼·ÆÀíÄýÊÎË»¢éââ¬çÊï`|$›Ð¡çÁïfÊÐ˧çÆïp¢¾ñàùöõ·¾¢±çÎïðî³¢Ìñõ«·Æ¢ñî´¢òîµ¢Éñõ¨·Ã¢÷î¤Û¼§ªªB­ð²¡
úH¸µ>»°?ÆÀÍ®¢Áñãùùõ ·Á¢°¢ñÚùèõýÄ·ª¢ã
Ãñûõ¢·Æñþõ¥·«¡àÎØÐÌìµ ³¿cé!ÒŒ"+µß 3ö!Oã Š Û*ØÞ*¢ùM9òP
äˆ`ü¾k*?,Ók$Däˆ` C::USED_BITSÁÔù
ßÖ`üÞ6ß%DßÖ`DefaultConfig::MAX_THREADSÁÄ‹
àÖ`üò2à%DàÖ`DefaultConfig::MAX_PAGESÁüž  áÖ`üý
Bá,– %EáÖ` DefaultConfig::INITIAL_PAGE_SIZEÁü›3¼›Úññ ó»×ôŸ ×_H5“h^oâ‹̵ݨ‹â‹w yÚ¨‹â‹<ݨ‹â‹²ü‚Mä,“ë/êÚ¨‹â‹¬Ý¨‹â‹Ú¨‹â‹Õݨ‹â‹üî"


ö¼øáâ‹7üÔ=å%Iá⋬ºŒºßâ‹ Î: 7ßâ‹5nü° 

ýš% Ïü–;æÕõŒÝ4×ßâ‹çßâ‹üö*üö!
t‡
œÕ„öåâ‹„‡M Ÿüö. £% 'KKüÖOçêèõŒ;×åâ‹äÕ!
ÔÕ!
À*üÕ!  ô!% 'KKüµ!Aõ,Í!µõŒ4$³"tº" º"
"T¼"
™Õ0d¼" Ç"œº" Ì",×" ß"Œß"
 lá"
›Õ2|á" ï"üû"(´ü"t„# ,„#

 
 #
9 ,ü"õ U  !õ u S l•# $•#

 
 ¡#
Ä Õ  ì ¢# üö"-@#  ö"H#t ¤#¥#öüø!­ü¯"vüÓ"R,£" "//ïîîîõŒõŒ(&¹{pow2ÁzerosÁ¬Ðõ*õ 32Á4096ÁLš& ¢&3 ,š&õN õXü&#ú,&+iõtõ0b00Á0b01Á0b11Áüœ  T õ„ª â™e4 0õ.â™eaüœ - Ýåo™e& (Ýåo™eM È ü‰ Aƒ,” ûõŒõŒœ=õâ™e!õâ™eÐÝåo™eâÝåo™el®©  ¢\Ë©  ™eáü˜©E ù™e Ü© üƒ©[×Ùq$‘©Ïn PhantomDataÁFu\»ŸÆ¡µg|ª  ¢\¯ª  Æ¡üú©G ù™e Àª üã©_ØÙq$ó©Ïn¯¢}6tóª  ¢\‘«  Æ¡üݪF ù™e ¢« üǪ]ÙÙq$ÖªÏn¯¢}6üÚ²,
œÛ²ÚÙq™e¤ñ²Úåo™eA <ÚÙq™e9Úåo™exüͲ9TͲõ! "õA …³üº²Mê,Ų õŒõŒ@ÚÙq™eÚåo™e9ÚÙq™e6Úåo™eÞõéõtÒµTÒµÜÂr™e ßµ9 ;ÜÂr™e8oü´µ-ð,ʵõŒ¨/§ÜÂr™e¹ÜÂr™e¤Ö¿ Úåo™eüÿ(ˆ,ο'KÚåo™eGeneration<C>::LENÁÜçt™e ©6 9Üçt™e7lüˆ#½,”õŒ£-£Üçt™eµÜçt™eüƒ
"
à™eœ’
ç™e2 4à™e2ç™ecüð 6Æ õŒš-à™eç™e·à™e´ç™e
½ˆ`üÒ$ç%E½ˆ`
Addr<C>::NULLÁùù
·e
éù
·e
¾Íyùù
ÕúeÝÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙÍy Íyƒ±³ãùø
faÛ®®£°®¨it§ÅLS¶Íyáø
¢faZ݃±ƒ±ùù
ðe
éù
ðe
ÐÍy17ùù
¦®e
 Þˆ±›²á2ƒ± ù
¿eùù
íÔeùù
!­e
 à•´á%ƒ± ù
!eR ù
À$eùù
Ûôe݃±!#Þ•´áóà•´á¨Wüð'ôð
ª‘æ™e„þH üð+ š% 'KKüÝ?¬åãõŒ;Öæ™edŽs
äˆ`üñr*þ,†s%Eäˆ` C::USED_BITSÁ,Ä‘|Ñ‘ LÒ‘Ú⋈` Þ‘@ <Ú⋈`9w¤Ì‘@#  Ì‘I$ ß‘,ê‘ \ò‘,ó‘  û‘@ (f ü‘œê‘
! ‚’ü¢‘bÜüÀ‘C ,®‘ëêõŒót ÿõŒshiftÁ3%Ú⋈`9Ú⋈`üö“#Œö“Ý⋈`Ûˆ`|Š”Ú¹¾ˆ`G Hݹ¾ˆ`;Ú¹¾ˆ`üá“9Ý,î“õŒ¹/·Ý¹¾ˆ`©Ú¹¾ˆ`Ýݹ¾ˆ`ÏÚ¹¾ˆ`ÌÉ•\וÝ⋈`#@7 TÉ•Ü⋈`MÝ⋈`p7Ü⋈`Ý⋈`üµ•.Þ,Á•É-ÈÝ⋈`¥Ü⋈`îÝ⋈`ËÜ⋈`Ý⋈`ü¿ ô‚`õ)f4î0î0ÎJð0»Ì-·}—KEüC£`ip´¬ ý™eþ(×s3åo:Aì¤ ·‚`ˆ`¸+w6¤]¤]V¦]Á‚]üß3ø¤”& ûûŠKý»cÙcÎ4
!¡xš¡üû9 ÀÙaßa!Á.ÀÀÁÏOň¯ É6¼3쥚áÙaßapÜlÜlÏOßlµ ™làl
end_or_lenÁ™lál_markerÁ™lÚ½íDþïl%··¸ŠO»ˆ¯ ³¢…`SÇ{Ùaßa
œ» ËÌ%Íy0á.á.aã.»Ì-IÜžB2®Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ©°Ôœ¾Ð¯âçïØâÀ´4ŒHÞÕ˜Jl”HîÖû,¯H¢×ÐKTÀHØù
$ìHÙú=‡I¢ÚT–IãÛù6,­IÄÜ×¾I¤,Þ½¡\ËIß½¡ßµ ØIàKãI†JáüÜü  A lock-free concurrent slab.Á!úü%KH Slabs provide pre-allocated storage for many instances of a single dataÁüqFC type. When a large number of values of a single type are required,Áü¸PM this can be more efficient than allocating each item individually. Since theÁü‰KH allocated items are the same size, memory fragmentation is reduced, andÁüÕ63 creating and removing new items can be very cheap.ÁŒúüKH This crate implements a lock-free concurrent slab, indexed by `usize`s.ÁÜú ## UsageÁíúüñ)& First, add this to your `Cargo.toml`:Áú ```tomlÁÔ« sharded-slab = "0.1.1"Á ```ÁÎúüÒHE This crate provides two types, [`Slab`] and [`Pool`], which provideÁü›52 slightly different APIs for using a sharded slab.ÁÑúüÕNK [`Slab`] implements a slab for _storing_ small types, sharing them betweenÁü¤FC threads, and accessing them by index. New entries are allocated byÁüëFC [inserting] data, moving it in by value. Similarly, entries may beÁü²LI deallocated by [taking] from the slab, moving the value out. This API isÁüÿNK similar to a `Vec<Option<T>>`, but allowing lock-free concurrent insertionÁ„Î
and removal.ÁßúüãJG In contrast, the [`Pool`] type provides an [object pool] style API forÁü® OL _reusing storage_. Rather than constructing values and moving them into theÁüþ OL pool, as with [`Slab`], [allocating an entry][create] from the pool takes aÁüÎ
OL closure that's provided with a mutable reference to initialize the entry inÁüž KH place. When entries are deallocated, they are [cleared] in place. TypesÁüê JG which own a heap allocation can be cleared by dropping any _data_ theyÁüµ MJ store, but retaining any previously-allocated capacity. This means that aÁüƒ
NK [`Pool`] may be used to reuse a set of existing heap allocations, reducingÁœÒ
 allocator load.Áæ
úìê
 [inserting]: Slab::insertÁĈ [taking]: Slab::takeÁÔ¡ [create]: Pool::createÁ¤¼ [cleared]: ClearÁüÑDA [object pool]: https://en.wikipedia.org/wiki/Object_pool_patternÁú # ExamplesÁ©úü­85 Inserting an item into the slab, returning an index:Á ```rustÁìò # use sharded_slab::Slab;ÁÜ let slab = Slab::new();Á¬úü°2/ let key = slab.insert("hello world").unwrap();Áüã63 assert_eq!(slab.get(key).unwrap(), "hello world");Á¦Ñ¢úü¦B? To share a slab across threads, it may be wrapped in an `Arc`:ÁÏÞìõãÞ¼“ use std::sync::Arc;Áü«%" let slab = Arc::new(Slab::new());ÁÑúìÕ let slab2 = slab.clone();Áüó.+ let thread2 = std::thread::spawn(move || {Áü¢A> let key = slab2.insert("hello from thread two").unwrap();ÁüäEB assert_eq!(slab2.get(key).unwrap(), "hello from thread two");Á keyÁ });Á¾úüÂ=: let key1 = slab.insert("hello from thread one").unwrap();Áü€A> assert_eq!(slab.get(key1).unwrap(), "hello from thread one");ÁÂúüÆ%" // Wait for thread 2 to complete.Áüì'$ let key2 = thread2.join().unwrap();Áúü˜96 // The item inserted by thread 2 remains in the slab.ÁüÒA> assert_eq!(slab.get(key2).unwrap(), "hello from thread two");Á4”```ÁúüŸOL If items in the slab must be mutated, a `Mutex` or `RwLock` may be used forÁüïKH each item, providing granular locking of items rather than of the slab:Á»ú\¿ÏÞìËãÞüé  use std::sync::{Arc, Mutex};ÁüŠ%Õá°úü´LI let key = slab.insert(Mutex::new(String::from("hello world"))).unwrap();Áúì…âü£.¶âüÒ:7 let hello = slab2.get(key).expect("item missing");Áü>; let mut hello = hello.lock().expect("mutex poisoned");ÁüÌ1. *hello = String::from("hello everyone!");Á›äúäŠ thread2.join().unwrap();Á§úü«52 let hello = slab.get(key).expect("item missing");Áüá:7 let mut hello = hello.lock().expect("mutex poisoned");Áüœ2/ assert_eq!(hello.as_str(), "hello everyone!");Á¦Ñ×úœÛ # ConfigurationÁïúüóNK For performance reasons, several values used by the slab are calculated asÁüÂPM constants. In order to allow users to tune the slab's parameters, we provideÁü“MJ a [`Config`] trait which defines these parameters as associated `consts`.Áüá<9 The `Slab` type is generic over a `C: Config` parameter.Áž úü¢ ! [`Config`]: trait.Config.htmlÁÄ úüÈ $! # Comparison with Similar CratesÁí úüñ PM - [`slab`]: Carl Lerche's `slab` crate provides a slab implementation with aÁüÂ!FC similar API, implemented by storing all data in a single vector.Á‰"úü"JG Unlike `sharded_slab`, inserting and removing elements from the slabÁüØ"GD requires mutable access. This means that if the slab is accessedÁü #NK concurrently by multiple threads, it is necessary for it to be protectedÁüï#HE by a `Mutex` or `RwLock`. Items may not be inserted or removed (orÁü¸$FC accessed, if a `Mutex` is used) concurrently, even when they areÁüÿ$PM unrelated. In many cases, the lock can become a significant bottleneck. OnÁüÐ%JG the other hand, this crate al
*Ùú=*¢Ú
*ãÛù6 *ÄÜ× *¤,Þ½¡
*ß½¡*ßµ 
*àK *†Já+++TàF4äFÌd
  ´ ,, ! " *, #8argÁ$& '8¯(
+*. 1 ² 8;8â> A B G8$CI8âL O P [8
slab_printÁTQ ] ¬
8k8Àn'q8Š4s'y8ì
L{    8printlnÁ ® ¯ ó
7[PANIC {:>17}:{:<3}] {}Á̰$ É8Ì Ï Ð Ñ$ Ò8š Ø Ù Ú$ Û8ë è é ò, ê ë ð, ì8Ÿ í
ñ8 ˆ ¢8¢ ¡ ¢ 7[{:?} {:>17}:{:<3}] {}ÁÄ£$ »8'Â8ú=Ä'Ç É8'Ï8˜J Þ'ß8Ü; è é$ ê8Ì ð ñ ò$ ó8š ù ú û$ ü8ë  Š ,  Œ , 8Ÿ Ž
Ô” ¯ ö
 µ Á,  · ¿, ¸8Ÿ ¹& ¼8¯½
À*Ã Æ ô
 8Ð Ó8ÀÔ'×8Š'ß8ì
 ê ë í 8Á
   Š,  ƒ ˆ, 8Ÿ 
8$–  î
8©8Š ´8À'¹8Š'Á8Ü; Ê Ë% Ì8eprintlnÁ â ã ã
$7thread '{thread}' attempted to panic at '{msg}', {file}:{line}:{col}\n\
note: we were already unwinding due to a previous panic.Áüõ$ 8Š4™   8Š ¨ 8Ð  ­ ®  ¯ 8¤ ¹ Å 7 <unnamed>Á$ Æ 8msgÁØ Ü 8ë é  ê ó , ë  ì ñ , í 8Ÿ î 
ò $ ô 8Ì$†
8Ì$


$
8š
«
8š$­
 ±
 ²
³
$ ´
8colÁÆ
Ê
8
 Ò
 Ó
Ô
$ Õ
% ä
üù
$¼†  ž Ù  ¤ »  , ¥ 8thisÁ & ª 8 $ ¯ , ± 8thatÁ & 8 *½  À 8ÿ ¼Ê  á  â ú   ã 8® , ê 8ÿ® $ ï , ñ 8®¯ $ ö 7úø %  « 
, ˆ 8ÿ®$‰ & 8 $ , 8®¯$• & 8 $ ž ,    ¡ © , ¢ 8Ÿ £ & ¦ 8¯§  ª *­  ° š
8ÿ ¼º  Ñ  Ò
  Ó 8® , Ú 8ÿ® $ ß , á 8®¯ $ æ 8ë  ó  ô
7: {}Á $ û 8ë  ˆ

, Š

, Œ
8Ÿ 

%
 ¡
Ê
 ¢
8®
, ©
8ÿ®
& ®
8
$ ³
, µ
8®¯
& º
8
$ ¿
, Á
8»¬Â
& Å
8
*Ì
 Ï
×8Ù
8âÜ
 ß
 à
ñ
8„á
 ó
Ñ8, 8ÿ®$…Š, 8®¯  Ç8ë  ² ³ ¹7>assertion failed ({} == {})\n left: `{:?}`,\n right: `{:?}`{}ÁüÉ@$ 8Ô ¨ © ¯, ª8ÿ®$ °8Ô Ï Ð Ö, Ñ8®¯$ ×, í8ÿ®$ ò, ˆ8®¯$‰$ , £8»¬¤$ §´íFü`8
5 Notes on `sharded-slab`'s implementation and design.Á
úd
# DesignÁª
úü®L
I The sharded slab's design is strongly inspired by the ideas presented byÁüûB
? Leijen, Zorn, and de Moura in [Mimalloc: Free List Sharding inÁü¾O
L Action][mimalloc]. In this report, the authors present a novel design for aÁüŽ@
= memory allocator based on a concept of _free list sharding_.ÁÏ
úüÓN
K Memory allocators must keep track of what memory regions are not currently矢N
K allocated ("free") in order to provide them to future allocation requests.ÁüñN
K The term [_free list_][freelist] refers to a technique for performing thisÁüÀO
L bookkeeping, where each free block stores a pointer to the next free block,ÁüK
H forming a linked list. The memory allocator keeps a pointer to the most矆O
L recently freed block, the _head_ of the free list. To allocate more memory,Áü¬L
I the allocator pops from the free list by setting the head pointer to theÁüùO
L next free block of the current head block, and returning the previous head.矃N
K To deallocate a block, the block is pushed to the free list by setting itsÁü˜ P
M first word to the current head pointer, and the head pointer is set to pointÁüé O
L to the deallocated block. Most implementations of slab allocators backed byÁü¹
M
J arrays or vectors use a similar technique, where pointers are replaced byÁü‡ #
indices into the backing array.Á«
úü¯ M
J When allocations and deallocations can occur concurrently across threads,Áüý J
G they must synchronize accesses to the free list; either by putting theÁüÈ M
J entire allocator state inside of a lock, or by using atomic operations toÁü–
P
M treat the free list as a lock-free structure (such as a [Treiber stack]). InÁüç
N
K both cases, there is a significant performance cost — even when the freeÁü¶L
I list is lock-free, it is likely that a noticeable amount of time will beÁüƒM
J spent in compare-and-swap loops. Ideally, the global synchronzation point矄P
M created by the single global free list could be avoided as much as possible.Á¢
úü¦H
E The approach presented by Leijen, Zorn, and de Moura is to introduceÁüïP
M sharding and thus increase the granularity of synchronization significantly.ÁüÀF
C In mimalloc, the heap is _sharded_ so that each thread has its ownÁü‡N
K thread-local heap. Objects are always allocated from the local heap of theÁüÖL
I thread where the allocation is performed. Because allocations are always矣C
@ done from a thread's local heap, they need not be synchronized.Áç
úüëM
J However, since objects can move between threads before being deallocated,Áü¹J
G _deallocations_ may still occur concurrently. Therefore, Leijen et al.Áü„M
J introduce a concept of _local_ and _global_ free lists. When an object isÁüÒO
L deallocated on the same thread it was originally allocated on, it is placed矢N
K on the local free list; if it is deallocated on another thread, it goes onÁüñP
M the global free list for the heap of the thread from which it originated. ToÁüÂK
H allocate, the local free list is used first; if it is empty, the entireÁüŽM
J global free list is popped onto the local free list. Since the local free矆O
L list is only ever accessed by the thread it belongs to, it does not requireÁü¬K
H synchronization at all, and because the global free list is popped fromÁüøN
K infrequently, the cost of synchronization has a reduced impact. A majority矂D
A of allocations can occur without any synchronization at all; andÁüŒJ
G deallocations only require synchronization when an object has left itsÁü×/
, parent thread (a relatively uncommon case).Á
úü‹`
] [mimalloc]: https://www.microsoft.com/en-us/research/uploads/prod/2019/06/mimalloc-tr-v1.pdfÁüì7
4 [freelist]: https://en.wikipedia.org/wiki/Free_listÁü¤@
= [Treiber stack]: https://en.wikipedia.org/wiki/Treiber_stackÁå
ú¤é
 # ImplementationÁþ
úü‚J
G A slab is represented as an array of [`MAX_THREADS`] _shards_. A shardÁüÍI
F consists of a vector of one or more _pages_ plus associated metadata.Áü—O
L Finally, a page consists of an array of _slots_, head indices for the localÁÔç
 and remote free lists.Á
ú\†
 ```textÁü’ 1
. ┌─────────────â”Á¼Ä
 │ shard 1 │ÁüÜ n
k │ │ ┌─────────────┠┌────────â”ÁüË!Z
W │ pages───────┼───▶│ page 1 │ │ │Áü¦"Ž
 ├─────────────┤ ├─────────────┤ ┌────▶│ next──┼─â”Áüµ#Z
W │ shard 2 │ │ page 2 │ │ ├────────┤ │Áü$d
a ├─────────────┤ │ │ │ │XXXXXXXX│ │Áüõ$b
_ │ shard 3 │ │ local_head──┼──┘ ├────────┤ │ÁüØ%l
i └─────────────┘ │ remote_head─┼──┠│ │◀┘ÁüÅ&f
c ... ├─────────────┤ │ │ next──┼─â”Áü¬'t
q ┌─────────────┠│ page 3 │ │ ├────────┤ │Áü¡(d
a │ shard n │ └─────────────┘ │ │XXXXXXXX│ │Áü†)p
m └─────────────┘ ... │ ├────────┤ │Áü÷)`
] ┌─────────────┠│ │XXXXXXXX│ │ÁüØ*V
S │ page n │ │ ├────────┤ │Áü¯+b
_ └─────────────┘ │ │ │◀┘Áü’,]
Z └────▶│ next──┼───▶ ...Áüð,L
I ├────────┤Áü½-<
9 │XXXXXXXX│Áüú-L
I └────────┘Á<Ç.
¦ÑÏ.
úÓ.
úü×.M
J The size of the first page in a shard is always a power of two, and every矴/L
I subsequent page added after the first is twice as large as the page thatÁ„ò/
preceeds it.Áƒ0
ú\‡0
ÕÜ“0
ú<—0
 pg.ÁüŸ0%
" ┌───┠┌─┬─â”ÁüÅ0!
 │ 0 │───▶ │ │Áüç01
. ├───┤ ├─┼─┼─┬─â”Áü™1)
& │ 1 │───▶ │ │ │ │ÁüÃ1I
F ├───┤ ├─┼─┼─┼─┼─┬─┬─┬─â”Áü29
6 │ 2 │───▶ │ │ │ │ │ │ │ │ÁüÇ2y
v ├───┤ ├─┼─┼─┼─┼─┼─┼─┼─┼─┬─┬─┬─┬─┬─┬─┬─â”ÁüÁ3Y
V │ 3 │───▶ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │Áü›4y
v └───┘ └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘Á<•5
¦Ñ5
úü¡5O
L When searching for a free slot, the smallest page is searched first, and ifÁüñ5P
M it is full, the search proceeds to the next page until either a free slot isÁüÂ6P
M found or all available pages have been searched. If all available pages haveÁü“7M
J been searched and the maximum number of pages has not yet been reached, aÁüá7
 new page is then allocated.Á8
úü…8O
L Since every page is twice as large as the previous page, and all page sizesÁüÕ8L
I are powers of two, we can determine the page index that contains a given矢9F
C address by shifting the address down by the smallest page size andÁüé9G
D looking at how many twos places necessary to represent that number,Áü±:D
A telling us what power of two page size it fits inside of. We canÁüö:I
F determine the number of twos places by counting the number of leadingÁüÀ;I
F zeros (unused twos places) in the number's binary representation, andÁüŠ<C
@ subtracting that count from the total number of bits in a word.ÁÎ<
úüÒ<P
M The formula for determining the page number that contains an offset is thus:Á£=
ú”§=
 ```rust,ignore矼=I
F WIDTH - ((offset + INITIAL_PAGE_SIZE) >> INDEX_SHIFT).leading_zeros()Á<„>
¦ÑŒ>
úü>J
G where `WIDTH` is the number of bits in a `usize`, and `INDEX_SHIFT` isÁÛ>
ú”ß>
ïýüò>+
( INITIAL_PAGE_SIZE.trailing_zeros() + 1;Á<ž?
¦Ñ¦?
úüª?v
s [`MAX_THREADS`]: https://docs.rs/sharded-slab/latest/sharded_slab/trait.Config.html#associatedconstant.MAX_THREADSÁtõFd…Gü'$ A lock-free concurrent object pool.Á(úü,ZW See the [`Pool` type's documentation][pool] for details on the object pool API and howÁü‡%" it differs from the [`Slab`] API.Á­úü± [pool]: ../struct.Pool.htmlÁüÑ! [`Slab`]: ../struct.Slab.htmlÁ$G$+1âÔ Tã ˜Jlœî
û¢¸ÐÒ ¯ú=Ø¢ÌH$áØù6,çÄÜ×ü¤,½¡\‰½¡Kœ†J„÷õ÷æèd°ÛÊÌ»½DÓ°Ÿ¡öƒœuL–Uüô%ü£'¼ËúüÏc` Slabs provide pre-allocated storage for many instances of a single type. But, when working withÁü³^[ heap allocated objects, the advantages of a slab are lost, as the memory allocated for theÁü’_\ object is freed when the object is removed from the slab. With a pool, we can instead reuseÁüò\Y this memory for objects being added to the pool in the future, therefore reducing memoryÁüÏ63 fragmentation and avoiding additional allocations.ÁúüŠc` This type implements a lock-free concurrent pool, indexed by `usize`s. The items stored in thisÁüî30 type need to implement [`Clear`] and `Default`.Á¢úü¦`] The `Pool` type shares similar semantics to [`Slab`] when it comes to sharing across threadsÁü‡ `] and storing mutable shared data. The biggest difference is there are no [`Slab::insert`] andÁüè b_ [`Slab::take`] analouges for the `Pool` type. Instead new items are added to the pool by usingÁüË
WT the [`Pool::create`] method, and marked for clearing by the [`Pool::clear`] method.Á£ ú êÝ úüº 1. Add an entry to the pool, returning an index:Á ¦Ñìô  # use sharded_slab::Pool;Áü’ )& let pool: Pool<String> = Pool::new();Á¼ úüÀ MJ let key = pool.create_with(|item| item.push_str("hello world")).unwrap();ÁüŽ
DA assert_eq!(pool.get(key).unwrap(), String::from("hello world"));Á
¦ÑÛ
úüß
KH Create a new pooled item, returning a guard that allows mutable access:Á¦Ñì³üÑ)²ûúüÿ+( let mut guard = pool.create().unwrap();ÁÔ« let key = guard.key();ÁüÆ" guard.push_str("hello world");ÁéúüíA> drop(guard); // release the guard, allowing immutable access.Áü¯DÈ‘¦Ñüúü€SP Pool entries can be cleared by calling [`Pool::clear`]. This marks the entry toÁüÔ=: be cleared when the guards referencing to it are dropped.Á<¦Ñìšü¸)²âúüæMñ´úü¸%" // Mark this entry to be cleared.Á¤Þ pool.clear(key);Áóúü÷;8 // The cleared entry is no longer available in the poolÁü³%" assert!(pool.get(key).is_none());Á¦Ñœáèîõúüùpm Both `Pool` and [`Slab`] share the same configuration mechanism. See [crate level documentation][config-doc]Á¬ê for more details.Áúü„%" [`Slab::take`]: crate::Slab::takeÁüª)& [`Slab::insert`]: crate::Slab::insertÁüÔ" [`Pool::create`]: Pool::createÁü÷  [`Pool::clear`]: Pool::clearÁü˜%" [config-doc]: crate#configurationÁܾ [`Clear`]: crate::ClearÁÌÚ [`Slab`]: crate::SlabÁ$ÿ¥Íì‚` Íìˆ`Œ‡¢‚`³‚`Þˆ`\¿Î_KŽ€NÕ€î¸Z\W Ö`ÔÒóx¤ò½¡Fu\»Ÿˆ`ü»(ü‹63 A guard that allows access to an object in a pool.ÁÂúüÆZW While the guard exists, it indicates to the pool that the item the guard references isÁü¡^[ currently being accessed. If the item is removed from the pool while the guard exists, theÁü€:7 removal will be deferred until all guards are dropped.ÁÆ´ ¥  ÍìÙa ÎÍìßaŒÑ¢Ùa³ÙaÞßa\‰Ùa´ ´Àßa´ •aò@÷¾À¹ü·!"#jÊ}z ÑÖ`ôœÁLâ×—¹þWÄS®Ùaßa™,À ´ ÄÄù6Ç–7È®¯É©7¯`D!β+6ûÙaßaÜüü+üëHE A guard that allows exclusive mutable access to an object in a pool.Á´úü¸LI While the guard exists, it indicates to the pool that the item the guardÁü…PM references is currently being accessed. If the item is removed from the poolÁüÖIF while a guard exists, the removal will be deferred until the guard isÁü NK dropped. The slot cannot be accessed by other threads while it is accessedÁ mutably.Á4‡ ´ %¥&'&'%ƒ£ “£Œ• ££²£Á£У´ˆ!Þ£Žbðï=®~M3&()*Ž UWZ Ö`üà "$$˜˜ƒMâל¬M×ÂM×29¨°ÑëÙaßa­,ˆ!$$†¥T¤!¤!$$üà6)ü³!NK An owned guard that allows shared immutable access to an object in a pool.Á"úü†"ZÆŸüá"^ª üÀ#:’¡û#úüÿ#JG Unlike [`Ref`], which borrows the pool, an `OwnedRef` clones the `Arc`ÁüÊ$NK around the pool. Therefore, it keeps the pool from being dropped until allÁü™%PM such guards have been dropped. This means that an `OwnedRef` may be held forÁÔê% an arbit
 `£cçg `àB¤GS
õÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
áŸÈŸÈ ÈErrorÁ O˜éBLV ÇæV
Y‚`ˆ`$Èæ± Îæü£èN´ [¥\][\]ƒ£ ¬è“£ ¯è££,Íè²£<ÕèÁ£\åè•a^_¨è79;=Ôªéüøè-* Returns the key used to access this guardÁ±éö ö•aZ µéZ
^´ Ùaßa$¶é¬ñé,ôé÷ ÷•a ÷ÙaZ úéZ
_´ Ùaßa$ûéüÅíb´ a¥bccabƒ£ Îí“£ Ñí££,ƒî²£<‹îÁ£\›î•adeê!ë!eÊíBDFH\®î4³î``ÙaüÄî ,Çîø ø•a ø•aê!` Íî`
e´ Ùaßa$Îîü…ïW´ g¥highiƒ£ Žï“£ ‘,¸ï²£<ÀïÁ£\Ðï•aj"jŠï<>@B”ãï$æïù ù•aáf ëïf
j´ Ùaßa$ðïüðôj´ l¥mnnmlƒ£ ùô“£ üô¿cÙaT©õ££,¶õ²£<¾õÁ£\Îõ•aoÀcoõôLNPRüáõ8äõúûü ú•a û c cˆ¢cµ
 `£cçg `àB¤GS
üóÀk èõk
o´ Ùaßa$éõ± ïõüÎön´ q¥rssqrƒ£ ×ö“£ ÚöµßÙaÙad‰÷££,˜÷²£< ÷Á£\°÷•at·ßtÓöQSUWüÃ÷Æ÷ýþ ý•a þÙap É÷p
t´ Ùaßa$Ê÷¹
,Ð÷ü¨ø^´ v¥wxwxvƒ£ ±ø“£ ´øÁ£\·ø££,âø²£<êøÁ£\úøŽbyz{­øBDFHÔ¿ùüù-* Returns the key used to access the guard.ÁÆùÿ ÿŽbu Êùu
y´ Ùaßa$Ëùü†„+üøùJG Downgrades the mutable guard to an immutable guard, allowing access toÁüÇú(% the pooled value from other threads.Áôúú|üú ## ExamplesÁûú<˜û¦Ñì¤ûüÆû# # use std::{sync::Arc, thread};Áüîû/, let pool = Arc::new(Pool::<String>::new());Á¢üúüªü=: let mut guard_mut = pool.clone().create_owned().unwrap();Áôìü let key = guard_mut.key();Áüý  guard_mut.push_str("Hello");Á´ýúü¼ýHE // The pooled string is currently borrowed mutably, so other threadsÁ̉þ // may not access it.Áì§þ let pool2 = pool.clone();ÁÜÉþ½üéþ)& assert!(pool2.get(key).is_none())Á¼—ÿ´¾³ÿúü»ÿ52 // Downgrade the guard to an immutable reference.Áüõÿ&# let guard = guard_mut.downgrade();Á €úü¨€;8 // Now, other threads may also access the pooled value.Áìè€ðÔÜŠ½üª" let guard = pool2.get(key)ÁüÑGD .expect("the item may now be referenced by other threads");Áü1. assert_eq!(guard, String::from("Hello"));Á¼Ó‚´¾ï‚úü÷‚LI // We can still access the value immutably through the downgraded guard.Áüȃ-* assert_eq!(guard, String::from("Hello"));Á<úƒ¦ÑLŽb•auu
z´ Ùaßa$›„¬é…,ì… € Žb € Ùau ò…u
{´ Ùaßa$ó…üõ‡r´ }¥~}~ƒ£ þ‡“£ ˆÁ£\„ˆ££,Ȳ£<ˈÁ£\ÛˆŽb€ê!ë!ú‡NPRT\îˆ4óˆ||Ùaü„‰ ,‡‰   Žb  Žbê!| |
´ Ùaßa$މüʼnh´ ƒ¥ƒƒ£ Ή“£ щ££,‰Š²£<‘ŠÁ£\¡ŠŽb†÷!ʉ>@BDü´Š,L·Š ‚ Žb ‚ êÞ ÁŠ
´ Ùaßa$ÆŠüÌŒZ´ ˆ¥ŠŠˆƒ£ ÕŒ“£ ØŒ££,‚²£Á£Žb"ÑŒ>@BD”­ƒ  ƒ Žbá µ
´ ÙaßaüÔm´ ¥ŽŽƒ£ Ý“£ àŒÊT££,²£<¥‘Á£\µ‘ŽbÀcÙGIKMüÈ‘8Ë‘ „ Žb  c cˆ¢cµ
 `£cçg `àB¤GS
óÀŒ Ï‘Œ
´ Ùaßa$Б± Ö‘üµ’q´ ¥ƒ£ ¾’“£ Á’îÌdó’££,‚“²£<Š“Á£\š“Žb•·ßº’HJLNü­“°“ˆ  ‡ Žb ˆ Ùa ³“
´ Ùaßa$´“¹
,º“ü‘”K¥˜˜ž –” ž ™”°ž,¸”¿ž<À”Ξ\Д‹c™š2468Ô••üã”-»Âœ• ‰ ‹c  •
‚`ˆ`$¡•¬Ü•,ߕР Š ‹c Š ‚` å•
š‚`ˆ`$æ•ü°™_¥œœž µ™ ž ¸™°ž,뙿ž<ó™Ξ\ƒš‹cžŸê!ë!Ÿ>@BD\–š4›š‚`ü¬š ,¯š ‹ ‹c ‹cê! µš
Ÿ‚`ˆ`$¶šüíšT¥¡¢¢¡ž òš ž õš°ž,¿ž<¥›Ξ\µ›"£79;=”È›$Ë›Œ  Œ ‹cá  Л 
£‚`ˆ`$Õ›üë£g¥¥¦¦¥ž 𣠞 󣙿T¡¤°ž,®¤¿ž<¶¤Ξ\Ƥ‹c§Àc§@BDFüÙ¤8ܤ Ž    c Ž  c cˆ¢cµ
 `£cçg `àB¤GS
 óÀ¤ त
§‚`ˆ`$ᤱ ç¤üÆ¥k¥©ª©ªž Ë¥ ž Î¥µß‚`‚`dþ¥°ž,¦¿ž<•¦Ξ\¥¦‹c«·ß«LNPRü¸¦»¦    c ‘ ‚`¨ ¾¦¨
«‚`ˆ`$¿¦¹
,Ŧüƒ§b¥­®®­ž § ž ’§‹½$º§°ž,Á§¿ž<ɧΞ\Ù§c579;üë§b¥°±±°ž ÷§ ž ú§‹½$¢¨°ž,©¨¿ž<±¨Ξ\Á¨c579;üð¨N¥³´³´ž õ¨ ž ø¨°ž,š©¿ž<¢©Ξ\²©·¸8:<>Ô÷©üÅ©-»Âþ©  d² ‚ª²
µ‚`ˆ`$ƒªüÊ´,ü°ªLI Downgrades the owned mutable guard to an owned immutable guard, allowingÁü«2/ access to the pooled value from other threads.Á¸«ú|À«›ÑÔ«ú<Ü«¦Ñìè«üЬ#ÞÑü²¬/ŒÒæ¬úüî¬=ÓÒô°­šÓüÓ­ ÃÓø­úü€®HûÓÌÍ®ÍÔìë®ðÔܯ½ü­¯)¦Õ¼Û¯´¾÷¯úüÿ¯5õÕü¹°&µÖä°úüì°;óÖ쬱ðÔÜα½üî±"Õ×ü•²G‚Øüá²1ÔØ¼—³´¾³³úü»³L«ÙüŒ´-‚Ú<¾´¦ÑLÑ´d‹c²²
‚`ˆ`$ß´ü«¶',®¶ dÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ “ ¡x² ´¶²
·‚`ˆ`$µ¶¬¸,¸ d ” ‚`² –¸²
¸‚`ˆ`$—¸üç»b¥º»º»ž ì» ž ï»°ž,¥¼¿ž<­¼Ξ\½¼½ê!ë!½>@BD\м4Õ¼¹¹‚`üæ¼ ,é¼ d dê!¹ ï¼¹
½‚`ˆ`$ð¼ü§½e¥¿À¿Àž ¬½ ž ¯½°ž,轿ž<ð½Ξ\€¾÷!Á79;=ü“¾,L–¾  d – ñ€¾  ¾¾
Á‚`ˆ`$¥¾üÂW¥ÃÄÃÄž ” ž —°ž,¿ž<ÊÂΞ\ÚÂ"Å79;=”íÂ$ð dá õÂÂ
Å‚`ˆ`$úÂüúÉj¥ÇÈÇÈž ÿÉ ž ‚Ê™¿T³Ê°ž,ÀÊ¿ž<ÈÊΞ\ØÊÀcÉ@BDFüëÊ8îʘ š  ˜ d  c cˆ¢cµ
 `£cçg `àB¤GS
š óÀÆ òÊÆ
É‚`ˆ`$óʱ ùÊüØËn¥ËÌËÌž ÝË ž àËòd“̰ž,¢Ì¿ž<ªÌΞ\ºÌ·ßÍACEGüÍÌÐÌ œ   d œ ‚`Ê ÓÌÊ
Í‚`ˆ`$Ô̹
,ÚÌü˜Íe¥ÏÐÏО ¤Í ž §Í‹½$ÒͰž,ÙÍ¿ž<áÍΞ\ñÍd579;üƒÎe¥ÒÓÒÓž Πž ’΋½$½Î°ž,Äοž<ÌÎΞ\ÜÎd579;””G£GÞãòõöî TñÔ×· D*õÔØÅ-$9·ÔÙÌH$MØÔÚ×]¤,Ôܽ¡\jÔݽ¡ÔÝ\¼rt\FeWVXœbH¼ÍüxTQ Configuration parameters which can be overridden to tune the behavior of a slab.Á4×ÞÞÍìâ‹ÞŽŽßàáâßàáâÄÞüë<9 The maximum number of threads which can access the slab.Á¬úü´JG This value (rounded to a power of two) determines the number of shardsÁüƒPM in the slab. If a thread is created, accesses the slab, and then terminates,ÁüØGD its shard may be reused and thus does not count against the maximumÁü¤52 number of threads once the thread has terminated.Á\äÞÞ´òü™:7 The maximum number of pages in each shard in the slab.ÁØúüàLI This value, in combination with `INITIAL_PAGE_SIZE`, determines how manyÁü±<9 bits of each index are used to represent page addresses.ÁLøÞÞôý
ü©-* The size of the first page in each shard.ÁÛúüãB? When a page in a shard has been filled with values, a new pageÁüªLI will be allocated that is twice as large as the previous page. Thus, theÁüûIF second page will be twice this size, and the third will be four timesÁÌÉ  this size, and so on.Áç úüï LI Note that page sizes must be powers of two. If this value is not a powerÁüÀ
85 of two, it will be rounded to the next power of two.ÁŒƒ ÞÞÔµüÄ JG Sets a number of high-order bits in each index which are reserved fromÁt“  user code.Á¦ úü® KH Note that these bits are taken from the generation counter; if the pageÁüþ HE address and thread IDs are configured to use a large number of bits,ÁüË
HE reserving additional bits will decrease the period of the generationÁü˜KH counter. These should thus be used relatively sparingly, to ensure thatÁüèHE generation counters are able to effectively prevent the ABA problem.Ál»ÞÞüØ#ããÎìâ‹ü؃Þâ‹ãçœ*úœçœ6úœåæçèéêëíîïäåæçèéêëíîïèêïëéíî´‚ãã¼Ôãã¼–ããìÖ„Üããü«ãã
è⋹ ¸ü†,‰òòíôŸ ÔìõéÑ3%~‘â‹ãã
éâ‹áãã
êâ‹ü¸,ãììãÍ쀡 ÂØ€¡â‹
ëâ‹€¡¿
-/ü§+··Å-¹Ù-кŸ ЛÅ]ᱎ>Çâ‹ãã
íâ‹¿
ü“0T–¢¢ú=¤>¥—>¦Ÿ 9ɯñž¯‘Câ‹ãã
îâ‹¿
ü„0T‡¨‹ãã
ïâ‹¿
4’üÜ ññÍì™e áÞ™e™eüé (óó㤠‡!ó¤4Š!ØeìõéÑ3%~ô%'Ę!$˜!Ôòò¯¢ìµ!,Æ!üø!0LŒ"ý¹ŠLìÆ#Ö`øùúáßàôê#Œð#÷÷ļ$û64ÁÜš$ü”$#\Â$÷÷´&L‡&÷÷ü¨&!Ö`üÀcüüÐ&8Ó& ž Ÿ   Ö` ž  c cˆ¢cµ
 `£cçg `àB¤GS
Ÿ óÀû ×&û
ü$Ø&± Þ&ü±'-þþ㤠¶'ó¤4¹'ØeÿÀcÿüå'8è'  ¡ ¢    Øe ¡  c cˆ¢cµ
 `£cçg `àB¤GS
¢ óÀý ì'ý
ÿ™e$í'± ó'œ¨G$·G¤Š¤ÄƒatomicÁ4æ]¤µ> yield_nowÁL† ¡ˆd™µÎJTNô\
º
»º„Ï

ÄÎ
üÄ
#üÀ
(ü·
3
ŠôõÄìƒûªá‚]¤Ûµ>±«Í ¡ˆÇµÄ£JМÐ7:%(Œþùûœ³šÌëá
¬ÿ¥ž üŸ$¦‚`fŒŒ
Ž‚`“j$ªü¬W£  £ f£Œ£ ¾ŒÍìŰ ¸Íìʰ »–"Ű ‚`¬í۰±˜"ʰ 
‚`Űʰ$¿± Åbd^`ü×Y¤  ¤ fŰʰŒ£ 팃± ç”± ê–"Ű ‚`œœŰ“³˜"ʰ ®
‚`Űʰ± ôY[^`¤ì#û„›¥ž  Ìf˜šü€ ‚`Ìf
˜‚`»,‹Ü©¥  ¥ Ìf ¥ ‚` ¸
`üÑ#¦  ¦ Ìf ¦ ‚` à
š‚`ä‚T‰Ìf‚`
`$”L¾G,ÂG¢ collectionsÁ\
Çœž§$ œŸDerefMutÁD" ö!œ ç$, —3œ¡ XZHJl 3!#|Õ
ü4K H Trait implemented by types which can be cleared in place, retaining anyÁ¬€  allocated memory.Á úüšG D This is essentially a generalization of methods on standard libraryÁüâI F collection types, including as [`Vec::clear`], [`String::clear`], andÁü¬M J [`HashMap::clear`]. These methods drop all data stored in the collection,ÁüúM J but retain the collection's heap allocation for future use. Types such asÁüÈC @ `BTreeMap`, whose `clear` methods drops allocations, should notÁÌŒ  implement this trait.Á¦ úüªJ G When implemented for types which do not own a heap allocation, `Clear`ÁüõN K should reset the type in place if possible. If the type has an empty stateÁüÄM J or stores `Option`s, those values should be reset to the empty state. ForÁü’P M "plain old data" types, which hold no pointers to other data and do not haveÁüãM J an empty or initial state, it's okay for a `Clear` implementation to be aÁü±N K no-op. In that case, it essentially serves as a marker indicating that theÁü€) & type may be reused to store new data.Áª úü®Y V [`Vec::clear`]: https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.clearÁüˆ b _ [`String::clear`]: https://doc.rust-lang.org/stable/std/string/struct.String.html#method.clearÁüë i f [`HashMap::clear`]: https://doc.rust-lang.org/stable/std/collections/struct.HashMap.html#method.clearÁ
¢¢çœüÕ
q ¢çœçœ£££¤° üë
@ = Clear all data in `self`, retaining the allocated capacithy.Á,³ §  § â‹á¢ ¹ ¢
£â‹ ÜÈ ¥¥¥ž Í Žg¦£¦œê ¨  ¨ Žgᤠó ¤
¦‚` ü¦ , ¥¨¨ž « °ž Ýg©£©œç ©  © Ýgá§ ð §
©` ħ
¥««ž ¬
Ôh¬£¬œÔ
,×
ª  ª Ôh᪠Ý
ª
¬`
üŒm œ®§¯¤°¯®°ÍìÐi  ÍìÖi  ÍìÜi  šeÐi ÐiÜ ÅeÜiŒç ži±£±_a\^Y[œŽ ,‘ «  « žiá­  ­
±ÐiÖiÜi ü×g ¥³¤´´³ž Ü Íìj ß še‚`T” ‚`¡ ÅejŒ¬ ìiµ£µOQLNœÓ  ¬  ¬ ìiá² Ü ²
µ‚`j ¬œ ­j·£·œÆ  ­  ­ ­já Ï 
· ü' ¥¹¹ž  °ž,‰ âjº£ºœ½  ®  ® âjá¸ Æ ¸
º‚` ü…( ¥¼¼ž Š °ž, ¼k½£½œÂ  ¯  ¯ ¼ká» Ë »
½` DÉG$ÍG
FusedIteratorÁl òP¾Àž, ë1¾Áâ4 Ծø$9 оÄÒ ,? ¯¾Å œ
gUW,, HJ8:(*üÈ= ´ Ç¥ÈÉÇÈɃ£ Ñ “£ Ô Á£ ŒlÊËúMûMËÍ /146 $‘ ÆÆ ´ Ùaü¤(  °  ° ŒlÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙŒlúMÆ ¬ Æ
Ë´ Ùaßa  ˰ùÌÈùÌåùÌÌËÌÙaßa ¬­¬­ FilterMapÁ¯­ùÍ:°­±Í:žYl¼[qR¨ÄlÄlë.Çlµ ™lÈlâÆ™lÉløÆ™lŒœjSžêêÈíä×îó ×ï÷×ðŸ ×Áqq8<gÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙÙaßa ÐÖÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ Ùaö×áü­ > 8± ¥ÎÏϱ ΃£ ² “£ µ Á£ ìlDÓG$×G×·ÀÊÎÐ×­â$ÔÐÒTãÐÓû,6¢ÐÔÎJ«ôÐÕÌH$eØÐÖÈê³×·¤,е½¡Ð½¡ÐT½ ®°œ(¡¼A=\^€œl${êñõùýþ˜¢–.D Àר AtomicUsizeÁ\5„Ä×Û®DB¼À×ܤ$QŠ×ÝÎJTWô×ÞârÔ×àû,~¢×áÌH$…Ø×âú=¢×ãÚפ,×彡׿½¡×æíµë×çµ º×èŠ4¿¦×é|O\Ì9<*-  ,júüdwíÛÝÊ̹»œ «qs`bäÉ¥ëìëìž à ž ã¬pÁqq8<gíîïð+-02´ì×êê¤]¤]V¦]Á‚]üß3ø¤”&¼¾×êêôôõÎJ÷ˆ Ÿ´6@~’œ€$€×êêfÄ™$™×ê꽡Fu\»Ÿˆ`áüò4T„òò㤴åo_H5“h^oóô Ö`×ññÄ¿$¿×ññ¯¢üñ2öö㤴ŒÂr$¶ùˆs6>Î÷ø ŒÖ`×õõļ×õõ¯¢ôÙúú㤠õÙqNǃy"ûü!×ùùÏnÄ$×ùù¯¢Ña×ÿÿ㤠À×s2h m8õ»þåo×sÑaO×åo×sýý
þ™efh×ýýåoüÜ .㤠á ó¤åoƒÚÛàß35„‰    Äzüÿ T‚ åo
™eÀ Üÿ D‚
²  ² åo

™e
ü¹
"ˆˆã¤ ¾
ó¤
åo‰äâ
å
×åo
™e»
ü/¥ŒŒž  ž Ξ¬pš,.13üÛ"г  ³ ¬pŠ îŠ
‚`ˆ`4—°ùŽÈùŽåùŽŽŽ‚`ˆ` áüÑ ´  ´ ¬p ´ ‚`Š åŠ
‚`ˆ`4‹°ùÈùåù‚`ˆ`°± ‚`áüÆ*е  µ ¬pአ݊
‚`ˆ`ó $䎰ùÈùåù‚`ˆ` á‚¡üàCî ¶ ¬pññ ó»×ôŸ ×_H5“h^oˆ`· Š òŠ
‚`ˆ`5ùüó&:dö&×·  · ¬pðÛ¼ݼÞ¼©ß¼à¼Ûá¼
4È:È>$×:mutatorÁ<á:þ4ŠL°ùÈùåù‚`ˆ`€ó†ó‹ó“³‹ó†óüúT4$ˆU»  » ¬pÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙümŠ UŠ
š‚`ˆ`$ŽUüÏ[7¥œœž Ô[ ž ×[Ξ\ú[êêÈíä×îó ×ï÷×ðŸ ×Áqq8<gŽgˆ ¡£xz}Ô\D\×¼  ¼ íø ™\
ž`ˆ`$š\4Á\ž°ùŸÈùŸåùŸŸžŸ‚`ˆ` Žgáü‚^K4^½ ¾  ½ íø ¾ ŽgÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙð —^
 `ˆ`$˜^»,ž^üöf‘„„gп À  ¿ íøð À €ó¢¢ ®gÓó •g†ô\˜g
¡‚`ˆ`€ó$¯g5½gž
4ÙgÈ>$ðg9;üàodîoÐÁ   Á íøð  €óŽg¤¤ ”pÓó ûo†ô\þo
£‚`ˆ`€ó$•p5£pž
4¿pÈ>$Öp9;4¢q£°ù¥Èù¥åù¥¥£¥‚`ˆ`€óÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ ŽgŽgáüõqG¥§¨¨§ž úq ž ýq¿ž<˜r°ž,¢rΞ\°r¬p©ª¬0257üÃr/ÚrЬp¦¦
©‚`ˆ`ó $Þrü¥v’Œ³vÐà Ä  à ¬pð Ä €ó¦«« Þv¦Óó Åv†ô\Èv
ª‚`ˆ`€ó$ßv5ívž
4‰wÈ>$ w9;üŠ€Žl˜€ÐÅ Æ  Å ¬pð Æ €ó¦­­ ¿€¦Óó ¦€†ô\©€
¬‚`ˆ`€ó$À€5΀ž
4ê€È>$?A4Ò‚¬°ù®Èù®åù®®¬®‚`ˆ`€óÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ ‚`á<þ‚¬°ù¯Èù¯åù¯¯¬¯‚`ˆ`€ó ‚`ááü„„"¥±²±²ž ‰„ ž Œ„Ξ\¬p³!#Ì­„<°„×Ç  Ç ¬p° ¸„°
³‚`ˆ`$¹„üÚ‘1¥µµž ß‘ ž â‘Ξ\呬p·Àc·%')+ü’’8•’È É Ê  È ¬p É  c cˆ¢cµ
 `£cçg `àB¤GS
Ê óÀ´ ™’´
·‚`ˆ`$š’±  ’ü©–$¹¹ã¤ ®–åoºÀcºüÔ–8×–Ë Ì Í  Ë åo Ì  c cˆ¢cµ
 `£cçg `àB¤GS
Í óÀ¸ Û–¸
º™e$Ü–± â–üØ—"¼¼ã¤ Ý—ó¤\à—åo½Ę<„˜×åoåo»»
½™e$Œ˜üݘ0¿¿ã¤ â˜ó¤\å˜åoÀ·ßÀü”™"—™Î Ï  Î åo Ï åo¾ š™¾
À™e$›™¹
,¡™üä™)ÂÂ㤠é™ó¤\ì™åoü’š1ÄÄ㤠—šó¤\ššåoÅïßÅüÊšA\ÍšÐ Ñ  Ð åo Ñ åoÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ¿ßÀßÁßLessÁÂßÃßÄß~Å߯ßÇßGreaterÁÈßåºÝÈnûê7à ٚÃ
Å™e$Úš¹
,àšüÄ›*ÇÇ㤠ɛó¤\Ì›åoÈ»Èüõ›1ø›Ò Ó  Ò åo Ó åoø’Æ ü›Æ
È™e$ý›¹
,ƒœüל,ÊÊ㤠ܜó¤\ßœåoËÙ˼Š,Ô  Ô åoåoÉ É
Ë™e$”ü»+ÍÍ㤠Àó¤åoü‚ž#¥ÏÐÐÏž ‡ž ž ŠžΞ\žÁmÑÒÓ#%')ü¡+<¤¡Õ  Õ ÁmÎ ¬¡Î
Ñ‚`ˆ`$­¡ü¯¤/$ĤÖ  Ö Ám Ö ¬pÎ ɤÎ
Ò‚`ˆ`$ʤüà§',õ§×  × Ám × ‚`Î û§Î
Ó‚`ˆ`$ü§4¨¨Ó°ùÔÈùÔåùÔÔÓÔ‚`ˆ`„îáüÛ¨!ÖÖ㤠à¨ó¤\ã¨Ùq×ØÙ”ƒ©4‰©×ÕÕÙq¤ã©Dé©×ÕÕÙqœÇª<ͪ×ÕÕÙqü¨«-ÛÛ㤠­«ó¤\°«ÙqÜÝÞßÚÛàßßÞ57„Ü«â«ÚÚLö«$û«ÚÚáü‹¬TެÙqÚÚ
Þ™eÀ ™¬Üä®Dç®Ø  Ø ÙqÚ ð®Ú
ß™e$ñ®ü§¯"áá㤠¬¯Ùqâ·ßâüЯ"Ó¯Ù Ú  Ù Ùq Ú Ùqà Ö¯à
â™e$ׯ¹
,ݯÜ °ää㤠¥°Ùq
üÀ°#ææã¤ ŰÙqçÀcçüê°8í°Û Ü Ý  Û Ùq Ü  c cˆ¢cµ
 `£cçg `àB¤GS
Ý óÀå ñ°å
ç™e$ò°± ø°ü‡²,éé㤠Œ²ó¤\²ÂrêëìíÚÛàßìí57„º²À²èèLŒ³$‘³èèÙqü«³#T®³Ârèè
ì™e»,¹³ÜÓ´DÖ´Þ  Þ Ârè ß´è
í™e$à´üµ ïï㤠’µó¤\•µÂrðñòÜ´µŵîîìõµ$øµ×ÂrÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙÂrîî
ñ™e$ýµ¬÷·$ú·×ÂrÂrîî
ò™e$ÿ·üÁ¸"ôô㤠ƸÂrõÀcõüê¸8í¸ß à á  ß Âr à  c cˆ¢cµ
 `£cçg `àB¤GS
á óÀó ñ¸ó
õ™e$ò¸± ø¸üì¹.÷÷㤠ñ¹ó¤\ô¹Ârø·ßøü¡º"¤ºâ ã  â Âr ã Ârö §ºö
ø™e$¨º¹
,®ºüñº'úú㤠öºó¤\ùºÂrü»/üü㤠¢»ó¤\¥»ÂrýïßýüÓ»A\Ö»ä å  ä Âr å Âr³’û â»û
ý™e$㻹
,é»üͼ(ÿÿ㤠Ҽó¤\Õ¼Âr€»üü¼1ÿ¼æ ç  æ Âr ç Ârø’þ ƒ½þ
™e$„½¹
,нüÞ½*㤠ã½ó¤\æ½ÂrƒÙƒ¼¾,’¾è  è ÂrÂr ˜¾
ƒ™e$™¾üÀ¾)㤠žó¤\ȾÂrüŒ¿0㤠‘¿ó¤\”¿×sˆŠÚÛàߊ57„ÿÉ¿Lð¿$õ¿ÂrüŽÀ#T‘À×s
Š™e»,œÀÜëÀDîÀé  é ×s ÷À
™e$øÀü¬Á'¥ŽŽž ±Á ž ´ÁΞ\·Áüm,.02üÚÁ0TèÁê  ê ümðŒ óÁŒ
‚`ˆ`$ôÁü¥Å',ºÅë  ë üm ë ‚`Œ ÀÅŒ
‚`ˆ`$ÁÅ,ôŰùÈùåù‚`ˆ`„îáüƒÊ3L˜Êì  ì üm ì ‚`Œ ¢ÊŒ
‚`ˆ`$§Ê,âʰùÈùåù‚`ˆ`“³‘ˆáüßÍ/<ôÍí  í ümŒ üÍŒ
‚`ˆ`$ÎüýÐ8L’Ñî  î ümÁmŒ œÑŒ
‚`ˆ`$¡ÑüªÒ6D´Ò×ï  ï ümŒ ½ÒŒ
`ˆ`$ÂÒnew_refsÁDÈÒü³è'œ¶è×ð  ð á Ïè
expÁÊèÌŽéd”é×L,…Сâ ÔšåÚ\*„Äœ®D7¼À×L¤,Ÿ½¡\Y ½¡ Tnp]_FOQœQAüh7lzТ¢ã¤´ˆ–tf
Ú5*¶\\£¤ ˆÖ`Œ¦¡¡‡àĽ¡¡¯¢üÚ%¦¦ã¤ ßó¤–t§¨©܆Жt¥¥
§™eü£-Ðñ  ñ –tÌÉ¥ ¹¥
¨™eüÄ7ò  ò –tä,á¥ä,ªª Ì¥Íì—À"—À—ÀßÀ˜"á
©™e—Ànew_headÁDÓbeforeÁ4ä^`ü­ <¬¬ã¤ ² ó¤ –t­Â­üð < ó ô  ó –t ô êêÈíä×îó ×ï÷×ðŸ ×Áqq8<gÙa™eá«¥®® û «ƒ£ ø 
­™eÙa ‘ÀD‚
â$“
')
­°ù¯Èù¯åù¯¯­¯™eÙaßÀá  ÆÂüð
'±±ã¤ õ
–t²Àc²üž8¡õ ö ÷  õ t ö  c cˆ¢cµ
 `£cçg `àB¤GS
÷ óÀ° ¥°
²™e± ¬„›&6±66œ¼
6üõ;$‡¸¸ã¤üŒ#ó¤\çt›Å]ᱎ>ǹº( ŒÖ`з·ÄÈз·¯¢ä弼㤠êó¤çt½¾¿ŒˆÐ»»ü±",¿çt»»
¾™eü‚ #4 çt»»
¿™e$— äà  ÀÁÁÀçœüà | ž Ý Àçœ!çœÂÂ*,üæ W ø ù  ø â‹ ù êêÈíä×îó ×ï÷×ðŸ ×Áqq8<g¥ˆ`áÀ¥Ãà ñ ÀÍìŽÌ î Ξ 
Â⋈`ŽÌ ‘À â$‰ 46üÁ (ÅÅã¤ Æ ó¤ çtÆÇÈÉÚÛßàÈÉ35„ð ö ÄÄ

ÄÄáÜÁ

ú  ú çtÄ Í
Ä
șe
üü
"Tÿ
çtÄÄ
É™eÙ-$ŠôŸ´ Ë¥ÌÍÌÍ˃£ ¸“£ »¬­¬­ËÔ¯­ùÍ:°­±Í:žYl¼[qR¨ÄlÄlë.Çlµ ™lÈlâÆ™lÉløÆ™lŒœjSž´ ÐÖ ´ ÐÖÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ£Ó´ûý¼¹®uÇî;z©}ϼŽÐÎÎÏàôª¥ÑÒÑÒž àž ÆÐФ/ÓÂ/ÐÔÐÕØ/ÐÖç/ÐÚp.IDï_ï`ˆ`Úp.IDï_ïÓÔÕÖü¸ÐÐС¡ƒ,£ ,¤Ÿ f
Ú5*¶\\ˆ`\ðÐÐÐt<ÐÐÐü•%$•ÐÐÐôôõÎJ÷ˆ Ÿ´6@~’Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙžëf¡ˆˆ¢ˆl }.xÏ
¬p¡h„¿Ð¥ØÙÙØž Ê ž ÍÍÖ®uÛÜÞÜ÷®uÚÚ
Û¼õÐû  û ®uÚ ýÚ
ÜܰùÝÈùÝåùÝÝÜݱìáüà#Ðü  ü ®uáÚ ìÚ
Þ‘ÀÞ°ùßÈùßåùßßÞßØï‚¡üã*áá㤠èó¤®uâÂâü”5$—ý þ  ý ®u þ ÆÂáà¥ãã Ÿàƒ£ œ
â™eÙa‘Àâ')üš1¥åææåž Ÿ ž ¢Ξ\¿¢Óçèéêìñ*,/1ŒÒÐääüü6Š¢Óää
è`ˆ`Ø/<üã-æÐÿ 
 ÿ ¢Ó 
®uÌÉä êä
é‚`ˆ`®ü' t“'Ð
 
¢Óä ¢'ä
ê`ˆ`$£'Ê'ê°ùëÈùëåùëëêë‚`ˆ` ˆÖáü‚(L( ´ ¢Ó··Å-¹Ù-кŸ ЛÅ]ᱎ>Lj`È1Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ¦ä´ í¦îÈ1ïíïîäÍìøâ ž(Íì®âüÖ((–"®â ´ ¬püÛ(#®âèã˜"³âLõ(
ì‚`ˆ`´ øâ®â$®(Ù-$¼(± Ó(š(|~4Ž*ì°ùðÈùðåùððìð‚`ˆ`øâ®â´á³â„¡®âü–+3L¤+
 
¢Ó 
‚`ˆ`òä ®+ä
ñ‚`ˆ`$¯+€Ì¹+ññÊÔÍì˜æ&À˜æˆ`\¾+ææ?õæñüê+B´ ô¥õöôõöƒ£ ó+“£ ö+Á£\›,Þ£©,ÐФ/ÓÂ/ÐÔÐÕØ/ÐÖç/ÐÚp.IDï_ï¢×ßa÷úþÿï+ŒŽôü³,ª$Á,ƒ

 ƒ
òç··Å-¹Ù-кŸ ЛÅ]ᱎ>Çßaññ ó»×ôŸ ×_H5“h^oßa 
¢×óøø Ò,óÍì·ê Æ,À·êßa\Ñ-
÷´ Ùaßa·ê$Ó,Ù-$á,5ø,ý1Lš-JL4ç.÷°ùùÈùùåùùù÷ùÙaßa·ê Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙžëf¡ˆˆ¢ˆl }.xÏ
ÐÖ¡h¢×„¡ òé  ·êüš0’4¨0

 
òç¶éòé 
·êóûû È0óåê ¯0öê\²0
ú´ Ùaßa·ê$É0Ù-$×05î0ý1L1?A4¬2ú°ùüÈùüåùüüúüÙaßa·ê­ìÂí4–3ú°ùýÈùýåùýýúýÙaßa·ê õìÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙðׂ¡üó5:Dö5ПѩÑóó
þ´ Ùaßaâ$ÿ5üÙ63$ç6
 
òçÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ‹Ðó ì6ó
ÿ´ Ùaßa$í64±7ÿ°ùÈùåùÿÙaßa­ìÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙñðá4ç7ÿ°ùÈùåùÿÙaßaïð¿Õáüù8I¥ƒƒž þ8 ž 9°ž,ž9¿ž<¦9Ξ\¶9¢Ó469;üÉ9L×9ˆ

 ˆ
¢Ó 
®u¹3Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ¦¦¹3 í9Íìô÷ á9Íìª÷ü™:,Š
"ª÷ Š
¬püž:'Š
ª÷àø˜"¯÷L¼:
‚`ˆ`ô÷ª÷$î9®,ü9“#$“:ƒ4Ô<°ùˆÈùˆåùˆˆˆ‚`ˆ`ô÷ª÷´á¯÷„¡ª÷„¡  ®u”¨@D«@Ð
 
¢Óá ´@
‚`ˆ`$µ@×B°ùŠÈùŠåùŠŠŠ‚`ˆ` ˆÖáªBªBö­Bçg÷<®B÷<9)
-ÜnL¬p¡hüÃETÑEŒ

 Œ
¢Óòáð 
€óŒŒ õEÓó ÜE†ô\ßE
‚`ˆ`€ó$öEÙ-$„F5Fý1L½F9;4ÙG°ùÈùåù‚`ˆ`€ó±á„¡ ð  €ó4ÃH°ùŽÈùŽåùŽŽŽ‚`ˆ`€ó ÍÖÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ² ‚¡üìI‘,úIŽ

 Ž
¢Óòáð 
€ó ™JÓó €J†ô\ƒJ
‚`ˆ`€ó$šJÙ-$¨J5¿Jý1LáJ9;4ýK°ùÈùåù‚`ˆ`€ó±á…ÿ4çL°ùÈùåù‚`ˆ`€óùÿ‚¡ÌŠN®u”ÀcüªN8­N


 
®u 
 c cˆ¢cµ
 `£cçg `àB¤GS

óÀ ±N
$²N± ¸N4üN°ùÈùåù´ìóÀ   c cˆ¢cµ
 `£cçg `àB¤GS
ü¾P&¥˜˜ã¤ ÃPƒ£ ÆPðu™Àc!üëP8îP


 
ðu 
 c cˆ¢cµ
 `£cçg `àB¤GS

óÀ òP
™eÙa$óP± ùPüS+㤠”Só¤\—SçtœÀcœüÁS8ÄS

˜
 
çt 
 c cˆ¢cµ
 `£cçg `àB¤GS
˜
óÀš ÈSš
œ™e$ÉS± ÏSüÒU*žžã¤ ×Uó¤\ÚUçtŸ·ßŸüƒV"†V
š
 
çt š
çt ‰V
Ÿ™e$ŠV¹
,VüÑV#¡¡ã¤ ÖVó¤\ÙVçtüùV+££ã¤ þVó¤\Wçt¤ïߤü«WA\®W
œ
 
çt œ
çt³’¢ ºW¢
¤™e$»W¹
,ÁWü£X$¦¦ã¤ ¨Xó¤\«Xçt§»§üÎX1ÑX
ž
 
çt ž
çtø’¥ ÕX¥
§™e$ÖX¹
,ÜXü®Y&©©ã¤ ³Yó¤\¶YçtªÙª¼ÛY,ÞYŸ
 Ÿ
çtçt¨ äY¨
ª™e$åYüŒZ%¬¬ã¤ ‘Zó¤\”ZçtüÈZE<ÖZçt®®ã¤ ÞZó¤\áZ
­™eidxÁîZ!LÝG,áGÄÊ·¸ÀÁâ$ Ô¯²T 㯳û,5 ¢¯´¸$@ Яµ¤,Z ¯· AtomicPtrÁL ¯]¯¹åÚ „įº® ¼À¯¼ú=Ó ¢¯¾ÌH$Ü Ø¯¿×ð ¤,¯Áµ õ ¯Âž ë1¯ÃË=Û ½À¯½Ë¾À¯½Ì=榿À¯½ÌÀÀ¯½G=í¬ÁÀ¯½GÂÀ¯½F5ç²ÃÀ¯½FÄÀ¯½×5Õ¶ÅÀ¯½×ÆÀ¯½,  òõd. çÖÙüJ ÌÏük µ¸¦©ü§  ´ ê wzhkY\ü¦ * ,¸ ¥ÅÆÆÅž ¾  ž Á Ξ ¡x`D!β+6ûÇÈÉ1368¬ý ˆ ÄÄÌ™ ,™ ¯ÄÄžëf¡ˆˆ¢ˆl }.xÏ