From af011e1e57ee51e1546196bd013eba2c112283ab Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Mon, 2 Apr 2018 15:44:04 +0800 Subject: [PATCH] auto commit --- notes/Java 容器.md | 57 +++++++++--------- pics/8fe838e3-ef77-4f63-bf45-417b6bc5c6bb.png | Bin 0 -> 20480 bytes pics/c812c28a-1513-4a82-bfda-ab6a40981aa0.png | Bin 0 -> 22528 bytes 3 files changed, 28 insertions(+), 29 deletions(-) create mode 100644 pics/8fe838e3-ef77-4f63-bf45-417b6bc5c6bb.png create mode 100644 pics/c812c28a-1513-4a82-bfda-ab6a40981aa0.png diff --git a/notes/Java 容器.md b/notes/Java 容器.md index 2a05225b..b83b389d 100644 --- a/notes/Java 容器.md +++ b/notes/Java 容器.md @@ -31,7 +31,7 @@ - HashSet:基于哈希实现,支持快速查找,但不支持有序性操作,例如根据一个范围查找元素的操作。并且失去了元素的插入顺序信息,也就是说使用 Iterator 遍历 HashSet 得到的结果是不确定的。 -- TreeSet:基于红黑树实现,支持有序性操作,但是查找效率不如 HashSet,HashSet 查找时间复杂度为 O(1),TreeSet 则为 O(logn); +- TreeSet:基于红黑树实现,支持有序性操作,但是查找效率不如 HashSet,HashSet 查找时间复杂度为 O(1),TreeSet 则为 O(logN); - LinkedHashSet:具有 HashSet 的查找效率,且内部使用链表维护元素的插入顺序。 @@ -47,7 +47,7 @@ - LinkedList:可以用它来支持双向队列; -- PriorityQueue 是基于堆结构实现,可以用它来实现优先级队列。 +- PriorityQueue:基于堆结构实现,可以用它来实现优先级队列。 ## Map @@ -80,8 +80,6 @@ for (String item : list) { } ``` -> [迭代器模式](https://github.com/CyC2018/Interview-Notebook/blob/master/notes/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F.md#%E5%8D%81%E4%BA%8C%E8%BF%AD%E4%BB%A3%E5%99%A8%E6%A8%A1%E5%BC%8F) - ## 适配器模式 java.util.Arrays#asList() 可以把数组类型转换为 List 类型。 @@ -91,7 +89,7 @@ java.util.Arrays#asList() 可以把数组类型转换为 List 类型。 public static List asList(T... a) ``` -如果要将数组类型转换为 List 类型,应该注意的是参数列表为泛型的变长参数,因此不能使用基本类型数组作为参数,只能使用相应的包装类型数组。 +如果要将数组类型转换为 List 类型,应该注意的是 asList() 的参数为泛型的变长参数,因此不能使用基本类型数组作为参数,只能使用相应的包装类型数组。 ```java Integer[] arr = {1, 2, 3}; @@ -104,8 +102,6 @@ List list = Arrays.asList(arr); List list = Arrays.asList(1,2,3); ``` -> [适配器模式](https://github.com/CyC2018/Interview-Notebook/blob/master/notes/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F.md#%E5%8D%81%E9%80%82%E9%85%8D%E5%99%A8%E6%A8%A1%E5%BC%8F) - # 三、散列 hasCode() 返回散列值,使用的是对象的地址。 @@ -171,7 +167,7 @@ public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, java.io.Serializable ``` -基于数组实现,保存元素的数组使用 transient 修饰,该关键字声明数组默认不会被序列化。这是 ArrayList 具有动态扩容特性,因此保存元素的数组不一定都会被使用,那么就没必要全部进行序列化。ArrayList 重写了 writeObject() 和 readObject() 来控制只序列化数组中有元素填充那部分内容。 +基于数组实现,保存元素的数组使用 transient 修饰,该关键字声明数组默认不会被序列化。ArrayList 具有动态扩容特性,因此保存元素的数组不一定都会被使用,那么就没必要全部进行序列化。ArrayList 重写了 writeObject() 和 readObject() 来控制只序列化数组中有元素填充那部分内容。 ```java transient Object[] elementData; // non-private to simplify nested class access @@ -291,7 +287,7 @@ transient Entry[] table; 其中,Entry 就是存储数据的键值对,它包含了四个字段。从 next 字段我们可以看出 Entry 是一个链表,即每个桶会存放一个链表。 -

+

JDK 1.8 使用 Node 类型存储一个键值对,它依然继承自 Entry,因此可以按照上面的存储结构来理解。 @@ -342,32 +338,35 @@ static class Node implements Map.Entry { ### 2. 拉链法的工作原理 ```java -HashMap map = new HashMap<>(); // 默认大小为 16 -map.put("sachin", 30); -map.put("vishal", 20); -map.put("vaibhav", 20); +HashMap map = new HashMap<>(); +map.put("K1", "V1"); +map.put("K2", "V2"); +map.put("K3", "V3"); ``` -- 计算 "sachin" 的 hashcode 为 115,使用除留余数法得到 115 % 16 = 3,因此 ("sachin", 30) 键值对放到第 3 个桶上。 -- 同样得到 ("vishal", 20) 和 ("vaibhav", 20) 都应该放到第 6 个桶上。("vishal", 20) 先放入, ("vaibhav", 20) 链接到 ("vishal", 20) 之后。 +- 新建一个 HashMap,默认大小为 16; +- 插入 <K1,V1> 键值对,先计算 K1 的 hashCode 为 115,使用除留余数法得到所在的桶下标 115%16=3。 +- 插入 <K2,V2> 键值对,先计算 K2 的 hashCode 为 118,使用除留余数法得到所在的桶下标 118%16=6。 +- 插入 <K3,V3> 键值对,先计算 K3 的 hashCode 为 118,使用除留余数法得到所在的桶下标 118%16=6,它需要插在 <K2,V2> 之前。 -

+

-当进行查找时,需要分成两步进行,第一步是先根据 hashcode 计算出所在的桶,第二步是在链表上顺序查找。由于 table 是数组形式的,具有随机读取的特性,因此第一步的时间复杂度为 O(1),而第二步需要在链表上顺序查找,时间复杂度显然和链表的长度成正比。 +查找需要分成两步进行: + +- 计算键值对所在的桶; +- 在链表上顺序查找,时间复杂度显然和链表的长度成正比。 ### 3. 链表转红黑树 应该注意到,从 JDK 1.8 开始,一个桶存储的链表长度大于 8 时会将链表转换为红黑树。 -

- ### 4. 扩容 因为从 JDK 1.8 开始引入了红黑树,因此扩容操作较为复杂,为了便于理解,以下内容使用 JDK 1.7 的内容。 设 HashMap 的 table 长度为 M,需要存储的键值对数量为 N,如果哈希函数满足均匀性的要求,那么每条链表的长度大约为 N/M,因此平均查找次数的数量级为 O(N/M)。 -为了让查找的成本降低,应该尽可能使得 N/M 尽可能小,因此需要保证 M 尽可能大,可就是说 table 要尽可能大。HashMap 采用动态扩容来根据当前的 N 值来调整 M 值,使得空间效率和时间效率都能得到保证。 +为了让查找的成本降低,应该尽可能使得 N/M 尽可能小,因此需要保证 M 尽可能大,也就是说 table 要尽可能大。HashMap 采用动态扩容来根据当前的 N 值来调整 M 值,使得空间效率和时间效率都能得到保证。 和扩容相关的参数主要有:capacity、size、threshold 和 load_factor。 @@ -445,11 +444,11 @@ void transfer(Entry[] newTable) { ### 5. 确定桶下标 -需要三步操作:计算 Key 的 hashCode、高位运算、除留余数法取模。 +很多操作都需要先确定一个键值对所在的桶下标,需要分三步进行。 -

+(一)hashCode() -**(一)hashcode()** +调用 Key 的 hashCode() 方法得到 hashCode。 ```java public final int hashCode() { @@ -457,9 +456,9 @@ public final int hashCode() { } ``` -**(二)高位运算** +(二)高位运算 -通过 hashCode() 的高 16 位异或低 16 位,使得数组比较小时,也能保证高低位都参与到了哈希计算中。 +将 hashCode 的高 16 位和低 16 位进行异或操作,使得在数组比较小时,也能保证高低位都参与到了哈希计算中。 ```java static final int hash(Object key) { @@ -468,7 +467,7 @@ static final int hash(Object key) { } ``` -**(三)除留余数** +(三)除留余数法 令 x = 1<<4,即 x 为 2 的 4 次方,它具有以下性质: @@ -520,11 +519,11 @@ new capacity : 00100000 ### 7. 扩容-计算数组容量 -先考虑如何求一个数的补码,对于 10100000,它的补码为 11111111,可以使用以下方法得到: +先考虑如何求一个数的补码,对于 10010000,它的掩码为 11111111,可以使用以下方法得到: ``` -mask |= mask >> 1 11000000 -mask |= mask >> 2 11110000 +mask |= mask >> 1 11011000 +mask |= mask >> 2 11111100 mask |= mask >> 4 11111111 ``` diff --git a/pics/8fe838e3-ef77-4f63-bf45-417b6bc5c6bb.png b/pics/8fe838e3-ef77-4f63-bf45-417b6bc5c6bb.png new file mode 100644 index 0000000000000000000000000000000000000000..2e53fbe3d1f2fefe20637d9e406dacd542f649d4 GIT binary patch literal 20480 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 literal 0 HcmV?d00001 diff --git a/pics/c812c28a-1513-4a82-bfda-ab6a40981aa0.png b/pics/c812c28a-1513-4a82-bfda-ab6a40981aa0.png new file mode 100644 index 0000000000000000000000000000000000000000..b1142bffe14337af9b29917b9f60989b81bb98fd GIT binary patch literal 22528 zcmeFZc{r5)|2I6OqD_`aLRqs!DTFL3*>^(LvSk;^Zn#oimdKtgLk!uoj(rr_mm2#z z$};w`%?vYU<~fnBuHWyzpZh-U=YIbC{?XwW&iSnG<@J8OUuU7(no6fnTsQ#&fljL^ z-_r$wj!=R?6b;nJfZtpaEQ0_)C_HqP6hK8i7Z-pJRCaeX?tnlgQ73mF9R)tqxG5WZ zfIw%O_Wn_{x_-0yTys#-X+h5u9PIn*shcm^`4X=;xXFFBoE$(nA9#G8C!Fdx&p95 z(D~P#`#=8v&yW8!W)XRIpgjo$8A8Y^L~EpN}=N=32w z+jF0Es8p4qZ<1bU_~uifelt73YH{^&c&;kZ9W0UiNX+U4Q#$8;Jz zQIbxK!SuTJR&$nme~j{N4MyJ-yhv)@-<&vc=@0&rKwIx*baO&AaNXSmGL z(Ez8qXZMR?EX&<#RB|()@T@*qT2LyXr<-dY>Zg zFP~=W7`6Gs;^JEg;qeWmguDXVCcLLDavbUS;CWjTcxSx0S*R7g^LlAf(yDe7m*{Pj zw%g6R(SDU2@WNWM#oue=s?TS(%~8JD#vdLTGIk+^@w&DWuB_?D+r2Cnok{iiHmylt zz^-zpvUzE^$d0()%E$Dp@0dw4uRTqLQ166HC6uwK8Uye;gaTNV{UtEeLHBNfR4w)C zVvJTDttCc&s5qUt2o?#T|G^t$l)vu_DTSAMWLjr(8CxiE0vD>b^9 z=;C@i-otN!2K<+=q3o`NSmm3=_HMr^!baS#DzU+fR)jc!oK4cN-MN!36)2n!UeDS! zeItQTY~1m4glvs4DeMQRqwPavg5jX`R@Z6tir4J8>lYuPr4SigxIc0735A4i+zSy6qnc{)qY}9~(0}oAAb;aFknA`2G(iW-`aV7^nSY-d_x~HL&L+`Xoy6F9l$OvQN*92ZCeo0GE+-CLdMtYP|jJ z<~TEA)9jt9gRJ#$h;$K^Q&UsF=s>#X=qq0W3 zX_4J+EX2xZ%4!S=&Rv5hupX1n9*UbCij9Fb_>U>c{&%0}AF&!nMa}O!vE%|0MeDwT zj1unj_Ecc=Fi$~6SO^i(J;|S1cbi^5_c0>6c;U=qYw?xj2EiKvik7e;I#Q$ z=Pg^m#$VXfjXdxPCM}xj)9deyBCo#=P=D5XvC^B70!8ryhYcs*qo0VK7v;yO*sco^ zE%i*tG0~5NK0mBfsW_MO)nq5W?x|Rc3J@xdWxnrnUe;<@sC&$?!@2gte5 zIb`tq8R>8K;z(p=%qA>zu%?F(Qj|CVcN+{QxANPyE8OGzDEXaXd0?^er^F*O)dZ_9 zFA?~odXMNpRx>h@c=f}}rPo?nX2q!_n1^KXJ83l;P93T`ez#@novQOBk5^#2HQU+n zAPFd2<_o~n<>sIq%$U8jAD{5Dg?07%)1B6fr0d_=JcfVjP^G|HiR@!4qeyK4B`50RSA-NJP8HgTKDTb_f11047mai|-=+yg0wn?8alDTBp z5MleHG=XD=t&t;P!mmj(4G8(BQ^Rx{Pp|KyBDR@=p%1t z9^3m-YML#Wo__J&rtWU6dI=5AG8R%Bi=_y}OzOE8Hs_yWRNX$Ftnk!)B7Dj{o1=xc zeQ`Wi4p{q%RuXGLqMilbRYZJ0{HaFjQSE9zsF>{0SWfU59BWWh`)Gx2Nt$`NE^O-Z zg{@5Bfp4nsWQZ~wH)eA}WHQFl7x!3V_Vd-c z5T%-oa8dKS8#K>N`}Z)^gNM7VwHJZavu`TU`0iPhcn<)mG9o2KpmOh+)T)jrFZ&0y zG}KMTUgdbT(UF_%uBp93gGA6Sc5XBm2Etx4R9yGlK+3|5`P8r0H~(@I2hKu~>IGbi z4vh%Ak>TwV_7T;_k;pRS2DCO)NlzgsTBor=#N_1;YNk)(@nSs@^ zO32+B>NdLy_w~3RxHiG(tspl%j@LFH{`Bz7u3xZVP{>+`Yn2u0jtg;xVP{4`^VL`( z%|Ni%*3b=i$54joZ{XgZ{2PIWKWLV41$#iEaAtQc^rG%`H@L^GwRWpLP4lCbX6w$| z_iu|{B_wONnno*H-k=vpm?cn`mu4##f|^A zA%RY}{SCci4DKLa3|43IjiE_!qZNO?Tv3*9gG*XVS~eLCYOFW5==0 zy`lCZ1s3Na7jd7MHikiyB~Z(PEkc(MET)%sqn%tkTBC4(aIE`sq#@t<^;#V({iv6p ziatY<-CCD-i94oN6TS^6AK9mAR#`pQ+~{OU_S?uo&gAy*nfdlG-Pc~aHf~wPOI_2C zeOfNA9xj{z5j*1!^v;iiU@NXDZ;_x5Nr`nU0?}i0S{FlP=L+K1j%!Jy&lG|Q@wfA6 zXF^}kwj(db)7}-Jkm?k*^>q6Vc6}tnj##798aPQQF$b&@8wvAqBZugH@6I zMhqR_FhR3k0?ca-5&wrQl1=OI~1ZD05P_?%c z2&CQ|P1|Bw`dZ;XAO3R&|EG2^-ufz(0`x9C6BO~e`S?q3zLxBxAWPv$%4^3MI4-?_ z9|wVyD9*nKrG5Juc?1-6@L1avngZ0Q18TASdBl1R2Ler90a;yJrx4xt1A*KagRZ~Z z2C?kQfIzoSG@e)Y4?0C+2Z1ggwLHZuD}M}33j+OT`2X976CApVgo_{p35A;m_cP$f z>x&y`L6=DH&V4@5NbxSOp}{;2Oxh_>cuT;g!xjRz8bF{M*98B%eueVdz-(t?UlbU2 zw#uURXe03<`XuPukuuKaGisNE{PFRDIM;M-ZwU~nOMy;asDzQSZ7#s@zx)RFt(KDU zG3XktBB-R|TUP7oSdMqr8D2-PG=nVJ!$6N6GgP8jdF8IXvAC0c_DE3D70SOWUQV8~ z+&IFpbI$t2bpr5Ze zL0sO*b5j$bG94=AZ`xF#W?+<-Z)mDD7tlWso#kRMgvXOHgEk73N^-A$Msmvk1$_0A z%N5G&3i~q$z5S9w4f>lkOg^GY(b9V(VRuOm%$YSm-+D?h=*hwP6m-}duxH0}LmQ5)ah+reGBzv;q2G#A2x zEQC8ovO~Dv*Ub1KS2|2+-7WFjQ%3NSs-Q5M~kcG?IkTGxp!0>39}Nf)|8vv`dvan80iv zv+`hs|JpGO;k=qlIqy!O;uPt4E%d%~zO$+^JU>*Ae+2UhADFD?zB0BPKvekG8Ex|{ z0&v~-A%_9MC9Y^QaT5miR4^wcrOh;O54ppRc7>e_b`|M>4qeE401tEJ0iVM0)y~Xb z%}-eY=J^mIlV2%zF~MYVjL#xQ!-32!x3xOC30-eP6$7@4TKl4!Pyhqs=Qs8LSIW;vd1BQB6<`~vFCg0Gxcih#xG zj&+pyD4Eo>Xh)i|s-88ZYUqpI;%q?Di*AOICiAm?!1%1^vU<-q%*U7w-eS#i-3WP> zOU4RP4w50cq~#Jx+|}~9Hr6muP*nzXGqqw6)oH~>k)Gxf-}wHIG`2&z4DR;jN|6#H zYERACQdQ7?OHn5M&a~}ChBelY%PoZK!A9mJXrQOB!JuF_mK&UT(Z74r^`}0fEiqSj!F;o}iyJ%00nsMNTt;^fTQJA(+*uec0B2v_$lKi9TJifLAfi<- z`Y!3x-tF{H>&oHQahTq|BGn#-jU_t_d?6_W?DrsY$?!)X9Kzs^J?B?ojO>+g5ORP& zo_t!3eQh_h{ZU2-7hw1^oZUy#?Bg_M}x z(0|#qCY`cVdzuq?Or&^G#eFH=W6XHLuSOjFb7?il1?K9}V1W;O9=N;dl53pkGccJp z&udNKki#xZa3u!jge!{5P^8%pSatfFsTb8}C(?_}q)NC=pEk1=mCLEHSlv0Acdsrl z@q!QU57^`bT>hj8gCyS=X*-eV@FjKAuTyPZv5^(Y`8NKGqC9Fam#x&CTuNkefp?=w|^Aj!r)<0@@CK@&_rIqjSU=k6Vi&3jZwuR#kn05Bw?w;}=uor-YHp?>ZDR z|3u&=qiA()t4w*Wg3u%*=MZD^{MV1T)H&=^! z`yrUlk)h{ynisG_P5hPA!xkd$k&RuCFs?UmIsQyEr`n2v)N#Hw$Lpt2U8Teh6Tuck zr1V7ft6MTF2l?sJ{l6H4PcmzDHXI{%)S5pp(}*E@h$dE`k5pgtR(}sGNE8V8W@udI zlS2+9IwPt^NamrVQugY(XteQ{SYb+VYWyk+HWG_m#OM~|Y8Q6Q4YkzjM=O7{In7n3 zbe+kzUP-XVHsg{d7aX-ZvLAY-sMxc0vE_8Uv0oV0vm+BK7VX&IC-TEN-ITNt;oE^~ zZOXNzNikjAm#T=mr5ndk@uYhznv(d1s`9+OxTP0}yLy?C0?ud*FnRAKpqgzs=bio?Zy!-JYq~AiM;pUT}c0|H4V}eYohh&e<8ATB2 z3y=b%W5VS<-{|Mk*gBG{PQ7`fsuWw#m}9ei#}}D9J=X7Bff$w*I${+odei%1%p3f` z!i5ouIG>8iw3#85O*%h#FiF!dSFOoDsblmY)D5A4Q0MtXROWMBTFx8!=i6HN*?N^=9GZur2j3lp}g`glj@SNbgZ zurRekr_nyHyB4-+!z%}8)uOkEOMPqD>xa|XDVTWwF$YI*(T;S@jn8rCTixWFQ6yFg zR8Y@*oYD17iYB9|ceh6#?Ns;{4BZ}!WhZ~(JLwwNz>iuICT5sQ5~>X^Zm7R2jD2bF z-5cXScS2Q4F3s@hLt-i%pSV2Mr2LKZt*}!eN$mxFFXq!t>Y%3pw9$13!fR)m6EZE1 zNk+vb`MFDSd?sdTldoYlaPc`o97TYl?d(=fRr3aI%qw7gH8i<$vgi?X@F_OL*AF*j zC@Og?(u%{|ces4{bx4SJCtVjgV|OGAiSE53+B_c=MZ`ALzvN8n;PPE!gHvK-Q1?gm ztJ`+!XQA7iQ*T`9+Eg<*uZc`xe0TBwVX+9ib0t=Yk08+4bs92RQ0dS0c05IiLX)(ZR-HbjPut97Gf zrif?FtLpa#8xGp&tRTTIk{c&~MUSi*&QAfihzD`a6N}ke8LU3yqQY;J)LHOsKGfg$cG~#)cv~_4k7XUNZ#=?|^ae72Axfa2UbQ5d ztzqMagbPWpz4a>0>>(rK0GMC6Z<+zX2pLy zF^qJrjJXy+OF+Bh4Ayt#OQyl3Tj1)qqi83GaDkiH-YmIqPCrjWRJQ%GxC2aC*a%OJ z-(aRlMJrjvyjbwK(ckNtF0+J#YaiwW9_HXW8gRxKN856uhv5mrM{EO_12@*ZFL1(v!gpn_ld6!YmEda6IT^~5N%&?ZJhC?U-W(-K_YCP`_il@GScDNpH({Rw5JsGs30rp`)~jpyssp<0gp zdlQVR{ug4;V5YD$?tax@W!mnmIAZ*GT92wOsV~+ufIPHf*c*P8@~f#>n{4RL(}it) zaQ!wSy~Rt-a;um5E@5$6d%rhHo>YX}LtB@BH103Kn;Xz`-18NU<<&-R4@Z~oR__FeRZpx5e zYB3eXW`aE%RtGsc;>#d@UoZD^k4qUFoqLlIRmwNy!Qt8QY7v8okytSI1%To{EA|K*h?Or%r1ivkh@AA*d~+kf z<%J!6n(*;OJ1J2I@^Vkk1(ZhB=3}klO)&ft z;RDhfBq(1^GGKkHD%I|MUKZydw2Vu)Bp`58<&~l2(d-j%h&L8!Z?by#+0h5yAP@`+ z#{{~SPV9~u^MmQWRf`UCb*Irjb9CY8CZ$&%1xmhu4k=88GQ|2d=l`-~lW!I+k{jZ@ zY&I=B_8~!}#yasrKKZzJcUy(ryw+xgT=jM!9@{C}S7B1=C)e-PPd?K4f$?8(_tN7~ zMLO+RqM>*m#46s2++^I#$J~1h<{J0HOlA-AFJ{D$vgT}ymYV0vFVeQ<#&}>UL|gL`3;W(Q%O%4ph8XXn)-o5M zRXtnKkh1nT*29(V9Y;JaZGb$RPlBCd>fxWlqvli0m!>}>|zohRl;zlW+bR22% zq}2Q|op+{MP316J-3Wbicft;t;t$UIJR)~_3GAoPK<)v|NhEPS)8^UW06n)iR4A} zDURzc&!gGmBFxr*4_ulEQXid7uW{w9zc^oTk!+0JNGEVCKR|+CM+C$ZWsU$}9t>%~ zvxub$`{=xp{O)#(SadIAyv9x84K5@l!1?uU=qfsZk1On-lTgt7%;~0ee{`w8SBDEz z+&c$$FX=&Lmb#XuUDToakR1~yFSS>*o1kS^^D!r9M%Z^IN64d&QN9VsbIB0ek1NMD zg+2*=3;~FcO_wCM$)n#Cn`*3|(5MA$NuI>Zo`kEFl>RYYBydfM!7pm4`c*y1b*Sfj zUaRdpB=Ow7;=dQ$=@c)y3*=Jw%MNkDWc$$}8i~rtcqKGfn|MBgmw}-0j+zpt;(&&{6IX`}~Xhx6E zNijH%DecM2U$lj8sG_B2K)p(QP)(0L;1pZ|fK${PysuTVdE%stuZbPZUpDA&5}jR^ zKoqGeV6L;MAhl4zrxs`sX*y(2!h^k1w15-WAi2&Ioa}*^C?MAtBJj~*8X&|C^R|;D z3CPO82VwI4`sP3!=7=){XS0`SB#CWd+rKza28yDjh~OcH&DYk1u}ota($_DXJ1`+e z7=zQ9_UO4Y#V9~2uu7kyQJBP#y24qiYEDwaN*{%3%4A|ODKi&8ALbQ-Lh5`Nmon95wmPs>FQFzOcAum_>c`4h}MuyMW1dl@gZMEo>r#T{iz6w1Jh)WfVelzAQ{0@i4sjo}- z#K+J=hwri@t;SrclQbfmmm{iN1vi|9agpccgBokK^mPW?LZ?fXXYZ8V^`(rDYhWEg z-q23rv^*EISnqJVsZ>kE^U1B$K*Ptt_BnHP!-LY^MHw^9Pl!f0jP}|jEsUm;VlCQ0(yPExl!-+;j&93 zt^AZ4O$+U$ze*C0%LubU^2j7xQ*168=K3VV<_-@x&iavHjnll1f+s@ihmei{W0*WQ ziwRW$^iEIwi`~jt#Y41~o5g8ayac|4lEy%9!BlVtUK}WE|TsLz$$J(k|e$NSOstfD^J7k+XHO4TJq}Es1Y=%YH4*P z_T>Q8?nKJc7PyFSu0ogGV>-B^hjxl>wrb5XIQO>z#N!NQjy9e4(?n|LC!Mn2B?TFS zl|_rFcYWZVoG#9HRfS)!t9&^I$d&hbUtIuie@)XLQtk_q{*jhw9+0aUVEmm~vool{ ze_q-dVPrC8;Ei%nFc?S^JaP3MD3P{%Y!$dm{yN4`&a*1n=P2lZXXyBcR9nq;y*2m2 zs>cw9glayniQKK@VLT2?S=Yscm>bq7d%NqNnHb((5OO!xJ`YT6#;IR#h~MQU0BiiP zPbwdf&-(Z1j1qA(LuL4EfWT2k0J>PS}` z6uCevHFlMufx~TXW-QRBLW;0?I&il@sfGl3nESnxGT+h0?=!86pz9%eXgL?`;aqxO zgK_ZY#n_B%vMR$<+EfCPI#($j6y)BQ^KKqT!k25!PyiWhV7%tv@EKVc&4F+GN1g7cDBZ^t?$w?t-$3l{*hNGL(| zV_!A7ckcN948r5>91!F}JGrH%Z}b~Wa%NrQm6V4TaggOZk{!X``t+eh_jc)#3ehWO z12iLBqsFKumg@CD)iW+n6WTxaySThf)OynqwLq9*3Rd`<-nc@ZPn_;`E|+z@6z#2? z<}1u&1?jd%mxYYurx_Lr;%y@${*~bGJhlDs+NC(@&vJqRTCQ=glOTck%mJBhv%L;;`m zBVN@SYn*G-FB7xwoQoRGj;lC@LO^P>@)s^+h!Uzp+nhG?Zw#1Y75Pv-`8#7s(k<7q zLKvnOcDIFTJH3npE+uFe%gUoejELBY4;B5ReF0G6SG;5sa9eg3S$LV^<=&1iL5CP} zd9C_=xRkk|R&Hpm7YA-;^a}&|ad?o-tM~n(DK^qK-1(s`(dI>ZmjK?TZdT5vA5JdE z`si6YC(*l(n<9-l+tWWU?L|`SeXv3E97x#oQ%O6HZBEv zdHvjZK5J>{=cyx?iD9`&6zh2GX0dD8sutZ9_(w(xuK<5vpSKl4Pt>s1BOMXr(YLttHcWn~$_p~9hHZuqd&!Ab zdzRjLBT?tY|JNbfq<_ijM#8iXe6G=W<$`iaPI%xsg>xTj=Edc0> zL5pLN>*Ga%$9;tcOn4-3vgO9yr87zz2ZLYx-sYY~)X7}$dFVUj>ST^04k3S{f0%I+^!?6M=@;ttTAYSNLyM2 z%(Ji%l&~war+&o)ZhAB|02VwQ+@mkHC%I`|)MFrZi6#O3UqQQ%72(sV2#t?0~J|%(PIm>vWq$ukV~%p)>|r?L0zC-(D}G1#?azB!*ohM>Q?bE z+;`F=xyNp0(7^iyGX;j6>3Nm3Y;#jCO)D?7%1aJ#UQyJG8e8jZj83j`&dD$w7TQ9> ziPwu?Vc^H0@qv{=o7G3E`IweIl#igWqK8?AK9q9}vWaj8cu2%%2T2Q{J$QF8tD;H9 zk`LkL;<+lH{^go^{oXyLsmDd*bf?>li((TWhsy`g$_>ITib=$~Bk&i?+Efozv%-R; z?S~k)#zWT)^SI~XuV1syY!mR@lR$qa-p)Dzb5}QC&K_n-_erZ~07Z8jV_F-r5DTt- zuH4kr+g9v>CFsPz$=QOhkXXU1G1G)JZJZeoT(+W3`lzN3|LiCU331T=YL$5#8dy}P zmLv7FHLf9Rfw1E4)+w;Gkzq$pgM%dx5kTmDIyZ~cIAPk-#G^a)?rCgx?kU1_6yc4i zp3)SqY0)gC^IBH1bMWkKipP+%bpSQ%>p}*gA-6-8jZ=mf`xQz-o`;I^8vf)`(U5t%So{JwRZo$8E znJv&V>JeNuzBr)!w#0Tv*jCIi#WgbSx)E=e5Xtv|zr$zGT^l02$$Or?O z9!X56j$_;J1|H;0ZYjknz9cqv)ekj#uUtkMrVB7wiThAvjed!&mRZ%`j)?LYBK>y6 zn(1(jmb+mUjBT=Xqa=R{xR)G23K{VqG^+Po(9u`U1%m@S9Stwl{7rE~VH=0DRNF{R1xEDrGZcYb&?Z=Rd}tnCDrO?(J&funcx> zineF@W_Xu>dxUZlFwYZz?m$}WW$4Aedq&#Y*~*McT`B-F$MKjE<94H z;X7_voLD0xBkG1pBL-Xhszg^cM4-s0nT}-gDCZK!<~ajxyIyZS_YI5L zRj{#3%BaZLP+@72yFr;tc-^qr6`af%-_MyY0Z$`2JiwKB zn=o*DEPezX&c0L8u+m7AbLrM>x-U$9{_*;XVzv0F@Nom0Cr<{Dr~-d-p$D?gG_DLE z0}GAo+IEQo|IX}tQi|Zen*}IoM*5|$$N_PJqs&9g_#;NbO+<0Ri~1C2J05fStotO@#<^<#Jq#M|bZ2RU36yDXsM6!^ur^%Bh5 zEmD5{pKHj58fZLG#owE9f5my0CSIFroCZ!_Sryzod9Rp^n?%YmPeo^$zQ>KbyyVn& z`n@8GFnK_w!Wp9*Ca-6RwFU?80^Mlc%y9Y1(o1ZA-1EIW>Z;iB1<3^s=hzCob?d$T z?h==TI}Xmrj33JiGG{naYWCff_@ZRJf!WseEaG~{QV72~Qv$@tBVb&(#i(8&ji!T1&BTsk%Anu|3 zdWbOT>p9n|oJLIrJqcQ>$lVf-s$_Jb8z}~a$ z6`=oq%egm7`sio=;{*IG-(ok$yk>TXRqP)yysr@_2H4JaIHMYTs=4Y15n)!MKWisc z{s(Ie@+!ZmhJPPhUT@!!f}LX_?}E6IEwBB={HcIM-(p|{LqGsn^0zO$(F41S4 zP#8LjZUCb4q5bIyQ7*KXqW_DXYO>TUR8Mql?7bOw4Cfdo5B>WY-KFTm+ARw}A$@Lp z#@h9!TqV8+%;{?U_Ke~sK!Ft^1Sr7vWh~0G=Yo%mTALBGG+v!Z8(wPfR#91Gc%_$# zNJQ|R$S2s;3x0}GoC3Nk{bf;MvN^$=XJ!7(NgaZes{l#0L0a|4210=Q-mCCaJd%Y^ zr{z;sC!W#J@aG*~&>W=9ETAbS_Gpj~#OIK; z`m#?nUF7?YX7bI!Je93Ez|iV`x{A=`MP~Q>{A8lB#@eto?Ge7>RTzsG-d#+wriSF-<`@*eXo3&x0Nc9s%q^g3`jXqRrUeIfD z|G{cU=(e~2&alhdi#lPHl;{$GiEWkYd-=%WqsF3VsP@qe%m*(E*Du0ApCub=rIlLn zv<2yJ{m{11OY91z4$!&zCw1x5T{?Fz40JjC5Jw&)wm*vggBtXo^FNRg{n2Lm-;%1e zG;_)y$mWhJUb_ElOh%5qJ54{3CcRNn1f49C?bkXAIt#u%)_O1xNH`1xdiTPP@JkWb zs7MC_d8|2c{1U`f0S0GzCT+#4`6^||-t7RG>)P>N>@T(5;YU!=&4Y3LK=Ky=bwJnW zG8xdNH^7_Zb5kSipttuAMx_NQXHtWLB)uz-gR*p}K#dn~j~xLae$7Dvvi~*u|Lx%{ z(+N0qCkz?5(t%|wZFgn_ComI5e1>p*4&y;v~BPqYVS0K!C2GXt>MQ@^E_KSTGvxTlbuJPiuk z21I*7KbU+CgS?J_E;RtV1R=eS?uj&i?w!n9z`-9T_x=!$`}G~*d_Y2zzaEPM9#ihy z*Fb{a1#^NLuN=xBbuUTlxtgqx-Cv$>Jqv24Py_|(T%oki-OFnyfvd>;Z{kOgJfP$O zo&N*ufFk}uSrnlA2X?l{UIAY}U}*M5n0o{N7HKvDl88N_VL>eQy+boxJ~v#gIiDC*L<7^`tI@{zf3vSU^WIkLABVvWsYx1Th1B&N|1EJ0<(Ot;X$ zP3*CQpa}YWKpmsui<_pAe6!3mE@a7=)aa6yF zO-|$aesm_!s`Ezy025+*J1sWb9wq}()2!MCD&g`!I)=2^<7pg@EuqDn> z`2kB=m`uN&G1mySjq5V)E76B(TFz;T8P}b50><~s zDmHd@ymeJ?a!hU|`m_T%;I1sZY44_*0cQ)+`7JQ=lT;a~agJGr#8wvsaJ0SrY=x+^ zsmFwsO}ci^rIH93m`Y~tO(+n;JQA|A!W%8@poAS~?97na7x%u+`l7T1-wNlZ=#egG zNuUyGAHCYX>~*vuDYgNd<%B2>F_~6ZU9w!gW#FQ&)|w_oKo%RwZGNj$-#Hg7?Hgm> zj5ATVKZ?N>Mb|L5*vyzguJ6N=6zSRdoM}WJX{?yqhz!o=Eo+?{hkeuK{6#?m1`Biw z7BA%LGIR}+o&q|w_()zqe$CF|7h4T_t+3oN2WUxv(Xkd@nRQXJj^1nUVv3F(aZ zxqDj)=UUOxnT=iOqT0hyeSi?st2LeEqnQ^|X7K*~z77(Z7Jr5);E%`M5UyXr8kIFb zT>Fjs1HaZyyOS{Wi0igm{Q=1MDp`T{XBnmNVq|mRVrnYDM#Ls~^i+;{Sx;%FR)pjg z{|z-d^n*A+2=y4KJPFvW@_7~av2u^Gf{TR~5V>_voE~fpCW#aYkdyX6>FQPpZ|2p@ zeAiGWuKV-`(pt~I6=q6ZpjlH+W;dBzdhAa6+g!E$2D&cze<9Iv1|&NDA<`&Z0w8k> zl4wx8B=|Bss7D{HJGclQ>gLM*pc?cm?Ssxk_Z2aI8r6P;4-7_j@GV_NJ5dWDH}-b7 zI|aw;t%SOetYrdf#q2%RIusawj(4fPPHRI6zxiH$U7*`R*VHaP%4eYnhx{KZVos{J zB*s7)_q%u{ngz1_0S+ku0x&R)Bd+Pd*1{< z;ljR-FhF)yGNYp9Asjg>$FCQNqMoT!P4%m-cWH?8qFSaYl^MYyZQ*`8-f{s0sa@RT z)xDIti$ecZMz}at)#dwJMhH4@BN^7%ubmuFttmrMR2W->&*HB2o}ExBn$TxdV``&&kLkK-mzJ`?4X2?J(r2&MP+h zKz;5ym=;-I#XU_J-e#n5o!i>e(RmUEHUYSG-SBj&*5g1^DcONN9o@(EiG3a20LnDd zBMAthL2G+KnP-dh+EaB6P6osuN)u!%pzh z%5H_PwSVz+-zx4In!w+!cE@@Y-MiE{Lo%KwNmqehJ|gv z$4&=ea2?&o3vR-C?{}8_os*}GGbJ&b~Crd zpu3vS7}b*Y2}KTM)|}!@cfWHkQ2>qZs1eE|5_+#H{bMX4=73Zz`}M%Sh|0IVe`O&$ zI3Ksn!#9vB8fPw=<>J@s;S%&--c^@yCSbuuq=ee2+7A5AxE}bQD+KUOU06@8j(F*6 zLf*E2x>0NO&hD&&1AMYy+~CPFL{_1Z7dw-F_W+{{ zCj*0qj!2SgNH;AAvEgNEfW9@m_V!j^k22`LW`yOllyTW9oQ3c3($0hzq8F1%FC@V>aNblJ7$y) z&}#6c2SH0zVvye;v=us=d3*#GRh~QMm}MhGz+U;)3kOB$<|}{ds6JzN=ig z4Xhk_?g7T*S%-4Z3b{s7n6Pm|vHXC|0Mcx3Gv~FOhRG~dc{5ab4%K+Htjv!dDF4csvzEJ&Eb*S%P)vO5ms71|BdoGaCk9-!t#n?1JD_~clc_`3^! zQlmyqh|=|p+7c6L#)7EXgpwsNMfgq1=bW0rj1kuYyUazy0L-6=(xk7w=*X?v;NU7Gwa*!{x1?>Xa3m zyVtb9skK|rclY(y4wYwK!9CnA=$}x;b1wLqI7jTJadBL2@u0}tIi2dC%V1L5blU74 zob{AX1#xHnXu{F>voLBW&Gw*8;UM7)gFJVo>kUtCv~!{u?p-~!p*Wy_?TC%&=r1>4 z%;X&??)Ak!4Fd{C-%_|`!R(zVwbqejdP;Cugegu#ZYFTM=$H3}Rky|rRzrQ+P zQ_5HGMRe%Cz5r*OIIP|-k9Uy6S!YSd1Nwq{&Z#%EU(J4zm?TsuC9WQ;(E6S@e=3vu zW0hJ+9!?eMNjPzT(CB2=6fRW$cd$99LzTdTZJtEyy;6DlJDvWQKJp${3OLF2Lh3Hf zl!QpGp6VlC&0XTQe_z96Q@UG2ypHrV#(i$;ufA+^KYDS%Pab^h?b>fg`=1A=e^mnO zf|NbS!HTP!6zpx^E)(zA@w2QEgKqG__@L0e-n1=QN~k?sYKhy9nA_~gI+lei79@u@ z9hw;ss&@8+i-RcgwvjizoOGOSEU^p4x)1R20!kXKS-A16Q>m;83HQyeEM|HByfaDc zWI0T}Clu3DlHwy<`-cHrEkI-a5HKZYR{%;64s9YP(i>bZJa2eDJ)Sn{YV&(%p$c@j z$oT0P{MA8o)&J( zJ?Ozb^DeH_0x)O;T63X(wTy`WbTbbO1BwwM=FL-;qWtIO}>haVaqh&Bz(`D!#~resll2^WaR~A7Hr9M)cqPGK1T7oo)}49R_eBk69uw zh}dwF2JlP-f7AR%k7c*#fl%0%IJ${=?g=quA&UxBui4DW#>`N<6qiA7|w zA(@o1j10CI-#oV4aqm~_Xs-bJqjz*wcEpo+Yk{8b6SY6kA(j*szKfqYriCA6GU{Qt zgr)gx0wv_3uv&iBcR$>J*uoTudbFpTUC2KnhDwvrCjEBw54u$2nDvF(JA4Gy-&=Js?XcX4eAGRf(Mm==# zTkY@(mE8OZL5;mP9Hv#stf*H|EArq^-k+K}#=CiUlJ?%X3R6mT(v>rugz9;YLw2H5 zV{Rk3*nEsfY!nWILfn&c6k;qK_GP^NNxetcoRZlSvi$x~7mxhAgGhANh4+xUf-BxQ zBczG)_eVW&edLyp<=JxD>MON8{A^Z=>Z?Zp6+yM0?ea)Tv2a$a&K3Xk^PrH>Jrt)S zNSWpSJ2?DrhQ0qI0%TjIC<3FrWJ$w8^`OUyL%&kbx0rc*j}rbBw=<~K)f_)GYf%aB z-MaQ3paU2gZK}i06hLI;a!zTw=b*AADl`Tk@bwQ>l-g@WMU1yikkd@(U1RZ{Vh)f! z&V-jxlVdYj7BJ;gf7K4*Z?z`~Ga0xoU|2+}mRVEW08c&3JN%V&>Lu?#B>AsZgqqWN zn~FOZ#n%w|psxE;M%^5~zSB820`+LNg)u$B(8WT;xQxKvG-BTS*Ea}e9PzvXW1G{O zcicMec&Z-T%G$-UNyI}`D${aG-51^57TPh>{T2482n0s0sobk z^l}yUOA-WBhxdx9xvlSxm3R5Lz!C5pjvLbZz|-0NnN(R+e0~m8R)_1V6)gg0#xk6b zEsUONJCekv3jNh9ir1xLBD0*(oM%qnX0Ab=_$9jlPVFn_w~c7>N+APwh|AeQfux-L zEK1|yukO$j2zHztxg|EF{CM-hlEKb6jqf~)nsMg_W6C$wWW(@~;Q7OJqskaA?_0X; zS4-&FrTo4`uE%-x9`()w8oItNu+rO#mOmh$iSGfzP6se3%eb(sfHH3+mUvWD0>Nvr zND8g9xg*6G47_ywi(vzlo!*!3^2_A9#%BD*hxK*$(2c=|{6BkmWyP1JUpf!Hs*8Nj zwI&4^8&-B--z;8qK63#F!+}#k!ocgPC?jxPpJ`=%xn1@C^IwG)M6Ik(Key9&I@|fs zraRv4%hYV2bFK*x`~hCLIh*}`<+s`8(`nHSz)wz z&V2*!<5~or<1o^{%lqmZ@uTVt8-#$_0+a_Fw6tJ_1v$fyw9Dj=#2B5xxm6G3QsB@k sY#%)6R8?kR=nqcnamSzkW*#*^ns(mZ3UZ>StDnm{r-Y`_{Ew9X0TZ9J-~a#s literal 0 HcmV?d00001