Aller au contenu

Les prénoms donnés en France

On s'intéresse au fichier nat2021.csv regroupant des informations sur les prénoms donnés en France de 1900 à 2021. Ce fichier provient du site de l'INSEE.

Fichier volumineux

Le fichier initial comporte 648 616 lignes !

À vrai dire, il est si long que le moteur permettant de faire fonctionner ce site mettrait beaucoup trop de temps à le lire en entier...

On a donc limité le fichier original aux seules années postérieures à l'an 2000 (inclus).

MĂȘme allĂ©gĂ©, on dĂ©conseille vivement d'afficher la totalitĂ© du tableau avec Python...

Les premiĂšres lignes de ce fichier sont :

📑 DonnĂ©es CSV
sexe;prenom;annee;nombre
G;PRENOMS_RARES;2000;12583
G;PRENOMS_RARES;2001;13285

Remarques

PRENOMS_RARES correspond à des prénoms donnés moins de 20 fois entre 1900 et 1945 ou entre 1946 et 2021. Tous ces prénoms sont regroupés pour chaque année. On doit donc comprendre qu'en 2000, 12 583 garçons ont reçu un « prénom rare ».

On remarquera de plus que tous les prĂ©noms sont saisis en majuscule (avec potentiellement des accents comme dans LÉONIE).

Activité 1 - Repérer les bonnes informations

Observez l'extrait proposé et répondez aux questions suivantes :

  1. Quel est le séparateur utilisé ?
  2. Combien y-a-t-il de descripteurs ?
  3. Quels sont les types des descripteurs ? (entier, nombre décimal, chaßne de caractÚres...)
Solution
  1. Le séparateur est le point virgule
  2. Il y a quatre descripteurs
  3. sexe et prenom sont des chaĂźnes de caractĂšres, annee et nombre des entiers.

Import(s)

On laisse ici le choix d'importer ce fichier sous forme d'une liste de listes ou d'une liste de dictionnaires. Vous pouvez aussi vous entraßner en réalisant les deux types d'imports !

Quel que soit le choix fait, la liste regroupant l'ensemble des entrées sera nommée prenoms et les données seront typées.

On rappelle que la structure du fichier est la suivante :

Descripteur sexe prenom annee nombre
Indice 0 1 2 3
Type Python str str int int
Activité 2 - Import dans une liste de listes

Compléter le script ci-dessous afin d'importer les données dans une liste de listes.

Les données seront typées.

Il y a beaucoup de données : le script met un peu de temps à s'exécuter

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier
Évaluations restantes : 10/10

.128013rt=7flb)1 2e/vyg.:,-]8sw9nuph5aS(o3qk_i46P;[cdm0050U0m0c0F0N0g0x0k0T0g0F0x0x0d010c0N0C010406050x0B0V0V0F0b0p040G0I0g0B0;0I0A050n0{0}0 110_0C04051h1a1k0n1h0_0U0N0o0)0+0-0/0D0N0q0D0g1y0D0c0@050!0h0g0m1t0,0.011x1z1B1z0c1H1J1F0c0b1i0c0D0)140x0C0F0A0/0l011L1v010f0$0m0A0F0V0m1F1(1*1/1N1=1J1^1`0@0a0k0Q0b0I0C0I0x0N170A0k0Y1$0b0b0m0T2f1a1}0A1i0n1!2s1X1Z1Y1G0U1 0/1B0A1@2c1F1q1s0*1M2C0N2E0A0I2I1F0C2l1i2q2s2W0`1)2g2K1:2P0b0~0g0@0j2p2!0^2Z1~2$1N2(2*[email protected]*2:2q2B012^0F2+040J2|2r0_2 2?0/32340O372~2!303d0@0E3g393i3b310I2)330@0P3n2;2#1u2@3s2_040e3x3a3A3c3C3u040w3G3p3I3r3t340z3g1l2U1a2I2v0U1Z2A3q0T2Q1{1i3Z1j3X2Y1b2/053)0Y2V3P2L310@2T2F0V0x3g0k3y300I0@0d42443q0?040S0v3O2=3Q0L0@0y2e0D493H3{0A0h0@2a1@3V4p1:4c0H4w3`2%0@210m4B4h3{4604483;2}4a3Q0x1-04020K0B0I0c0R1^0c0l0W0l0j0r0T0x0o4U4W4Y4H3z3{4c0t4o4C2@0@0V3*4;45474 [email protected]:4N2r4P4?0@4^5c04434x4{041@3@2N0q523Q4K4M2Y5l0/544T4V57160f0u0w5a0R5s5f040i4_4I1:4j040,5N4=4D041=0T1x0m0b5J4y0@0s3n0k5+5k4`3c4E0N5Y0N5!5$1N4K0r5^5/042l0F0U2D4G5i5e5%040H5M5i065,5-5O1N5Q0f3s5T3j0@1R2E6j3q0I0y0@2N6o3Q0A5:5=5@645x014c5)6a6c6c655m6m0m0M2T2a2l6u4J515i6d5U6J1y6n6A5.015`5|3|040x1X0=6%4z692W6b6G5+6I5}0o330m0B0b416T6@6#6S2W6U6k046K6M293~6%6$6Z6e5}1(1B0c6-0@4A7d6V5y4S5H0R5H7j5L5*6=743q6w046_1J6|6~5w6!4c0S6%0V0N2`7t4f6 6B5u6Q2%4s042N7i7m304z6%7z7B6{6}7t7I7Y3q7K7M7,3Q4c0v6/2/6;6=707$6`7D7*7J7L357N7S5_722/7x6v7U7W7t7l7F7e6(7%7~7:5K7+8e7n017.828j667?7v7`6B7z3~2P407b0@5{8r5m0F0C0C1@0U8c7#0@8h7)8E0/4c7@2}0_0n3@0m2s3~2s3-2t3#1a2w8)0F1I8Y3Y1r2:0n0Y0!0$0x04.
Activité 3 - Import dans une liste de dictionnaires

Compléter le script ci-dessous afin d'importer les données dans une liste de dictionnaires.

Les données seront typées.

Il y a beaucoup de données : le script met un peu de temps à s'exécuter

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier
Évaluations restantes : 10/10

.128013rt=7flb)D1 2e/vyg.:,-]8swRnuph5aS(o3qki46P;[cdm0050U0n0c0G0N0g0y0l0T0g0G0y0y0d010c0N0D010406050y0C0V0V0G0b0q040H0J0g0C0;0J0B050o0{0}0 110_0D04051h1a1k0o1h0_0U0N0p0)0+0-0/0E0N0r0E0g1y0E0c0@050!0h0g0n1t0,0.011x1z1B1z0c1H1J1F0c0b1i0c0E0)140y0D0G0B0/0m011L1v010f0$0n0B0G0V0n1F1(1*1/1N1=1J1^1`0@0a0l0Q0b0J0D0J0y0N170B0l0Y1$0b0b0n0T2f1a1}0B1i0o1!2s1X1Z1Y1G0U1 0/1B0B1@2c1F1q1s0*1M2C0N2E0B0J2I1F0D2l1i2q2s2W0`1)2g2K1:2P0b0~0g0@0k2p2!0^2Z1~2$1N2(2*[email protected]*2:2q2B012^0G2+040K2|2r0_2 2?0/32340O372~2!303d0@0F3g393i3b310J2)330@0P3n2;2#1u2@3s2_040e3x3a3A3c3C3u040x3g1l2U1a2I2v0U1Z2A3q0T2Q1{1i3S1j3Q2Y1b2/053Y0Y2V3p3I010M0B0@0N0V2b0b0c3g0l3y3j3@040T0y0p3G3:2L310@2T2F0V0y3~403q0J0@0d4g3H490?040S0w472=3;0M0@0z2e0E4m482%0h0@2a1@3O4n1:4p0I4I4C2@0@210n4N4u494j044l3*2}4h3;0y1-04020L0C0J0c0R1^0c0m0W0m0k0s440p4*4,4.4T3z4o0@0u4B4U2%0@0V3Z4 304W4Y2Y4J1N4%0@4|4-0R0b5j4~4Z2r4#5104535p043 5f3c0@1@3-2N0r5a4i4k5F4$4(5n0R160f0v0x5L5I5s0i54501:4w040,5V3j4Q0N0T1x0n0b5S4K0@0t3n0l5=5x4O5z041J2n0n0C5,5v5@551N5c5#3q424`5-630@0s695_0j5(0c0A0n0G0Y5 5e5^014L6d4a041=5)0N5+6r4p5u2W615W4P040Y1B0V2e6x5v5r1:646L5y015h4)4+5k0R5R6P6o4p5U5v065?6C305Y0f3s653;421@1X0n4S606M630z3^196^6Q425{0c5}6m3+6Q4p5:6$6(6(6_5_6;2l6@6n620/4p0S6r6S5L1*2E0n6X7h6D7j0@4s6~6o6O6B7c314E042N3}6Y7i6p0@[email protected]?7s756Z7w6#2W6%7a5=7C6:0B6=7g7%7J7k7m5K7Y4/0J0V0h2l7$4!767w6.4V5H7y7J0B7E7G7S047M7t5$047Q7?837(4q7`5i7|2P7 817|8e0w7*2/7,7-7/4b2l8s4f7V5G046c8H6/0@0G0D0D1@0U8e8g7@7O7:7=8e8y2}0_0o3-0n2s4c2s3$2t3U1a2w8:0G1I8)3R1r2:0o0Y0!0$0y04.

RequĂȘtes

Dans ce qui suit, les imports ont été effectués et la liste prenoms est chargée en mémoire. On peut désormais l'interroger afin d'en extraire des résultats.

On propose ci-dessous deux versions du mĂȘme exercice selon le type de listes choisis : liste de listes ou de dictionnaires.

ActivitĂ© 4 - RequĂȘtes dans une liste de listes

La premiÚre entrée de la liste est :

>>> prenoms[0]
['G', 'PRENOMS_RARES', 2000, 12583]

On peut sélectionner les entrées correspondant au prénom ADELINE en faisant :

adeline = [entree for entree in prenoms if entree[1] == "ADELINE"]

Vous remarquerez que les prénoms sont saisis en majuscule dans le fichier csv.

On peut de la mĂȘme façon sĂ©lectionner les entrĂ©es correspondant au prĂ©nom "ANTOINE en 2007 :

antoine_2007 = [entree for entree in prenoms if entree[1] == "ANTOINE" and entree[2] == 2007]

ComplĂ©ter le script ci-dessous afin d'effectuer les requĂȘtes demandĂ©es. prenoms a dĂ©jĂ  Ă©tĂ© chargĂ© et correctement typĂ© sous forme d'une liste de listes.

Il y a beaucoup de données : le script met un peu de temps à s'exécuter

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier
Évaluations restantes : 10/10

.128013rAt=7CflObI)D1 2eĂ /vyg-]8swE9nuph5aS(o3qLFNk_i46P;Ă©[cdm0050$0r0d0J0U0i0A0p0#0i0J0A0A0e010d0U0G010406050A0F0%0%0J0b0v040K0M0i0F0|0M0E050t13151719110G04051p1i1s0t1p110$0U0u0;0?0^0`0H0U0w0H0i1G0H0d0 050,0k0i0r1B0@0_011F1H1J1H0d1P1R1N0d0b1q0d0H0;1c0A0G0J0E0`0q011T1D010h0.0r0E0J0%0r1N1:1=1`1V1}1R20220 0a0p0X0b0M0G0M0A0U1f0E0p0*1.0b0b0r0#2n1i250E1q0t1,2A1)1+1*1O0$270`1J0E1 2k1N1y1A0=1U2K0U2M0E0M2Q1N0G2t1q2y2A2(121;2o2S1{2X0b160i0 0p0o2x2,102+262.1V2:2=2@0q2`1=2|2y2J01310J2?040p0N352z11382 0`3b3d0p0V3h372,393n2@0I3r3j3t3l3a0M2;3c2@0W3y2}2-1C303D323e0f3I3k3L3m3N3F3e0z3R3A3T3C3E3o0D3Z2~3#3v040o0(3*3K2T3$3O0o2_1j2{3z3+3?3-0o343{363}3=2/3V3d0o3g433i3J3u480 0o3q4c3s3~473%4h3x4k454f4o3.3H4r4e3B403Q4x3S3 4g3.3Y4C3!4E4u0o3)4I4m3M4u0q3:4O464Q3O0q3`2(4s4z4F0q424!4y3,4%4b4*4D4n4X4j4/4J4;3W0q4q4@4P3U4R4w4}4V4 4X4B524t4X4H574$4R4N5b4,4u0N4T5f4K3O0N4Z3|4+5l3W0N4)5p4:4W5s4.5v4^5x3d0N4?5A4~3@5s4|5G535I5D515L585s565Q5c5m5a5U5g5m5e2{1t2$1i2Q2D0$1+2I3B0#2Y231q5*1r5(2*4k055:0*2%5B0`0#0o0 030p0J0*2L1S0r0A0d0p0?6e0U6c1S2q0d0M1e6b6e6o1 1)0Z6o5:2s6b2j0E0$1=6d0J0F0p2#0Z2X0%0p020O0F0M0d0Y0c682V0r6L6N6P3;3u0 670r693r0p5q1{0M0 0e6(6*1V0~040!3r6:3m0 6r2t0r6/5w0`0S0 0h3D6 603a6{0E1)0r6~4k6)70010M0B0 2V765H0E0 2#2N0%0A7m5M72040U0h7u6Z046|7c6^7g6=6@5{7g0%0U4h7F776=0y7A3B6,040e6.7e6_010A1^046V6O6Q0n0C0P0l0R0C7(6X7J7P0 7R4r4#3#6264660E2M0r0T4S0(0f0p6b6d6f1J6i2p1S6l6n0:1R0:6|6t0:6v2t1:1g6A7a0p0s6e02030N0D0Y1=0E6t0p845T447Z7o048B2M830(857S3#7U7X2(7f7@6?7O7n797b7d8U7Z7w740b8Q3 8!6}8,6+7j7x1h7Y7g8J7q6I7t8^777w7y8:308.7E7?5H7H8Y5M7L0 5u367Z7Q920`8S8T2{8V5H9b048F99399g7`7Z7}0465298i876c6e0J6g8c6k6m0d6o9A8k6u3D8o6y8r6d8u0*0:6G8|0p0h0Z7L0E2V8}5k2/730.8i9h7h6-9.98965M8J7D8$9l8(73758~8Z7C7a8/9 5M7i7k8@8%8_7p2t8|9.907za47B9_9r3B9=2*7K7M045j5$7G7^9.9j9.7#0 7;0Y0QaAak3#9t4!7{3?9w655:0F0b0d8j9C8a6h9J8d0p8f9J8h6qa28l2r9P8q6B6Y5/639x8t8d9V0b6H0M7s1.aNaP0p0L0N6p1#8o0p6m0p0%0M9%0ma+3,0 aMaO9(9{7g8S9;0 7Ian779^a295a98 9}8+ah4z949`369ma58=7lbuba048{a@beby9|7xagbq7n0k0 2aaE3?6=0LbS9*a18#bW6;bjb!0`9o5o9eat040yb8bD3?7U020i6P9kbJao0 5zb+8W7_aH9va-650i1g0waQ899E8baU9H8g6p8ja#9N6w8p6za*4U39aKa/9U6Fa=9Xc50Ec7a|6c0b0U2v0r228s0G1d0:2q3/a 7b0Ab/9)9304cvc7av9:b:1{amasbmbwaebs9.bnbZcW1Va68?c(ab7rbI2zbz39afc(bPcR1 b%01bUc~c)a3bl97b$9?39b)c~7QcObf77b=0w7=bN9aap3/daau9u7gcp9$5:1C8N0o0z9Bc99Fcc8e9I9Ka!6scia(cl7ab9aJc3666E9Wa@6K6M7)0RcB1c0@aDcna,7~2jaN8v8x8z8B8D4SdvdKbXdrdW0Adu5Xb`decVdi9sd6d49@c#c+71c%e278bYd3dd5Hc-bCd|bvbFacbHc$bLc/e7bpcZd58Xd73Bd9eqaFdned8R6-b_c?7Zay7%dS6P0R0l0g0j0P0c0KdYewb;8=1=0$ekajetbTd~endj9cdmb-cU7Vez3e7Z9od-d^2z9fev3|aI1{cp7D0T0I0T0+0T3/0T7L0i1Rdx9Ddz6jdBce9Lch8m9O6xa)dJdZ7|dM0$1g8Ccg7b0p0I0p8O0(876dcKfs9Yb60:130b0p0F2M7 8C1S0L2V0=0F8h8w8y0YfEfud(fP6D7bdc8Haaele`e|0de~0(f09,bxeAbgd{e95McYb~a0eUeO1{8)9~f_cQf^f:39eba8g0eebG7sei91e59oe{fse%b?b^eTbof,5 eobkeYd8apb}e/b,c0g4ex7%b@0Ye)c@erdkf)gdeVcXe;44e?1Vcp9z82e fx88f5cbf7aWdCaZfna=dGfedI0dd/gKdM9T6odPa^9Z9#9%g%61fjfl0Z9VcHaVfw8Ofy6h0pfBfDfFd+fIfKcHfX4dfZgMf(0TgEf}9if/d_gld1e1hf01f{bthmd2emhibAa7ekg6c=e*7gc_e5hrgje:epd go0 arf?f;gHf-d`e(ax7$aAaCeE0YaveQ6zghc*hHaleXhLhI04gqgkhMe$e5dfgggagChd8Oe#gtgIc27~5:0%2j0A6qaRcaaTgTaXdDgXa$8ng!9Rg;01cpg*a;a?a^h i1g^ifcp0gg+ctbH1.7a0U1 2W6dfR1)0-6d0$fO8zfE0U1gif8Jim2k6be%gzhFgmh)eef htc^e4hqhlguePhvhCc:ade5hBhmeCaA0xeNi$8;i(i!elhEb,iTgr77esh$eub-h{3igJg=7~0J0T0*0k1ef4aS9Gf8aYcf87fba%idcmcPj7a.iicsikcI0Zjc0,7a9V17gR0+foaA0ci=fYc!8Kja0rjxiQbihGgniVgiei8*h!e8iX7TbBg3jYbEhxg8bMi?f~jTgFb#jQiU3#j0jRj20yi}h-h*hKi~eoj4hzhP7WhRazhVjGhVh`3I0t5}0r2A7q2A5@2B5,1i2Ekk0J1Qkd5)1z2|0t0*0,0.0A04.
ActivitĂ© 5 - RequĂȘtes dans une liste de dictionnaires

La premiÚre entrée de la liste est :

>>> prenoms[0]
{'sexe': 'G', 'prenom': 'PRENOMS_RARES', 'annee': 2000, 'nombre': 12583}

On peut sélectionner les entrées correspondant au prénom ADELINE en faisant :

adeline = [entree for entree in prenoms if entree["prenom"] == "ADELINE"]

Vous remarquerez que les prénoms sont saisis en majuscule dans le fichier csv.

On peut de la mĂȘme façon sĂ©lectionner les entrĂ©es correspondant au prĂ©nom "ANTOINE en 2007 :

antoine_2007 = [entree for entree in prenoms if entree["prenom"] == "ANTOINE" and entree["annee"] == 2007]

ComplĂ©ter le script ci-dessous afin d'effectuer les requĂȘtes demandĂ©es. prenoms a dĂ©jĂ  Ă©tĂ© chargĂ© et correctement typĂ© sous forme d'une liste de dictionnaires.

Il y a beaucoup de données : le script met un peu de temps à s'exécuter

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier
Évaluations restantes : 10/10

.128013tClO12Ă /vyg]swE9huqi6PĂ©[-Ndm0rA=7fbI)D e8np5(aSo3LFk_4;cx050B0O0b0U0u0d0n0N0(0d0U0n0n0G010b0u0R010406050n0s0C0C0U0E0k040V0W0d0s0}0W0Q050i1416181a120R04051q1j1t0i1q120B0u0j0=0@0_0{0r0u0l0r0d1H0r0b10050-0J0d0O1C0^0`011G1I1K1I0b1Q1S1O0b0E1r0b0r0=1d0n0R0U0Q0{0g011U1E010I0/0O0Q0U0C0O1O1;1?1{1W1~1S2123100a0N0w0E0W0R0W0n0u1g0Q0N0+1/0E0E0O0(2o1j260Q1r0i1-2B1*1,1+1P0B280{1K0Q202l1O1z1B0?1V2L0u2N0Q0W2R1O0R2u1r2z2B2)131=2p2T1|2Y0E170d100N0f2y2-112,272/1W2;2?2^0g2{1?2}2z2K01320U2@040N0X362A1239300{3c3e0N0$3i382-3a3o2^0S3s3k3u3m3b0W2=3d2^0v3z2~2.1D313E333f0H3J3l3M3n3O3G3f0P3S3B3U3D3F3p0q3!2 3$3w040f0D3+3L2U3%3P0f2`1k2|3A3,[email protected]|373~3?2:3W3e0f3h443j3K3v49100f3r4d3t3 483(4i3y4l464g4p3/3I4s4f3C413R4y3T404h3/3Z4D3#4F4v0f3*4J4n3N4v0g3;4P474R3P0g3{2)4t4A4G0g434#4z3-4(4c4+4E4o4Y4k4:4K4=3X0g4r4^4Q3V4S4x4~4W504Y4C534u4Y4I584%4S4O5c4-4v0X4U5g4L3P0X4!3}4,5m3X0X4*5q4;4X5t4/5w4_5y3e0X4@5B4 3^5t4}5H545J5E525M595t575R5d5n5b5V5h5n5f2|1u2%1j2R2E0B1,2J3C0(2Z241r5+1s5)2+4l055;0+2(5C0{0(0f10030N0U0+2M1T0O0n0b0N0@6f0u6d1T2r0b0W1f6c6f6p201*0x6p5;2t6c2k0Q0B1?6e0U0s0N2$0x2Y0C0N020t0s0W0b0%0F692W0O6M6O6Q3=3v10680O6a3s0N5r1|0W100G6)6+1W0 040y3s6;3n106s2u0O6:5x0{0!100I3E70613b6|0Q1*0O6 4l6*71010W0o102W775I0Q102$2O0C0n7n5N73040u0I7v6!046}7d6_7h6?6^5|7h0n1_046W6P0%7r6J7P6Y7K786?0m7B3C6-040G6/7f6`017M107U6R0M0p0Y0K0A0p7/7G7X107Z4s4$3$6365670Q2N0O0#4T0D0H0N6c6e6g1K6j2q1T6m6o0;1S0;6}6u0;6w2u1;1h6B7b0N0h6f02030X0q0%1?0Q6u0N895U457+7p048G2N880D8a7!3$7$7)2)7g7|6@7{7o7a7c7e8Z7+7x750E8V408)6~8;6,7k7y1i7*7h8O7S0W7t8^1W7x7z936{7D7b8@7W5I7I8%5N7-7O6N7Q8G7d7`9c5N7Y977i6.8Y2|8!5I0C0u108K9f3a9q7 7+8204662a8n8c6d6f0U6h8h6l6n0b6p9L8p6v3E8t6z8w6e8z0+0;6H6J0;0I0x9y0Q2W7u4V7C9K6c9r8X9r9e9o7C7E8+9v8-74768}788Oa19{8`7ma78(049092ae7w7l7Aaja09a7F9 3C9~2+7L7N7/0n0O0)6V9j7Vau8#7~8,7h8X9u379w9gawaC0%0Z9naE9d7}3z803@9H665;0s0E0b8o9N8f6i9U8i0N8k9U8m6r9a8q2s9!8v6C6Z5:649I8y8i9*0E6I918r6na%0;0T0X6q1$8t0N6n0N0C0W9=0La}3-10a#b99{6.9}107JaT5Na9apa2aLa4048/9rbz8*ab7l8|aHa87q2u9,9r95ambM7o0J102b9Cas100TbZbo99bIar3$at5%av7.aPahaSb.aFbman7#7.0d6QaK2AaM3a9y105A377+9E4#aX1|aZ6f1h0la)8e9P8ga-9S8l6q8oa@9Y6x8u6Aa|9@a~839(6p9+b6cd0Qcf0N0T6d0E0u2w0O238x0R1e0;2r3:bd7c0nb_5l2:bXce9?bU5N9|b`b,bvb%8=b)9bc$3a8.a6c:4A8?aqc@8WacbLa38~bO7sc#c 78bSbGbW04bYb+3@6?b$dbcYc.c`b@aU8$df1W9h7/b=aPc,1|7YcWd45I7$020laDdw5Nc33/5kdj9paV9F7hcc9;5;1D8S0f0P9Mch9Qck8j9T9Va?6tcqa`ct7bbnaYa 666E6Gb46J6LaP0AcJ1d0^b?8MdLd,6Gb88A8C8E8G8I4TdRd*dgdNd_0ndQ5YbCaIbtc)dcc+dm98aaei1|c=8:eo31c_bBc07+7jbKbGd1bQes72aleAdhev60dkbwdH3adob;bP91d{2Ac7dJc{3@aJ9reO6X0%0A0K0c0e0Y0F0VeS3fex8`1?0BeGenbx9Deke_3Ce!9k859mdrel01c8dC3aeYeD01dEe6eeeT7HeV3}ca1Wcc7E0#0S0#0,0#3:0#9y0d1SdT9OdV6kdXcm9Wcpb7cr9#cucXfjd~0B1h8Hco7c0N0S0N8T0D8c6ecSfT0N756i0N140E0N0s2N848H1T0T2W0?0s8m8B8D0%f*fVe1f^6E7cdvd|bNdhfmfo0bfq0Dfs0/1Sbs7%budle|b(e^f63Ceqe@bAbJ8{eGahd3efd5eFf9dEfnfTgc02b}0%b e/d0eHds6=e{eMe}aOe#6J0J2ue.eU04aGgj8Wb|b~9rdEfrgzf3f545fi62d~9_g70#fY8dfxcjfza/dYa=fOb4d$6ya{d)cv81d~cyb3b57tfZ9/2W9=e8fJ83fL850x9*cPa.fX8TfZbk0;f%f)f+e4f.f:cPg04egGg.g$8TgcgEc1b!gfgLghgnf9glf9bHc/gWeXc}gqeQaieWepgvhXetgHg(gKc6b/9ie#ayaAgSffgUhEhF7+e~6QaRf2h!0{ey8P6Agmb*ggejhIh)78h^0%gPgRh{hJi4gVgtdx7.dAgDg!9zdFg:hDh%h;dK78cc5;0C2kaycgg?a,g^a:dZg|a^8sg d(0bhdg,cxb2d/h7b7iw2lhiiL01cc0cczd:cB5;7b0u202X6ef`1*0.6e0Bf@8Ef*0u1hiV8Oivix9`f9c(h|f4h(feg2giigakbEc?hRdgj5ewaIhThOeBb6bRhZjadngN7Q0ze.hGc|ezjgh$i3dtj2eJaNb:e#dqe#gI0{7Yif3jg+iWd~0U0#0+0J1ffwa+9RfAa;cn8cfDa_iI9$iVcch5iP9,2q0xjQ0-7b9*18g?0,fP7/0Fe.jK8OjNjP1fhEgeeLi6afjcgFguj8erj0hPdij6f7jfkbjhhWjleE7ybTkk79jvidjxi5j35Ii8jD7QjFj1gUk3kudDimdGk4dIirj0f8j0i8j`ickHe`kJ5q0i5~0O2B7r2B5^2C5-1j2Fk%0U1RkW5*1A2}0i0+0-0/0n04.