PDA

View Full Version : [SOLVED:] Help needed to find matching string from the collection.



anish.ms
08-06-2023, 02:15 PM
Dear Experts,

I have attached a sample file from the total population of 500K rows. In the sample file I need to identify the matching diagnosis codes from sheet 'Cohort' (Sh2) for each line item in sheet 'Returned' (Sh1). I have created a code for the same. But a sample highlighted in cell E7 where the codes are matching from Sh2 has not been picked by the code :think:. I couldn't identify the issue, could anyone please help in correcting the code :help?
Thanks in advance for your time.



Sub ICD_Check()


Dim Sh1 As Worksheet, Sh2 As Worksheet
Dim Sh1_LR As Long, Sh2_LR As Long
Dim rng1 As Range, r1 As Range, rng2 As Range, r2 As Range
Dim icd1_Arr As Variant, icd2_Arr As Variant
Dim x As Long, y As Long, m As Long, n As Long
Dim DelSpaces As Variant


DelSpaces = Array(" ", Chr(160)) 'Chr(160) = special character space


Set Sh1 = Sheets("Returned")
Set Sh2 = Sheets("Cohort")
Sh1_LR = Sh1.UsedRange.Rows.Count 'sheet 1 last row
Sh2_LR = Sh2.UsedRange.Rows.Count 'sheet 2 last row

Sh1.Range("C2:C" & Sh1_LR).ClearContents

Set rng1 = Sh1.Range("A2:A" & Sh1_LR)
Set rng2 = Sh2.Range("A2:A" & Sh2_LR)

For Each r1 In rng1
For Each r2 In rng2
If r1.Value = r2.Value Then
icd1_Arr = Split(Sh1.Cells(r1.Row, "B"), ",")
icd2_Arr = Split(Sh2.Cells(r2.Row, "B"), ",")

For m = 0 To UBound(icd1_Arr)
For n = 0 To UBound(DelSpaces)
icd1_Arr(m) = Replace(icd1_Arr(m), DelSpaces(n), "")
Next n
Next m

For m = 0 To UBound(icd2_Arr)
For n = 0 To UBound(DelSpaces)
icd2_Arr(m) = Replace(icd2_Arr(m), DelSpaces(n), "")
Next n
Next m

For x = 0 To UBound(icd1_Arr)
For y = 0 To UBound(icd2_Arr)
If UCase(icd1_Arr(x)) = UCase(icd2_Arr(y)) Then
If Len(Sh1.Cells(r1.Row, "C")) = 0 Then
Sh1.Cells(r1.Row, "C") = icd1_Arr(x)
Else
Sh1.Cells(r1.Row, "C") = Sh1.Cells(r1.Row, "C") & ", " & icd1_Arr(x)
End If
End If
Next y
Next x
End If
Next r2
Next r1

MsgBox "DONE"

End Sub

Paul_Hossler
08-06-2023, 03:22 PM
I'm not following

Using just these as an example, can you explain the issue?

30964



30965

anish.ms
08-06-2023, 08:47 PM
Hi Paul,

thanks for your response.
I found a special character Chr(63) in a few areas in between the ICD codes in Sh2. My code found to be working after removing this special character.
Still the code can be better and request your help in case of any fine tuning or betterment can be done.
Thanks in advance.
30967
http://www.vbaexpress.com/forum/image/png;base64,iVBORw0KGgoAAAANSUhEUgAABk0AAAFACAYAAAARVTuZAAAAAXNSR0IArs4c6QAA AARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFKsAABSrAVzzIdoAAKrvSURBVHhe7f1PjBvXnuB7/tKGcC EKli96G40HjB cJO6QCLfxnjWggn0qu1CUrPQxcgCBm9hLQbM9uYmp7tU0 7OetPdlV3qLlUPmLV47iTmjzVv r2BsholYJ6SqMq3aiBz4YVXmjSuyBLswf3/N U/urZliXNOxAky/pxgnPhDJsn8foywksHg RsRDMaJc87K6enpUCrwzTffyJdffmle5fN3/s7fMX J/PKXv5S/ 3f/rnkFnKEf/5X84dZ/kv/NH/2l/OCKWRf34V/I9T/7/8l/t/vn8v3/yqwDzgjnTwAzlfI9 eFfXJc/ y8i/2jS9ycAVIzroDlgvhc kf/a8vvox/JXf/if5b/68x8IXw2zx/EBzIm0e0jB fO//u9k98 /L9xeAs5eJY0mZRpMtHCjyS9 8Qv5e3/v75lXwNnxb/r8I/mjv5x0Yf h/MX1P5P/8o/ SP6SO0M4Y5w/AczU6OZYXNZ3JwBUj ug fHjv/pD2fpPyW8Hvh/ODscHMCe8RpP/Yl6E2RqbAZyl0o0mZRtMtHCjyc9//nP5 3//75tXAABXnD8BAMB5xXUQkI7jAwCAfF4y/xZSRYNJ3HBYyWhhAHDucP4EAADnFddBQDqODwAA8qlsTpOq/PSnP5V/8A/ gXkFAHDF RMAAJxXXAcB6Tg AADIp1RPk2ngCQgAKIbzJwAAOK 4DgLScXwAAJAPjSYAsCQ4fwIAgPOK6yAgHccHAAD5rKhleHp66n2JhhftLNZ9/PHH3noAAAAAAAAAAIBZmrs5TQ4PD X69evmFQDA1aeffiqvvvqqeQUAAHB cB0EpOP4AAAgHxpNAGCG/uf//L Yv6rX G//G34MAQCAucV1EJCO4wMAgPym9f1JowkAzJA mf/v/3f/W/OqOjpcfgwBAIB5xnUQkI7jAwCA/Kb1/Tl3E8EDwLKLz VUxQIAALAIbNcxZRdgWdj277ILAADLzvb9V3ah0QQAZkz/dKl6AQAAWAS265iyC7AsbPt32QUAgGVn /4ru9BoAgCzZjsbl10AAAAWge06puwCLAvb/l12AQBg2dm /0ouNJoAwIzZuv396b//s8Tyb2//e/mTP70t/ ZP/q38q3/zJ/LH/ pfecu//OP/Xv75v9iOfH4WepsrsrKils2eWTNjg13ZXDdpWNmU3YFZDwAAFkb4 qWqZZGNrq/Wd4VLG9j277ILAADLzvb9V3aprNHkx3/1h/KHf/Vj8wquepvro5uQXCQD54NptI4s//yPbnmLOjPL8MVQnn/7rXyrl2ffyjffPpNvvvlGnn3zzFv033/6b/8k8vk083KOKZ OnmzW29I9Ni lKyd98ycAAFgY4euXqpbz4myu6wayGzy0YmvYGfRkV6VrXb9vlvX1Tdntjbcc7Jp0x5d19Tmdl7 O8SJ0ztv277JKqt nVw3riSSR13R2rK1VNdoPdSN17S rGIYnPbapYCyqVj9D PVpypGVu8qHlqLcs1rRYyiq1sbdEWqos00zZ6Uw9f00tXY5lV6acLMdtev2M673w/qRVfZzmedDAuaymfQxpeeIoWPZnkd9MWXEl348u65kPzdq /8ouFTSafCh/cf26bP2nT8xruBvIo4fmDmD3vnD/D0C15uUcU0E6evel6/3RkE7fb/Xf2/BWAAAAnANz Nuxtynr9aa0u8cyeq5FOT7uSrv5Tnav4GP1uW5T6vV12Qw1suAMeTfbmtJtHYyetO13GtJtWm6m 6ZuC9baoi/PRtt6SdZGe FxfOo2uNKu8Ce2Yj95mXdpr422GwwNpqV8dTmmZo3zkqreCEmXV70jjuC31 M3rMmmZRZkGcqVz/Bt0vOxJ5T9HXdNUppwsx20QR/wGv99gpOo9fIKvkmN nfc9G9eymsExlCeOwmU/T/kNOMW1IXvmveii06/fX5PLNW/D2To9PR0WW/5m G/ 8T8e/uPQ8n/4f/x/LdvlW/b391W5nB8HrYbfgNU6MGsALLP/6S//P8Nvnn07cfnj//O/Gf7LP/5Xw/f 5R8P/ i9fzH8wz/658P/4z 7NfxB 596i 0zOtxPPvnExDJW5TnmoGUa3AuEVTYd6kvV/7y0hpwtAQBYTC7XQUWWtOugmTlomeuUxrDTN scja6vGp1h1kfP5rdjf9hpWNLY7wwbXp71ovJ9ME59/6AzbDXGZZF2Hae3i4SRs yWzTwcH/7 GL/eNvuApf4buSvtYNjS9R3f3wuHZ ecD4tgf518mM1XPsrktwy/rKLHbvG0zKZMA67ptOVxWtzSVK6c7HGYMMM7vfle88Izf1f91VNmv3WrF/eyKpMWV85xFC77 cpvoFRcjvv1tL4/S/c0 Ud/9Jfyl3/5R/KPzGvks7F35Lee8cg0cG6oQ37isv0v/4V88 wbbxiub77 Rr7mtvufNnf Ytts kmZdzDOc6AACgha9fqlrOi3m6nurdaZveJfoJ7CPZ2hg/Alrb2JK9I7Uu46lQvd2RfmLYe3Us7TtVP966eOL7dhWLu57c1127W9diT9DX5PKa uf4ZNTDafDgnqqxhty4mvPR38Ejeaj ady4qkINqV2VG2pHOL73IPvJ8Uzu bCpeRuJPHw0ISVzlY9y S3vODRscom0zKRMA2ddZjaOaZpVOW3sqfPHUI6yTuSFVVEH4X3PwrmsZrE/5IijaNnPVX4D5eLyrzWyvmv8a4fw915VS4lGkyvyg7/8S/nBFfNyyga9TVkPjWG3vrkrox68Az05cHQcVT0 6maka1l4LLiB6PFgR9vrMVf1poOeF04Qhje qv9hTzBJn 4 5KUn PxKPC7FKU3jMKPjfvrpG30usvhdqsZpUdvuTk5Lnm1nVZYeLy7zOW/R8cxyfF7gbHg/djOWP/nX/9prKPnGLP X//AfrNsFSxr7OUYfohPOqUrmOS4nWzrczk3 2Jb1Ub9U3bVUbxPqXho73 glPpY2AACYD7brmGD593f fLT86e1/J//63/yJ/IvtbfnDW7es2weLXQW/WRx G3nXM019R0A7lnbdhBXaJuu6K9DPuP4qfj0V8MvBfzOAzrMmJugmiNG5L3vnlEbUu2W bv7v0caVhOtv07WKo9PhS1f v9ZbSvBjfcVuv 65D6akP9/6H47QgDeXBPXZuXrXubIjfrCudjsrUyY8HMMh8V5TcinpYU/RP9G60l14K7odNIS6BAmfpDHOlzm/ b0jvX6fPnNNOZYeppyignP6yu7ITqdrC74w2F3RpV5BRUfJwm9r0igrKaxTF0hvvcyBTzO5392l xrZH3XqDg02/dfsBT9/qxsIvhp0oVfVxeix8E9M W425am9ySKuhh R08OHB1HVW/cbdfVxaN5HdJt1qUZHndVj7laVxfD9aYXTkCPr/qO5Uuiu2PSY16rLb24xl8o dM0pi/u/fS58PLSTqYlNd8Tt51hWaofBHqcvWg2dTxNqU8uIGDhqXOv0 L3MvEX2/vhJY/J51RFHZ 2c9zofkDF8pzHEvTNhdj5RvPH0g6flwEAwDywXccEy61/9s/k22 /la9 9zv54ssv5PPPP5PPn3wmf/bv7T1tgyVLsd8sZX7TjWVedwWO1TrL9ZdrPE6/9XL8zpzI3ATREk 0FrBxLWg1mcFNozln27 DZVrHx0j/JLqvJ8Se6l67LP2gIS9YsuYYqF0W/ Hi G1d89RxFfLmI6bn36UTyz2 sXnKR8n8FqXPbfr3YaNza/wEeZm0TK1M9UN3TZEDcyNU99TLnc5xg7i/5GlktimRppLlVNs6kgN1yj1W3w 6cV036OsHFBud/mznDC2xr1j3PRvXsprFMTSLOM48v1Uca2OjxrztLZWDCVQcWvCdZ1uKfn8uQKNJT 4ETxi3OtJXqR4O 3LQaZhuvDW5ut2RzkHfvOe/r972dO/bT2Uttb3eth9sqCrqWFpy4E3uNP68tWubuuJtdA78 Pp6ojCzun3HnDiLpckzeCD6oQ39Jd0xE0311RnN/6hKn2WyqXFaOqO0pMUxedtZlaW6YN/x777qE7Mfj59PT3cne9JAYIGpPd7pv6 / Xq0hNfb/nOXdU4dH5/eOcccx/r9aUo/N/kTgo3PL/o8qNOkz4V Wv3cBGnVYRyMzzuj8zIAAJgH6pt64n///P/0R96P2c ePJHPPvtMOrud0Lv2/1zk/83i9ttoY0 tD37HhH7D cNqZF13ReX5XWcz8fMFfmdi9lTNTPxvWsdHmK2HRTBkla8v3kPe3absrI5/z v9Lnty5g3x2sjUZyMNgr3Nyh/Qys6HxWBXvJ9Cre2M4eXmLx F8pvTqLebWoIb7bYhhIqlZXplmtYg4JJO3cgw2se9Rd8D1DeH10vdtyqepvLlpL 3/K8t9T3ofS 0ZHtqw3BN5rqvuO57UfnKahbH0HTjOPv8ljnWokyPRrVvuvYmUkfnxP KfH/Of6NJ777XsuRd3N0KWpdqsqFOXEemJmobV Xy/XfknVGX57oE16ZWrQNViSakqzdGF6ytA3Wh6K1WF8h6wLc0jY7c3drw01LbkFujC /xkzG501RUJC1b/gGiPXyUvFBx2HYmZTm6YNc3NHXrth XfgLLrC3fwgrMMXWtNVr /M//g7f86Z/e9pY//uP/Xv7pP/2n3nvBXCa6x0n4M7bFWdY5NXR8ek9umONYvz 6H1C1POexsFBax ccRZ2Xt0bjPPDEIgAA88R2HRNf/t2/ /fyufpB z/8D 9b348vmQr /iv9m87ht xI0euhQNnPn6HBo6DfCmz7d3yp/PiIsc3lYa0jb5/z92qP2u 8S/Dje/Jgwk4X3LDtNoPjSi07q9IJ9tmKOOdjpCebdT1 fksObHf9YuYtH/nzm5/XSKx2qqDxYM30Vog3HhRNy3TKNH0 hGLp3JA93UCo9pTi8zCVS1OpcjLDRjW75mFE70e PwR25Eb7jLjWgeu F5enrGZxDE07jrPNb4XHWu Od72V2ZsoRO0amUve78 FGJ5rssGom3G4y/MsJVvHSqTJTNCjGw6C7n jYXISE dUbUZlmdk9K6MrLLDgxl/2Q6 B5MunX8qTJ0 85be//a3XiKLf040lz75Ry7e60SR8kZBcpsH2NMBcGZ1LLOeM qpaq9EICwDAPLFdx9iW/ v/7f9uXW9bpuPsf2dWqsrfmWYIEC05DEh /tj02prMXntNn2b9syleNjdP2cJrjmros3FL2FP0Z9tugNULUcXRVvzLfGqgq9JOd8hOnjvSld9V 6n797rai7yUSi/VbA0HlSQlqmWaaBsOoPzaZWN0jnTVKyc1H7 jmkYDHoXepOO yPodJtlhx3LoVQd5Gu4yiyrWRxDs4jDmIv8BgrGFQyTOHkCeEPFoUXyPGHJ8/25 I0m4SeNO OuoV5j6YwkWscqSVNDGqM9S/3dOpC w9MOpcyqLEMHTSsY6y6yHGV0hQUWm9rNI8v2v/xjr7FEL7u7fzFaf/f/ T/K//j/ p/kP/2n/3dke9tyLo3OJZaGkUkNKgAA4MzYrmPKLlMxB78zp6OK35mhm Zlh1YOhkPSpv6Q4PwL79dVLc5Sx8MPGrZijVpFJjtP5Q/5VcUcObnzofQ2/V5krYOy9yLOIB8F8luZeOPBVNJSYZkGSqfTDFFXpYrSNLGczPda8un9YASdGY7SUDa/pRquYmU1i2NoFnGkOoP8BorE5TxMoqHi0Gzff2WX W80Cd0U0y2IwcEw6G3Kuu47Fu614JeTei904TUNx215Z9ekZRAapzaY0b9MmkwXJB3W3aNxI4Lu vl3VPptqVmVpDhqtu7MrvdEZbuDXa9bkcQCKyzqnWo/PgfTMZGtzJe1cos7Lm0Fig/MyAABAHoV G8Ue5Mi67pqlSn9n1kJDoaq8vbMZ k3nl9PmevawKXq7dW84JE0PYXbem0zOmmkMS9yE7In30O oUSsYzi5 gzUYgz7/DTd/wl/Hp4ozuebDN55UuvxE2GeTj3z5rZZpPFi7bM4j1ael2jINlEzn4JH/4H6VDTkl05SnnM7mxn1c2X0lvu 5S5bVLI6hWcRhdzb5DeSPa/Dgnndd0HKdzETFMS3z32gSjIupdZtSN2OyjboSb1zzupFp3aY/P0a9GVx4Tc9x26Slrrtw kYz leRJj2Bmsmrt6iLTn1hHd3JKjazsgzNA6Py2TTdw/UYwaN6BZZY8KRieNFjKvrjKibfc1mcZZ1TrcdnXZpB4/BcSTmXjM7LjfF5GQAAzAXbdUzZZSry/DYK9aQPxhFf1y0GmdddZ6Cq35kbe NJ9Y 7od90fjl1rRn0x80Pb dvpq7ZSj/hvxxs 3fZxZ1pDFP7yDuhFq/ephm2KtSoVdvaVseHbjAbP/A42H3H9NYYD2 lGyR0XXvHQwq9jZ7YObEPmLkXVnI3MLrnQ0 QrONWkU cVHq 85Ejv4XT0pNN9bnox0JDmhVIy9mUacAxnV488SGrzNw38Tl9ZpUmi7RySpRx0Dsj3kNQpd1/sr/AzfLC XbNr u Z8mvhb2sZnEMFa/fNPOd30DefJuOCer4SiuSZL79jNm /8ouCzE818ZeXw46LVWcY41WRw68EtRj2R1IK/qmt/3UqMqLpkdf5IWfSiiRpo1b9i7fx8fqWlRdaBfeUV3MrixrW0fSP iouCKR fV6l5ucWG76p0vVSx6Tz6nm Iyf4/SwFHM4HoX9XKJSrM9d/aPST4sBAIBq2a5jyi7TkeO3UW1L7qrrpPC10w3zuG7WddfMTOF35qTrsM7B3ehNThv1uVbnQPpc s43Y9u ySy56fgO1oxx7kyyveIs/YXTsprU PvQ8CMfjRrh6W6TTH2bWZW/T3z5Y6u01b0LqxOdMb69GkbF2nfIxkN2g65g6BsJp8pfJ8zvMTz4U1 0Kp0XVtwo/Mrn0Sl3a0pF 0bRYzKRMAy7p9Bq o429KytNeah/Gx/F7lvNKk2Kczkl1GTrSA8zeTya28pb/INXhuEAepvj93VXLGVc/6FjY r7d459z8K5rKZ DCmucbiWvcVc5TfgGpfWuy86x0V6cdm /8ouK6enp/rfuXF4eCjXr183r aL3vm8/bWhDs74CbIq uDQkUTiGKjVehJC/bfescZPbgBYLP/zf/5fpPkH/9i8qs7BX/ v0vhv/xt59dVXzRoAAID5wnXQGeJ35tyb fGhnyA2N0sn9bI4K/4T0jp5GTdGyYezc1emMzSPaZqFZdmnXJHf TSt78/Fnwh yfS8Qd2SRnPNN1anOFobgJmIN19XsQAAACwC23VM2QWZ J25IGz7d9kljXmCeG12kxjk4A/R0ug49FgiH47OYZnOzDymaRaWZZ9yRX7nmu37r RCo8mcqXsz5Cihbq5e1zN9tCmMzw8sPsu5uPQye/7YokH3yvRlcvdRAABwvtiuY8ouyMbvzMVg27/LLmkGXotZQ8qMujIt3sTFjdicESnIh5vzWKazMo9pmoVl2adckd/5Zvv K7usPHnyZBif6EQv2lms /jjj8/38Fy6i/TuHdm519XDy47ocWG3796Sjdr5OgkDy0Z3G5yW2Q5LoRtN9ORdWRjqAQAA JbnOmgR8Ttz3s3s AiGalMaizx0DPmo3rKUKebHedunOIbOxLS P5nTBACWxKeffsrNAgAAcC5xHQSk4/gAACCfuWw0eeONN8wrAAAAAAAAAACA2aCnCQAsCZ4gAwAA5xXXQUA6jg8AAPJhThMAWBL8GAIAA OcV10FAOo4PAADyoacJACwJfgwBAIDziusgIB3HBwAA bxk/gUAAAAAAAAAADjXaDQBAAAAAAAAAABQaDQBAAAAAAAAAABQaDQBAAAAAAAAAABQCjaaXJD2pVfk 0oSlfWg2XUKD3XVZWVmR9d2BWQMAc6q3mXK 6smmWq/fC5bNnnkrYSC761nb2LjGkSctIVXkbbAr67FtV1wiT3xuU8XqwJrmcfmOlvVdtdamYFlplrxaP1 s0b5my0x58vyaXKtLgWHZl8u9axp6ix5VdvrKrcj8qXzf5673asgOwxBbxWqGQs/6OtVnu792lwPExwvHB8QEAcQUbTZ5J5/SJnFqW/Zvq7StfyQ/e9LcEAMwZ7wK6Kd3WgQyHQ2/pdxrSbab9gKhL 9iscOUaR460OMkTnv6hWG LdPqjbb1lb8NskCLxub50Gl1pFvxR1dtU5bs2Tu w35HGcVvq8YaTMmVlyWvw2cgP5YrzNpIr7Q0Vvb/NeNmTjFqZzDX Mvl3LWOl8HGVyaHsKt2PKto/PG71Pr2yA3BuLOC1wkRn/R1rc26 d5cQx8doO3/h ACAc v09HRY2fLR74ZX1On45r7lPcdlf39fnc/Pq4NhS2QorQPzGmCfOD/K1/Unn3xi/prsoKXikZaKMaw/VNfRQ2l01F/GQUttJ8OG vUQ/O2aPNc4nNPiyDm8fmfYCPKWi6mneNoKh2enftSofDSG4eDKlJX9s/F9bnp5c027Ld9VcIu/XP7dylgpcVxN4lp2xfej6e0fzvU pbIDsBwqvw6a82uFwFl/x9qch /dRcPxEcbxMcLxAQCpKp3T5PAvvisf0ssEAOZYT 531T ta7GnpmpyeU39c3wifX FyMae91TS0VbNrHDlGkeOtDhxD2/w4J4cS0NuXM2Zt8Ejeaj ady4qkINqV2VG oXzPG9B9HeIaUcy8moAKouK4up5W0GaZ/IMf5Z1W3h46oKJepipvt ijMtOwDLYdmuFc76O9aG793FxfExfRwfALAoqms0efwdufOByM1bX8trZlVV/O6CugtiaNzHaL9Fh/Eg42PGx7o06u6LZl1vM7xdSjfU2PrMNJrPhJfk55uivz l2zTbrEu052Q8D3pJds1MS4ufr3iYmtkukdHJ/Hgs4VnKx1 Xp3wdt/Vk13/2PuQoox5HEtuN68m13Nz2iey85 MQXmr92PatIB/h7cwSHnrIsVydwnLIw3h/iB1T48KX8Piv9jKtrqzc6rogk5dRN zgAny17r8Oqa qK3D17qOy8brGUTYthfM2kAf3jvWvEMn7Oy9T1o veJpT9E90//iWXAt TZUsK3 bruyE4h3s7nj7XGsUSYaMvI2Pq9h5dhb7nDL1 DPyX0kZZ0jNo6tp1kXR/QMApmkRrxUszvo71uY8fO8uPY4Pjg8AQKrKGk2m38tEj93YFDkwY0sG42R6X/TR8SB1X8T4WI3emPHSkX6wTX9VdhIT7eo4VqQpLuNd2tjT6H1h7qyO41aLSqIKd3xTtLZ1pNYfi FqtvsWC I9k3OCvv2xjefDC0XHabq4m07JxqyMNOZZ7D2Ib9 7P6MszT/k6butY/z57/bhyqUePvlHe7EojMn7oQ2m67UQjmftErrw7yF2WK7KzGh5f9VjadX1hOKbLzB9K1YSn52rQb g4jra8p2Zcy9UlrPx5qMvJ9ng7taGsr6v01E9k23zelpaqyyr7 K9Q/0SdBSYJ924oyDWOqtOSN7y1y9KPNcymT8Bu1C6L/xBYPGHm6bAK6H1dnULUOeTW Am0kmWl9zG9Lx 36yqf62o/X1HH07F3nhqdCivJm U8mzvt vgI10v0vDJZifhL5t pjCthyeNIRtmV2Y mtX MlKl3AHC00NcKZ/0da3MevnfPEY4Pjg8AwEg1jSZT7GUSZjvB9 601ddKSw7Cb2zs V8Qoy6Lpguk lIf3YOsbclRcKM1RMcR/hFf29r2bmR2dzK /A1bGr0borG4UhswUvQ2m orV UzHs6evtGqvtzfSaYvkZaUrpw9v3/o InmKcpTvi7butX/mK1 XLnV40B2d7y7nXI3dMfb 2zRiFPkzXuWvOG11MXfuBtvTba2vdqR 6MrS/MEUmt7fPNfHXfeZg8fjcJzLVeXsIrkYbTpxi3p6OPjeE1d144n/LMdq9WX1eytXQ6XuK9W7pdKgmscVaclO7y eB05us1QY5Za0iZgj9iQa171NaMNuL1Nr6GjqHBPpOAHja2bfJmy2tjzGwHVXqr2c/1vS7YjcVSTt7TzrEvavfNBUB/eor/j9A9O28MBdsXjL5//7DKuhi2Pecqu2H40vf2jinoHgDwW8VpBO vvWJvz8L173nB8cHwAACpqNHn81xfkQ3kmV6c6l4ltvMy08SBNd8RRl8XxF87koSBscZjPOnUTL TCmp5P0fKanz5aWmlz1W01kfP/XDzvyRPPU5Clfl21d6z8wrfoJGTwQv6dybOzRyuXNe5b8ZZnoUVxfVWt1G0aJq8pSKsiD1liVyG rzlM/YMpSVPe7BI91ZvDqucVSdFufwYo2b6teS3xAXOUcmBT9AdM ioKFD95bq6M8WpMMM/0hbM0 FxX kFS4rr3fUivqR1ZIDHYf3C0r/EIz23iuft/TzbLG0b8ie16vsWNp3Jn1/B8rFXyr/jmVcnut3WXrZFd2Pprl/ROWtdwDIZxGvFc7 O9bmPHzvnj8cHxrHBwCcdxU0mrwkf/1XL8uV21/Jmc3/rhtDgi8Rs gndcP0F44e3mm87WyHffCGIAqnsa6fVJ 92tUbkS9 f1xL15sYc8qh/qsyL/U4UnXeKw3PNNJ1d8Y3ftXFm9cRJ9aolF2u7mHNbH Y4X5XKdNgky6lMSkP1ziqTotzeHXR7Vs2XsOXA/2dEnka7eiq vWj3og3uhVi ZFWqqwGsvuO6R0V9KLa0JM 6ifo9K4c/T6sPG9l69n0klS/Lic8tThBzviL5T9fGc9MvOwqOOamuHlK13ALBZmmsF46y/Y23O8/fuouP4iOL4AIBzrXyjyeML8lcfPpfv/8ELs IMhOcViCzjIXa0UZdL72aUbmWfzZeFHnYlMhfDKA1nIHj6o3tf5X2KE7jNkmP9lzVX9RioOu Vhmf2L33jNxgb1i/AyLBDbuXqFpZnRvvDzOKpWur4uHqIXV3Ga2LpLZ6PaxxVpyVveLl7ZE3iD1NQWS z I 0MmUV9IBL9CjckFv6YQL1y8vysFtIybyVrmczBERRFcU/Mf ly3haYmVX9THnqXjfHylZ7wBgs0zXCtpZf8fanOvv3QXH8RHD8QEA51npRhN/aK4XUpvmZCapzBMOeVv a1ty1/plYZtjJH0oHjfB50NzMeQWDC mGzri8qdvww9M7u WG0rKH3MzPnma o5O7eqap3xdti1Y/4U41uOEi6BA/nKzqTrvUyhLc7Gm5/MINypEGzkcy9UprFntD7Pc76YhLf35zyXpXOOoOi2u4ZmeS4nvgKBxLuvHSlL1vfbMj7TRXFzly 6roj7PyeSuZ9sEjVVNlfkSXiz9P/ov/AJ6SRNlVfcxNY983Stc7ANgs07WCdtbfsTbn Ht34XF8RHB8AMD5dnp6Oiy fDa8fWU4lJtfWt4rtuzv7w/j p3GUH1VDTt9syKs3xmq75yhvpsa5n0mWOdt0xqOt gPOw31mfC6g5Z6rdfJsBGK6KCl18XiNtuGo0xPoyUu9VfLEtdo20ZH/RVjzact7ElpCYzjj382HxNOKL1 3H7YkaQWKF nbV3qX8kukyzu9RiUQSL/oxU5yi2I13mfMGHF1jlxDc rH0tZms PyyK8n0WX8Tau5eoSllJqf0graz/uIvG4l5U2oa4dffLJJ avEFtc5hgLr7MeX2HmM7Ese/zyLBiH63a2Mi Vt/TjMBqFJW8xts95nNLspyP62eC4KFZWyTSnhGdLX0yevPnbxsvZcEm7F2b8OylZT55pxG Rlv/Kytiky/p2njzmKbvC 1FSWvlMLe1hk8oOwLlU/XXQGV0rWKSeQzWX/OQ5184qTRZp5ZQs4yl87y45jo8J eH48J3j4wMAbEo2mnw5vCnD4ZXbn1neK7bkbjTxmC 08BI70wdfJOMl9qXofUHoOIIvmGCxxGv5MpmcRluY/rrExUPwRWaN25JPyw2F7PIKlUfZb8RIek14Zl0k6Nzl67itx7X J5dJNvd6zNzfXMtNy7tPJALIwyG8Uf2Y1wGTzkhZ6G2tn7dd1AVLSrk6haUV3R9MOhLHlB9evI5 d4slVVtrEus7m/GNIM2U3XuI/FJTENuFlvH2wvxeKQ8uRlkgcZfLmiddhssxtefN/1ISXyfnKTHMivWqxnNs9DnlLq49kul22cc b/bgKcUi7Sxo9M4vfnv8yZZxMR3gJxZczj85lpzmUhS2P09o/8ta7fUlJC4Bzo/LrIM8ZXCtYTDqHehzyk/dcezZpspeTrYw1pzwl0hFe0up9 XB8TI6P48O2pNU7AJwPK7qhQp0Q58bh4aFcv37dvJqh3qasNB9Kp39UYhitBeLlt6vv8crexD6p FclTvuetLpbVYFfW6/fkRqIeB7K7Xpf22oEMXXe KsNaYp9qm8 uqr5pXhlV3K/C8LZLC7bua Ce0Dc563RUyzK2veZuis45 FRc7jeagfAPNnEa D5vF8yTl8OXF8VIPjAwDOj/ITwWMh9fwBM Ua95kxJYMH9 TYOl5q/gn1qgzr3OmfqLITWVvogWt7cqd9LI3O3eiPk7nO2yKm2VVK3mbmrOOfhUXO43moHwALYxGvFc4U 5/BzheMjJ44PADhPaDQ5lxwnPgNK8Ce870pzs evMHqbTW/yus4t972vyrDOm8Ejb/pCWa37rxeRN FhoyN3Y79O5jlvi5hmV2l5m5Wzjn8WFjmP56F ACyORbxWOEucw88Xjo98OD4A4HxZefLkiR6mS KLdhbrPv74Y4bnmrbUobl6srmib0JnacnBcC9fg8tcDs81xfzOhTnIn9nXogrGV2VYSyrS7T5UX o0FHwoqYRHztsz1AQDAHDg310FAARwfAADkw5wmALAkrGMVAwAAnANcBwHpOD4AAMhnLhtN3njj DfMKAAAAAAAAAABgNuhpAgBLgifIAADAecV1EJCO4wMAgHyY0wQAlgQ/hgAAwHnFdRCQjuMDAIB86GkCAEuCH0MAAOC84joISMfxAQBAPi ZfwEAAAAAAAAAAM41Gk0AAAAAAAAAAAAUGk0AAAAAAAAAAAAUGk0AAAAAAAAAAACUco0mj78jb1 16RS6NlotyaN5aZoPddVlZWZH13YFZAwBLYLAr6 rcps9vwbLZM /FWbZdSd04rCebsc 5fWzT2zZ53nUJbyC769FtVlY21ScdJfLq Flrmi1pWd9Va20KlpVWNM2ZstMUfEcmlyrS4FgmZfKf5zgI1adz3UyQr zmcf8AgDmziNcPNkt5TWFz1tcZNkt87cHxYXB8FLfExwcAnJ6eDgst 98MRYbDK7c/G63bvzlU674Z7oe3y7ns7 8P512/01D5lGGj0zdrAODsffLJJ avAg5aifNa6rnOsq2TfmfYUJ T1oFZMY4jtMrOFqdjeAet6DZqzbClPyct9VeGRLz9YadR9LOWtAR5aHRUyCGVllWONE/imCZ/XWOYd/fI5FomFddZEEd4nRasD5bMenHgXHbzuH8AwBmzXgdZzuuu59Azu36wseRjoa8pbBzT6fxdWQXXs itTTpa6DeIIr9OC9cGSWX8hHB8cH5VbouMDAGwKNpp8Nrx9RX345peO692XRWg0mR5zocHZHSPs E dH bou02ji/bBIXLha0mQujuMXqS7scZiL5vgPGAdlwrNe0CeY/Kf8uCpSBja2HzfF8za9NLumyZafKrjFXy7/9jgsx0H4B5z5u4rTtGvZzeP AQBnzfU6qPg5NDhPz8f1g82iXFPYuKZzWtcZNm5pWoxrD46PIH0cH1VZpuMDAGyKDc/1 IL81YciV7733KwIvJA/ L5ad/KSPDZrAADLY/DgnhxLQ25crZk1rnpyv6v aV2TDX FUZPLa qf4xPp ysclQuv5m0k8vCRvZO Z/BIHqp/GjeuqlBDalflhrrKP773IKWLfxHHcjJKcIm8TS3NVddfXo7xz6rONvZEXUPJ0Vbe46AK87h/AMCiWLbrB5t5v6awOevrDJvzeO3B8eHj Mh2Ho8PAOfNdCaC//Bl VvzZxX8cRn1mIeh8RIjAxQWGXMzNoaiNw6mv663Gd7OEpYZMzO8PjON5jPhJfn5pujvHek2zTbr Eh1e1G3c0LS0 PmKh6mZ7RIZncyPxxKepXz8dXnK13FbT3b9Z 9DjjLqcSSx3bieXMvNbZ/Izns DuGl1o9t3wryEd7OLOExZR3L1SkshzyM94fYMTUu/Mi4qfYyra6s3Oq6jOy01lfVVatKwU4o0sHujpem1rXgUnggD 4d66teyd1mElwwr9b91yF 3A9l0u roE5GYxWXDc9Yu1ziwjrrB0o8zSn6J6pMpSXjYq4mb1YZaR4fG6F9Ru8s00xTyNTjz8i/H1bWcVBOah5dneH AQALZxGvH2wW8JrC5qyvM2zOw7VHKo6PaurYhuNj8Y8PAOdesUaT117Iqvrnwx7L8O Vtv3UsyqLyrSVeaK02Rg6HXgjzcMydI7wuyKd3Wgb9eLwct6TajX5q9zbq0pSP9YJv quwkJgLTcaxIU8Zh9TsNLyy3 xn2NHpfNDur47jVopKowh3fFK1tHan1B orXBnl5UjGDeX6SyqWBy8cHaft5moyLRu3OtKQY7n3ILZx7/6MvnTylK/jto7177PXjyuXevToG XNrjQ6/dF2/c5DabrtRCOZ 0SuvDvIXZYrsrMa5LEvncaxtOv6gmpMl1m9LdLpm/D6eh9UdBxHW97TJq7l6hJW/jzU5WR7vJ3aUNbXVXrqJ7JtPm9LS9VllX38l CYVp0Gndfjdl1dDK rclhR5X3s7ceJQ2XtsvRjDZrpEysa/RN19pkk/NSXg5Lh9bxHoxpiuc4fq10W/0GpeEDmCaoK6P1anS5UOd8aP6VVJm VpNlyrsydJr2Ph/eR6LlhshLxl8x/ruOgFEseRzLK7sz3DwBYYEty/WAzn9cUNmd9nWFzHq49HHB8xHB8 Dg AJxPBXuaPJMf3H4u8sFFeev9cRCP3/89uXMSH7KrOrYTY 9OW52OW3IQfmNjzz xjrr6ma6Da5fVqdmobclRcKM1RMcRvnlR29r2bmR2dzJuCBq2NHo3RGNxpTZgpOhtNtVXlcpnPJ w9faNVfSm k0xfIi0pXSD9i5vQExdTlKd8XbZ1q/8xW/24cqvHgezueFdjcjd0x9v7bNGIU TNe5a84bXURdO4 2tNtra92pH7oysy0yuhtT2a OO2 zh49G4bmWq0tYRfIw2nTjlnT08XG8pq4H90YX07Zjtfqymp48ad3Y8xuJ1DuqHPS/LdkO7cfq6li8B7S6zVAjkFp0A9ZxW pZDSeK7cmzoCt/EYXCG yKPkwj 5PVhlzzqqoZbaztbXo/uooK9zoKLvptXcmLlVU1aU47V7qkyTumg33DW/T3lP6xZWvgtysef/n8Zx8H1bDlMU/ZneX AQCLbhGvH2wW4ZrC5qyvM2zOw7WHK44Pjo84jg8A51Hh4blee/cLOd1/Jh9/ty6dIr3vJP5Kn8x /rd19I7TVvswrZxtBPG0fRdOMbdfUbn6gnD4Fhi8N81ql7ZZFx/l2k5zM9fba01OSq32oi4/u/ftiRJy6mJk/5umzrWv BadVPyOCB KMXxcbsrFzevGfJX5aJJ4jqq2qtbsMocTVWSgV50BqrElltno4ZW6SyypFWr0fKirp4bcmBvsD2 rkz1BbalJ1isUXDUgBU5t9jZ8jx4pDt3F5M/vJ5s1i0NSSmCi3TdMyf40aV7RnV0fgvSYYZ/yKyZJ6fiP2SKllX5NKefK4ulaUP2vJ5hx9K M k7OFAu/lL5z3MclOL6fZRedme3fwDA4lvE6web b msDnr6wyb83Dt4Y7jg MjiuMDwPlUbk6TN5/K6emT0fI3777wh e68lz odlkJnRjSHDyNYt kiBMn6j18E7jbct2UczHG4IonEbvomL2aldvRL4w/fEgXW/ezCmH q/KvNTjSNV5rzQ800jX3RlfmJonkOKNStnl6h7WzPaHGe53pWWmdSC775gfOkEvmw09mZ5 Mkl/PDhf1kW3tdh4jTCTmIaidBld eMKhafnsNG99hrS6Y97E2WJ/uBSy9FV9QtBvRFvYCvE8kOmgrKqPM1l02R6OqpfVpm9kaxyxl8s/67HwYzFy24e9w8AWBRLc/1gsyDXFDZnfZ1hcx6vPTg Yjg Up3H4wPAuVOu0SThJRmciFz5/jOpvKPJJOGx iNL9Et71FXR 7LUrdOzOcnqbqH18FwMozScgeCJ8O59lfcSkzrPE8f6L2uu6jFQdd4rDc/sX/rCNBhT1S/ASLdot3J1C8szo/1hZvFUISutQQ pRI zDbmlG5vVFW3kIaLcPZmU1PFs9ZC4um7XxNK7O12B8Ly5rdRbrYOy88X4w5RV1qMs/kOm6rLylExz6TSZod2Kqij ifnPexzMTKzs5nH/AIBFsUzXDzaLcE1hc9bXGTbn8dqD42OE4yPDeTw AJw71TaaHH5X3vvwuXz/D16YFdNmnnrO22Je25K71pOsbY6R9OFt3ASfzxrbc5JgeDHd0BGXP30bfmByf7fcUFL WJXJydHSu4jmKV XbQvWfyGO9Tjh4iGQv9xsqs77FMrSXOTo TzCN qjjRyO5eoU1qz2h1nud2XlS2v2Ra/p8ZM4dwaNWpMujtPSkv8c5ssX3njyR/t4vHlU30PP/JAZzbtVdVlVkeaSaRo8UntNmR Q5eLPk/9qfzhXIFF287h/AMCiWKbrB5tFuKawOevrDJvzeO3B8eHj Mh2Ho8PAOfO6enpsMjy0e1vhrc/Cq3b/2YoMhze3A tK7Ds7 8P4/qdhgq7Mez0zYqwfmeoztVDfTc1zPtMsM7bpjUcb9EfdhrqM F1By31Wq TofrSNyv1ar0uFrfZNhxlehotcam/Wpa4Rts2OuqvGGs bWFPSktgHH/8s/mYcELp9eP2w44ktUD5Om3rUv9Kdplkca/HoAwS R tyFFuQbzO 4QJK7bOiWt4Xv1YytJ8flwW4f0suoy3cS1Xl7CUUvtDWln7cReJx72stAl17eiTTz4xf4U4pTWo B5fjK33/DW8WrIvk0Rzb4XXOx7WtzFzDM9vFyyDOmuYYW149Tmn2yy762ZSyd8xb1Wn2t42lJeCSJi/M PdKcp/xTCN i7T8J8suz3EQYtJlfTtPHvOU3Sz2DwBYMJOugyLnQdfvE7Nd6vnfKHWuzfqOCSTyMf/XFDb 5y3fgZpLOvN8V84qTRZp5ZQs4ylce6Tg OD4iAQ7qzRZpJVTsoxnd3wAgE2JRpNv1YlIBTBavo02ohRccjeaeMwXQXiJnSGDE/B4iX2ZeCdWHUdwYg4WS7yWk/DkNNrC9NclvnSDLwBr3JZ8xr/8lOzyCpVH2W SSHpNeGZdJOjc5eu4rce1/ieXSTb3eszc31zLTcu7TyQCyMMhvFH9mNcBk85IWehtrZ 3XQwFS0q5OoWlFd0fTDoSx5QfXryOXeLJVVbaxLrOZv0x5HHbT/yL3OiSzLcWDy Z1uAYSHze1Nl4iV/YK7Z6TSuzzPDi 1d8GW9vS3OyTCzp1VzTnEivWizncY9DWVWdZvuxEeKQJuf9aGbx2/Ofto86pT RjvASii9nHp3LTnMoi1L7BwAsGOebwlrmOfQMrx9sFvCawmbSd6DHIZ3O35VnmiZ7OdnKWHPKUy Id4SWlXkI4PtTC8TF2pmmyl9NZHh8AYLOiGyrUiWRuHB4eyvXr182rGeptykrzoXT6ZcfiXBBef rv6vmnprrRO8pTveauLZTXYlfX6PbmRqEc9WWBd2msHMnTd aoMa4l9 umn8uqrr5pXi0t39fenrAnVt7cPpMxjMweWJs0zdNbxz8J5yCMAzAvrddCyfBdzTZEb38FRHB9n h MDABZTxRPBY1H0/IEm5Rr3mTElgwf35Ng6zmj ieiqDAvzrid32sfS6NyNXsD3T9Q oIcgnser iVK88ycdfyzcB7yCABzblm i7mmyInvYCccHzPA8QEAi4pGk3Op MRmgCt/wvuuNDd7/gqjt9n0Jn3r3HLf 6oMC/PNmxSw0ZG7sSv4wSNv kJZrfuv58kypXlWzjr WTgPeQSAebcs38VcU TDd7Abjo/p4/gAgMW18uTJEz1Ml8QX7SzWffzxxwzPNW2pQ3P1ZHNF34TO0pKD4V6 Bpe5HJ5rivmdC3OQP7OvRRWMr8qwltSyDM8VEar3xpx2uU9YxDQDALDgItdBy/JdzDUFKsLxAQBAPsxpAgBLYikbTQAAABxwHQSk4/gAACCfuWw0eeONN8wrAAAAAAAAAACA2aCnCQAsCZ4gAwAA5xXXQUA6jg8AAPJhThMAWBL8GAIAA OcV10FAOo4PAADyoacJACwJfgwBAIDziusgIB3HBwAA bxk/gUAAAAAAAAAADjXaDQBAAAAAAAAAABQaDQBAAAAAAAAAABQaDQBAAAwBrvrsrKyLrsDswIAAAAA AJwrhRpNHr//e/LW /aP6vcuXXplvLz1HXls3lsW/g2VFVnnjgqApdCTTXVO0 c1 xK7gTzYlfXYNps9895EA9ldj35uZWVTxV6VsvnIk5ZkXG5lkEOecrZsu KUoIL56G1626Z/D4bCjQUYfIcml7z7QnocvmnVUTLc6GJpcJl1/WTKCrdAHuNKHV82edJkOdes76q1rvKU ziuauoGAAAAAHDWcjaaXJD2pVfk9fdeNq jdIPJ69kP3TJ3LqLZ/LbfmuvH7pohyabQAA82ZD9oZDGSaWvnQa v01uVzzNhTvZnm9LdLpj7brq426zeyG5N5mXdprB6HwD6QlXWlW1nBSJh96G8e0eDeDm9JtjfMS lEFlN03zlLNlW2/Z2zAbpJhiPga7O6pmJ2mo5IbS6i17qgbdTYxjqnWUYz/T5q1 nMLNmce4MsdXKvc0Jc41/Y40jttSd2k4yVHufgOgiuvYrAAAAAAALIfT09Nh9vLl8Kb62Sih5crtzxLbfbT/5fCj2LrTj343vJKyvW3Z399Xv0/Pq4NhSxWutA7Ma4B94vwoX9effPKJ asi/c6wodLU6PTNCpXKlkqjtFRqw4qnvd9pqPBkONVdPJEPk95GZzjOmWLJr429DPrDTsMSZkHO5eyY Zpvp5cNPZ6PTse4Xfp03hgWSHDI5jjJ5K5w W13MYf2UCtcpP WOr9wcw3WtV fyOWip7Uy85u pnscAZKr8OghYIhwfAADkk6unyc193Xvkqdw0r Nee/OZvGb HnnthayaPwEAi6N3py3H0pAbVyc9Ul5O7fKa9 /DR 4D5 SVyMfgkTxU/zRuXJVIzmpX5UZD5PjegwlPo/fkvu7e0LoW6xVREy8rxyfS91fMxODBvYJ1NL189Dab0m105O7WZbOmepPjOJs6sh0v81c/5cJ1OieUOr7yy3eeOpaTiQWXo3w29kRdR8vRVt66BQAAAADMO8dGk2fSOX0inTfNyxnzhz/QQzqExpiOjJHgMvZ0fHzr2BAReigJs663Gd7OEpa3bXR9ZhrNZ8JL8vNNf6iRbtNsEx8z3G0 gLS0 PmyjUNutktkdDI/Hkt4lvLx1 UpX8dtPdn1n70POcqox5HEduN6ci03t30iO /5OISXWj 2fSvIR3g7s4SHSXEsV6ewHPIw3h9ix9S48CU8Fr 9TKsrK7e6LqPIfmJuHjZuSPheZH21of7flZ1Q4oJhklrXorcZ81ibONZPoLp8TDTpxnFwQ3i17r 8O8cvmoWS3/2Tnw62cB/Lg3nG vAXK5sMcI4mhwtT6HZXI1vZW9IZ5lbLiqKSOwlzmrLDtZ2dXP NzXGhf04kvFW6BY8kmo2EmNe1W7mnqn gxtFoy8TRV b4DAAAAAFhEhSaCz Px 9 RD S5fP8PXpg1RemxsJsiB2Z86mAscMvY03psBT32dPhmjje tXSkH2zTX5WdxNjWOo4VaUrR8cPtafRuAOysjuNWi0qiCnd8U7S2daTW6/H9lVFejmT8AKO eRDLgxeOjtN2czWZlo1bHWnIsdx7ENu4dz92I25a8pSv47aO9e z148rl3r06Bvlza40InMRPJSm2040krlP5Mq7g9xluSI7q Hx6o lXfcbCAK6zPxh7U14elx5/YaO48i/4elari5h5c9DXU62x9upDWV9XaWnfiLb5vO2tFRdVtnHfwkF95PRDfrYjWmdVl0mx 266Iad9fUVVS/H3v6e85Dy9Pw7nmK5RxlVZT5ql8V/aDx 69Y8TT5J/0SdRSfJeJLdMR 5ynntsvRjDcyZk16XzUcK76n/RkduZe4L hgIpzl67pgkM46K8 ZdP6gAW q7I20fTztePGdWP5bvvBLhTsxjWJnja8Tt 9o1Tfr7Q30tq PnVqwHScyUjgsAAAAAwIKxzSsyefHnN3Gao2T/m6GobeXml/b3LYttThN/HGr7eNUH1rGnzfrR2NOWceDjwmNTR1jG5raMXT0pjVbWMbjT05mWT1v60tNiH7M8PezJ/Hgs44PbxvYuUL4u27rVf4H6cZWox xx4XOVW5DnHPtEPO unMOzplNJrDdlEdvQKX1p5ZoRlmsegv0hGpyJI/55y7HqGo9aYYlHyVnXrmxjFTunNSKlLEL8cIMlfbuJTNm65LnqfATpj0Rt6mViftLqVJv0npE3H 0E67eky 4xaIue2oFxTy0UpmQ/bceF/Lnxuc92ng3w4zCPiEkfJvIXP0X75Z6UrbT87u/pJ/c4rHG72OSGs8PGluH9fT05T9NhxCU8pWj4Tyw7ArDBnA5CO4wMAgHym1tPksP2KXHr7gsjNp3La eWbWlmEbr9oMy5AYe9oMozAaAmJDrrXUP3rYm4lP 9viMJ/NGE7CV2Tcchfp UxPny0tNbnqDygu484mftiZT19WIk/5umzrWv BadVPyOCB KOxxMZyr1zevGfJX5aJngH1VbVWpjo3xWQV5EFrrEpktXlqemyRyqrgftK74z1Zbz0veD0lVqTZ bcmB6SUR9KbJ15mqJ5t1PReBCiezi0r1 djYC3oRhZ7 31mVjs6OA1vdDR7pgX0myZGPPOXsze0ROuPUtmTbO1eGz/V2xfJhM5Bdf8ysAj2kNmTP6zl2LO07k3aifHGUy5vfE6bZbUinn9Hra9Lxop1Z/aR/5 UONyuPMWWPr0lpH8lIk06Dus41y4GsmV5bEzqmjVR3XAAAAAAAFtEUGk0uSPvSK/L2B2bi EoaTDKM5gAYL3oYkzD947nfaYS2dR8KpAreEEThNHo3C2evdvVG5MaUP7TFDBoTpsmh/qsyL/U4UnXeKw3PNNJ1d8Y3qQb XATxRqXscnUPa2b7wwz3u9JypjUYMit5XhjI7jumoWO459 o9CZD9ocW6zZdz6t6joimd 7p9E04LirLhy96U1UtR1fFTGgQbTgLMw1e6RyGGsvMh2s510W3tdh4jTCTVJGPMO8GtqrP7HG57 Mwk4fLwkcp9Ctc4KslbQ1otHUr2cEzp 9kc1U gYLhZx5JNoeMrh3xpcmyYm1a5AwAAAAAWSsWNJrrB5KJ8IM9k/3SGE8eHx4aPLNGbcf68AWq998NZP7E7m4YTPQF0ZC6GURrOQPCEa/e ynuJSWrniWP9lzVX9RioOu Vhmf2L32TKpi7wC9AOQo9de1Wrm5heWa0P8wsnirkSatpjLI zR/0pEo82b0ht3SjtOMkyeM5InLO21JVPlL1Rc8VPbGnWOp8DXo6BL2PrknmnPZZ chbzmk9bSapIh8h/g3s0PHpLbphTDGNRJPmngnKfhLnOCrK2 otf16ZxJxGYS772RzUz0iRcAsdSzYOx5erImlyaZibVrkDAAAAABZKpY0mh 2gweSpzKa9xDzFOekHsE1tS 5ab/BZJkmX9OFU3ASfL3OzIRheTDd0xOVP34YfmNzfLTeUVM2b0TX5FG76EBZ5ytdl24L1X4hjPU644 RLIX242Ved9CmVpbvy2gol8zRJt5HAsV6ewZrU/zHK/Kyt/WgcP7qm9Ux9m6WeUMjcUxxMy55k4fjr5iHPreZeWFpdzcb58ZJez6YGV C4LGhkn1UeZfCQlehV4i98zJmgkSjRwhg0e Z0QJnwfucdRXd429nT4uqHG/pDF5P1sfupnLH 4RY4lmyp7thZLk2mYW7s84ZpnWuUOAAAAAFgotsnYJy9pE8HnmCB wpI EXzKRKwpEwl7nwnWeduEJwq1TB46mqA0OlnogW0SWMuEn lptE1UmjI5bLCtbXJYaz7tk6BOLC/POP74Z/Mx4YTS68fthx1JaoHyddrWpf6V7DLJ4l6PQRkk8j9akaPcgnid9wkTVmydE9fwvPqxlKX5/LgswvtZdBlv41quLmEppfaHtLL24y4Sj3tZaRPq2pF1gkfXtHqS 2ZUUF/Zx6FfxrE8Bsd2It4YW5orzUdSkN54UJPyEV7nfH5yyod7OdvyasvLtPIRCS/BpC3xufj3jr2 rGlOsMShlcibH29ou2CbxP7ksp dTf0k8hDmGq4nO48u9WTLsydv2j1ZafLfj8ZlP6ZKlXuY UwifwBmiomugXQcHwAA5FN5o4n6zZiyfDPcj2xvX3I3mnjMD jwEvvlGvwwHi xmzbeD14dR/DDOlgs8Vp HE9Ooy1Mf13iJkNwA8EatyWflpsG2eUVKo yv/Aj6TXhmXWRoHOXr O2Htf6n1wm2dzrMXN/cy03Le8 kQggD4fwRvVjXgdMOhM3n6yfD2/nWK5OYWlF9weTjsQx5YcXr2OXeHKVlTaxrrOl/xhy3E s5Znk30CMLvHPBMfAeH28nuNL6BhJTUd1 UjmIX4j35fMh2HimPj5kvlwKWdfPLzkvlN5PtL24QiTrljeXPOVmuYIexyegnmznh CsMLx2MrFavb1Y81DmEu4mkMebWl3Pb7KpH1SmpL5U0vq9ZIlLJfyscUxWlLyC2CquCkMpOP4AA AgnxXdUKF 4M2Nw8NDuX79unk1Q71NWWk lE4/5xj7i8rLb1ff/8kxRE4Jecr3vNXFshrsynr9ntxI1KOeBLwu7bUDGbrufFWGtcQ /fRTefXVV82rxaWH8PKnrFnsc8BS58M7JlPmFVogy1BHi5yHZTlGAMyHZbkOAqaB4wMAgHwqngge i8KfULclJYcoB1L5Y87bxuzPnvA5rsqwMO96cqd9LI3O3QW/ibrk eifeHNKrKVPyrEAlqGOFjkPy3KMAAAAAACWDY0m5xITmmL6/Anvu9LcjE6f3NtsepMBd265731VhoX55k0W3ejI3QW/i7rs Rg88qZtl9W6/3oRLUMdLXIeluUYAQAAAAAsHxpNzqPeffHbTOI3mnuyubIiK5nLptpyGSx7fs84fxt7MjxoiXSb kfia3ZYcDHMOxVJlWJhrta0jGR5tyaJX6dLmQw fqI69 hL0EFiGOlrkPCzLMQIAAAAAWD7MaQIAS4KxigEAwHnFdRCQjuMDAIB8Vp48eaInhJf4op3Fuo8//ljeeOMN7z0AAAAAAAAAAIBZoacJACwJniADAADnFddBQDqODwAA8mFOEwAAAAAAAAAAAIVGEwAA AAAAAAAAAIVGEwAAAAAAAAAAAIVGEwAAAAAAAAAAAIVGEwAAAAAAAAAAAIVGEwAAAGOwuy4rK uyOzArAAAAAADAuVKo0eTx 78nb71vgFaV96RS6Fl/YF897y8G orMg6d1QALIWebKpzmj6v2ZfYDeTBrqzHttnsmfcmGsjuevRzKyubKvaqlM1HnrQk43IrgxzylL Nl2xWnBBXMR2/T2zb9ezAUbizA4Ds0ueTdF9Lj8E2rjpLhRhdLg8us6ydTVrgF8hhX6viyyZMmy7lmfVetdZWn3M dxVVM3AAAAAICzlrPRxG8Uef29l83rmMMLIvtP5PQ0WJ7KzQ8uyqW3viOPzSYAgHmzIXvDoQwTS 186Df3 mlyueRuKd7O83hbp9Efb9dVG3WZ2Q3Jvsy7ttYNQ AfSkq40K2s4KZMPvY1jWrybwU3ptsZ5CcqgspumecrZsq237G2YDVJMMR D3R1Vs5M0VHJDafWWPVWD7ibGMdU6yrGfafNWP07h5sxjXJnjK5V7mhLnmn5HGsdtqbs0nOQod7 8BUMV1bFYAAAAAAJbD6enpMHv5cnhT/WyU0HLl9meW7ZLLR7e/Vdt/O7z9kf39 LK/v69 n55XB8OWKlxpHZjXAPvE VG rj/55BPzV0X6nWFDpanR6ZsVKpUtlUZpqdSGFU97v9NQ4clwqrt4Ih8mvY3OcJwzxZJfG3sZ9Iedhi XMgpzL2THNNtPLh5/ORqdj3S/8Om8MCyQ5ZHIcZfJWOH22upjD ikVrlN yh1fuTmG61qvzuVz0FLbmXjN31M9jwHIVPl1ELBEOD4AAMgnV0 Tm14vkqdy07x28VrthfkLALBIenfaciwNuXF10iPl5dQur3n/PnzkPnBOXol8DB7JQ/VP48ZVieSsdlVuNESO7z2Y8DR6T 7r7g2ta7FeETXxsnJ8In1/xUwMHtwrWEfTy0dvsyndRkfubl02a6o3OY6zqSPb8TJ/9VMuXKdzQqnjK79856ljOZlYcDnKZ2PP64VytJW3bgEAAAAA886x0eSZdE6fSOdN8zKHxwMdxQu pvea/LsIf/kAP6RAaYzoyRoLL2NPx8a1jQ0TooSTMut5meDtLWN620fWZaTSfCS/Jzzf9oUa6TbNNfMxwt/kA0tLi58s2DrnZLpHRyfx4LOFZysdfl6d8Hbf1ZNd/9j7kKKMeRxLbjevJtdzc9onsvOfjEF5q/dj2rSAf4e3MEh4mxbFcncJyyMN4f4gdU PCl/BY/PYyra6s3Oq6jCL7ibl52Lgh4XuR9dWG n9XdkKJC4ZJal2L3mbMY23iWD B6vIx0aQbx8EN4dW6/zrEL5uHkt3 k50Pt3IeyIN7x/nyFiibD3OMJIYKU t3VCJb21vRG ZVyoqjkjoKc5mzwrafnV39jM9xoX1NJ75UuAWOJZuMhpnUtFu5p6l/osfQasnE01Tl w4AAAAAYBHlnNMkp8OL3vwnN/efSoH2lhg9FnZT5MCMTx2MBW4Ze1qPraDHng7fzPHGt5aO9INt quykxjbWsexIk0pOn64PY3eDYCd1XHcalFJVOGOb4rWto7Uej2 vzLKy5GMH2DUNw9iefDC0XHabq4m07JxqyMNOZZ7D2Ib9 7HbsRNS57yddzWsf599vpx5VKPHn2jvNmVRmQugofSdNuJRjL3iVx5d5C7LFdkZzU8Xv2xtOt A0FAl5k/rL0JT48rr9/QcRz5Nzxdy9UlrPx5qMvJ9ng7taGsr6v01E9k23zelpaqyyr7 C h4H4yukEfuzGt06rL5LhdF92ws76 ourl2Nvfcx5Snp5/x1Ms9yijqsxH7bL4D43Hb92ap8kn6Z os gkGU yO YjVzmvXZZ rIE5c9LrsvlI4T313 jIrcx9QR8D4TRHzx2TZMZRcd686wcVYEt9d6Tt42nHi fM6sfynVci3Il5DCtzfI24fV 7pkl/f6ivZXX83Ir1IImZ0nEBAAAAAFgwtnlFJi/ /CZpc5r4c5ioX7je8s1w37LNpMU2p4k/DrV9vOoD69jTZv1o7GnLOPBx4bGpIyxjc1vGrp6URivrGNzp6UzLpy196Wmxj1meHvZkfjyW8cF tY3sXKF Xbd3qv0D9uErUY/a48LnKLchzjn0inndXzuFZ06kk1puyiG3olL60cs0IyzUPwf4QDc7EEf 85Vh1jUetsMSj5KxrV7axip3TGpFSFiF uMGSvt1Epmxd8lx1PoL0R6I29TIxP2l1qk16z8ibjyCd9nSZfUYtkXNbUK6p5aKUzIftuPA/Fz63ue7TQT4c5hFxiaNk3sLnaL/8s9KVtp dXf2kfucVDjf7nBBW PhS3L vJ6cpeuy4hKcULZ JZQdgVpizAUjH8QEAQD6V9zR57d0v5PRUz32il2fy4NIrcunSRTk07xdnG6/aDMuQGHvaDKMwGgJiQ6611D962JuJT/vb4jCfzRhOwldk3HIX6flMT58tLTW56g8oLuPOJn7YmU9fViJP bps61r/gWnVT8jggfijscTGcq9c3rxnyV WiZ4B9VW1VqY6N8VkFeRBa6xKZLV5anpskcqq4H7Su M9WW89L3g9JVak2W3JgeklEfSmydeZqiebdT0XgQons4tK9fnY2At6EYWe/t9ZlY7OjgNb3Q0e6YF9JsmRjzzl7M3tETrj1LZk2ztXhs/1dsXyYTOQXX/MrAI9pDZkz s5diztO5N2onxxlMub3xOm2W1Ip5/R62vS8aKdWf2kf flDjcrjzFlj69JaR/JSJNOg7rONcuBrJleWxM6po1Ud1wAAAAAABbRdIfn8uZC0RPHX5C32xfMuikYzQEwXvQwJmH6x3 O/0wht6z4USBW8IYjCafRuFs5e7eqNyI0pf2iLGTQmTJND/VdlXupxpOq8VxqeaaTr7oxvUg38uQjijUrZ5eoe1sz2hxnud6XlTGswZFbyvDCQ3XdMQ8dwz79R 6U2G7A8t1m26nlf1HBFN79zT6ZtwXFSWD1/0pqpajq6KmdAg2nAWZhq80jkMNZaZD9dyrotua7HxGmEmqSIfYd4NbFWf2eNy2ZlJwuXhI5X7FK 5xVJK3hrRaOpTs4ZjS97M5qp9AwXCzjiWbQsdXDvnS5NgwN61yBwAAAAAslCk3mmjP5XtXzJ/TEh4bPrJEb8b58wao9d4PZ/3E7mwaTvQE0JG5GEZpOAPBE67d yrvJSapnSeO9V/WXNVjoOq8Vxqe2b/0Tapg7gK/AOUo9NS1W7m6heWZ0f4ws3iqkCetpjHK jR/0JMq8WT3htzSjdKOkySP54jIOW9LVflI1Rc9V/TEnmKp8zXo6RD0PrommXPaZ Ujbzmn9bSZpIp8hPg3sEPHp7fohjHFNBJNmnsmKPtJnOOoKG rt/x5ZRJzGoW57GdzUD8jRcItdCzZOBxfroqkyaVhblrlDgAAAABYKDNoNHlZfvihyJXvPTevq2Se4 pz0A9imtiV3rTf4LJOkS/pwKm6Cz5e52RAML6YbOuLyp2/DD0zu75YbSqrmzeiafAo3fQiLPOXrsm3B i/EsR4n3HAJ5C83m6rzPoWyNDd W8FEvmaJNnI4lqtTWLPaH2a535WVP62DB/fU3qkPs/QzSpkbiuMJmfNMHD dfMS59bxLS4vLuThfPrLL2fTASnyXBY2Mk qjTD6SEr0KvMXvGRM0EiUaOMMGj/xOCBO j9zjqC5vG3s6fN1QY3/IYvJ Nj/1M5Y/3CLHkk2VPVuLpck0zK1dnnDNM61yBwAAAAAsFNtk7JOXtIngPxvevhKf F2vGw7zTAifPhF8ykSsKRMJe58J1nnbhCcKtUweOpqgNDpZ6IFtEljLhJ/pabRNVJoyOWywrW1yWGs 7ZOgTiwvzzjGfzMeGE0uvH7YcdSWqB8nXa1qX lewyyeJej0EZJPI/WpGj3IJ4nfcJE1ZsnRPX8Lz6sZSl fy4LML7WXQZb Nari5hKaX2h7Sy9uMuEo97WWkT6tqRdYJH17R6kvtmVFBf2cehX8axPAbHdiLeGFuaK81HUpDee FCT8hFe53x csqHeznb8mrLy7TyEQkvwaQt8bn49469vqxpTrDEoZXImx9vaLtgm8T 5LKfnU39JPIQ5hquJzuPLvVky7Mnb9o9WWny34/GZT mSpV7mPlMIn8AZoqJroF0HB8AAORTYaPJ6XD/pm4giS03v0xsN2nJ3WjiMT gw0vsl2vww3i8xG7aeD94dRzBD tgscRr XE8OY22MP11iZsMwQ0Ea9yWfFpuGmSXV6g8yv7Cj6TXhGfWRYLOXb6O23pc639ymWRzr8fM/c213LS8 0QigDwcwhvVj3kdMOlM3Hyyfj68nWO5OoWlFd0fTDoSx5QfXryOXeLJVVbaxLrOlv5jyHE/sZZnkn8DMbrEPxMcA P18XqOL6FjJDUd1eUjmYf4jXxfMh GiWPi50vmw6WcffHwkvtO5flI24cjTLpieXPNV2qaI xxeArmzXp CMIKx2MrF6vZ1481D2Eu4WoOebSl3fX4KpP2SWlK5k8tqddLlrBcyscWx2hJyS AqeKmMJCO4wMAgHxWdEOF oE3Nw4PD X69evm1Qz1NmWl VA6/Zxj7C8qL79dff8nxxA5JeQp3/NWF8tqsCvr9XtyI1GPehLwurTXDmTouvNVGdYS /TTT XVV181rxaXHsLLn7Jmsc8BS50P75hMmVdogSxDHS1yHpblGAEwH5blOgiYBo4PAADymcGcJphH/oS6LSk5RDmQyh9z3jZmf/aEz3FVhoV515M77WNpdO4u E3UJc9H/8SbU2ItfVKOBbAMdbTIeViWYwQAAAAAsGxoNDmXmNAU0 dPeN V5mZ0 uTeZtObDLhzy33vqzIszDdvsuhGR 4u F3UZc/H4JE3bbus1v3Xi2gZ6miR87AsxwgAAAAAYPmsPHnyRA/TJfFFO4t1H3/8McNzTVvq0Fw92VzRN6GztORguJevwWUuh eaYn7nwhzkz xrUQXjqzKsJUW3e0xd6DhsLPjQXACA5cJ1EJCO4wMAgHyY0wQAlgQ/hgAAwHnFdRCQjuMDAIB85rLR5I033jCvAAAAAAAAAAAAZoOeJgCwJHiCDAAAnFdcBwHpOD4AAMi HOU0AYEnwYwgAAJxXXAcB6Tg AADIh54mALAk DEEAADOK66DgHQcHwAA5POS RcAAAAAAAAAAOBco9EEAAAAAAAAAABAodEEAAAAAAAAAABAodEEAAAAAAAAAABAcW40efz 78mlS6 Ml7e I4/Ne2MXpB3eRi/tC a95THYXZeVlRVZ3x2YNQAwp3qbKeernmyq9fq9YNnsmbdGBrK7Ht1mZWVTfdLRYFfWi34WAACgL K6DgHQcHwAApHJqNNENJq /90L2T5/Iqbd8Lrflu/L6pYtyaLbxHF4Q2Q 20ctTufnBxZQGFgDAmfB pDSl2zqQ4XDoLf1OQ7rN6A i3mZd2mvjbYbDA2lJV5ouP2r0j7B6W6TTN5/tS6fh FkAAIBp4ToISMfxAQCAZ X09HRo/k71WDeGvPlMXjOvPY /I2 9/l2R25/L37z7wqxM8htc1GYffSHvRgKwOzw8lOvXr5tX541 osNcoOxtmHU439gnzo/ydf3pp5/Kq6al6l622uSLPbkoPhnoxj0k LqR8/0pH 0ZbUzNo43dOu3j6W1sFQ0pNp8tKIhaV/hJkfSEdbaTEAAADkx3UQkI7jAwCAfJx6mrwWbzDRXnshq bPSV6rpTeoAABmrSf3u qf1rXQDyGtJpfX1D/HJ9L3V1jVvI1EHj6aMDzh4JE8VP80blyN/qiqXZUbDRXFvQfqpxcAAMCscR0EpOP4AAAgMPWJ4B8PdBQvpObQyySNP4eI7qqpn0owY15GBtUM rTdL9pibsa6f3nie/jr9dMXEsMzYn H1mWk0nwkvyc83RV jSLdptlmX6PCibuOGpqXFz1c8TM1sl8joZH48lvAs5eOvy1O jtt6sus/ex9ylFGPI4ntxvXkWm5u 0R23vNxCC 1fmz7VpCP8HZmWd8dXxA7lqtTWA55GO8PsWNqXPiRMXbtZVpdWbnVdUEmL6OxioMfKqt1/3VIfVX9UlHvTvqdE1i7XOIJsIwfXAAAAJXgOghIx/EBAECqwo0mj9//jnwgz X7fzChJ8nhRXn9vZfl5v5TedOsKk6PcdkUOTBjZgb9Pb0v mZkzM3hQcsbczM8oZk35qbuThps01 VnciNVk3HsSJNGYdlG78znT2N3g3RndVx3GpRSVThjm K1raO1Ho9DqgyysuRjHum6hu0sTx44eg4bTdXk2nZuNWRhhzLvQexjXv3vZu1rWvR50mql6d8Hb d1rH fvX5cudSjR98ob3alMRqjVaf9oTTddqKRzH0iV94d5C7LFdlZDY9Deyzt rhxSNNl5veyNuH19T6o6DhMd2zXcnUJK38e6nKyPd5ObSjr6yo99RPZNp 3paXqsso /ivUP1FngUmO5WTCL5We9/hZQyy/pcZql8V/GC0ekHlKDQAA4CxwHQSk4/gAAGCkWKOJaQyRm18n5inRc5hcuvSKv7wt3uTxnfItJh59Ezp n7t3p62 ultyEH5jY8 70Tnu2mm6ma5d9m sarUtObKMx nd6A6FVdva9m5kdnfiDSx2tjR6N0RjcaU2YKTobTalq/MZD2dP32g9lvY7yfQl0pLS5dW/uGnJ1NtMlDzl67KtW/2P2erHlVs9DmR3R5VnoyN3Q3e8vc8WjThF3rxnyRueHqt2PN5sTba2vdqR 6NWk4E8uKcuu1vb45v/6rjzNnv4aBSea7m6hFUkD6NNN25JRx8fx2uRMXxtx2r1ZTV7tifAgi71qQa7onfvSD1Ybcg1L4v NaCNnb1Oa vMAAABniOsgIB3HBwAABRpNDtu6MeSCyM2nctp5ZtaOvfbuF3J6 sQsz SB14ByUQ7N 8U15MbV Ldv2pibpvvoqGvn It58pBMtjjMZ526ido X4X0fKanz5aWmlz1W01kfP/XD7vRuWUJu2p5ytdlW9f6D0yrfkIGD0Tf20 M0Vq5vHnPkr8sE08Q1VfVWt2GEW8ymJUK8qA1ViWy2jwNNbYMZWWPe/BId8hP05PNuqWxKMXGXtBLJzQs2c6qdPQxDAAAcIa4DgLScXwAAJCr0eSCtC 9Im9/IHJz/4m1wSTpmXROn8pN9dm32xfMuinQjSHBl61Z6u1ox1L9xayHdxpvGx1GaNq8IYjCafQuKmavdvWG 6Kfm23f83A92d6Sr1ky9MWGaHOq/KvNSjyNV573S8EwjXXdnPLSVeQIp3qiUXa7uYc1sf5jhflcp02CTztaYpOd 0b3dGtLpj3vhZNHn3dHwZXo5uqp hak34g1TAAAAs8B1EJCO4wMAgBHHRhPdYHJRPpBnBYbbei7fu2L nJbwvAKRJfql7c8boNZ7cyHoeQZm03CiJ4Cuh diGKXhDARDGnXvq7ybIY8aN2SR20xc67 suarHQNV5rzQ8s3/pRrq6aVjwCzA0VJVrubqF5ZnR/jCzeKqWOo6wHsZYl/GaxHvke3NCqbdaB2XnWemLjmL6PbEAAAAsuA4C0nF8AAAw4tRoctgOGkyKTOj svzwQ5Er33tuXlepLno0HAnNaeCktiV3da8TeSjRnqe2OUbSh JxE3w a2zPSYLhxXRDR1z 9G34gcn93XJDSfnjmiYng0vvupunfF22LVj/hTjW44QLzUD crOpOu9TKEszVJmezyPcqBBt5HAsV6ewZrU/zHK/m4a09NuPRd0LSI8vXGY oMBS9GwDAAALjOsgIB3HBwAAAYdGkwvy4AORK7e/ymgweUnefys d4m/Tje43Hr3hVlXpZps3e1I47gt9dhcJd5wP8G6wa6sR3qVBE tJ5 UOG7XZX00/o 6PPAmYG9I51bRqwBz4RFp8AjG/IxLvxnrT0bdlWYkn0FXWLexQ0c2rqlPqCS1/XFHt4u25gThhCZm1 U aYiiPOWbva1j/VfCtR435JYZBi4SfW9znJ5c5Za2T1Sd9ymUpWlAioxVa5ZxvTqWq1NYs9ofphVP vFfLZV 3d1Mpf drGNR7bfeftk6SPboCfHyHamLJL2NDqv8U2gAAABFcR0EpOP4AAAg4DynyYfv/b5c8iZ1jy9BQ8kLqa1ekLcj7/2 vLf6VE4L9VBxVNuSo GBtGLzC9RPtmUYNCR4PUseSnP0vu5C2pKDxDA66kKg35cb9 qjcJpdva7Ml7e68DjqS6ehhwML4t RVRWP19klInQz1ttufTx/gzWfKh/SkX7u4YDMjX0t0cMjjw3Z08MojdJryj11yKo85eu4rUv9V8K9HvUwcHr nMgN/qbIuGErT7nl3SdK5L3yslT51DP8xYexUuvGDWKu5eoSljKr/WEq8Uyo66pt7I3KLkh7s6vPieHjayC7etIYLZZPf5k8vKEedi28fb29psIfln4KDQAAoBSug4B0 HB8AAHhWTk9Ph bvuXB4eCjXr183r2ZI9wRoPizZQLJAvPx2RQ93NJOLkzzle97qYlnpHl71e3IjUY 6h1Rd2msH7g0MVYa1xD799FN59dVXzSvDK7uU V8AAACWBNdBQDqODwAA8nHuaYLl0vMHJZVr3GfGlAwe3JNjyxB4wSR/eVQZ1rnTP/GGOltLFh4AAMBy4zoISMfxAQBAKhpNziX7RG5AlfwJ7 Pz8OiOROnz2KSpMqzzZvDoofp/Q1br/msAAIDzgusgIB3HBwAA6V7SY0hqen6AFy9eyPPnz Xbb7/1lmfPnsk333wjX3/9tXz11Vfe8rvf/U6ePn0qX375pXzxxRfe8vnnn8tnn30mT548kdPTU2/57W9/K7/5zW/k17/ tfzqV7/yll/ 8pfyi1/8Qn7 85/Lz372M2/56U9/Kj/5yU/kxz/ sfzoRz/y0oIp690Xv80kfqO5J5uhsUXTl8ljlC6OZc/vGefPjIcbH c2OSaugyrDOi/0MHeqjPSkio3OXcoIAACcH1wHAek4PgAAyMScJgCwJKxjFQMAAJwDXAcB6Tg AADIZy4bTd544w3zCgAAAAAAAAAAYDboaQIAS4InyAAAwHnFdRCQjuMDAIB8Vp48eTLU85nEF 0s1n388cc0mgBAAfwYAgAA5xXXQUA6jg8AAPKhpwkALAl DAEAgPOK6yAgHccHAAD5vGT BQAAAAAAAAAAONdoNAEAAAAAAAAAAFBoNAEAAAAAAAAAAFBoNAEAAAAAAAAAAFCcG00ev/97cunSK Plre/IY/NexOPvyFvh7S5dlEPz1rIY7K7LysqKrO8OzBoAmFO9zZTzVU821Xr9XrBs9sxbIwPZXY9us7Kyq T7paLAr60U/W1gyX9FlXSJFUTqN4zJKlh8AADhT5 46CMiB4wMAgFROjSa6weT1917I/ukTOfWWz W2fFdejzeIHF6US69/V T252a7J7J/84K8vYQNJwCwsLwfKU3ptg5kOBx6S7/TkG4z oOot1mX9tp4m HwQFrSlabLjxr9I6zeFun0zWf70mk4fraUDdkbpTe86Pj1 2tyueZtWDqNfgO6KqNjswIAAMy/pb4OAkri AAAwHd6ejrMWj7a/3L4UXz9R78bXlFfb1duf2bWfTa8fUV94938Mrpd6nr7sr /r743z6uDYUtkKK0D8xpgnzg/ytf1J598Yv6a7KCl4pGWijGsP1S/h4bS6Ki/0qkfTeqzMpycTJOXeFj9zrCh1jc6k2KYkkTcJdN40PLKwdvO/M1hCgDA2eE6CEjH8QEAQD5OPU1ee/OZvGb HnnthayaPz2PL8hffShy5XvPzYrAC/mD76t1Jy/Zh/MCAMxQT 531T ta7LhrzBqcnlN/XN8In1/hVXN20jk4aMJwxMOHslD9U/jxlUVakjtqtxQv4aO7z2QCZ eit6dthxLQ25cNSkqm8aNPe/JuKOtyKcBAMBcO5/XQYAbjg8AAAKzmwj w5flb82feflDoOiumqGxNSODahYZczPW9dMbz9Nf19sMb2cJy9s2uj4zjeYz4SX5 aboaxTpNs02sbH3E3nQS7ILa1pa/HzFw9TMdomMTubHYwnPUj7 ujzl67itJ7v s/chRxn1OJLYblxPruXmtk9k5z0fh/BS68e2bwX5CG9nlvXd8QWxY7k6heWQh/H EDumxoUfGWPXXqbVlZVbXRdk8jIaqzj4obJa91 H1FfVLxX17qTfOYG10RhXBWT84KqmfsLMD8DGDQnaTDJlpBEAACyABbwOAmaG4wMAgFSFG00ev/8d UCey/f/4IW/wvQ8 fCHL/uvQ/7WW/eSDEp1NdFjXDZFDsyYmXvm2Qfviz465qbuU6rH3AxPaOaNuSkd6Qfb9FdlJ3KjVdNxrEhTJo/fmc6eRu8G4M7qOG61qCSqcMc3RWtbR2q9HgdUGeXlSMYPMesbtLE8eOHoOG03V5Np2bjVkYYcy7 0HsY17972bta1r0edJqpenfB23dax/n71 XLnUo0ffKG92pTEao1Wn/aE03Xaikcx9IlfeHeQuyxXZWQ2PQ3ss7fq4cUjTZeYPV2vC6 t9UNFxHG15Txe5lqtLWPnzUJeT7fF2akNZX1fpqZ/Itvm8LS1Vl1X28V h/ok6C0xyLCcTfqn0/NYHsfyWGqtdFv9htHhA5ik1JyXqJ2awu6NCU0W7bfYTrZI0AgCAhbIw10HAGeD4AABgpFijyeFF ef29l0Vufi3vjsbteiY/uP1c5IOL8tb742D1JPJ3TuJDdhWjb0LH73P7Q6605CD8xsaedyNt3LXTPGW8djl0w2xLjoIbrSH eje5QWLWtbe9GZncn3sBiZ0ujd0M0FldqA0aK3mZTujqf8XD29I3WY2m/k0xfIi0pXV79i5uWTL3NRMlTvi7butX/mK1 XLnV40B2d1R5NjpyN3TH2/ts0YhT5M17lrzhtQ7CQxPVZGvbqx25P2o1GciDe qyu7U9vvmvjjtvs4ePRuG5lqtLWEXyMNp045Z09PFxvCYHw71Rl3TbsVp9Wc2e7QmwoEt9qsGu6 N07Ug9WG3LNy2Iz2sjZ25Sm/ryjovUTZfYdVV/Rc1w1aQQAAItnEa6DgLPC8QEAQIFGk8P2K3Lp7QsiN5/KaeeZWet77d0v5HT/mXz43u/LpUtqO7X8E3kq//H7 t0XUktMjJJHaCz6kbQxN0330VHXzvEX8 QhmWxxmM86dRO1fb4K6flMT58tLTW56reayPj oh92o3PLEnbV8pSvy7au9R YVv2EDB6Ivj bGKO1cnnzniV/WSaeIKqvqrW6DSPt5vW0VZAHrbEqkdXmaaixZSgre9yDR7pDfpqebNYtjUUpNvaCXiCh4bV2VqW jj2EnResnpndH2vqYtJzjyqcRAAAsovm/DgLODscHAAC5Gk0uSPvSK/L2ByI3958kGkxG3nwqp6fqfbP8zbsv/OG5rjyXf2g2qZxuDAm bM1S13fJQvQXsx7eabxtdBihafOGIAqn0buomL3a1Ruin8pu3/Fz7w9bM4PGhGlyqP qzEs9jlSd90rDM4103Z3x0EnmCaR4o1J2ubqHNbP9YYb7XaVMg006W2OFnltE93ZrSKc/7uWRRZ93/aHGzHJ0Vf0KU2/EGz6mKBgmIO0cNw9pBAAAM3LOroOAXDg AAAYcWw00Q0mF UDeSb7p0 k86ZZ7eQlGZyIXPn MynV0WSS8LwCkSX6pe3PG6DWe3Mh6PHyZ9NwoieArofnYhil4QwEQxp176u8m2Fr8kyOPI8c67 suarHQNV5rzS8YFgkPX HaVjwCzA0VJVrubqF5ZnR/jCzeKqWOo6wHsZYl/GaxHvke3NCqbdaB2XnWemLjmL6PbEM52ECwmacRgAAMDvn6ToIyIvjAwCAEadGk8N20GDyVHK1l 2iH35X3PgxNGF puujRcCQ0p4GT2pbc1b1O5KFEe57axsVPH4rHTfD5PDft4oLhxXRDR1z 9G34gcn93XJDSfnjmiYng0vvupunfF22LVj/hTjW44QLzUD crOpOu9TKEszVJmelyLcqBBt5HAsV6ewZrU/zHK/m4a09NuPRd0LSI8vXGY oMCse7YNHtxTR5rOknvCl6L3HQAASHF roOA/Dg AAAIODSaXJAHH4hcuf1VZoPJ4/cvyvuPzQvt8KI3/8nN/S9CE8ZXqSZbdzvSOG5LPTZXiTfcT7BusCvrkV4lwVPryScljtt1WR N/6MuD7wJ2BvSuVX0KsBceEQaPIIxP PSb8b6kx13pRnJZ9AV1m3s0JGNa oTKkltf9zR7aKtOUE4oYnZdblPGqIoT/lmb tY/5VwrccNuWWGgYtE39scpydXuaXtE1XnfQplaRqQImPVmmVcr47l6hTWrPaHacWTfvxXS6VfdzdT 6X8n61hU 623X7YOkj16Qrx8R oiSW jw0o8headn1VdVlY/gZ7c0WlvdMT19J2WRpf8AQCARTBn10HAXOH4AAAg4DynSXhy9 hyUQ7NNjq4914Pvff2S3L7o7zDeeVU25Kj4YG0YvML1E 2ZRg0JHg9Sx5Kc/S 7kLakoPEMDrqQqDflxv36qNwml29rsyXt7rwOOpLp6GHAwvi35FVFY/X2SUidDPW2259PH DNZ8qH9KRfu7hgMyNfS3RwyOPDdnTwyiN0mvKPXXIqjzl67itS/1Xwr0e9TBwev6cyA3 psi4YStPueXdJ0rkvfKyVPnUM/zFh7FS68YNYq7l6hKWMqv9YSrxTKjrqm3sjcouSHuzq8 J4eNrILve2FZKLJ/ Mnl4Qz3sWnj7entNhT9MPoXWP/EayBrWWd9L6N1XP 5UuBN60jmn0UY3hAaf1Y/YKeNjfrZzZgEAgBzm6ToImDccHwAAeFZOT0 H5u 5cHh4KNevXzevZkjfAGs LNlAskC8/HZFD3c0k4uTPOV73upiWekeBPV7ciNRj7qHVF3aawfuDQxVhrXEPv30U3n11VfNK8Mru5T5X aA/2SZTh7HOwAAKG4Rr4OAWeH4AAAgH eeJlguPX9QUskx1D Qiz fRHIIvGCSvzyqDOvcMT051pKFNwf8IbQanbs0mAAAgOrN9XUQcMY4PgAASEWjyblkn8gNqJI/4X18Hh7dkSh9Hps0VYZ13gwePVT/b0jVo19VwZvwsdGRu7SYAACAKZjn6yDgrHF8AACQ7iU9hqSm5wd48eKFPH/ XL799ltvefbsmXzzzTfy9ddfy1dffeUtv/vd7 Tp06fy5ZdfyhdffOEtn3/ uXz22Wfy5MkTOT099Zbf/va38pvf/EZ /etfy69 9Stv eUvfym/ MUv5Oc//7n87Gc/85af/vSn8pOf/ER /OMfy49 9CMvLZgyM9Z/K9HNpCebobFF05dlGa9/2fN7xvkz4 HGx7lNjonroMqwzgsz54aeVHFee3Lo X GR1upc44AAAAUsgDXQcCZ4fgAACATc5oAwJKwjlUMAABwDnAdBKTj AAAIJ 5bDR54403zCsAAAAAAAAAAIDZoKcJACwJniADAADnFddBQDqODwAA8ll58uTJUM9nEl 0s1j38ccf02gCAAXwYwgAAJxXXAcB6Tg AADIh54mALAk DEEAADOK66DgHQcHwAA5POS RcAAAAAAAAAAOBco9EEAAAAAAAAAABAodEEAAAAAAAAAABAodEEALCYepuysrIimz3zGgAAAAAA ACjJsdHkgrQvvSKXwkv7gnkv6vH7vxfd7q3vyGPz3rIY7K57N rWdwdmDQDMp9Tz1WBX1tV6/Z6/bEq87SH4bHJJbmuViCOlgcMhLfn0ZDMSXlbDSmh71xaYytPsIpmv6LIukWoum0ZL/SXLZwZlDQAAAAAAMENujSaHF0T2n8jpabA8lZsfXEw0iOgGk9ffeyH7o 0 l9vyXXn90kU5NNsAAM6Y7qFRb4t0 jIcDtXSl06jK03rTfWG2kxvE172ZMO8myoRx1D6nYZ0m7EGnFxpceDd6G9Kt3WQiDftHv1gd0e6 5m8nVafZ2YbsmTxFFx2/fn9NLte8Dcun0VJ/3rIXqvlZlDUAAAAAAMCMuTWavPlUOm avz3P5Ae3n4t8eEH OtxqUvtaPjp9KuNNX8i7//EruSIX5M77yzMSWG3ryLs5dLQV3J2qinkCl6dvMcI cX5Mp66T5ysVT7Mr0ujI3dG6mmzd7UhDurJTUQ 63n19a7wl26HzZG1rW60ROT7p yumkJbenbYcq1gOQjf3a1t3vUaF7s6uJEPsyZ32sUpCx0tbttmUXy6DB3LvWCfplmnMKplG3Rii Pt/o9Cd z02/rAEAAAAAAGavcEvGa7UX5q x1958Jq Zv0deeyGr5k8AwBkbPJKH6p/GjasSuR1euyo3GiLH9x5YbnZPSeVp6YnfVnMt1hOmJpfX1D/HJxI01wR6m03peo0Ll82aDPNUfobfeNGQG1dNikqmcfDgXjQ8qxmUNQAAAAAAwBko3GjyeKA/ kJqiVaS6vnj6ushRcyT2ImnsUPrzZJ8WHsgu vhbWJDlOihSMy63mZ4O0tY3rbR9ZlpNJ8JL8nPN/1hS7pNs01sfPpEHvSSHGolLS1 vuJhama7REYn8 OxhGcpH39dnvJ13NaTXf/Z 5CjjHocSWw3rifXcnPbJ7Lzno9DeKn1Y9u3gnyEtzPLeuhJdMdydQrLIQ/j/SF2TI0LPzKXg71Mqysrt7ouKLZfZbLc7C6ivtpQ/4/2agiGZmpdi95mT5U3LUFjwWrdfx3ip ehPAqXqarnHZWg1vZWtHGhjIw0V7PvhZnGi8YNmdjGETYxjQN54HVbyQhvHsoaAAAAAABgCoo1m hxelNffe1lu7oeH4rJ7/P535AN5Lt//g2TPlHz0WOxNkYPYuOreDaZmZEz14UHLG1M9PG5 b7MubelIP9imvyo7kRutmo5jRZriPj57lD2N3k2yndVx3GpRSVThjm K kPoHPhDlozyciTjkVH0DdpYHrxwdJy2m6vJtGzc0kOzHMu9B7GNe/fz3cgsLE/5Om7rWP8 e/24cqlHj75JbYa2Cbbrdx5K020nGsncJ3Ll3UHuslyRndXwfAnH0q6PG4c0XWb tAgmvL7eBxUdx5F/89S1XF3Cyp Hupxsj7dTG8r6ukpP/US2zedtaam6rLKP/wrVLovfESB 29z0EEjQaQ3d3A81AE6i86TL7rhdV59ZV W6oupPD83Ul9GhlzstGfonKrWTHEs4Kq HRqMjt/KcCipJc4l9L2bUEBVujKgijWuXpR9rtI40Ts6irAEAAAAAAM7C6enp0GX56Pa3Q5GhWb4Z7lu2S Sz73/jb3/zS/r5l2d/fH8b1Ow0Vjgwbnb5ZM3bQEvVea3hgXge89Y3O0P/EwbClPi t FYhB62UOMxnR2EpZttwcJPSaNXvDBuJ7dPTmZZPW/rS09IfdhqxvCjpYU/mx9MYJossWT5FytdlW7f6L1A/rhL1aC/jsFzlFuQ5xz4Rz7sr5/Cs6VQS601ZxDZ0Sl9auWaE5ZqHYH IBmfiiH/ecqy6xqNWWOJRcta1q08cT8FWKJy09/LH6znS1fYyaNtv03RRBXWtjF06LE82YtV8O6bTgf7uVfJs1l972olM8p5es4Fq9Jy2j/nlFZAwDgynodBMDD8QEAQD7OPU1ee/cLOT19YpZn8uDSK3Lp0kU5NO/HHbbV 29fELn5VE47z8zaMmzjq6eNqW6GBxkNQbIh11rqHz3szcSn/W1xmM86DROTNQZ8Uen5TE fLS01ueoPaC/jziZ 2OMJhKcpT/m6bOta/4Fp1U9IMCFzfC6ByuXNe5b8ZZkYlae qtaKPIyMyTNLFeRBa6xKZLV5an9s8ctqYy/oxRDqRbCzKh19fE20IXteD59jad/J6G/i9cZZkWa3JQe654SO0PS6CZ Gi6clna1cB4/0YFKBgez6Y0UV6s1TPs1F972Y3h1pRyaAHyudxsgk8kptS7b1ZyPfH9MvawAAAAAAgFkrOKfJM mcPpWbckHebl8w6wIXpH3pFXn7A5Gb 08qajDJMJoDYLzoYWDC9A2kfqcR2tZtiJmqeEMQhdNY1xP3zl7t6o3IDU9/aJcZNCZMk0P9V2Ve6nGk6rxXGp5ppOvujIcXGvjzGsQblbLL1T2sme0PM9zvpkGfE4e6MSNYjq7 qaSiSN 7jzGTi8vBRbHjDsIHsvqPrUDeY7Pk39Df2VDz EGTdZvT8WzgtcaYxKp1prPAaGxrSKTFWVGVpLqHntd6ln7 LpbEuuu3PxmsUDMywrAEAAAAAAGap8ETwIs/le1fMnyO6weSifCDPZP/0iXSyJjypSnhegchibtYZ/rwBar33pLR 4nk2DSd6AujIXAyjNJyB4Gnh7n2Vd8cJf edY/2XNVf1GKg675WGZ/Yv3UgXzInhF6AchR45dytXt7A8M9ofZhbPzPTlxDsdZPWS8rebKOhxlegBsSG3dON1fJLwBNe0x KTO5aGn4NCJXpPLKkC/sSE V0vTmxskaAzLPy9QwTQXZRoN8/XgyJHGrN5qZ1rWAAAAAAAA01Oi0eRl eGHIle 99y81kNyBQ0m2RPEV8M8ETvxiWeL2pbctd64s0ySPmEoHjfB58sMTRIML6YbOuLyp2/DD0zu75YbSqrmzSgcnexXiw7NEpanfF22LVj/hTjW44QbiYH85WZTdd6nUJbmxnkrmHjfLNFGDsdydQprVvvDLPe72XHudTZ45HdWcDhvZN1QT1O 8B1xa3UTPHYkeGN4SnYg/0RiXYda99gYP7qmziM6S zeTWxpNr67E92PQcBnU3dmVNQAAAAAAwDQ5NJq8JO /FZ 7xF nG0huvfvCrLsgDz4QuXL7qxk1mGg12brbkcZxW qxuUq84X6Cdd7Y uFeJfGbP2PH7Xrkqdfepn4itszQIubGUqTBoyebdduwTuk3Yzdumd4xkXwOZHddp68lB3s50rdx zR8ip 0Pn7Nd9IZVEM7O7ii9utwnDVGUp3yzt3Ws/0q41qN5kr7bjMzboBI/Tk uckvbJ6rO xTK0jQgReZUMMu4Xh3L1SmsWe0P04on/fiftmD/ax0cjRuvEudNzdRNbL4LL9/hugiG8AoPp6aNekekN/Ja06J56VF1PrF8Vd3ornSqbt6ZeO5wl8ibRbk0F9GTO/p8oerBNUtpabTlr7a1rc5Rx9J J3yOesebP6V1EPSkqr6sAQAAAAAA5oFDo8kLqa1ekLe9id D5fflvdWncmrpUfLhe78f2i68pE8aX0ptS470U6ux QXqJ9syDBoSvJ4lD70JiP3369I Do21P9KQTr8vN 7VR E0u3pd7EZYLjXZOupLp FPgOyHuyOrKh6vs0tE6Gast936 IajNZ8qH9KRfu7hgIIhcpQJNy zmUmhR k15Z46ZFWe8nXc1qX K Fej3oYOD1/TuQGf1Nk3LCVp9zy7hMl8l55Wap86pmo48NYqXXjBjHXcnUJS5nV/jCVeCbUdcX0kGiRdLfXvMnaI0lXedxuhetFL0152OnL8GhLpXYSXa96IvLYsExmSLVwGTmlReuf eA1pDesM6iF67hSzXwRh pPRlzmPR1We5rx690W3PU3q7eOcRit1vOn9O3yOMkPoRT4/g7IGAAAAAACYtZXT09Oh XsuHB4eyvXr182rGdI9AZoPU27gLyEvv13Rwx253UQrKU/5nre6WFb6Kfv6PbmRqEfdQ6ou7bUD9waGKsNaYp9qm8 uqr5tVy8XtK6Bv3i3NeWMQ0AwCwqJb5Oggoi MDAIB8SsxpgkXmT87bkhzD4QO5 HMu2OaucJhIPKbKsLCI/OGoGp27C9T4sIhpBgAAAAAAAI0m51J8QnWgev6E9/F5eHRHovxzHlQZFhaPN4F5bB6VebeIaQYAAAAAAACNJueTGQ /lehm0pNNMy795CU OfSiWvb8nnH zHwHelL8cHyF5jyoMiwsHD1PUPY8KvNlEdMMAAAAAAAA5jQBgKXBWMUAAOC84joISMfxAQBAPit PnjwZKhJftLNY9/HHH8sbb7zhvQcAAAAAAAAAADAr9DQBgCXBE2QAAOC84joISMfxAQBAPsxpAgAAAAAAAAAAoNBoA gAAAAAAAAAAoNBoAgAAAAAAAAAAoNBoAgAAAAAAAAAAoNBoAgAAAAAAAAAAoNBoAgBYTL1NWVlZ kc2eeQ0AAAAAAACU5NhockHal16RS GlfcG8F a63WIb7K57N rWdwdmDQDMp9Tz1WBX1tV6/Z6/bEq87SH4bHJJbmuViCOlgcMhLfn0ZDMSXlbDSmh71xaYytPsIpmv6LIukWoum0ZL/SXLZwZlDQAAAAAAMENujSaHF0T2n8jpabA8lZsfXJRLb31HHptNPK7bAQDOju6hUW LdPoyHA7V0pdOoytN6031htpMbxNe9mTDvJsqEcdQ p2GdJuxBpxcaXHg3ehvSrd1kIg37R79YHdHuuZvJ1Wn2dmG7Jk8RRcdv35/TS7XvA3Lp9FSf96yF6r5WZQ1AAAAAADAjLk1mrz5VDpvmr89z QHt5 LfHhB/jrcGuK63YKrbR15N4eOtoK7U1UxT Dy9C1G2CfOj nUdfJ8peJpdkUaHbk7WleTrbsdaUhXdirqQde7r2 Nt2Q7dJ6sbW2rNSLHJ31/xRTS0rvTlmMVy0Ho5n5t667XqNDd2ZVkiD250z5WSeh4acs2m/LLZfBA7h3rJN0yjVkl06gbQ9TnG53 xO 56Zc1AAAAAADA7BWe0 S12gvz12Su2wEAZmDwSB6qfxo3rkrkdnjtqtxoiBzfe2C52T0llaelJ35bzbVYT5iaXF5T/xyfSNBcE htNqXrNS5cNmsyzFP5GX7jRUNuXDUpKpnGwYN70fCsZlDWAAAAAAAAZ6Bwo8njgf7oC6m95r9O4 7rdJP64 npIEfMkduJp7NB6syQf1h7I7np4m9gQJXooErOutxnezhKWt210fWYazWfCS/LzTX/Ykm7TbBMbnz6RB70kh1pJS4ufr3iYmtkukdHJ/Hgs4VnKx1 Xp3wdt/Vk13/2PuQoox5HEtuN68m13Nz2iey85 MQXmr92PatIB/h7cyyHnoS3bFcncJyyMN4f4gdU PCj8zlYC/T6srKra4Liu1XmSw3u4uorzbU/6O9GoKhmVrXorfZU VNS9BYsFr3X4f46Xkoj8Jlqup5RyWotb0VbVwoIyPN1ex7YabxonFDJrZxhE1M40AeeN1WMsKbh 7IGAAAAAACYgmKNJocX5fX3Xpab 08lMhpXnOt2TvRY7E2Rg9i46t4NpmZkTPXhQcsbUz08bn5vsy5t6Ug/2Ka/KjuRG62ajmNFmuI PnuUPY3eTbKd1XHcalFJVOGOb4r6Q gc EOWjPJyJOORUfQN2lgevHB0nLabq8m0bNzSQ7Mcy70HsY179/PdyCwsT/k6butY/z57/bhyqUePvklthrYJtut3HkrTbScaydwncuXdQe6yXJGd1fB8CcfSro8bhzRdZv60CCa8vt4HFR3H kX/z1LVcXcLKn4e6nGyPt1Mbyvq6Sk/9RLbN521pqbqsso//CtUui98RIH7b3PQQSNBpDd3cDzUATqLzpMvuuF1Xn1lX5bqi6k8PzdSX0aGXOy0Z icqtZMcSzgqr4dGoyO38pwKKklziX0vZtQQFW6MqCKNa5elH2u0jjROzqKsAQAAAAAAzsLp6enQ Zfno9rdDkaFZvhnuW7bJs13asr /P4zrdxoqLBk2On2zZuygJeq91vDAvA546xudof Jg2FLfV5a8a1CDlopcZjPjsJSzLbh4Cal0arfGTYS26enMy2ftvSlp6U/7DRieVHSw57Mj6cxTBZZsnyKlK/Ltm71X6B XCXq0V7GYbnKLchzjn0inndXzuFZ06kk1puyiG3olL60cs0IyzUPwf4QDc7EEf 85Vh1jUetsMSj5KxrV5988on5K8QSl5/ WPxmO1u xkwabftviiCutLCLp0WJ581aroZ123A 3Mu/TJrL7ntRKZ9TytdxLF6TltH PaOyBgDAlfU6CICH4wMAgHyce5q89u4Xcnr6xCzP5MGlV TSpYtyaN4PuG6Xn2189bQx1c3wIKMhSDbkWkv9o4e9mfi0vy0O81mnYWKyxoAvKj2f6emzpaUmV/0B7WXc2cQPezyB8DTlKV XbV3rPzCt gkJJmSOzyVQubx5z5K/LBOj8tRX1VqRh5ExeWapgjxojVWJrDZP7Y8tfllt7AW9GEK9CHZWpaOPr4k2ZM/r4XMs7TsZ/U283jgr0uy25GBoelOYXjfh03DxtKSzlevgkR5MKjCQXX sqEK9ecqnuei F9O7I 3IBPBjpdMYmUReqW3Jtv5s5Ptj mUNAAAAAAAwawXnNHkmndOnclMuyNvtC2adjet2JY3mABgvehiYMH0Dqd9phLZ1G2KmKt4QROE0 1vXEvbNXu3ojcsPTH9plBo0J0 RQ/1WZl3ocqTrvlYZnGum6O PhhQb vAbxRqXscnUPa2b7wwz3u2nQ58ShbswIlqOrehqK5I37ODOZuDx8FBveMGwgu /oOtQNJnv Df2NPRWPPwRZtxk9/xZOS5xpjEpnGiu8xoaGdEqMFVVZmkvoea136efvYmmsi277s/EaBQMzLGsAAAAAAIBZKthooj2X710xf07kul0J4XkFIou5WWf48wao9d6T0vqJ59k0nOgJoCNzM YzScAaCp4W791XeHSf8nXeO9V/WXNVjoOq8Vxqe2b90I10wJ4ZfgHIUeuTcrVzdwvLMaH YWTwz05cT73SQ1UvK326ioMdVogfEhtzSjdfxScITXNMSkzqXh56CQyd6TS6rAP3GhvhcLU1vbp CgMSz/vEAF01yUaTTM14MjRxqzequdaVkDAAAAAABMT4lGk5flhx KXPnec/M6jet2RZgnYic 8WxR25K71ht3lknSJwzF4yb4fJmhSYLhxXRDR1z 9G34gcn93XJDSdW8GYWjk/1q0aFZwvKUr8u2Beu/EMd6nHAjMZC/3GyqzvsUytLcOG8FEbJdrI4ViuTmHNan Y5X43O869zgaP/M4KDueNrBvqaYr3gEurm i5I9EDw1uiE/EnGuMyzLrX3uDBPXUW0Vly/2ZyS6Pp1ZX4fgwaLoO6O7uyBgAAAAAAmCaHRpOX5P234nOS Os kGdy690XkXXZ21WpJlt3O9I4bks9NleJN9xPsM4bWz/cqyR 82fsuF2PPPXa29RPxJYZWsTcWIo0ePRks24b1in9ZuzGLdM7JpLPgeyu6/S15GAvR/o2rvlD5LT94XO2i96wCsLZ2R2lV5f7pCGK8pRv9raO9V8J13o0T9J3m5F5G1Tix nJVW5p 0TVeZ9CWZoGpMicCmYZ16tjuTqFNav9YVrxpB//0xbsf62Do3HjVeK8qZm6ic134eU7XBfBEF7h4dS0Ue I9EZea1o0Lz2qzieWr6ob3ZVO1c07E88d7hJ5syiX5iJ6ckefL1Q9uGYpLY22/NW2ttU56lja74TPUe9486e0DoKeVNWXNQAAAAAAwDxwaDR5IbXVC/K2N6F7sPy vLf6VE5Pn8qbZiv37SpW25Ij/dRqbH6B sm2DIOGBK9nyUNvAmL//bq0j0Nj7Y80pNPvy4179VE4za5eF7sRlktNto760mn4EyD74e7IqorH6 wSEboZ6223Pr7haM2nyod0pJ97OKBgiBxlws3LbGZS6FF6TbmnDlmVp3wdt3Wp/0q416MeBk7PnxO5wd8UGTds5Sm3vPtEibxXXpYqn3om6vgwVmrduEHMtVxdwlJmtT9MJZ4JdV0x PSRaJN3tNW y9kjSVR63W F60UtTHnb6MjzaUqmdRNernog8NiyTGVItXEZOadH6J15DWsM6g3qInjvF7BdBmP5k9GXO41GVp zmv3n3RbU Tevs4p9FKHW96/w6fo8wQepHPz6CsAQAAAAAAZm3l9PR0aP6eC4eHh3L9 nXzaoZ0T4Dmw5Qb EvIy29X9HBHbjfRSspTvuetLpaVfsq fk9uJOpR95CqS3vtwL2Bocqwltinn34qr776qnm1XPyeEvrG/eKcFxYxzQAALKplvg4CyuL4AAAgnxJzmmCR ZPztiTHcPhALv6cC7a5KxwmEo pMiwsIn84qkbn7gI1PiximgEAAAAAAECjybkUn1AdqJ4/4X18Hh7dkSj/nAdVhoXF401gHptHZd4tYpoBAAAAAABAo8n5ZMbDbyW6mfRk04xLP3mJTw69qJY9v2ecPzPfgZ4 UPxxfoTkPqgwLC0fPE5Q9j8p8WcQ0AwAAAAAAgDlNAGBpMFYxAAA4r7gOAtJxfAAAkM/KkydPhorEF 0s1n388cfyxhtveO8BAAAAAAAAAADMCj1NAGBJ8AQZAAA4r7gOAtJxfAAAkA9zmgAAAAAAAAAAA Cg0mgAAAAAAAAAAACg0mgAAAAAAAAAAACg0mgAAAAAAAAAAACg0mgAAAAAAAAAAACg0mgAAFlNv U1ZWVmSzZ14DAAAAAAAAJTk2mlyQ9qVX5FJ4aV8w703w Dvylt72re/IY7NqGQx2170bdeu7A7MGAOZT6vlqsCvrar1 z182Jd72EHw2uSS3tUrEkdLA4ZCWfHqyGQkvq2EltL1rC0zlaXaRzFd0WZdINZdNo6X kuUzg7IGAAAAAACYIbdGk8MLIvtP5PQ0WJ7KzQ8uZjaGHP7Fd VD8zcAYE7oHhr1tkinL8PhUC196TS60rTeVG ozfQ24WVPNsy7qRJxDKXfaUi3GWvAyZUWB96N/qZ0WweJeNPu0Q92d6Rr/nZSdZqdbcieyVN00fHr99fkcs3bsHwaLfXnLXuhmp9FWQMAAAAAAMyYW6PJm0 l86b52/NMfnD7uciHF Sv01pNHn9H7nxg/l4yta0j7 bQ0VZwd6oq5glcnr7FCPvE TGduk6er1Q8za5IoyN3R tqsnW3Iw3pyk5FPeh69/Wt8ZZsh86Tta1ttUbk KTvr5hCWnp32nKsYjkI3dyvbd31GhW6O7uSDLEnd9rHKgkdL23ZZlN uQweyL1jnaRbpjGrZBp1Y4j6fKPTn/g9N/2yBgAAAAAAmL3Cc5q8Vnth/rJ5Sd7/J9 VD29 JbevmFUAgLM3eCQP1T NG1clcju8dlVuNESO7z2w3OyeksrT0hO/reZarCdMTS6vqX OTyRorgn0NpvS9RoXLps1Geap/Ay/8aIhN66aFJVM4 DBvWh4VjMoawAAAAAAgDNQuNHk8UB/9IXUXvNfhz1 /6K89 Ez2e88M2vK8cfV10OKmCexE09jh9abJfmw9kB218PbxIYo0UORmHW9zfB2lrC8baPrM9NoPhNek p9v sOWdJtmm9j49Ik86CU51EpaWvx8xcPUzHaJjE7mx2MJz1I /ro85eu4rSe7/rP3IUcZ9TiS2G5cT67l5rZPZOc9H4fwUuvHtm8F QhvZ5b10JPojuXqFJZDHsb7Q yYGhd ZC4He5lWV1ZudV1QbL/KZLnZXUR9taH H 3VEAzN1LoWvc2eKm9agsaC1br/OsRPz0N5FC5TVc87KkGt7a1o40IZGWmuZt8LM40XjRsysY0jbGIaB/LA67aSEd48lDUAAAAAAMAUFGs0Obwor7/3stzcfyqRUbu0x9 Rf5L2Xil6LPamyEFsXHXvBlMzMqb68KDljakeHje/t1mXtnSkH2zTX5WdyI1WTcexIk1xH589yp5G7ybZzuo4brWoJKpwxzdF/SF0DvwhS0Z5OZLxyCj6Bm0sD144Ok7bzdVkWjZu6aFZjuXeg9jGvfv5bmQWlqd8Hbd1rH fvX5cudSjR9 kNkPbBNv1Ow l6bYTjWTuE7ny7iB3Wa7Izmp4voRjadfHjUOaLjN/WgQTXl/vg4qO48i/eepari5h5c9DXU62x9upDWV9XaWnfiLb5vO2tFRdVtnHf4Vql8XvCBC/bW56CCTotIZu7ocaACfRedJld9yuq8 sq3JdUfWnh2bqy jQy52WDP0TldpJjiUclddDo9GRW3lOBZWkucS FzNqiAo3RlSRxrXL0o81WkcaJ2dR1gAAAAAAAGfh9PR06LJ8dPvbocjQLN8M9y3bnJ5 Nrx9Rb1/88vo6yu/G36U2Na 7O/vD P6nYaKU4aNTt sGTtoiXqvNTwwrwPe kZn6H/iYNhSn5dWfKuQg1ZKHOazo7AUs204uElptOp3ho3E9unpTMunLX3paekPO41YXpT0sCfz42kMk0 WWLJ8i5euyrVv9F6gfV4l6tJdxWK5yC/KcY5 I592Vc3jWdCqJ9aYsYhs6pS tXDPCcs1DsD9EgzNxxD9vOVZd41ErLPEoOeva1SeffGL CrHE5ac/Fr/ZzpavMZNG2/6bIogrLeziaVHiebOWq2HdNpwP9/Ivk ay 15UyueU8nUci9ekZbR/z6isAQBwZb0OAuDh AAAIB/nniavvfuFnJ4 McszeXDpFbl06aIcmve1w/bvVzosV5RtfPW0MdXN8CCjIUg25FpL/aOHvZn4tL8tDvNZp2FissaALyo9n nps6WlJlf9Ae1l3NnED3s8gfA05Slfl21d6z8wrfoJCSZkjs8lULm8ec SvywTo/LUV9VakYeRMXlmqYI8aI1Viaw2T 2PLX5ZbewFvRhCvQh2VqWjj6 JNmTP6 FzLO07Gf1NvN44K9LstuRgaHpTmF434dNw8bSks5Xr4JEeTCowkF1/rKhCvXnKp7novhfTuyPtyATwY6XTGJlEXqltybb bOT7Y/plDQAAAAAAMGsF5zR5Jp3Tp3JTLsjb7Qv qsOL8vYHz X2R1UPy VgNAfAeNHDwITpG0j9TiO0rdsQM1XxhiAKp7GuJ 6dvdrVG5Ebnv7QLjNoTJgmh/qvyrzU40jVea80PNNI190ZDy808Oc1iDcqZZere1gz2x9muN9Ngz4nDnVjRrAcXdXTUCRv3MeZy cTl4aPY8IZhA9l9R9ehbjDZ82/ob ypePwhyLrN6Pm3cFriTGNUOtNY4TU2NKRTYqyoytJcQs9rvUs/fxdLY11025 N1ygYmGFZAwAAAAAAzFLhieBFnsv3rpg/VTDv39GNJy/Le6/rHijBonueqNUffldeV6/fer9EdJOE5xWILOZmneHPG6DWe09K6yeeZ9NwoieAjszFMErDGQieFu7eV3l3nPB33jnWf1lzVY BqvNeaXhm/9KNdMGcGH4BylHokXO3cnULyzOj/WFm8cxMX06800FWLyl/u4mCHleJHhAbcks3XscnCU9wTUtM6lweegoOneg1uawC9Bsb4nO1NL25QYLGsPzzAhVMc1Gm0TB fD44caczqrXamZQ0AAAAAADA9JVoxXpYffihy5XvP1d8v5N2/CYbuCi fy23dsHLlK/lIvf6bd194n6yOeSJ24hPPFrUtuWu9cWeZJH3CUDxugs XGZokGF5MN3TE5U/fhh Y3N8tN5RUzZtRODrZrxYdmiUsT/m6bFuw/gtxrMcJNxID cvNpuq8T6EszY3zVjDxvlmijRyO5eoU1qz2h1nud7Pj3Ots8MjvrOBw3si6oZ6meA 4tLqJnjsSPTC8JToRf6IxLsOse 0NHtxTZxGdJfdvJrc0ml5die/HoOEyqLuzK2sAAAAAAIBpcmg0eUnefys6d0mw7gN5JrcqbwjJoyZbdzvSOG5LPTZXiTfcT7DOG1 s/3KskfvNn7Lhdjzz12tvUT8SWGVrE3FiKNHj0ZLNuG9Yp/Wbsxi3TOyaSz4Hsruv0teRgL0f6Nq75Q S0/eFztovesArC2dkdpVeX 6QhivKUb/a2jvVfCdd6NE/Sd5uReRtU4sfpyVVuaftE1XmfQlmaBqTInApmGderY7k6hTWr/WFa8aQf/9MW7H tg6Nx41XivKmZuonNd HlO1wXwRBe4eHUtFHviPRGXmtaNC89qs4nlq qG92VTtXNOxPPHe4SebMol YienJHny9UPbhmKS2NtvzVtrbVOepY2u Ez1HvePOntA6CnlTVlzUAAAAAAMA8cGg0eSG11Qvy9mjILTPs1upTOT09g/lL4mpbcqSfWo3NL1A/2ZZh0JDg9Sx56E1A7L9fl/ZxaKz9kYZ0 n25ca8 CqfZ1etiN8JyqcnWUV86DX8CZD/cHVlV8XidXSJCN2O97dbHNxyt VT5kI70cw8HFAyRo0y4eZnNTAo9Sq8p99Qhq/KUr O2LvVfCfd61MPA6flzIjf4myLjhq085ZZ3nyiR98rLUuVTz0QdH8ZKrRs3iLmWq0tYyqz2h6nEM 6GuK6aHRIuku73mTdYeSbrK43YrXC96acrDTl GR1sqtZPoetUTkceGZTJDqoXLyCktWv/Ea0hrWGdQD9Fzp5j9IgjTn4y zHk8qvI059W7L7rtaVJvH c0WqnjTe/f4XOUGUIv8vkZlDUAAAAAAMCsrZyeng7N33Ph8PBQrl /bl7NkO4J0HyYcgN/CXn57Yoe7sjtJlpJecr3vNXFstJP2dfvyY1EPeoeUnVprx24NzBUGdYS /TTT XVV181r5aL31NC37hfnPPCIqYZAIBFtczXQUBZHB8AAOQzpZnZMe/8yXlbkmM4fCAXf84F29wVDhOJx1QZFhaRPxxVo3N3gRofFjHNAAAAAAAAoNHkXIpPqA5Uz5/wPj4Pj 5IlH/OgyrDwuLxJjCPzaMy7xYxzQAAAAAAABB5SY9Brun5AV68eCHPnz Xb7/91luePXsm33zzjXz99dfy1Vdfecvvfvc7efr0qXz55ZfyxRdfeMvnn38un332mTx58kROT0 95be//a385je/kV// tfyq1/9yltctfyi9 8Qv5 c9/Lj/72c 85ac//an85Cc/kR// Mfyox/9yEsLpsyMh99KdDPpyaYZl37yEp8celEte37POH9mvgM9KX44vkJzHlQZFhaOnicoex6V bKIaQYAAAAAAABzmgDA0mCsYgAAcF5xHQSk4/gAACCfuWw0eeONN8wrAAAAAAAAAACA2aCnCQAsCZ4gAwAA5xXXQUA6jg8AAPJZefLkyVDPZxJft LNY9/HHH9NoAgAF8GMIAACcV1wHAek4PgAAyIeeJgCwJPgxBAAAziuug4B0HB8AAOTzkvkXAAAAAAAAA ADgXKPRBAAAAAAAAAAAQKHRBAAAAAAAAAAAQKHRBAAAAAAAAAAAQHFsNLkg7UuvyKXw0r5g3gtY tokt7UOz6YIb7K7LysqKrO8OzBoAWE7B S65bErPbJPUk81gu830rQLF4nAxkN317DDLxe8WBwAAAAAAABaDW6PJ4QWR/SdyehosT XmBxfl0lvfkcdmE5Fn0hm9H132b6q3r3wlP3jT3xIAsEga0ukPZTgML3uyYd6NG zuSNf87S5fHC56m3Vprx2EwjuQlkpZ09qoUSz fHEAAAAAAABg3rk1mrz5VDqRBo9n8oPbz0U vCB/PW41sXv8HbnzgcjNW1/La2bVoqttHXk3x462amZNVczT2Q5PZuO8YJ84P5alrntyp30sjU5HWmbNWdnYG8pwL9zssSG3Og 31b1fuV1TMs4gDAAAAAAAAs1N4TpPXai/MX5Md/sV35UN6mQDAudDbbEq30ZG7W5fNmvlSu7zm/fvw0fSGV5xFHAAAAAAAAJiOwo0mjwf6oy kNqn7SEW9TPzx5vVQJ2nj5IfWmyX5sHZ83PnY0Cm9zdG63mZ4O0tY3rbR9ZlpNJ8JL8nPN/0hbbpNs826RKdNyTM fzItfr7iYWrFnnD347GEZykff12e8nXc1pNd/9n7kKOMehxJbDeuJ9dyc9snsvOej0N4qfVj27eCfIS3M8v6rtqjDcdydQrLIQ/j/SF2TI0LX9YnfN5XXVm51XUx1eTVkQprR2Witb0lVffDSzPOX75je 3y9FM4izgAAAAAAABQrWKNJocX5fX3Xpab 09lUgeSanuZ6DHimyIHZtz4YDgU74ZfU7qt0JjyBy3pNqMTtXvjzktH sE2/VXZidxo1XQcK9KUcVj9TsMLy 1Goj2N3k29ndVx3GpRSVThjm K kN 6bHwlVFejmQ8Api IRjLgxeOjtN2czWZlo1bHWnIsdx7ENu4d9 7Wdu6ljV6f1l5ytdxW8f699nrx5VLPXr0jfJmVxqd/mi7fuehNHPejc7cJ3Ll3UHuslyRndUgj33pNI6lXfcbCAK6zOptGc8V0df7oKLjOPJvrLuWq0tY fNQl5Pt8XZqQ1lfV mpn8i2 bwtLVWXVfbxX1aJvHp0escNK0FDUFzvTluOGx25VehU4haHnfux3buvz3YNWa37r8fKxB VHgcAAAAAAADm3unp6dBl ej2t0ORoVm Ge5btoksH/1ueEVte3Pf8t6EZX9/fxjX7zRUnDJsdPpmzdhBS9R7reGBeR3w1jc6Q/8TB8OW ry04luFHLRS4jCfHYWlmG3DwU1Ko1W/M2wktk9PZ1o belLT0t/2GnE8qKkhz2ZH09jmCyyZPkUKV Xbd3qv0D9uErUo72Mw3KVW5DnHPtEPO unMOzplNJrDdlEdvQKX1p5ZoRlmsegv0hGpyJI/55y7HqGo9aYYlHyVnXrj755BPz11jZvCaZdMb3YS9P4XVl8pMSh0WuY9vkLztN7vEnOMcBAACqZ LsOAuDj AAAIB/nniavvfuFnJ4 McszeXDpFbl06aIcmvfjHv/1BflQnsnVyuYyaciNq/HHrnviPdDbuibx54rrqw2R4xPpe6825FpL/aOHvZn4tL8tDvPZUViT2D5fhfR8pqfPlpaaXL2hy WejDub GE3OrcsYVctT/m6bOta/4Fp1U/I4IHcO1Yx3bg65eGJ8uY9S/6yTDxFX19Va89yHocK8qA1ViWyunZZ/BkqAotYVkXzarMhe14vn2Np3wnOpwPZ9cflqqh3jC2OSVyO7Z5s1tsqxJYcZPYyyxt/IE8cAAAAAAAAmEcF5zR5Jp3Tp3JTLsjb7QtmXdhL8td/9bJcuf3VxOG7KjOaA2C81NvH5k3fxp4/vNN42 JDrxThDUEUTqN3Y232aldvRG4EDnZ3pOt0w3GOOdR/VealHkeqznul4ZlGuu7OeLingT/nRbxRKbtc3cOa2f4ww/1u7tSuiq4OefjIH Kwd0faxw3pFBuXyy4eRyl6Ppemd67r9PcSjV1WueMvEAcAAAAAAADmTuGJ4EWey/eumD/jHl Qv/rwuXz/D16YFVMWnlcgskRvXPnzBqj13hPEegz82TSc6Amg6 G5GEZpOAO1Ldn2et3cV3kfyAO/W4QscpuJa/2XNVf1GKg675WGZ/Yv3UgXzBXhF6AchbojuJWrW1ieGe0PM4tnLvXlJNQ 5M/hEaobb9ENCIppXMo/z040jjK8Oa1UWK2DPPPE5Iu/WBwAAAAAAACYNyUaTV6WH34ocuV7z83rMX9orhdSe82smJq66NFwcj JXNuSu7rXiTyU6Og4lknSJX0oHjfB58sMWxMML6YbOuLyp2/DD0zu75YbSqp2WQ/kcywnsXGgBo8emr/i8pSvy7YF678Qx3o0wxsdxwslJH 52VSd9ymUpRmqrBVMzm2WaCOHY7k6hTWr/WGW 92cGjxSZ8/xuUP35AvXi79EJ7ZPNG5licVRlO7F1FT7WKPTl1wjZuWIv3AcAAAAAAAAmDsOjSYvyftvxecu8d d9IM/k1rvx3iT 0Fxy89kMhuaqydbdjjSO21KPzVXiDfcTrBvsynqkV0nw1PqaXI7dDTtu1yNPRPc2zXArhYedMTd YIw0ewbj3cek3Yzdumd4xkXwGw8HkHD9/45p3M7Pb9sfe3857MzMQhLOzO0qvLvdJQxTlKd/sbR3rvxKu9bght8wwcJHoe5vj9OQqt7R9ouq8T6EsTQNStxnufeAv43p1LFensGa1P0wrnvTj/8wkzp2aqZ9GR 4WOHd4ZRSutzxxeNuqenctY3XcecdV6yC90SZH/Im0ay5xAAAAAAAAYGE4NJq8kNrqBXnbm/g9WH5f3lt9KqenTy0NI k9UKaitiVH onm2PwC9ZNtGQYNCV7PkofSHL2vh1FpyUFiGB09Fn1fbtyrj8JpdvW6MsOt1GTrqC dhh4OLIh/R1ZVPF5nl4jQzVhvu/Xx/A3WfKp8SEf6uYcDMjf2tcI9aDQzWfIovabcU4esylO jtu61H8l3OtRDwOn58 J3OBviowbtvKUW959okTeKy9Llc D1qinwWhR68YNYq7l6hKWMqv9YSrxTKjrs6Lyud0K141emvKw05fh0ZZKcQXyxNE/8RrTGtZZ7ePM5PRarJ78xTSUlMqjYxwAAAAAAABYGCunp6dD8/dcODw8lOvXr5tXM6R7AjQflmwgWSBefruihzuq8l5yqjzle97qYlnpJ/jr9 RGoh51D6m6tNcO3BsYqgxriX366afy6quvmlfLR/f0qHtT2XBuAAAAUct HQSUwfEBAEA JeY0wSLzJ25uyTXuM2NKBg/uybFlCLwiE3xXGRYWVU/utI l0blLgwkAAAAAAACmhkaTcyn/5PFAXv6E993YPDy6I1H eYKqDAuLabC7I92C86gAAAAAAAAArmg0OY9698VvM4nfaO7JZmJMftuyLOP0L3t zzh/G3venCPxuR6aXT2fUM7hlaoMCwtJzxVU2TwqAAAAAAAAQArmNAGAJcFYxQAA4LziOghIx/EBAEA K0 ePBkqEl 0s1j38ccfyxtvvOG9BwAAAAAAAAAAMCv0NAGAJcETZAAA4LziOghIx/EBAEA zGkCAAAAAAAAAACg0GgCAAAAAAAAAACg0GgCAAAAAAAAAACg0GgCAAAAAAAAAACg0GgCAAAAAAA AAACg0GgCAAAAAAAAAACgODaaXJD2pVfkUnhpXzDvxcW3vSiH5p1lMdhdl5WVFVnfHZg1ALCcgv NdctmUntkmqSebwXab6VsFisXhYiC769lhlovfLQ4AAAAAAAAsBrdGk8MLIvtP5PQ0WJ7KzQ8uy qW3viOPzSY 3WByUT64 XS07f7NC/L2pd T96MbAgAWRkM6/aEMh FlTzbMu3GD3R3pmr/d5YvDRW zLu21g1B4B9JSKWtaGzWKxZ8vDgAAAAAAAMw7t0aTN59K503zt eZ/OD2c5EPL8hfhxpDHr//HflAvbffeWbWqI92nspNeVne 4u0nimLp7Z15N0cO9qqmTVVMU9nOzyZjfOCfeL8WJa67smd9rE0Oh1pmTVnZWNvKMO9cLPHhtzq NNS/XblfUTHPIg4AAAAAAADMTuE5TV6rvTB/jf3tD18WufJc/qF57Xsu37ui/jl5KdYrBQCwbHqbTek2OnJ367JZM19ql9e8fx8 mt7wirOIAwAAAAAAANNRuNHk8UB/9IXUXvNfa//we7r3ycvyt a172X54Yfqn9UXEto0F3 8eT3USdo4 aH1Zkk rB0fdz42dEpvc7SutxnezhKWt210fWYazWfCS/LzTX9Im27TbLMu0WlT8ozPn0yLn694mFqxJ9z9eCzhWcrHX5enfB239WTXf/Y 5CijHkcS243rybXc3PaJ7Lzn4xBeav3Y9q0gH HtzLK q/Zow7FcncJyyMN4f4gdU PCl/UJn/dVV1ZudV1MNXl1pMLaUZlobW9J1f3w0ozzl /YXrs8/RTOIg4AAAAAAABUq1ijyeFFef29l Xm/lMJj9r12rtfy025IG HJok/bF9MDNlVjB4jvilyYMaND4ZD8W74NaXbCo0pf9CSbjM6Ubs37rx0pB9s01 VnciNVk3HsSJNGYfV7zS8sNxuJNrT6N3U21kdx60WlUQV7vimqD/klx4LXxnl5UjGI4DpG4KxPHjh6DhtN1eTadm41ZGGHMu9B7GNe/e9m7Wta1mj95eVp3wdt3Wsf5 9fly51KNH3yhvdqXR6Y 263ceSjPn3ejMfSJX3h3kLssV2VkN8tiXTuNY2nW/gSCgy6zelvFcEX29Dyo6jiP/xrprubqElT8PdTnZHm nNpT1dZWe olsm8/b0lJ1WWUf/2WVyKtHp3fcsBI0BMX17rTluNGRW4VOJW5x2Lkf2737 mzXkNW6/3qsTPxR6XEAAAAAAABg7p2eng5dlo9ufzsUGZrlm G ZRt/ XJ4c7Rd1rbJZX9/fxjX7zRUODJsdPpmzdhBS9R7reGBeR3w1jc6Q/8TB8OW ry04luFHLRS4jCfHYWlmG3DwU1Ko1W/M2wktk9PZ1o belLT0t/2GnE8qKkhz2ZH09jmCyyZPkUKV Xbd3qv0D9uErUo72Mw3KVW5DnHPtEPO unMOzplNJrDdlEdvQKX1p5ZoRlmsegv0hGpyJI/55y7HqGo9aYYlHyVnXrj755BPz11jZvCaZdMb3YS9P4XVl8pMSh0WuY9vkLztN7vEnOMcBAACqZ LsOAuDj AAAIB/nniavvfuFnJ4 McszeXDpFbl06aIcmvc9hxe9dSe3Px9vuy/yttr2rfcLjwRmNOTG1fhj1z3xHuhtXZP4c8X11YbI8Yn0vVcbcq2l/tHD3kx82t8Wh/nsKKxJbJ vQno 09NnS0tNrt7Q5XJPxp1N/LAbnVuWsKuWp3xdtnWt/8C06idk8EDuHauYblyd8vBEefOeJX9ZJp6ir6 qtWc5j0MFedAaqxJZXbss/gwVgUUsq6J5tdmQPa Xz7G07wTn04Hs uNyVdQ7xhbHJC7Hdk82620VYksOMnuZ5Y0/kCcOAAAAAAAAzKOCLRnPpHP6NDYU1wVpv63 vvlU/ubd0CTxbz6Vj24/lw/fuyjvT2sm NEcAOOl3j42b/o29vzhncbbFh96pQhvCKJwGr0ba7NXu3ojciNwsLsjXacbjnPMof6rMi/1OFJ13isNzzTSdXfGwz0N/Dkv4o1K2eXqHtbM9ocZ7ndzp3ZVdHXIw0f EIe9O9I bkin2LhcdvE4StHzuTS9c12nv5do7LLKHX BOAAAAAAAADB3SnT/eC7fu2L 1B6/JCfqnyt6MviY12q6EeVl WF0hvjqhOcViCzRG1f vAFqvfcEsR4DfzYNJ3oC6Hp4LoZRGs5AbUu2vV4391XeB/LA7xYhi9xm4lr/Zc1VPQaqznul4Zn9SzfSBXNF AUoR6HuCG7l6haWZ0b7w8zimUt9OQm1D/lzeITqxlt0A4JiGpfyz7MTjaMMb04rFVbrIM88MfniLxYHAAAAAAAA5k2JRpOX5YcfJhtJPvzhy avsccDHc1z d4/9F9Xpy56NJzcTyLXtuSu7nUiDyU6Oo5lknRJH4rHTfD5MsPWBMOL6YaOuPzp2/ADk/u75YaSql3WA/kcy0lsHKjBo4fmr7g85euybcH6L8SxHs3wRsfxQgnJX242Ved9CmVphiprBZNzmyXayOFYrk5hz Wp/mOV N6cGj9TZc3zu0D35wvXiL9GJ7RONW1licRSlezE11T7W6PQl14hZOeIvHAcAAAAAAADmjkOjyUv y/luxuUvMug/kmdwKhuJ67Wv5j7efi3xwUdrhjQ8vyuvvvSxy82t59zWzrjI12brbkcZxW qxuUq84X6CdYNdWY/0KgmeWl Ty7G7YcfteuSJ6N6mGW6l8LAz5gZrpMEjGPc Lv1m7MYt0zsmks9gOJic4 dvXPNuZnbb/tj723lvZgaCcHZ2R nV5T5piKI85Zu9rWP9V8K1HjfklhkGLhJ9b3OcnlzllrZPVJ33KZSlaUDqNsO9D/xlXK O5eoU1qz2h2nFk378n5nEuVMz9dPoyN0C5w6vjML1licOb1tV765lrI4777hqHaQ32uSIP5F2zS UOAAAAAAAALAyHRpMXUlu94E3mfmm0/L68t/pUTk fyptmK82bLH7/mXzwdmjbty/Izf0nctp5ZraqWG1LjvQTzbH5Beon2zIMGhK8niUPpTl6Xw j0pKDxDA6eiz6vty4Vx F0 zqdWWGW6nJ1lFfOg09HFgQ/46sqni8zi4RoZux3nbr4/kbrPlU ZCO9HMPB2Ru7GuFe9BoZrLkUXpNuacOWZWnfB23dan/SrjXox4GTs fE7nB3xQZN2zlKbe8 0SJvFdeliqfB61RT4PRotaNG8Rcy9UlLGVW 8NU4plQ12dF5XO7Fa4bvTTlYacvw6MtleIK5Imjf I1pjWss9rHmcnptVg9 YtpKCmVR8c4AAAAAAAAsDBWTk9Ph bvuXB4eCjXr183r2ZI9wRoPizZQLJAvPx2RQ93VOW95FR5yve81cWy0k/w1 /JjUQ96h5SdWmvHbg3MFQZ1hL79NNP5dVXXzWvlo/u6VH3prLh3AAAAKKW/ToIKIPjAwCAfErMaYJF5k/c3JJr3GfGlAwe3JNjyxB4RSb4rjIsLKqe3GkfS6NzlwYTAAAAAAAATA2NJudS/snjgbz8Ce 7sXl4dEei/PMEVRkWFtNgd0e6BedRAQAAAAAAAFy9pMdd1/T8AC9evJDnz5/Lt99 6y3Pnj2Tb775Rr7mv56quvvOV3v/udPH36VL788kv54osvvOXzzz Xzz77TJ48eSKnp6fe8tvf/lZ 85vfyK9//Wv51a9 5S2//OUv5Re/ IX8/Oc/l5/97Gfe8tOf/lR 8pOfyI9//GP50Y9 5KUFU9a7L36bSfxGc082E2Py25ZlGad/2fN7xvnb2PPmHInP9dDs6vmEcg6vVGVYWEh6rqDK5lEBAAAAAAAAUjCnCQAsCcYqBgAA5xXXQUA 6jg8AAPKZy0aTN954w7wCAAAAAAAAAACYBZH/P7Jdt0UD3AMpAAAAAElFTkSuQmCC

June7
08-06-2023, 09:38 PM
Have you step debugged?

I copied the Returned sheet and deleted all but one row for respiratory_upper_acute_engagement.

I find that the below line shows comparison of values with ? character so it tries to compare: "j06.9" = "j06.9?" which fails. So where does that ? character come from?

If UCase(icd1_Arr(x)) = UCase(icd2_Arr(y)) Then

The same happens with gerd_only but it doesn't have any matches in this dataset so doesn't matter now. Might be happening with others but didn't test.

Checking this line shows ? character has already invaded the data:

icd2_Arr = Split(Sh2.Cells(r2.Row, "B"), ",")

I did a manual Find/Replace to remove all spaces from Cohort data but still get ? character. I tried do a replace in VBA with Chr(160) since you show that in your code and still get ? character. I did a loop with Asc() to print ASCII code of each character in Cohort string. The ? character listed as number 63 but doing a Replace with Chr(63) did not work either.

Why does Cohort data have this unknown character that VBA can't process?



Side note: endometriosis is misspelled as endomentrosis

anish.ms
08-06-2023, 11:05 PM
Hi June7 (http://www.vbaexpress.com/forum/member.php?85444-June7),
Thanks for your response
The details in Sh2 were copied form PowerPoint slides. That could be the reason for invisible special character (?).
I manually copied that invisible character from the cell and did a find and replace with blank.

June7
08-06-2023, 11:24 PM
How did you get it from the cell?

Does that solve the issue?

I built a VBA function to rebuild string with only alpha-numeric, comma, period characters.

Another side note.
Both paeds_acute_lower_respiratory and paeds_acute_upper_respiratory have same TestName of Acutelowerrespiratory infectioninlast12months,age3to18 years.

anish.ms
08-06-2023, 11:39 PM
I copied 1 character from right to left. And replaced it with blanks. And it solved the issue.
30968

I have purposefully kept same rules for both paeds_acute_lower_respiratory and paeds_acute_upper_respiratory
Thanks,

p45cal
08-07-2023, 04:37 AM
Try changing your assignment of DelSpaces to:
DelSpaces = Array(" ", Chr(160), ChrW(8203))

Chr(63) didn't always remove the extra character on my machine, but this seemed to.

p45cal
08-07-2023, 04:45 AM
Have you considered clearing the unwanted characters from the sheet? At the moment, your code leaves the columns B in the sheets untouched.
Directly after you've set rng1 and rng2 you could search and replace on both columns B:
For n = 0 To UBound(DelSpaces)
rng1.Offset(, 1).Replace What:=DelSpaces(n), Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
rng2.Offset(, 1).Replace What:=DelSpaces(n), Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
Next n
This means you won't have to look for them later in the code.

Otherwise, to speed up the code you need to read and write from the sheet as few times as possible.
At the moment, the code is writing to the same cell multiple times, but worse, it's reading from both sheets thousands of times.
Ultimately, we could have it so that the read/write operations count is reduced to just 3; once for reading Sh1, once for reading Sh2 and once for writing to column C. Come back if you want this.

anish.ms
08-08-2023, 03:00 AM
Understood
Thanks p45cal (http://www.vbaexpress.com/forum/member.php?3494-p45cal)

p45cal
08-08-2023, 03:33 AM
Ultimately, we could have it so that the read/write operations count is reduced to just 3; once for reading Sh1, once for reading Sh2 and once for writing to column C. Come back if you want this.
This would be faster with 500k rows.

anish.ms
08-08-2023, 06:00 AM
Yes, I have modified the code in the original file, and it completes in less than 2 minutes which otherwise was taking more than 5 minutes.
But adding a status bar update is taking more than 10 minutes.



Option Explicit


Sub ICD_Check()


Dim Sh1 As Worksheet, Sh2 As Worksheet
Dim Sh1_LR As Long, Sh2_LR As Long
Dim rng1 As Range, r1 As Range, rng2 As Range, r2 As Range
Dim icd1_Arr As Variant, icd2_Arr As Variant
Dim x As Long, y As Long, m As Long, n As Long
Dim DelSpaces As Variant
Dim t As Double


Application.ScreenUpdating = False
Application.Calculation = xlManual

t = Now
DelSpaces = Array(" ", Chr(160), ChrW(8203)) 'ChrW(8203) = Chr(63) extra character
Set Sh1 = Sheets("audit_retail_returned")
Set Sh2 = Sheets("Cohort v2")
Sh1_LR = Sh1.UsedRange.Rows.Count
Sh2_LR = Sh2.UsedRange.Rows.Count

Sh1.Range("X2:X" & Sh1_LR).ClearContents

Set rng1 = Sh1.Range("C2:C" & Sh1_LR)
Set rng2 = Sh2.Range("B2:B" & Sh2_LR)

For n = 0 To UBound(DelSpaces)
rng1.Offset(, 20).Replace What:=DelSpaces(n), Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
rng2.Offset(, 1).Replace What:=DelSpaces(n), Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
Next n

For Each r1 In rng1
For Each r2 In rng2
If r1.Value = r2.Value Then
icd1_Arr = Split(Sh1.Cells(r1.Row, "W"), ",")
icd2_Arr = Split(Sh2.Cells(r2.Row, "C"), ",")

For x = 0 To UBound(icd1_Arr)
For y = 0 To UBound(icd2_Arr)
If UCase(Left(icd1_Arr(x), 3)) = UCase(Left(icd2_Arr(y), 3)) Then
If Len(Sh1.Cells(r1.Row, "X")) = 0 Then
Sh1.Cells(r1.Row, "X") = icd2_Arr(y)
Else
Sh1.Cells(r1.Row, "X") = Sh1.Cells(r1.Row, "X") & ", " & icd2_Arr(y)
End If
End If
Next y
Next x
End If
Next r2
' DoEvents
' Application.StatusBar = "The code is working : " & Format(r1.Row / Sh1_LR, "0%")

Next r1
' Application.StatusBar = False
Application.ScreenUpdating = True
Application.Calculation = xlAutomatic
MsgBox Format(Now - t, "HH:MM:SS")

End Sub

p45cal
08-08-2023, 07:23 AM
Try the following. You probably won't need a progress bar.
Sub ICD3_Check()
Dim Sh1 As Worksheet, Sh2 As Worksheet
Dim Sh1_LR As Long, Sh2_LR As Long, i1 As Long, i2 As Long
Dim rng1Vals, rng2Vals
Dim icd1_Arr As Variant, icd2_Arr As Variant
Dim x As Long, y As Long, m As Long, n As Long
Dim DelSpaces
Dim rngResults As Range

DelSpaces = Array(" ", Chr(160), ChrW(8203)) 'Chr(160) = special character space

Set Sh1 = Sheets("audit_retail_returned")
Set Sh2 = Sheets("Cohort v2")
Sh1_LR = Sh1.UsedRange.Rows.Count 'sheet 1 last row
Sh2_LR = Sh2.UsedRange.Rows.Count 'sheet 2 last row

Set rngResults = Sh1.Range("X2:X" & Sh1_LR)
ReDim Results(1 To Sh1_LR - 1, 1 To 1)
rng1Vals = Sh1.Range("A2:B" & Sh1_LR).Value 'read/write 1
rng2Vals = Sh2.Range("A2:B" & Sh2_LR).Value 'read/write 2

For i1 = 1 To UBound(rng1Vals)
For i2 = 1 To UBound(rng2Vals)
If rng1Vals(i1, 1) = rng2Vals(i2, 1) Then
icd1_Arr = Split(rng1Vals(i1, 2), ",")
icd2_Arr = Split(rng2Vals(i2, 2), ",")

For n = 0 To UBound(DelSpaces)
For m = 0 To UBound(icd1_Arr)
icd1_Arr(m) = Replace(icd1_Arr(m), DelSpaces(n), "")
Next m
For m = 0 To UBound(icd2_Arr)
icd2_Arr(m) = Replace(icd2_Arr(m), DelSpaces(n), "")
Next m
Next n

For x = 0 To UBound(icd1_Arr)
For y = 0 To UBound(icd2_Arr)
If UCase(icd1_Arr(x)) = UCase(icd2_Arr(y)) Then
If IsEmpty(Results(i1, 1)) Then
Results(i1, 1) = icd1_Arr(x)
Else
Results(i1, 1) = Results(i1, 1) & ", " & icd1_Arr(x)
End If
End If
Next y
Next x
End If
Next i2
Next i1
rngResults.Value = Results 'read/write 3
MsgBox "DONE"
End Sub
It leaves the columns B untouched.

anish.ms
08-08-2023, 10:44 AM
Thanks p45cal (http://www.vbaexpress.com/forum/member.php?3494-p45cal)

In my original file campaignname name is in column C and ICD in column W. Hence, I modified the code to

rng1Vals = Sh1.Range("C2:W" & Sh1_LR).Value and

icd1_Arr = Split(rng1Vals(i1, 21), ",")
Is there any way to limit the range to just columns C and W?

June7
08-08-2023, 10:55 AM
You mean a non-contiguous range - maybe.

Try: Range("C2:C" & Sh1_LR & ",W2:W" & Sh1_LR)

p45cal
08-08-2023, 11:49 AM
Is there any way to limit the range to just columns C and W? Yes, there is, although it's not just a one or two line tweak.
Is it causing a memory problem or significant time increase if you keep it as you have it?

p45cal
08-08-2023, 11:50 AM
You mean a non-contiguous range - maybe.

Try: Range("C2:C" & Sh1_LR & ",W2:W" & Sh1_LR)

Unfortunately June7, when you try to assign the values to a variable, only the first column is assigned.

p45cal
08-08-2023, 12:10 PM
Try this:
Sub ICD4_Check()
Dim Sh1 As Worksheet, Sh2 As Worksheet
Dim Sh1_LR As Long, Sh2_LR As Long, i1 As Long, i2 As Long
Dim rng1CampaignVals, rng2CampaignVals, rng1ICDVals, rng2ICDVals
Dim icd1_Arr As Variant, icd2_Arr As Variant
Dim x As Long, y As Long, m As Long, n As Long
Dim DelSpaces
Dim rngResults As Range

DelSpaces = Array(" ", Chr(160), ChrW(8203)) 'Chr(160) = special character space

Set Sh1 = Sheets("audit_retail_returned")
Set Sh2 = Sheets("Cohort v2")
Sh1_LR = Sh1.UsedRange.Rows.Count 'sheet 1 last row
Sh2_LR = Sh2.UsedRange.Rows.Count 'sheet 2 last row

Set rngResults = Sh1.Range("X2:X" & Sh1_LR) 'where the results will go
ReDim Results(1 To Sh1_LR - 1, 1 To 1)
rng1CampaignVals = Sh1.Range("A2:A" & Sh1_LR).Value 'read/write 1
rng1ICDVals = Sh1.Range("B2:B" & Sh1_LR).Value 'read/write 2
rng2CampaignVals = Sh2.Range("A2:A" & Sh2_LR).Value 'read/write 3
rng2ICDVals = Sh2.Range("B2:B" & Sh2_LR).Value 'read/write 4

For i1 = 1 To UBound(rng1CampaignVals)
For i2 = 1 To UBound(rng2CampaignVals)
If rng1CampaignVals(i1, 1) = rng2CampaignVals(i2, 1) Then
icd1_Arr = Split(rng1ICDVals(i1, 1), ",")
icd2_Arr = Split(rng2ICDVals(i2, 1), ",")

For n = 0 To UBound(DelSpaces)
For m = 0 To UBound(icd1_Arr)
icd1_Arr(m) = Replace(icd1_Arr(m), DelSpaces(n), "")
Next m
For m = 0 To UBound(icd2_Arr)
icd2_Arr(m) = Replace(icd2_Arr(m), DelSpaces(n), "")
Next m
Next n

For x = 0 To UBound(icd1_Arr)
For y = 0 To UBound(icd2_Arr)
If UCase(icd1_Arr(x)) = UCase(icd2_Arr(y)) Then
If IsEmpty(Results(i1, 1)) Then
Results(i1, 1) = icd1_Arr(x)
Else
Results(i1, 1) = Results(i1, 1) & ", " & icd1_Arr(x)
End If
End If
Next y
Next x
End If
Next i2
Next i1
rngResults.Value = Results 'read/write 5
MsgBox "DONE"
End Sub


The lines you'll need to adjust are:

Set rngResults = Sh1.Range("X2:X" & Sh1_LR) 'where the results will go

rng1CampaignVals = Sh1.Range("A2:A" & Sh1_LR).Value 'read/write 1
rng1ICDVals = Sh1.Range("B2:B" & Sh1_LR).Value 'read/write 2
rng2CampaignVals = Sh2.Range("A2:A" & Sh2_LR).Value 'read/write 3
rng2ICDVals = Sh2.Range("B2:B" & Sh2_LR).Value 'read/write 4


It should take well under a minute.

anish.ms
08-08-2023, 12:10 PM
No, it is working fine currently.
I just asked in conscious of the memory usage and as part of my leaning and for the future reference.
Thanks p45cal (http://www.vbaexpress.com/forum/member.php?3494-p45cal)

p45cal
08-08-2023, 12:35 PM
How long is it taking?

If you think you must show progress then if, directly after the line:

For i1 = 1 To UBound(rng1CampaignVals)
you add the line:

If i1 Mod 10000 = 0 Then Application.StatusBar = i1 & " of " & UBound(rng1CampaignVals)
then directly before the End Sub line add:
Application.StatusBar = ""
you'll get progress updates in the status bar which won't greatly increase processing time.

Important: Don't use Application.ScreenUpdating = False/True, you risk not being able to see the status bar updating and it won't significantly reduce the time (since there are only 5 read/writes to the sheet).

anish.ms
08-08-2023, 01:04 PM
Thanks a lot p45cal (http://www.vbaexpress.com/forum/member.php?3494-p45cal)

p45cal
08-08-2023, 01:42 PM
How long is it taking?

anish.ms
08-08-2023, 08:51 PM
19 seconds for 500K rows of data

p45cal
08-09-2023, 03:51 AM
19 seconds for 500K rows of data
That's more like it.

anish.ms
08-09-2023, 01:14 PM
Now I have been asked to test it in a different way.
Instead of first matching the campaign name and then checking for the matching ICD, I need to check each of the ICD in Sh1 with ICD in Sh2 and take the corresponding campaign names from Sh2 as a result.

I think i just need to skip the following step and then change the results to rng2CampaignVals(i2, 1) instead of icd2_Arr(y)


If rng1CampaignVals(i1, 1) = rng2CampaignVals(i2, 1) Then

p45cal
08-09-2023, 04:45 PM
You're going to have to explain more how you want to see the results. Best attach a workbook with a small sample of results.
I've attached your workbook, with a couple of new tables, both on the Cohort sheet:
1. A green table at cell H1 which is a full list of all the ICD codes on the Cohort sheet column B, and in the second column, a list of campaign names where that code appears.
2. An orange table at cell E1 where I've taken all the codes from column B of the audit_retail_returned sheet, then looked them up in the green table to give column F.

Is this the sort of thing you're looking for?
(There is no new vba code in the attached.)

ps. I've assumed the ICD codes are case insensitive; eg. N80.9​ is the same as n80.9​

anish.ms
08-09-2023, 09:11 PM
Thanks p45cal,
I have attached a sample file with results using the same code with a small modification.
Refer cell U94 - campaignname are duplicating here because of multiple icd matching from the same campaignname. I tried exit for and goto to come out of the loop once a matching icd is found. However, it is not working.
I think cleaning spaces (DelSpaces) will have to be take outside the loop to reduce the running time as it has to check every campaignname in Sh2.

anish.ms
08-09-2023, 11:19 PM
I have modified the code to below and seems working fine.


Option Explicit

Sub ICD_Check_V3()
Dim Sh1 As Worksheet, Sh2 As Worksheet
Dim Sh1_LR As Long, Sh2_LR As Long, i1 As Long, i2 As Long
Dim rng1CampaignVals, rng2CampaignVals, rng1ICDVals, rng2ICDVals
Dim icd1_Arr As Variant, icd2_Arr As Variant
Dim x As Long, y As Long, n As Long
Dim DelSpaces
Dim rngResults As Range

Application.ScreenUpdating = False
Application.Calculation = xlManual

DelSpaces = Array(" ", Chr(160), ChrW(8203))

Set Sh1 = Sheets("audit_hospitals_returned")
Set Sh2 = Sheets("Cohort v2")
Sh1_LR = Sh1.UsedRange.Rows.Count
Sh2_LR = Sh2.UsedRange.Rows.Count

Set rngResults = Sh1.Range("U2:U" & Sh1_LR)
ReDim Results(1 To Sh1_LR - 1, 1 To 1)
rng1CampaignVals = Sh1.Range("D2:D" & Sh1_LR).Value
rng1ICDVals = Sh1.Range("S2:S" & Sh1_LR).Value
rng2CampaignVals = Sh2.Range("B2:B" & Sh2_LR).Value
rng2ICDVals = Sh2.Range("C2:C" & Sh2_LR).Value

For n = 0 To UBound(DelSpaces)
Sh1.Range("S2:S" & Sh1_LR).Replace What:=DelSpaces(n), Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
Sh2.Range("C2:C" & Sh2_LR).Replace What:=DelSpaces(n), Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
Next n

For i1 = 1 To UBound(rng1CampaignVals)
If i1 Mod 1000 = 0 Then Application.StatusBar = i1 & " of " & UBound(rng1CampaignVals)
For i2 = 1 To UBound(rng2CampaignVals)
icd1_Arr = Split(rng1ICDVals(i1, 1), ",")
icd2_Arr = Split(rng2ICDVals(i2, 1), ",")

For x = 0 To UBound(icd1_Arr)
For y = 0 To UBound(icd2_Arr)
If UCase(icd1_Arr(x)) = UCase(icd2_Arr(y)) Then
If IsEmpty(Results(i1, 1)) Then
Results(i1, 1) = rng2CampaignVals(i2, 1)
Else
Results(i1, 1) = Results(i1, 1) & ", " & rng2CampaignVals(i2, 1)
End If
GoTo ExitInnerLoop:
End If
Next y
Next x
ExitInnerLoop:
Next i2
Next i1
rngResults.Value = Results

Erase rng1CampaignVals, rng2CampaignVals, rng1ICDVals, rng2ICDVals, Results

Application.ScreenUpdating = True
Application.Calculation = xlAutomatic

MsgBox "DONE"
Application.StatusBar = ""
End Sub

p45cal
08-10-2023, 02:44 AM
I think you're jumping out of the loop prematurely and missing many matches.
I haven't time right now to tweak the code but I can look at it much later today (UK time) or tomorrow.

p45cal
08-10-2023, 01:57 PM
Try this (no duplicates):
Sub ICD_Check_V4()
Dim Sh1 As Worksheet, Sh2 As Worksheet
Dim Sh1_LR As Long, Sh2_LR As Long, i1 As Long, i2 As Long
Dim rng1CampaignVals, rng2CampaignVals, rng1ICDVals, rng2ICDVals
Dim dict, icd1_Arr, icd2_Arr
Dim x As Long, y As Long, n As Long
Dim DelSpaces
Dim rngResults As Range

'Application.ScreenUpdating = False
Application.Calculation = xlManual

DelSpaces = Array(" ", Chr(160), ChrW(8203))

Set Sh1 = Sheets("audit_hospitals_returned")
Set Sh2 = Sheets("Cohort v2")
Sh1_LR = Sh1.UsedRange.Rows.Count
Sh2_LR = Sh2.UsedRange.Rows.Count

Set rngResults = Sh1.Range("U2:U" & Sh1_LR)
ReDim Results(1 To Sh1_LR - 1, 1 To 1)
rng1CampaignVals = Sh1.Range("D2:D" & Sh1_LR).Value
rng1ICDVals = Sh1.Range("S2:S" & Sh1_LR).Value
rng2CampaignVals = Sh2.Range("B2:B" & Sh2_LR).Value
rng2ICDVals = Sh2.Range("C2:C" & Sh2_LR).Value

For n = 0 To UBound(DelSpaces)
Sh1.Range("S2:S" & Sh1_LR).Replace What:=DelSpaces(n), Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
Sh2.Range("C2:C" & Sh2_LR).Replace What:=DelSpaces(n), Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
Next n
Set dict = CreateObject("Scripting.Dictionary")
For i1 = 1 To UBound(rng1CampaignVals)
dict.RemoveAll
If i1 Mod 1000 = 0 Then Application.StatusBar = i1 & " of " & UBound(rng1CampaignVals)
icd1_Arr = Split(rng1ICDVals(i1, 1), ",")
For i2 = 1 To UBound(rng2CampaignVals)
icd2_Arr = Split(rng2ICDVals(i2, 1), ",")
For x = 0 To UBound(icd1_Arr)
For y = 0 To UBound(icd2_Arr)
If UCase(icd1_Arr(x)) = UCase(icd2_Arr(y)) Then
dict(rng2CampaignVals(i2, 1)) = 0
End If
Next y
Next x
Next i2
If dict.Count > 0 Then Results(i1, 1) = Join(dict.keys, ", ")
Next i1
rngResults.Value = Results

Erase rng1CampaignVals, rng2CampaignVals, rng1ICDVals, rng2ICDVals, Results

Application.ScreenUpdating = True
Application.Calculation = xlAutomatic

MsgBox "DONE"
Application.StatusBar = ""
End Sub

anish.ms
08-10-2023, 09:42 PM
Thanks a lot p45cal :bow: