From 9e1c1c51c301c95c2cda81bfbe23289cc883281a Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Wed, 15 Aug 2018 19:39:49 +0800 Subject: [PATCH 01/24] auto commit --- notes/剑指 offer 题解.md | 212 +++++++++++++++++---------------------- 1 file changed, 94 insertions(+), 118 deletions(-) diff --git a/notes/剑指 offer 题解.md b/notes/剑指 offer 题解.md index 0ac7d7e4..1bac6bbb 100644 --- a/notes/剑指 offer 题解.md +++ b/notes/剑指 offer 题解.md @@ -10,8 +10,8 @@ * [9. 用两个栈实现队列](#9-用两个栈实现队列) * [10.1 斐波那契数列](#101-斐波那契数列) * [10.2 跳台阶](#102-跳台阶) -* [10.3 变态跳台阶](#103-变态跳台阶) -* [10.4 矩形覆盖](#104-矩形覆盖) +* [10.3 矩形覆盖](#103-矩形覆盖) +* [10.4 变态跳台阶](#104-变态跳台阶) * [11. 旋转数组的最小数字](#11-旋转数组的最小数字) * [12. 矩阵中的路径](#12-矩阵中的路径) * [13. 机器人的运动范围](#13-机器人的运动范围) @@ -465,7 +465,7 @@ public int pop() throws Exception { ## 题目描述 -求菲波那契数列的第 n 项,n <= 39。 +求斐波那契数列的第 n 项,n <= 39。
Vz64lz>VUBDkq{U=(io>=>WGvwvN1UFY;B^|Y zBW8X=I-=w1IYX`5ifdfV6@Q(5G~!zt_I78CjXhmomerb}4$6tCMDZDkyf4W_=b6b^ zhSGR37(Y~(8PQ#m>~blk+{aKmTlus$hHv58@^h=QKQfnElE-$T^OkbGoUCzP2isNk z58c}4J$tAj>T6mVzW_ENL0~>^nH;=_aAEY8_F@z55c%f_J&r&oeqmAiJ{BI zeXHJIZ+H-n#vLaYd`&0N_1iyDtx#Ia_6rz6te;~M*5OOaAME?}ZCajkPZu%lQ?6#@ zVbeGD{aNv6*u_gq3}ZLMn0YW|JJ{^g3lbnywzHp@`S=uHuCYE@XDCe`-C)l(+8T)G z5G 5stm3{aMZTJ}spGT{%g2k6o zQ_hdaB&RzzrHpka2EDGe^H0wf)-KW?o2?vmpx49j3BAaAvFH6BsXY(6je%@qh*_ jE2H(@?^HUTt=)Dn7gkFHh?;Rt2H)M#(} zukvXwx0d$4KX*|oQuo}lnWR;nPop3W$JAE^x;P1)7DaCQG5W-`Q2IOzE^RaFWx+pf z?&lK(B>wxBKDW|Bes)1ceeoe(Xg93rL9)^~oAgs<$YmirP-yGRw4ZLl@F&ebUJ&q~ z`LJUpHz3~y@8slEDv-;Q37V;K5ot+eM1&|B(krE)N>#(~+T;agK}7|+`ZVaiK{tjB zj}No`*^28o1KMeh^s_Ud zEeS$fy*;b{_(Z4Yi7u@5Z;}i#30aHm%7+E=j+o)PSWaihBnE@(L_-L*`)C zZRDPITdo^IRcDEKLu=Mbn`;nrdxx6viR$}S!KrKtyyk=~Zes|#tf$s(4#Q`3Jf#9z z{6A=4>OenRM~(=(Xt?%DfXa6JOjt`9=fBciGK%v6{_k!e$cCjqo_wEA0E%SSZcd6E zX;dKjRKrx6NR5r#HXEM0(|PrhtkqoV wAyb`f-X%Xg9vi(l^z^ zug6Ex=^?PHT|*v(i0fScBJ_&5NQ R)44JG)@>5ZdR-m{?fDF>tr9t2@A6A_ zt7 FsU_IgY2 z#K>(gBJ+v5Nwy<2fzb}qV_^&=rJDKb)*?HuLDxY%xfuKoqQYh$x(u4dNE&L84#ZOf zwHW_ES8e{@-pJboI$2{h7tM*}Qgq?)NA_W>6OH~l^>7A`@cNg#j|A6)WL=(uN^k}o z=tgxc6=N#5XLNemEznbsW)BJaF)cCEcLYWP61UR2nidTSiBDgR-MuoF588)&o(D~> zvfmPJ#qDxc*d-XTsl)-^S(?Ktd%8-%G;vA^QXU`t&v(kdtmRyynz%sqWuFjULy|P9 z%C_1{+j}?nl{pwI`N$iWtVM&8m}iYCV?f&BD=I1y!=RxZD?`3nZvM`!L&%PUhY#QM zKK7dC(I9Vm4JUu57>0~`sWt1(c4mA}vGkE6_4ba?Vv4+_1#Dzu&tJfZ=wr`MNiX=X z9zP+^rKSRiXxO28GeQY2&L5*fCnQ(4q7O%#C#3sNbvV^j^0!( FnZ{(KtWs@1+vwoH=g*Ql5%O?OG64A=}Ak0 za`;REV+4{n2mFUmQn_c2QZD51rxj!VER*^GY}E&ZNb&+8LvFGsc`O4XV_KNs%p4|G z5FxJ1fjj6{Qg-vP$wNxjL%m)GQGHy6(>M9>MyIgq$|!vja3w&d4;A^OKUtqjg$(IR zm78>Gycf_}ll+k99H7ZIqLSV@BmKV5Kr8#_*pAP*hs~*UBE&IKbK1ny$4LWqLQ$G* zm~ZDxysc3>SNrtKFPBkD1jW7?<%0Twg)6zh?v||%2t`xiNJOK u z)X!3S@YEBU!^#YMz%nyz#X81b&PDhM$r7CS{m7gOTfr2M*<{#s`uLg^AJcoso<1cv z88nxNfol4h1YogGHZ%eA*b|E8JmO=1)O()+90p6(OZ2C{$ItSwftIY0PcB- n{azytvN!y1H~;z75Ogu)WsBe}FZ z#m&O747D_nbdob)#4;#r9^JrYs0QL|+P3V5Hhc#h+fwdTDged-R1xCFMDT)bhP@)d zh+&zUPWPS=R$RSFIuI3N!OGay%rnvO!ZmPQ8aluy03ER3dJSF34qyR6*xW2_N=(M` zQ+j;)8M4+e{a}|#V2HY^SjV*I8dV-uRZyqU>vHs{;=)R VRX$MUM9aut=jJeD8hZ=aqP z-`ls^_&vn-y1#*%pG{Ly)Wma(#NV?n5 ZG(^d8;Mn_%m^sL5qQ3l~dg*f#@2R!HX`* z@s_@d&X6!fe;;YQ;~CL-hV$Tnb~rE8J7)r^UCI^L=z@bd)Lnr{S0R6#q~`NlC);iM zWM?n`meD$?CB>VLz7XN2IU5i!YN&s{jQoAmMnpwPx~WK{rpPNLu5OSN6P~X7)i5PL z?#IGMT%ud{w~{KGlZ73FeS(HPbC%Jzzw?mn-(=F>#kAi8LU?jLfDat$D`rc}vmykk zi740~n)94{b6+mhFNODZ7yCv64)7*O4=7c&GZB&qH?%G@B1o6(7+i2lTHk}H7)G>T zvc3Z}2mh3Xb$_*?!MuE65XSg7`;Olqn7=!rPyNsoTdyZcg0@!g)K_SwA&+_cHdper zwsZ&>lRn9CYqK|T>MNx #YP)ipM`1%&n#TV1%CI=5EF+{gO*PV_Em-uCZ5)c zcu8?rP|m#jQ;i6>Ci}-(;{~9f=P3G{8qK6F|xa#H|6;cL&l7fkFAj!}Yxk)x<7R z(CPW2lkd-Ms)}R=<$NeUg*`)Cl%6y%;fG3Eo<#%lZov2LtGG*lRx;JVD6HTKJo94V z_ZFi_vQ~9dhO{w08GGJ?E*xB;0qKp&b3h ^vLuH)#%kw@R{QE9Bdtu(t7 zJ4abW7#^3lX{Ec+oE|jiXg2uX?TtRx47hV_;9CHP;ytIf-x^T5zNfFFo&&$&3zMG9 zjadhu=HRB;t3e#~p<LZ(Kb>1R5)6(RE6 z=HT_GkKJ8vB9$1iVAle@qPkMKrlaXdX=cPB4M-(}5Tp4NtuO{^Bs~V^f^{TbpB-&l zif-Z2yTj#|#y%9!w%<(e?YXC1Zudh;W`W)vYoZPXkLBJ)WFB#Hq
rZ`u_FA}WTO6(bsb>a zXoYzRw4`Tq-V8O_)IiT{lGd|m1vx>iPK$=!CU7p*Pbv21DZ6h29DVB=O30h 61 zzuZ;-Gs!SLX3B5m_F>JWN+;K}m=EZ2iB{ZyX~^;iyZHyP&kt+J#Fq~*V6`d {rYt*JI8J&TF0uTeE#E7{|bx%h%g%Rv|J`^8078v`fVbUyc@vS&0&BfZ <`D!Bp@nR z(s%$Lpj3L-31tQ5a~94dNVgq-2~R|OMi^c2ov1Fv={4kt?y_WXQ`hXNe6Yre-ir+C zAbLhzol&;}dl&=CD!{LapNrRcJv_nm^+Q|QZbIt|z;%Wxu~5pgPah9k(rDP)trJF= z#4X3|V$8}!G{%(Rft-|D7!d3;>8I8ydI+v Oo2+iX>t1nra}uI1DmZ3SFUT(e&qeO7op2>^om|pi;P^<5Z-}FN3`7!=#Y<;luGT zd@1~MfY{=hRJU=gSd49!G(2hyHM~dDeYi!E=;=NKjGlU|iy}UUc}ST4h )Kj1G z%ZUM`<#MiA2AnFM34)@;;(XWR&n@`sHg&5s(-J{H5eyja@nRIi*anQ-M66)} ru^uX1-(BeC9xef4j*lUEGDp9uqhoty^WO}3 st+eBk)1Q{PyDcOtlun!6vXJM`t|+_vL20wg>rDZ~cP&f205Z8~z7fb^rhX literal 0 HcmV?d00001 From 6478389db1ccb3cbab94c5478d3955ad6e4e7898 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Wed, 15 Aug 2018 22:16:30 +0800 Subject: [PATCH 03/24] auto commit --- notes/算法.md | 92 ++++++++++++------ pics/0157d362-98dd-4e51-ac26-00ecb76beb3e.png | Bin 0 -> 14336 bytes pics/220790c6-4377-4a2e-8686-58398afc8a18.png | Bin 0 -> 6144 bytes pics/864bfa7d-1149-420c-a752-f9b3d4e782ec.png | Bin 0 -> 16384 bytes pics/f8047846-efd4-42be-b6b7-27a7c4998b51.png | Bin 0 -> 12288 bytes 5 files changed, 61 insertions(+), 31 deletions(-) create mode 100644 pics/0157d362-98dd-4e51-ac26-00ecb76beb3e.png create mode 100644 pics/220790c6-4377-4a2e-8686-58398afc8a18.png create mode 100644 pics/864bfa7d-1149-420c-a752-f9b3d4e782ec.png create mode 100644 pics/f8047846-efd4-42be-b6b7-27a7c4998b51.png diff --git a/notes/算法.md b/notes/算法.md index e404a3c8..f0e889db 100644 --- a/notes/算法.md +++ b/notes/算法.md @@ -347,25 +347,32 @@ public class Insertion > extends Sort { 希尔排序使用插入排序对间隔 h 的序列进行排序。通过不断减小 h,最后令 h=1,就可以使得整个数组是有序的。 -
+
```java public class Shell> extends Sort { + @Override public void sort(T[] nums) { + int N = nums.length; int h = 1; - while (h < N / 3) - h = 3 * h + 1; // 1, 4, 13, 40, ... + + while (h < N / 3) { + h = 3 * h + 1; // 1, 4, 13, 40, ... + } while (h >= 1) { - for (int i = h; i < N; i++) - for (int j = i; j >= h && less(nums[j], nums[j - h]); j -= h) + for (int i = h; i < N; i++) { + for (int j = i; j >= h && less(nums[j], nums[j - h]); j -= h) { swap(nums, j, j - h); + } + } h = h / 3; } } } + ``` 希尔排序的运行时间达不到平方级别,使用递增序列 1, 4, 13, 40, ... 的希尔排序所需要的比较次数不会超过 N 的若干倍乘于递增序列的长度。后面介绍的高级排序算法只会比希尔排序快两倍左右。 @@ -374,7 +381,7 @@ public class Shell > extends Sort { 归并排序的思想是将数组分成两部分,分别进行排序,然后归并起来。 -
+
### 1. 归并方法 @@ -385,21 +392,28 @@ public abstract class MergeSort> extends Sort { protected T[] aux; + protected void merge(T[] nums, int l, int m, int h) { + int i = l, j = m + 1; - for (int k = l; k <= h; k++) - aux[k] = nums[k]; // 将数据复制到辅助数组 + for (int k = l; k <= h; k++) { + aux[k] = nums[k]; // 将数据复制到辅助数组 + } for (int k = l; k <= h; k++) { - if (i > m) + if (i > m) { nums[k] = aux[j++]; - else if (j > h) + + } else if (j > h) { nums[k] = aux[i++]; - else if (aux[i].compareTo(nums[j]) <= 0) - nums[k] = aux[i++]; // 先进行这一步,保证稳定性 - else + + } else if (aux[i].compareTo(nums[j]) <= 0) { + nums[k] = aux[i++]; // 先进行这一步,保证稳定性 + + } else { nums[k] = aux[j++]; + } } } } @@ -407,10 +421,13 @@ public abstract class MergeSort > extends Sort { ### 2. 自顶向下归并排序 -
+将一个大数组分成两个小数组去求解。 + +因为每次都将问题对半分成两个子问题,而这种对半分的算法复杂度一般为 O(NlogN),因此该归并排序方法的时间复杂度也为 O(NlogN)。 ```java public class Up2DownMergeSort> extends MergeSort { + @Override public void sort(T[] nums) { aux = (T[]) new Comparable[nums.length]; @@ -418,8 +435,9 @@ public class Up2DownMergeSort > extends MergeSort { } private void sort(T[] nums, int l, int h) { - if (h <= l) + if (h <= l) { return; + } int mid = l + (h - l) / 2; sort(nums, l, mid); sort(nums, mid + 1, h); @@ -428,23 +446,27 @@ public class Up2DownMergeSort > extends MergeSort { } ``` -因为每次都将问题对半分成两个子问题,而这种对半分的算法复杂度一般为 O(NlogN),因此该归并排序方法的时间复杂度也为 O(NlogN)。 - ### 3. 自底向上归并排序 先归并那些微型数组,然后成对归并得到的微型数组。 ```java public class Down2UpMergeSort > extends MergeSort { + @Override public void sort(T[] nums) { + int N = nums.length; aux = (T[]) new Comparable[N]; - for (int sz = 1; sz < N; sz += sz) - for (int lo = 0; lo < N - sz; lo += sz + sz) + + for (int sz = 1; sz < N; sz += sz) { + for (int lo = 0; lo < N - sz; lo += sz + sz) { merge(nums, lo, lo + sz - 1, Math.min(lo + sz + sz - 1, N - 1)); + } + } } } + ``` ## 快速排序 @@ -454,10 +476,11 @@ public class Down2UpMergeSort > extends MergeSort { - 归并排序将数组分为两个子数组分别排序,并将有序的子数组归并使得整个数组排序; - 快速排序通过一个切分元素将数组分为两个子数组,左子数组小于等于切分元素,右子数组大于等于切分元素,将这两个子数组排序也就将整个数组排序了。 -
+
```java public class QuickSort> extends Sort { + @Override public void sort(T[] nums) { shuffle(nums); @@ -482,9 +505,9 @@ public class QuickSort > extends Sort { ### 2. 切分 -取 a[lo] 作为切分元素,然后从数组的左端向右扫描直到找到第一个大于等于它的元素,再从数组的右端向左扫描找到第一个小于等于它的元素,交换这两个元素,并不断进行这个过程,就可以保证左指针 i 的左侧元素都不大于切分元素,右指针 j 的右侧元素都不小于切分元素。当两个指针相遇时,将切分元素 a[lo] 和 a[j] 交换位置。 +取 a[l] 作为切分元素,然后从数组的左端向右扫描直到找到第一个大于等于它的元素,再从数组的右端向左扫描找到第一个小于等于它的元素,交换这两个元素。不断进行这个过程,就可以保证左指针 i 的左侧元素都不大于切分元素,右指针 j 的右侧元素都不小于切分元素。当两个指针相遇时,将切分元素 a[l] 和 a[j] 交换位置。 -
+
```java private int partition(T[] nums, int l, int h) { @@ -528,20 +551,23 @@ private int partition(T[] nums, int l, int h) { ```java public class ThreeWayQuickSort> extends QuickSort { + @Override protected void sort(T[] nums, int l, int h) { - if (h <= l) + if (h <= l) { return; + } int lt = l, i = l + 1, gt = h; T v = nums[l]; while (i <= gt) { int cmp = nums[i].compareTo(v); - if (cmp < 0) + if (cmp < 0) { swap(nums, lt++, i++); - else if (cmp > 0) + } else if (cmp > 0) { swap(nums, i, gt--); - else + } else { i++; + } } sort(nums, l, lt - 1); sort(nums, gt + 1, h); @@ -555,24 +581,28 @@ public class ThreeWayQuickSort > extends QuickSort { 可以利用这个特性找出数组的第 k 个元素。 +该算法是线性级别的,因为每次能将数组二分,那么比较的总次数为 (N+N/2+N/4+..),直到找到第 k 个元素,这个和显然小于 2N。 + ```java public T select(T[] nums, int k) { int l = 0, h = nums.length - 1; while (h > l) { int j = partition(nums, l, h); - if (j == k) + + if (j == k) { return nums[k]; - else if (j > k) + + } else if (j > k) { h = j - 1; - else + + } else { l = j + 1; + } } return nums[k]; } ``` -该算法是线性级别的。因为每次能将数组二分,那么比较的总次数为 (N+N/2+N/4+..),直到找到第 k 个元素,这个和显然小于 2N。 - ## 堆排序 ### 1. 堆 diff --git a/pics/0157d362-98dd-4e51-ac26-00ecb76beb3e.png b/pics/0157d362-98dd-4e51-ac26-00ecb76beb3e.png new file mode 100644 index 0000000000000000000000000000000000000000..fc0999f997288999ff38615db17d5ecc916d2d42 GIT binary patch literal 14336 zcmeI3cT`hbyY5kxBE5)|fE7WiN(;S-q4!=@q-+ofB~pWhAX1E5ssf=(Z_))R5-A&y zPC&Y$NE4)&(C!TE{hj^Y@7z1i{o{;r&bY@h99b;FTywqaopZj=Z$2wjR~trij{O`7 z2?>pw>K%O&5>f~W$te*EGH~Y8gR@xhamrI4rbJTM37H2!oN-XpQY0ZMeoeK1|19{K z60U0INkYQtMf`ti-2S2u35oazwL6N2KGsW^kV;OYvHFSnm*wxB?z~ie^I(qR)E&y+ zj4)MR{b=-t^_}+=s;5uAxl+5$_`5c>#;t4Br&C!?+iL2&_Di}xiTw1xJ-d7$yDc3x zYqnS#nJ7(K`s=GuSCXvfVb*DIaT1c7r}4+1BqH>*Cnre%=L9hj|8?V$c?VjzGa2qQ zRAN`#nw1 `IuSHtR_3U;wl0*ZV>jO?mZ|Fy0FKN`9-g#? z_z^@Wry4lkw2{*pu!9fbzxx}>j3V?Lsv)ZD5+qO=v&x40;zm!KtOz9;eg U z`!A%XL?}WgE $3n29V)N9LceIm#CA#;R?q>1hF~r z4QlMEZdz2j0;|j}H5M&qizxe1i=|n!-r|dv?=jjd;auk>lpDco7P61!;Qp>H90w z#4CdC6PrVQ0hf9D_!8tS_IoSwim9ETWxNDM2)GQ%lEQzN8`w~Xjw83n7IO0nbG0RB zq8~0-FBVP*R^1q4r~%1 ?8a>Vix0VoZwPnR=(QIVe(pb z%hcnOo^6lMxX;w9)^!Hhtk$e>`O!mL(8BJI1f0qRE5oIV5my|o^iN&Rz#Tk}lukxB zIj(=Jsu=P}=4gK%=R1p$;0-@C95QU~-{O9t$91rr97vd7$S>_Q&k?v_30K@~<1f0l zedA5!;Lu`Gy)~!j*IT%F=Rz}#&t$00ZdF@$b>Koyma+7&8c(Zc+3nHNYH%O9-s8Tr z{3EZ~7o|KmaVCQ;7KD!m#VoX#a2S{Gd#UA*QwwXnd&{5PcnI$d4U?P;t1^e-Uug0; zy+?b>IwLfoNdarE3mbhpMSHAy>-r^~Ws>B>cag6MiQUaHPDKo~AKsf_R|hQIjL12? zbY)F-?7or6@l W2dKy)`sFyPD|y3Tz)lFECSgowgdTQK}$7MA!OQkQ=YKSgiaf$ zqt<4pl?^b&25FF`)a=*P6TRdN_GTKLKBRVPwTuabr`?v@>^EpV@UYcOy1)4(ub?8A z3%Suld_L}&+KpZf+>k@E6`d&dRu)P*jUkS|Q*Q5Pl&or5u1LJ ABi;;fY R>-G?x`oaf-}PJ#;o34TXy#V?D-}%7Q*o~87aNLD!=nDXA-8?cqxCu) zKrV^!MiokzpMqUPZrn>A4P?fXX!vnM+?&dsEcI`2L(I7lKZ{#v* %+n5uiJHUx_fgt>LORCS zR6DW`v*M2t@nZfUX^aWJp{CKW`t=_rGFB!c_FuExAGlx80#{?C?D*rw1X3M(P2c?S z`6ro*Ar&UqEG0FV1Q#?%U7H5`_IKCwFpr0G4o4?PO(|iPgLIP9^nDp2?gGKeSA6DD zLySNDEYYwkETn45E2<;JNIQ)O+ZxR(Y?^Oc$oFktSeDDn|MaWQ|Db9iYQgB6L;oen zJvFyrWenVjBYgVt89LbwUBm=(8yB?VQ&BpkklRpour-qBkc_P0vJB2pw_>KHaY9Ha zv^>EFUtqbI!p~wC+V#3qWydlIO-c(*Ikdcz{mErDu&S65ZRjN!Z00G;lR_(4Zl&F9 zlyt$`=RUmUy7x^vJ&&SNha}(3y27&jD~DrQsH-tM@%<#GN0|P{F5nq^$w&!t+E_|l z os9XBVVj%OCC#JhhCcNAJU+pChd)TbOiY^d`7 edeF=R(Lh7$3V7CHnq&*Sa*^oO`IziJ 4p~Q3zq$ z2s%kEP5xz=EJiDtUvde8JrxUP^~rN=Fid=G)%4eW8Y=89^GQT@m2+oEQ<}i4Smw}^ z+OsO8)CKdjK^sC~N(#JR^>XIYSgwqFNWom9<2^@7`b2d+MG(JB(R$_u_V*Re9C?JI ziQ3p8u@MKstp0=~{k`dCC8$@W&ZZp1-?Z>T+G2sTFq&dM2tG$Jk=4cM$} I#A}(vi5BIt@oF ziFTVhU=R!S-g;0`h2HWDQVuaNH{~0(U%4MzVpHc*ePlWA7mI4XJBRPy?d52G{%Eet zxu{m$KgHST2*GoyX89A_*sTvx2^MUsUjcy=ZKZ+T_`Jg%XL%dy7D+D{rLmOEgtGN1 z%QqU-7eFG lTJI+b5GoRMM}VUrsvk8cM;m$O{v#>c_nxL z3$1kiayOXWAC6*ELz*4BlC0d)9sSEWxI5!iFmE(b4q~DV@5L2ba@pqK5?Y9?jcs>R zs*uJjfkP@j70RK>zxd9hY$vm|1` hMkSW%9+amfNdxH7plo`uOp>%4^?)=xFWZzVyc3ObM%(NPS3;e%$j_V+VaI{1Zus zX^e`7BKEW8U=*2pwMdG`d fDW z>X%A)RnKaOowS8(RYvPD0o=WeZ<-0xX~<$dAb8NZW$zVZxD=CcdVgN}m+hC1lKQL) zW;F$!O3>&k&skamGi6HP1Yi5tcOo5aX_p}BJcT+e-k4}`_rs+-RH9!z`TW?FO~(_Y zn-!0zq!4yyqiVx`HdC+D=de9Oe*SlPEo#cJe8zT^_1pFvO)e}V31Ln5lrit5$_>qw z^2xYZW Yry{iLqjM5E%ZqOo;(IzGQq##IetMk1_xIEyNtw)bGf^oukJg%tBXu6o( zHn!^#(0_}kekbN^yv45;au#oj*zm*sa8^H$%#4GXQlADnjO($wP1E=#?nAI?5(juJ z{mI!jl)dlgB$?Y6sqw6`NG4j9u5ZC^EOb4kmIS5mKPu8eEwACXO&!ASk08s b>?qU=2%#qNR~N@ze$;6WppB0x*3kO$BC3VRz@e1CG{#$HUE$@$I9qfvM9m6 z|4qsqE29(1@?Yu({#`vf9i 6EMI0BXCUow>R z7(5u${SSd42IA(w02o_!l B?=Cncf%<1!a`6Gd3j 1B{-}nq zS@cAf{!;7jpddK?uiZ60Sh)tNKCD}P cT;-w znZH8(Pw_7M5(EzbN)DGO>1iBE1D5-nw0NI`&A~idv}C5aXNOoGD5-B%Y2^TM_k~X0 z(#oTi8%OtK=Zn)~L1m#Q;6EnbqwX+|J;q`unW9h2)lOSKhmOgCOK}qm&e+1mC}G#_ z$==8`-~?jy0aLFea@V`$>!oI*4I+K_S6iY$fn|wZZDi6h1Tt0|vC#uFsVCryaznWM zc&n^j^Mj{Axsfe>8pmekMp*x5`?`Q*u73;YV>Ccs)yGi4uXMdr+64UQx4G6X%u^}I z(EcoCSj5T#^v4+~w=sM6f~BtP);HVMB~RPS5FjdC#>g%PtTZTl&cv8p-|kXV!}|a^ zns=~0QO}h!XPO}Y1Td3a-}N6jJ6w6z+%Gzr6@_v*9$WNC-U+AyI=P*D2% ^ zg-Zfq04&S9{3B>~R66Gk{7#Gfp YDtHC7~LM$dW=h9za2Q_63eAKf`7AN%S=UPk&FTqk?XDN<} z3jc93jGt`N*0d9d@##a!*7LMh28`dBw4tfyKrEBD3^SumY>?%FJEB55FUcf8sIANI zH9U{m0zoSju@d2HudLfFXjsiaDI?>r&u^5L512cDDB!{Ce)0m;Xy7yhT9_NcuF2)z z$WU$>yrcwZ)u-x?mz5XAC}7e+x*!nkf|Z5 A02!@ z3Wtk+05$3cR#;a1La;Jv7BNE+4*92|m%YBmi#h9NvWeLDmx|>eJs)sG h@?0 zi-pd$*u`0iv(jrP%hlGk=Md7Rb>t7`br#W=%Wbp;3Pm~yZZ)gT2uUxk-@dy8>_sOx z0vgH#St?lNrY(R{b_rYVo%?7sD;BhuC4Z1p7oOS0T;4 sJp(iVP*jJlEWf0*V7LTT@=5;yi-LVzuacyK8~%a_ZWg4k US@Y||+;Z@;sQ50J#0+$x&IurADhhR0pD^Ja?+HSxKczmq%j)B$2Q`f4aH}bH z{fc!kA7^yM%wLJaHSa~gjDd^Bm1IA{3n}K_7i8eaza$T0@fOhsRa`bhxI<_4bqG7_ zZ||O=k?F6*bA{^n*QOt5*n(WVm+IjNPYn%Tsj|PhStSJxckWVxUMrD5Tz$PbH8A}= zc4lr}{%E%g5t7rj>FF{!3To+q7s}ppUL83CFiwQwK#E&hH1PqJ)#yGkiN{`kgX7%t znU7v}Y z%r!t>@`II?@)``B5_$n0J*X2OdKk6vY2v`OyiZ#iH=E&%b)V0Oqb1{Fhh$U~zidKe zifhb#17(7VpS`k14)(J#r$voUs3}DV+RR%5@iqP?W!Kr9WmScZs#x;5-P9j-l5BDC z>>#?CzDsyOZPi@k5-joEzpOUR*66R#MrXn`qv2Y7)g!UPnJ$3)5Tjo1H8*@N@06G2 z4Scr;_oi@l-K6wYkW 9eK z=( yaAmuOK2Tumt2K;eLl_mkvBik%EVF z3tf)Irp_?1-<-FcOSQ&uSlL=J(OSWzToKiN+4@~%Ikp2STcG;k^6Jj8y#aCh(jOb# zC8k K67_di~bFjqwSO$6d_YPO44gy!hZK&H~*7xbLJ!qe&69F2y`oqnlhIJ>V zv5dFW8nFUwqj-Jk_4%yi!W~NNEoPMM21@b%$Lz9)`5O@_4{ks@$Xo0doHhhwFY+2= z8N3JFH!fw`4|!h9)@)LTdeO|A_pUBVa^MmQ&$TF$a~fW(L|qlQ_44ZOTwAHq{oQa6 zu<)9I)yMwehivVs8v*0oU~2Wi8JW ntfkKqDP1s>!SO2&lap%Vw-_5?f^7BPnz4MEkfUh;*fW(jWYd*#0xfh_Oh T)W IelnJ{X%h z&Ro_hwMfmS`!f>WSaj9pF4GN`!67K>Y8{w|KH{cBZ=c6rZpFy@Z{4#fXX3Wrdj)^r zXAHf@x(aBFD3QgWA5T-jz^o>^javxnf6SyZ;!o@`5k_Q^-A+2+Z|+d*EmMvRH9Z$H zkeho7Cy+uG)Ms3?W>DHANms4K%#U}xOJ}msc^3-fvzY$`0YEE+hFhb9TM$W4Tl?U4 z0GIqoYI$b{d9d-|P-&N(#Zu)&AZf$z(40fmCka4M?ZL`yO3?yJ5qZ-GDbDKNqWzuO zo#bY8-h=vkI^qM^RH^j!^r^wkj75QRtDFc6=tcnQ%+*I(+(wM}exmeNb$AP(Lo~*V z_H=nkNQ}ScHkz{I10%6GX+%|J$>E#MlR<~!aSpI`26*#Zq%qq@7CS`DHOEDxNgo=o zr$Q5Rr)XQlB?=^UNLqsyD@Cq|Zb D0@!w+8s<59tqdt6D#zu4`tp3o zXT!S)?BjveZ I07hr0$bB~Wi_Z&7upjrql*UGgZMOnCrx|_eij{?a z#)SXd7+gY5zuBUYg3nva(x377b(RvC!WT8YMK?6H=uHsjxgzW&xdK_3$MLQ0l%PPE zz4Z0#!l}g%*9@ch@Vo5c!nezrX%P$eb(5s?M#TY*I}i|<>f6;fLu}vBF8q1rc;Lo} zjJE1pTyMoW@WFCsUxLiP1c@T%Iw060d-=^G<;3FSYTfz7u<@F7^+@6d5H@x3h7l3= z%)L^|Iq-N6FAHCe4xW+j@R}Di!jB{w%yh>E#h7bML g2kZ$Rpo?H#W_E+`+! zJt|nwa0@aSi5h-V0;+eP3bRP(Rcdn)V*jM~AEk+cs)Pb2^#!FIT7R#EjmFipo|MRu zjy2E=SWAxZO=qt9I&R~l{hz(tS9$$JURgimh_eIRRS0tX&7(WeVU@7(J 9r(gvsWP8Be+@tBl4yKK$lpsw~WA0pcl(@QaE2A-%+(W za@{!SiAuYfC~v=J*`YvfbJaWdb1hI%J6>j_>rh%W@3VNLKN1}_gUHM9c)K|&tp#opf5Q@P?D_n4^X0s zxj@1X$k{Ray0=O4Kc*XEB>r pfi zeJC3_0?9!Ch3T;?_<~0zcepdP@E`Qc5aBM8FMOKv^Ep6i01pOMntyY{oFHW43 X zJGq#%|M0z>z~a9kHNlYOf5XBb&VZR3;OKb+vw!ol9P{MQjQ@o%boF&!VRdf2q^CXS z0Wx<7(3(6De pezA+96Ser`~EZs9TW98Et0c|21IKMVq-h!d-Bn~ z17fX}#{{@Q?2(Wznf0$>$(sL{zc!={S$51uegym^Z*$P*37ndu<%kpn{9mE|AGWzC zWvJTi$x9H5kdc4o^)N02Ziwe>C+Gf?N?>=0S@!rpeo+hGt)B&uOIG!dc;{Rq;Hd^= zAh%0y?@`mh%v%XJYs5+exe1;8K76x*{GuUHEc{po))08jAz=}Bs|8{p5A~c3<+)yY z<9r_aJFp?-y8>X~1ord`9)G(ZA_ca&EjNMdg{M-OA+LEoBhETksCq8V>6k_pAEU7( zKPM|T{gJpoK1!X&WQ7aYeIx?71qp*1V5b4t=K VuY@S8})kERPY`CAiDj{Fonh}5mJXIDRgbD Do9UVq zM@EsG!Lpt~i2z~D30{qV!C@@D{Lyv{EmrA!xI3E%ZpJO6LTgrSHm_ SV2Hf$U|JIPh;Cb 9OHD@SiT8q!M5r7RRwj;p)IG3A}AMjN$^$_QW1kead2 zZ%e1$1M#rPISetyaD*>DN+U3~q{$c~?vmC5#CX+=7Fn1K5L{>s{MfB9?*9uT5Pk>V z@cb;mXi*jph7zJ?2rMO!A=v-k`u^4c0kqh~BJxuAA?BqlMZ-d`=#QPlTbt?8{ bsTK zne4w@g#!rDWCBlZr{`<1_oESD945b+hrHp#V&x7nh ^b^1y7d13NSqTC!!b>pws}d zboe;JKQ)kX^dBvQSnmBS-E3l~ ymm4L5iwJVX~}GJFmSG z47ULde*KY|MqvH064gq{US3?^U7s}p7Nsb&T2OfsT{kyB_m#862GtT4@`6Iii(C{~ zeKZ;Yl=?>arCvIoXQOwNmaN9CeDT`+TgPO*D1XeW-oZ-2?T1kovE5`E#=sTS?G$JA zIOnx6PS`2b*)vVAeN<_8iXa9`P2WcB<=wsg^)4caA$sZ>x~`pJ40`(hPQ5>}B3IS= zMXC!unt~tSEo@Bl#{Sk9&eI3PL3RSJ!Z$ak*kzj5qDNG sQ9$_CaXQ4XgRwd|Uph{^w-V+l(^;*8}&{FBjt zN}Ta&VhuSip0;Kz9k)9YB}-XoY5J9Udc^SErAqO;eZ`B4cLe3Dr_j<1ox;G61gv6% zZ`x9a>cEa&eW181sg>Z+CotK4< hU|JQ&g6!1`){8u4(xIvtJ8N}rA?0K(QRIc`}M1kRS}f= zaNPP8O4L=N;Z0m-qkI(4dX=JOu1AFSeyna!Z&?c|E*bjmUq;8UD_^DOX^D z8Q4ERR8yPlXL$A*;a@JQK@j)Yb tXbl1)QJWJa634l7c6K>8LQb$Fm=xd>Mv9jDv`ATACQ zJnF>WGSgax@M-W?7Q$%mc=B8ZGYCBzPXrQTtdGR`+I|j|E^ec 2fTy>=Ur=`Bt 82&&$^L)D^o!Jfj)5MNDW zsQPobr~-7DJKx`!O sFK%y{QjG# zym&UWkSgKBGjDotN~8TpugHWVZyY?zy~zH$REjbraF$RQr%Of|&^nt8GU3nA-tq~% zNIxi$(!>up0JTYzUeHCp;HIFdjP{ahkYL(l3p5W{X5N&&n0T^p7rCmC #!GAuy1TdbnYW=9N@oUUS0suQPz}iQ#W9%_E%C%ep<-yNTg;`h7|6*#q<^92W zP09j;x*DipIni$9cjF574LSA}1eDbRWIC(&EZvg2M}p#uSp!U|p`xBSX2ac3r_Wh# zB{W5mOT*q_qD K}sHpWD?hC<<-imf5?R zc~|Z*tpYfUu5WjQ&LCLoZ6_vi#T};6+}4bbKc6C}jzu}?bC;cBaT_lIZdh0g*Ftbz zlOOOVBP6eJI*r8dMgQ>;bu~8YgO}m#PhgkgigwSf-x2OyxB^-20y~iy!VE*lt!K;E zb34M164K9{0F`1^nfbTMU!Z#ZKAA*%`t+*Yg`7E-;wFVQk4vms?O29z7m-y@z6@I< zu8vMJGpEdOx12DCgsB--<6>S7PqvrK_H#6 zq=PA1IUAJ|y+ivJSip&$>Fo}UtmeN>w7U_t3o!GEa_ppEJecEeDH6l7J5GQ7gF1Xh z;ih(6@YIh4H!c|-=Co%~b+v<&9g3HMJMW%aP~D1x8}IAbD$_q+JV1c`$P0Cv+Qr$w zh(<7kB|=tCxGjQBWFd~(l)AS7r9APG^Wlv s+o+XsA4!P|n1jT= zh4A@eE<=tkph#u ;_^l!Ui%e9(RV>nKg5^J8RA=dZezW$qO!v zi`iN^7{1WWOccgCMafw?4A}LQXI9Ij#Xp1Xh#f+SkAh50&YXjxx4`h(W0%gc0qNL{ zB!H}LW Q@4PEi8RpMQ9p{t}KSum_lwfG|CI!vV<5 zlNTfYQhzTRqKI!k{CWOZCH^HD!Fv(J?}82x lCIF@7W3 zlE`$9jZ+H|#Ac60?0@S^0T~}FY-25GRb3`wR`JLTyzX+BMtkA-rI%e$X#mfX*x!Q` zdo0&@X;Neiu7LNtz`qZEPvOT0PuVEQj}P8H`~Ug`tDeyjRRS8d_2$YpJux6^D%y7n MmF_+N|6=_AFI7~~0{{R3 literal 0 HcmV?d00001 diff --git a/pics/220790c6-4377-4a2e-8686-58398afc8a18.png b/pics/220790c6-4377-4a2e-8686-58398afc8a18.png new file mode 100644 index 0000000000000000000000000000000000000000..7910525710e724735de28351f6ac0c346eed7f96 GIT binary patch literal 6144 zcmeI0dpJ~U-^ZuDRZ7YsQ%*^Ra>&l1DMBWb$oYJ>J1}w#V=&B2F%h%T4%tpkLyp5p z3?e-3l9a>D4in=PF=H4L1{uS=OV{;0SJ(Ugy`SfOuj~C|4(qqpy6^A0f4}?we(sfG zXJanDS8gu|1QNHnV&(t>?cf3bUyAMmzSAqcOn{#qkq+ii5V==j7B~=rn_8QKK(!fS zf@?d0<2|>pxJQCOQi$!(jxm3w7!U}2*TT%yDaMCWIM*lcI^IcWe 0jW32!w&Y7)GU?-MdlbZJ8N%+V}+R_TcTgNH_O#>(n%z2Fq8Ym$1pNvZYWwi z4pT?3VlG>>-QvDjeOkBL9ftO=cCX_K!vO_$u@VL#(8ZsQ0ut_sTx4yFx L~`*{zcU2@loE}qloL0xG@h2)Lm27q6iVPiztmh${S3eitU4DsEM|o z5iN8RAvS_>KEFz!E|{{?Oj&P^iMCSy{SqF1xrdn>)M|`m+R#a^+VncOZS=RVpC_29 z_p_-r-Yqi?!9$a!Hihh62aXi@@p-eMbh5Ym26W?1)@Vy~O9%eY?mGV-x#+34X%m>9 zH&9mo*^s>r%1ZcECu>%jO<{yDX1zrIe8f#;HJdOVzns<*F>U#E8TM3@$YnIvAjugD z=cNQz!S+hTHYhrYYto w4vCy9kW0sUV62eCk_o$14CVtE7K`kZ(QA3#pW4E`Ln^d8I57lzSvF5++elm zVClkWOH1PJ1H0DnDh57^K{= EsVSv+GiHf?tfjGH~k@}@jQ}XjOO=~ zYyCbvk}(c)P$ACER6Ca0EWAEo((SM3QtdIlYu{nJ4Gf}9EA-+A3H~r8h%r+2<}?D` zCkEDhm+suDRU1@li@s0(xVf>mdo4)S1q#STbK->GrZPrTq}4{<5(3=!Jrik1PIX zJ|+X>NufrWbGVfxb%cz+j}$-J`W9d8!fJX)MsW4zDPq>jK5ypbx)Xup|G4{e-RumN znP-uWBX?@Rdkb#WaeyE>h)y1gek$*nhFHdG9~*?yyAv)aw9RCFnhWiFY^48rR?<{f zH`WEZhQ2c1hStpu@@yk0>D;_;2;@U!Lth>@W}}HC8&VVvkxf9t{FjywU2?v6Bvomp z@>lHU3Vi~8Jw><$?|bZRSyqg6Oi`mXj)@u~(^3!&wS-vhw`E F@vq$vzY_qwP;5_3FtNP4!o~ZCXEauEMni(2A 9Cd%##wqxG`Gr{9q?XmrOigKki7Gp!JtK^s^3R+YH#8_LHv7( zX7Frxp1wv zey>Fc q3kH;SGbxz~>bA63 }NhS8_ zO9v6>dVUhlj|5IP*bd;x`HI$Dey=ON+y`Fwa#7QRmG^w`_%Vv9 lfGkIWIm{m4AbwQ(>I} zS_rIw{k7U~Reg^)o#^7U5lM2FB}L ;~5l>lCV>VG^E}! z>f+q`mlu)D1cHV-P}7(l1(%z^#ie! UqMz-@0~V97T HPhh|1jTDpm(x&UzFgJXe96EYrR;Z zu?q#Rj2OND&2@LwyoVEMjkY;y+`&$clt38*9$DOR`|2ajTXi~KG~r;StxO28-WN&o zJ;PcDW 7m3`>TM-!rJ4 58{j8^$TUmIVx{n!m< z1gx`i97N4GYEw)-B7bESTxYx&Sk(PQTdUlRFVRQKN=pZ1*#u`#kuo^S0NF9APvN_1 zr)uarOQJL!A5lqizF3qOTscBXgUFm>6k({(wYD4hZtLIO9 nRMv4ENz5fRY z z*?4@tnS|mPq4|1Et(EqLPAQMX07eDn?fyRjuYV&?-#K}2Yko*~ZQ@npiKVZfUr(&6 z&j73WD~@vyz{-gX(jQr5-9Xi`r~OA_RrQMwHt*%Hau^n0dJ7GKYr0$G)&P{w1MCdI z<1?qc;r&)GEh_xK JSnR>7n= zG(#7-2M8xp(=IU&hDo3bi2mDQd0eQ1L0Jp{&HMDFf$+#t#1!>>hdk~GygYY1yo)HG z+ Dk_G}E*55haRFzds{jT>VYCpFE}74~3Chupm320qyNm320$W(1(R#EoskA|a8S z;ptLaf=|mBK+%B_p_+j+0C|KCJ@ b}>_dRkJ)RkXnQx2y RWvN_K=8;@$n!7U9+9O^$IkT3TebJ-MQIUlBr4+_
b7Q+{eBOEF{2y@}oJK~0 zm>>0tDfw#7Y4;8O%3KcmbUjuVcmzc_cdWH;YB0FC_cg%Zb#vAX{u-BSQ*cglq%rp> z@8L6W^JObczmqdDjM1PaAM&Mfz1KDOd}L`$_|)b6c8I(NQMf|)bzfqf4IA?c`oJC_ z0WMqaCg!b}ZQwG#za$V!kFJ?&kV{LxKJdsWZnX)RW^fKIt6oHj@AZ3aWv-oG$3jQb z^^U!n_SLYSFYvo(Lr2^g3pGX^MWGTX3pY{k2uAIVWW(5{n@D01jwDu62|b|Vdl;n} z0}THJ(+A>*v{}#3jQ{ {a62E{Ee6(?phaF9G=vy`%LwC;2)J+~wJKa{!!nb49^` z_oB$rrKcPnIn&)WT=qMs!m%uY5Ofx-UrcKvbU2J|a4O?M=7uRG!`l-V^U $80zd^J69a} z!1w1T4Vqp}RI8cPY^q9#VmmfHmvFu!kBTnrHxH?cnW=KChdul{r<1f_(IY=^mA396 zes48I)lbwrEa5wrC$G#WI`^=WJ~S#TRfjx7ef-{!aE%sl8>n9W+&RJ=y#^ACaVe!{ zA2CAR#J{h)oCq$=G;mDQSxP9cq^`8ig``r8G+-RTa-T`!##w26L%*-DW2se_zk*)o zG(!)VcJtLZ>Q)U<*N>G7v8zLHRSNfpy>8oqkH>tmnD}~583ChnOBxt++!nV87OsTm z*>fgcJx}Z-B{a+zoH#IA67)H{6tP(Zv-Z5oCZhAKX@!~T*uS1y44nyjKT1ee&!El~ z2icGq=(wf63;0wDwKGlLRl1REC=B+7JV@TJi1Hivzplj-ECMeyMino_{POKZ5wNjT z!hBOE$-<6DRBzJs1TSNkpCf1eVGu1MI)Bf1J>!|!g{N2U42q%O9}f9eV2mCXKm5y+ z!L#_C?yzW^ZOrY^cYQ?779_y%5DCrUBKl*%Sn?I?0!@UF4+H&!`k6J-T5bJuSyX1K zB~AZ$>;}e4_u{&F@Ou6))zj~|u4X{J1202p@3h-NHr%2^twlyzI`_!GH~VBeY}B87 zJBfzlwoqMS)Jbs>d;=?q+Q$z_QWoBT ->gm)?%iA53GnK|Ly46 8ALNL z!BJjotin~Z^uVPGc2-Mi30AP!Ioy*KdP2X1#GDPpgCDsIVp0ZrQe3ceO)IDQrPld@ zoJFxOyvWxup*pdI>a6WiTXUlkMIn7x^ZVUi{Fo>$*1m0Hp(VKGdToT#_bM(BIQ0u< z@Usw7Zx;b?*FOX{3S0vCFO#5BVY_K?_t*^;gf)|`|IRLM34a*>TM0F)c-og!Ngy|* z!g|WvmctZzvmZNK*Jtu6!s?D3aE7$x_c64vX7Rh|0`@J~pE2ClH7jACtORN*0JpWZ z!EHRRor+0yY Dh!$`|WL1Pk?)Urvpoh=+Ej;(s@kKaM3R|s4>yz zzqq#PmOhZS7pk42gY$9GG%S05W9WQ^?h0u{27hXmpQXanxgJ|+ad7Kp)?!e&U;l5z z#8p;l2m7sAZB?$zn`VEfHNTY|fJ<%T0DuwyB8%@yKldXj0M&m4{v%1K+y#)~2h{ji zBmZO(U`5E#{gD)aY= F+-+fY$T}cS zW*JxsCsr$G080l@%*v833viM{V8(?^Is3iabUVEJ?|Uh$o)IY&JL0Am`Sp?NBG4De T0%l`IhW?uH|MUNU&j0@c$L*Xz literal 0 HcmV?d00001 diff --git a/pics/864bfa7d-1149-420c-a752-f9b3d4e782ec.png b/pics/864bfa7d-1149-420c-a752-f9b3d4e782ec.png new file mode 100644 index 0000000000000000000000000000000000000000..72cc988f12ebb575ffabf9fee836aa7d23aad0ca GIT binary patch literal 16384 zcmeHucUV)|+HdS*LB@)R$fyVi0)i+iLR174q^Sr 1B#w=ti&7MXP$r;K zGIXRQI-)2&L5S3#NC}}6TIzi_&dl-5J-2+%eZF( J6drzXjf>4UVC5>bJ1qV6n?l 36;89cMz0xuFVF_o)AZ`FLK{{7 &Q{p;fU$|`Fb4=5O& z{rm;rz!sJs(({gLI5jogP{!4f=`UY>nwWFYuE}ERd8se&wWuG3Ia@@Q*FB7hpmP(&dsqxrf`^9N~Un1Pc%)WauyV9G?YnqyH4P8SR>Cek}g+& z!f6*>xGr-f?e}*W RHI#AP6MoM1!*(THxHIa=4m0kN z+go%3KPKwn+LUdIYC8ib>nLMoKCI8Hr4OCGu>@7A$66%zK!)C+?nalL>BKTE>=&S} zn!{yZjHq^Hex4Iw-jDotcV!H5;gP^-oyH&HRP3%*MMzJk49!38pIBBG+djPx>Wo#k z=}6HHQZ%Y&&yM$aj&@ZDO;N65$UCp_FHAV-oo@5unv>JX8x_2fGQ15(9)-M>^lZDb z7KvUPuL=w6)ArFiH(T^suM5!pPvR7XI8}`OH-GeHx6Gy5mioBCJ>X@Zmx7nS|HqHr zq1T{fVs`ez3v=~=$F-MSO;fGb3*BfD8!bT+PcAg)?(vxHtD`7LsMuP4bHi+#Vs5JK zuNRJfb3?zOkDo%Xb(P=v_J)P-ajMk>VLu^f_bydKnIrCLoQrKEon<)l`b4ebykE+p z2C~DUCb)J}iq!|b`_6vzWRXxnQE+KUvis)Ai arWu5<4lwTVEQq#G1ljgNACor+2<&zO27r!YB3Y2hap7TLi1ISz1 zOW}=Z6+66HG4pbfcuBh#wR38)xdvWeUFY?l@SHOlCL