From d57fd172f9211c71a716909b3bd3dd3880e5715b Mon Sep 17 00:00:00 2001 From: CUB3D Date: Thu, 21 Jan 2021 01:43:00 +0000 Subject: [PATCH] core: More special casing for noise --- core/src/avm1/object/bitmap_data.rs | 9 + .../swfs/avm1/bitmap_data_noise/output.txt | 372 +++++++++++------- .../swfs/avm1/bitmap_data_noise/test.fla | Bin 5022 -> 5043 bytes .../swfs/avm1/bitmap_data_noise/test.swf | Bin 1055 -> 1074 bytes 4 files changed, 241 insertions(+), 140 deletions(-) diff --git a/core/src/avm1/object/bitmap_data.rs b/core/src/avm1/object/bitmap_data.rs index 454ecc510..4b521de16 100644 --- a/core/src/avm1/object/bitmap_data.rs +++ b/core/src/avm1/object/bitmap_data.rs @@ -373,6 +373,10 @@ impl BitmapData { 255 }; + for _ in 0..6 { + rng.gen_range(low..high); + } + Color::argb(a, r, g, b) }; @@ -384,6 +388,11 @@ impl BitmapData { for _ in 0..(x + 1) { rng.gen(); } + } else if !gray_scale { + rng = LehmerRNG::with_seed(true_seed); + for _ in 0..(self.height() * (x + 1)) { + rng.gen(); + } } } } diff --git a/core/tests/swfs/avm1/bitmap_data_noise/output.txt b/core/tests/swfs/avm1/bitmap_data_noise/output.txt index c50a4f3ab..3b0b832f9 100644 --- a/core/tests/swfs/avm1/bitmap_data_noise/output.txt +++ b/core/tests/swfs/avm1/bitmap_data_noise/output.txt @@ -1,287 +1,379 @@ // noise(1) without transparency // bitmap.getPixel32(0, 0) -ffa7f1d9 +ff:a7:f1:d9 // noise(2) without transparency // bitmap.getPixel32(0, 0) -ff4ee2b3 +ff:4e:e2:b3 // noise(1, 0, 255, 1, true) without transparency // bitmap.getPixel32(0, 0) -ffa7a7a7 +ff:a7:a7:a7 // bitmap.getPixel32(0, 1) -fff1f1f1 +ff:f1:f1:f1 // bitmap.getPixel32(0, 2) -ffd9d9d9 +ff:d9:d9:d9 // bitmap.getPixel32(0, 3) -ff2a2a2a +ff:2a:2a:2a // bitmap.getPixel32(0, 4) -ff828282 +ff:82:82:82 // bitmap.getPixel32(0, 5) -ffc8c8c8 +ff:c8:c8:c8 // bitmap.getPixel32(0, 6) -ffd8d8d8 +ff:d8:d8:d8 // bitmap.getPixel32(0, 7) -fffefefe +ff:fe:fe:fe // bitmap.getPixel32(0, 8) -ff434343 +ff:43:43:43 // bitmap.getPixel32(0, 9) -ff4d4d4d +ff:4d:4d:4d // noise(1, 0, 255, 1, true) with transparency // bitmap.getPixel32(0, 0) -ffa7a7a7 +ff:a7:a7:a7 // bitmap.getPixel32(1, 0) -fff1f1f1 +ff:f1:f1:f1 // bitmap.getPixel32(2, 0) -ffd9d9d9 +ff:d9:d9:d9 // bitmap.getPixel32(3, 0) -ff2a2a2a +ff:2a:2a:2a // bitmap.getPixel32(4, 0) -ff828282 +ff:82:82:82 // bitmap.getPixel32(5, 0) -ffc8c8c8 +ff:c8:c8:c8 // bitmap.getPixel32(6, 0) -ffd8d8d8 +ff:d8:d8:d8 // bitmap.getPixel32(7, 0) -fffefefe +ff:fe:fe:fe // bitmap.getPixel32(8, 0) -ff434343 +ff:43:43:43 // bitmap.getPixel32(9, 0) -ff4d4d4d +ff:4d:4d:4d // noise(1, 0, 255, 1, true) with transparency // bitmap.getPixel32(0, 0) -ffa7a7a7 +ff:a7:a7:a7 // bitmap.getPixel32(1, 0) -fff1f1f1 +ff:f1:f1:f1 // bitmap.getPixel32(2, 0) -ffd9d9d9 +ff:d9:d9:d9 // bitmap.getPixel32(3, 0) -ff2a2a2a +ff:2a:2a:2a // bitmap.getPixel32(4, 0) -ff828282 +ff:82:82:82 // bitmap.getPixel32(5, 0) -ffc8c8c8 +ff:c8:c8:c8 // bitmap.getPixel32(6, 0) -ffd8d8d8 +ff:d8:d8:d8 // bitmap.getPixel32(7, 0) -fffefefe +ff:fe:fe:fe // bitmap.getPixel32(8, 0) -ff434343 +ff:43:43:43 // bitmap.getPixel32(9, 0) -ff4d4d4d +ff:4d:4d:4d // bitmap.getPixel32(10, 0) -ff989898 +ff:98:98:98 // bitmap.getPixel32(11, 0) -ff555555 +ff:55:55:55 // bitmap.getPixel32(12, 0) -ff8c8c8c +ff:8c:8c:8c // bitmap.getPixel32(13, 0) -ffe2e2e2 +ff:e2:e2:e2 // bitmap.getPixel32(14, 0) -ffb3b3b3 +ff:b3:b3:b3 // bitmap.getPixel32(15, 0) -ff474747 +ff:47:47:47 // bitmap.getPixel32(16, 0) -ff171717 +ff:17:17:17 // bitmap.getPixel32(17, 0) -ff111111 +ff:11:11:11 // bitmap.getPixel32(18, 0) -ff989898 +ff:98:98:98 // bitmap.getPixel32(19, 0) -ff545454 +ff:54:54:54 // bitmap.getPixel32(20, 0) -ff2f2f2f +ff:2f:2f:2f // bitmap.getPixel32(21, 0) -ff111111 +ff:11:11:11 // bitmap.getPixel32(22, 0) -ff2d2d2d +ff:2d:2d:2d // bitmap.getPixel32(23, 0) -ff555 +ff:5:5:5 // bitmap.getPixel32(24, 0) -ff585858 +ff:58:58:58 // bitmap.getPixel32(25, 0) -fff5f5f5 +ff:f5:f5:f5 // bitmap.getPixel32(26, 0) -ff6b6b6b +ff:6b:6b:6b // bitmap.getPixel32(27, 0) -ffd6d6d6 +ff:d6:d6:d6 // bitmap.getPixel32(28, 0) -ff888888 +ff:88:88:88 // bitmap.getPixel32(29, 0) -ff777 +ff:7:7:7 // bitmap.getPixel32(30, 0) -ff999999 +ff:99:99:99 // bitmap.getPixel32(31, 0) -ff929292 +ff:92:92:92 // bitmap.getPixel32(32, 0) -ff484848 +ff:48:48:48 // bitmap.getPixel32(33, 0) -ff333333 +ff:33:33:33 // bitmap.getPixel32(34, 0) -ff626262 +ff:62:62:62 // bitmap.getPixel32(35, 0) -ff414141 +ff:41:41:41 // bitmap.getPixel32(36, 0) -fff3f3f3 +ff:f3:f3:f3 // bitmap.getPixel32(37, 0) -ffddd +ff:d:d:d // bitmap.getPixel32(38, 0) -ff232323 +ff:23:23:23 // bitmap.getPixel32(39, 0) -ffe5e5e5 +ff:e5:e5:e5 // bitmap.getPixel32(40, 0) -ff5f5f5f +ff:5f:5f:5f // bitmap.getPixel32(41, 0) -ff303030 +ff:30:30:30 // bitmap.getPixel32(42, 0) -ffd1d1d1 +ff:d1:d1:d1 // bitmap.getPixel32(43, 0) -ffc8c8c8 +ff:c8:c8:c8 // bitmap.getPixel32(44, 0) -ffededed +ff:ed:ed:ed // bitmap.getPixel32(45, 0) -ff616161 +ff:61:61:61 // bitmap.getPixel32(46, 0) -ffccc +ff:c:c:c // bitmap.getPixel32(47, 0) -ff4b4b4b +ff:4b:4b:4b // bitmap.getPixel32(48, 0) -ff222 +ff:2:2:2 // bitmap.getPixel32(49, 0) -ff353535 +ff:35:35:35 // bitmap.getPixel32(50, 0) -ff393939 +ff:39:39:39 // bitmap.getPixel32(51, 0) -ff818181 +ff:81:81:81 // bitmap.getPixel32(52, 0) -ff848484 +ff:84:84:84 // bitmap.getPixel32(53, 0) -ffb8b8b8 +ff:b8:b8:b8 // bitmap.getPixel32(54, 0) -ff141414 +ff:14:14:14 // bitmap.getPixel32(55, 0) -ffa2a2a2 +ff:a2:a2:a2 // bitmap.getPixel32(56, 0) -ff9c9c9c +ff:9c:9c:9c // bitmap.getPixel32(57, 0) -ffb4b4b4 +ff:b4:b4:b4 // bitmap.getPixel32(58, 0) -ff5a5a5a +ff:5a:5a:5a // bitmap.getPixel32(59, 0) -ff676767 +ff:67:67:67 // bitmap.getPixel32(60, 0) -ff2a2a2a +ff:2a:2a:2a // bitmap.getPixel32(61, 0) -ffcacaca +ff:ca:ca:ca // bitmap.getPixel32(62, 0) -ffe5e5e5 +ff:e5:e5:e5 // bitmap.getPixel32(63, 0) -ff484848 +ff:48:48:48 // bitmap.getPixel32(64, 0) -ffe9e9e9 +ff:e9:e9:e9 // bitmap.getPixel32(65, 0) -ffc5c5c5 +ff:c5:c5:c5 // bitmap.getPixel32(66, 0) -fff1f1f1 +ff:f1:f1:f1 // bitmap.getPixel32(67, 0) -ffb0b0b0 +ff:b0:b0:b0 // bitmap.getPixel32(68, 0) -ffc4c4c4 +ff:c4:c4:c4 // bitmap.getPixel32(69, 0) -ff151515 +ff:15:15:15 // bitmap.getPixel32(70, 0) -ff8a8a8a +ff:8a:8a:8a // bitmap.getPixel32(71, 0) -ffe5e5e5 +ff:e5:e5:e5 // bitmap.getPixel32(72, 0) -ff9b9b9b +ff:9b:9b:9b // bitmap.getPixel32(73, 0) -ff4d4d4d +ff:4d:4d:4d // bitmap.getPixel32(74, 0) -ff393939 +ff:39:39:39 // bitmap.getPixel32(75, 0) -fff6f6f6 +ff:f6:f6:f6 // bitmap.getPixel32(76, 0) -fff7f7f7 +ff:f7:f7:f7 // bitmap.getPixel32(77, 0) -ffe8e8e8 +ff:e8:e8:e8 // bitmap.getPixel32(78, 0) -ffa1a1a1 +ff:a1:a1:a1 // bitmap.getPixel32(79, 0) -ff555 +ff:5:5:5 // bitmap.getPixel32(80, 0) -ffd3d3d3 +ff:d3:d3:d3 // bitmap.getPixel32(81, 0) -fffefefe +ff:fe:fe:fe // bitmap.getPixel32(82, 0) -ffededed +ff:ed:ed:ed // bitmap.getPixel32(83, 0) -ffa5a5a5 +ff:a5:a5:a5 // bitmap.getPixel32(84, 0) -ffd5d5d5 +ff:d5:d5:d5 // bitmap.getPixel32(85, 0) -fff3f3f3 +ff:f3:f3:f3 // bitmap.getPixel32(86, 0) -ffd9d9d9 +ff:d9:d9:d9 // bitmap.getPixel32(87, 0) -ffe4e4e4 +ff:e4:e4:e4 // bitmap.getPixel32(88, 0) -ff5b5b5b +ff:5b:5b:5b // bitmap.getPixel32(89, 0) -fffafafa +ff:fa:fa:fa // bitmap.getPixel32(90, 0) -ff6c6c6c +ff:6c:6c:6c // bitmap.getPixel32(91, 0) -ffc3c3c3 +ff:c3:c3:c3 // bitmap.getPixel32(92, 0) -ff515151 +ff:51:51:51 // bitmap.getPixel32(93, 0) -ffe2e2e2 +ff:e2:e2:e2 // bitmap.getPixel32(94, 0) -ff202020 +ff:20:20:20 // bitmap.getPixel32(95, 0) -ffaeaeae +ff:ae:ae:ae // bitmap.getPixel32(96, 0) -ffccc +ff:c:c:c // bitmap.getPixel32(97, 0) -ffe1e1e1 +ff:e1:e1:e1 // bitmap.getPixel32(98, 0) -ff666 +ff:6:6:6 // bitmap.getPixel32(99, 0) -ff989898 +ff:98:98:98 // noise(0) // bitmap.getPixel32(0, 0) -ffa7a7a7 +ff:a7:a7:a7 // bitmap.getPixel32(0, 1) -ff2a2a2a +ff:2a:2a:2a // bitmap.getPixel32(0, 2) -ffd8d8d8 +ff:d8:d8:d8 // bitmap.getPixel32(1, 0) -fff1f1f1 +ff:f1:f1:f1 // bitmap.getPixel32(1, 1) -ff828282 +ff:82:82:82 // bitmap.getPixel32(1, 2) -fffefefe +ff:fe:fe:fe // bitmap.getPixel32(2, 0) -ffd9d9d9 +ff:d9:d9:d9 // bitmap.getPixel32(2, 1) -ffc8c8c8 +ff:c8:c8:c8 // bitmap.getPixel32(2, 2) -ff434343 +ff:43:43:43 // noise(-1) without transparency // bitmap.getPixel32(0, 0) -ff4e4e4e +ff:4e:4e:4e // bitmap.getPixel32(0, 1) -ff545454 +ff:54:54:54 // bitmap.getPixel32(0, 2) -ffb0b0b0 +ff:b0:b0:b0 // bitmap.getPixel32(1, 0) -ffe2e2e2 +ff:e2:e2:e2 // bitmap.getPixel32(1, 1) -ff555 +ff:5:5:5 // bitmap.getPixel32(1, 2) -fffdfdfd +ff:fd:fd:fd // bitmap.getPixel32(2, 0) -ffb3b3b3 +ff:b3:b3:b3 // bitmap.getPixel32(2, 1) -ff909090 +ff:90:90:90 // bitmap.getPixel32(2, 2) -ff878787 +ff:87:87:87 +// noise(0) +// bitmap.getPixel32(0, 0) +ff:4e:e2:b3 +// bitmap.getPixel32(0, 1) +ff:9b:30:ab +// bitmap.getPixel32(0, 2) +ff:30:a8:5e +// bitmap.getPixel32(1, 0) +ff:54:5:90 +// bitmap.getPixel32(1, 1) +ff:19:c4:66 +// bitmap.getPixel32(1, 2) +ff:23:5b:b +// bitmap.getPixel32(2, 0) +ff:b0:fd:87 +// bitmap.getPixel32(2, 1) +ff:8f:2f:22 +// bitmap.getPixel32(2, 2) +ff:b1:eb:d6 +// noise(0) +// bitmap.getPixel32(0, 0) +ff:4e:e2:b3 +// bitmap.getPixel32(0, 1) +ff:30:a8:5e +// bitmap.getPixel32(0, 2) +ff:e7:1b:47 +// bitmap.getPixel32(0, 3) +ff:28:44:38 +// bitmap.getPixel32(0, 4) +ff:36:9b:73 +// bitmap.getPixel32(0, 5) +ff:d8:86:a2 +// bitmap.getPixel32(1, 0) +ff:54:5:90 +// bitmap.getPixel32(1, 1) +ff:23:5b:b +// bitmap.getPixel32(1, 2) +ff:ca:be:61 +// bitmap.getPixel32(1, 3) +ff:69:b5:ce +// bitmap.getPixel32(1, 4) +ff:ec:ef:d0 +// bitmap.getPixel32(1, 5) +ff:c5:41:5d +// bitmap.getPixel32(2, 0) +ff:b0:fd:87 +// bitmap.getPixel32(2, 1) +ff:b1:eb:d6 +// bitmap.getPixel32(2, 2) +ff:a3:91:db +// bitmap.getPixel32(2, 3) +ff:55:95:cb +// bitmap.getPixel32(2, 4) +ff:43:b:a7 +// bitmap.getPixel32(2, 5) +ff:18:c3:c +// bitmap.getPixel32(3, 0) +ff:9b:30:ab +// bitmap.getPixel32(3, 1) +ff:ad:10:f +// bitmap.getPixel32(3, 2) +ff:c2:19:97 +// bitmap.getPixel32(3, 3) +ff:90:d3:8a +// bitmap.getPixel32(3, 4) +ff:fc:da:4b +// bitmap.getPixel32(3, 5) +ff:30:db:c2 +// bitmap.getPixel32(4, 0) +ff:19:c4:66 +// bitmap.getPixel32(4, 1) +ff:33:25:90 +// bitmap.getPixel32(4, 2) +ff:4:6a:73 +// bitmap.getPixel32(4, 3) +ff:e2:60:89 +// bitmap.getPixel32(4, 4) +ff:ab:e7:b3 +// bitmap.getPixel32(4, 5) +ff:fe:68:42 +// bitmap.getPixel32(5, 0) +ff:8f:2f:22 +// bitmap.getPixel32(5, 1) +ff:66:c5:82 +// bitmap.getPixel32(5, 2) +ff:2:8:70 +// bitmap.getPixel32(5, 3) +ff:2a:15:ca +// bitmap.getPixel32(5, 4) +ff:c9:b7:f5 +// bitmap.getPixel32(5, 5) +ff:3d:33:fa diff --git a/core/tests/swfs/avm1/bitmap_data_noise/test.fla b/core/tests/swfs/avm1/bitmap_data_noise/test.fla index e02fd18981ebfa93bca711431fd6e5d825bd1197..3fc588e81afa611b2b69c2a43ffde4cbcb47d514 100644 GIT binary patch delta 1244 zcmV<21S9*NC$lGzihr}l005X0000jF002Z!O+;^Fb!}yCbS`*pY}Ht8Z{kJ} z{(O=64^vmFKp}p|*g1@p9zqu>X^@E8N~imsk~|rnyDyC1FVK=q7{o+`nj3{Va}L{aZeH)6N-Js5T1+pXUsB^QeQDu zQy4Lfc*?HnBK4Ik2?Ns@Wh_{uMYM(HL~;Gx2*yyxfv zM-Xh`5N2lzhJUH*5ac9|z;*?Z1pSt>nu;Nql**s-B*4s9N*js`J`XX)*OADBEQr*Y zC6VpjnhVctCLV9nbnPn(6leHIH$zLDol;I2O7K-!{@&Y+J7*wYBfcwJwwF|5v3UD} z0u}BeZOIS}<%wNoEMkZZj}&qFpX1@=zsV2bUL-C^*Z_rXSqm%WOE$j zkmG14Ie}jVS;!nuQFuzGEC-17!iBHs3jB_@w`nApc|+5EHp&6cuACtwYyLWy%5Uc} z`tHl8$<_VUmqkuXBw)+nGcLNc2Y+_XJ|OU+OJO_))9%3!pcm8WM+o{#ZpN;2FvdaxmU zmF66Tie_shdO6&dQDhQ9B$onjU?GnSH6oeZq-s^63F4@0^g+DK-Ptb}ta?d+AX4{H z#IM83MpAIh#{5^dw z6*;wSTg7tv;Jh-{*RSJ|_LiG-q`m#N9f{dNPM(?e@=T!Zhk|D(4DHzwqXa2On}+#F zYZ#D9hy93EPh;BAI5wJzE0$w6$DE71_J1*-(K-)elC3_IOboW$r{J?ncg=AEJG(jg zL(ay!V=H@+3@=2EVHlon4u-X2f`fdy8@sgEBb%p?&9=yTGqPbCEs+O+>`H3D0%W3>YwHZwNumfh^RP9w14v^+GtVRJ7Vj@}a3X>Mg>;I=!A zJg4z2vUJ;N*%c>&b-N{SW4oE2JAC217->iMVtLi>{}na<8?(p+=nDiw?8dv3v=Ao= z1OOEP0RSifC9~uZJOK)`;AiAC1ONb-5|b(tO#$7LcoISZtdqMEKmvylla3G;DFFf$ z02BZK2mk=BoG?;C?8dts0000S0000J0000000000000000JoDo6F>n&lYJ8#27(a) G0000s!$FDw delta 1230 zcmV;<1Tp)wC!QyeihuZxaJ?S{0062H000jF002Z!O+;^Fb!}yCbS`*pY}Ht8kK#5E z{(MOLAKX-`K+EQxkn9npy+i0$+U+8-YAc=YgOfPmHgS;cETO0S@3j-i!V&i6(ydek zBFxJ(&y2?&i_zrnc9Mm8iUT%x z5ePP5A7*O`41ZJAL6GAl0=6rNr0~y-)>I6^q*VTzrvakAQrZwy@Og*`x{gF1IL1?8InGIm1n468go-Zdfv;zscM$lXOTc&xOuGku0eUf=z87*@%ME8=zNqEy zzBmwKvVZT6cuom`D$nMeVzTH;m~%kC7c9OP1P20v_3f;4)~VS?dAj<5c?wtEp!}-R z5ZkEx04XR05BPS|%&sEX7UHAyfqdM^$DSf7*N)p-ANv-4uz%_GDqE4D{FHe<#v>VKsB84V8uMkA zb0AcNt)S@Ka8pK+Nd%EBJX(WT9u8`RncR|URiO#wuxs>zc$a&zUoKDek^n)Z?xKia z`<0EP;Fyj1pRh4cusQ2!+Wp<+?hD98vLUDmaZt3eRsg=;zbqt z@?|{IUNcWd+UsY~NK90DA7k3{lTzD_$|vWp_T=C#LCS&OaBI*St_`Kb?&4A3QM98= z%4jA=5l3{6I2SYNF`v;Y4-(9lpD+{Gy?@Oi_^i@hbCiOu-5mcdZ;bk2sO&^Cybw8t z?%Jkd8?|DBf_$;PjA$=LwyY*(Yhbypk?lrg+q0av;cO2rw=MGE6tdYCS#L&mjA2V; z+iga+%)uM2pgHhbA$y+J2yD5I)ed;r%-FPBcC+U?jlhOuwgetF_p;&WErFfpRz@}k zuHF*3@hq}*+iBSqCxLalC2(WAnVvgrcV3(Z9<;4-W4oE2Wwk6t^I>6nhTHCd^9IHV z;ODwxq#ez~a?I}joEiTEv)u&f3j`Q4Xm^vz5GM%$01*HH01f~hv-uD_0SfqyaJ?S{ z0062HlRpwo0mze$5<&r&lh6`C0dkWO6D1oMGH7=k0000S0000J000000000000000 s0HTvo6F?#^5dZ*fX>Db6d2nS=O9ci10000900{t50ssJQ5dZ)H0EtFKD*ylh diff --git a/core/tests/swfs/avm1/bitmap_data_noise/test.swf b/core/tests/swfs/avm1/bitmap_data_noise/test.swf index f021d875040c0f2037fc7a095efdee8f1dc94e49..0cbb2f23c3f62f0b07eb3c02c5a38d856071b742 100644 GIT binary patch literal 1074 zcmV-21kL+HS5psT4FCXmoXu5DZyQAze(l6b8YoFyXal5Tl}4yRvDdqa9cSg3`XgUR z4#CL*^+LzHV|&2+q1|z9pSYo(IYdGgh<|{%aO1+Q2PA$1|9}%`Gc&u+ZsL43t$>w0 zGyA^J`@GLSGrR6V;tPP89|7iKP`Nb=0AJsUB>?iS(a>s@EvaX=El*>28w)K;9Zi|Q|=*0R#Iu1^DvNBb}^#1duZG3LXo4Stv2#n(!Ogqu;(#))RxKz zSt%*iJEUz$t2revpRSB>;R^c|)U>K3(@Ijw9xChFN>)?Tk0WJ1$giqmiVQ^2i8@s| zOe@-IT3cBQ>Q2CdO4}ff{$+I`NXpBnth<_-hJNg&({bBkgA859ZERwTddyEn_-W`` z!*)$X3&?TWL`R%Z?j^mJt$)=;PjRxrz0J!Z@Vb)NlU1u1@33jgL$pV0xN$MsJM24H zu3^vaxH@L=2f+!cR<&KrqsY?nZl%BiDMAdbSj=vfH%pnEnkj9T6s4HX70cyHHd9*7 z=5ocX@cv}!kga0t9qwDeX1oMjq;$yksY{xKozXK`*UDSDHFbS6Q_8Ge#CitBu~zJo zr`XtXZBy)mgIo`Dr#2RbR&kqzzZw~}>2e7pr9(F3IuA5bI%Kn7#iny9q~nbVeLDL{ z%fVN#AVE1k7z{pOAH+pvv9Y`OdFr#hW|idhokP;yH?8iMpA>5f{4wMH_UxDGZ-3tT z=_BREqu+mh^6}VU65!e6*nL1?feTHj1GNvROROen(1SXmCUT%l4BCP|v@mJ5D9Ezp zCsIvJ_el@8SJa2FEWr|l0dSl39o*w!%O)Ovs4PicLR;*mlcJj@2cfQ8R7KJ)hT zd`#5%II(>eA|4>N&xed%4jCUp3eWFGw=gz5RWAf=^5_OkKyc+nL=;Ym@y6cH?eF98 zgMdztK&KeZ|HMAB*Dnxs7gfG?%!tviHtbcB0et|5lmtpD24jP&Q;A3m8t! s*HLpy+0_-zhl)m(yow?oW7ogq&$V8y)6FIVhKbkR3?8xdKVIG%vZ^{6qW}N^ literal 1055 zcmV+)1mOEaS5psl3;+OloXu5DZ{tK5ev>x+f~D;)>=w2aR&dVK+)Bja=o_C^-RO^WOBEgZe#4oJm2kh zv)#?C?Y4MvXJ>~OBwms-1d;Lj7FK#0%X^S6aZI6xJk`}5tlJhx@0Et#!Mo{nAloyY zb6LyFDw^FuS=BcAp5pLgR^X`)0m)StDcE*TZQCf7DT>=S6tB%4yLJ+acjV2yED4{-Xg%|YxUI$`)T3a_);+W)u5(=-x5-bA!>(d^WZ#jc_MxEx`w4@ldyb*> zp~AGu+l5%7Owc-};};_}=?b-IxeZR(;G|q`gCkSycF;{3SHOk!Xr8(1;hxMl~nKH7CPn>Dk@*h9$x?^b3Pcoz21&1fL?SFyb`3&OCl}`*{+6V9?ni=xhu+ z=R*|+eZv__(U8>PicIc